package storage import ( "context" "git.sch9.ru/new_gate/ms-tester/internal/models" "github.com/jmoiron/sqlx" "go.uber.org/zap" ) type ParticipantStorage struct { db *sqlx.DB logger *zap.Logger } func NewParticipantStorage(db *sqlx.DB, logger *zap.Logger) *ParticipantStorage { return &ParticipantStorage{ db: db, logger: logger, } } func (storage *ParticipantStorage) CreateParticipant(ctx context.Context, participant *models.Participant) (int32, error) { query := storage.db.Rebind(` INSERT INTO participants (user_id,contest_id,name) VALUES (?,?,?) RETURNING id `) rows, err := storage.db.QueryxContext( ctx, query, participant.UserId, participant.ContestId, participant.Name, ) if err != nil { return 0, handlePgErr(err) } defer rows.Close() var id int32 err = rows.StructScan(&id) if err != nil { return 0, handlePgErr(err) } return id, nil } func (storage *ParticipantStorage) ReadParticipantById(ctx context.Context, id int32) (*models.Participant, error) { var participant models.Participant query := storage.db.Rebind("SELECT * from participants WHERE id=? LIMIT 1") err := storage.db.GetContext(ctx, &participant, query, id) if err != nil { return nil, handlePgErr(err) } return &participant, nil } func (storage *ParticipantStorage) UpdateParticipant(ctx context.Context, id int32, participant models.Participant) error { query := storage.db.Rebind("UPDATE participants SET name=?") _, err := storage.db.ExecContext(ctx, query, participant.Name) if err != nil { return handlePgErr(err) } return nil } func (storage *ParticipantStorage) DeleteParticipant(ctx context.Context, id int32) error { query := storage.db.Rebind("DELETE FROM participants WHERE id=?") _, err := storage.db.ExecContext(ctx, query, id) if err != nil { return handlePgErr(err) } return nil }