package storage import ( "context" "errors" "git.sch9.ru/new_gate/ms-auth/internal/lib" "git.sch9.ru/new_gate/ms-auth/internal/models" "github.com/jackc/pgerrcode" "github.com/jackc/pgx/v5/pgconn" "github.com/jmoiron/sqlx" "go.uber.org/zap" "time" ) type ContestStorage struct { db *sqlx.DB logger *zap.Logger } func NewContestStorage(db *sqlx.DB, logger *zap.Logger) *ContestStorage { return &ContestStorage{ db: db, logger: logger, } } func (storage *ContestStorage) CreateContest(ctx context.Context, contest *models.Contest) (int32, error) { query := storage.db.Rebind(` INSERT INTO contests (name) VALUES (?) RETURNING id `) rows, err := storage.db.QueryxContext( ctx, query, contest.Name ) if err != nil { return 0, storage.HandlePgErr(err) } defer rows.Close() var id int32 err = rows.StructScan(&id) if err != nil { return 0, storage.HandlePgErr(err) } return id, nil } func (storage *ContestStorage) ReadContestById(ctx context.Context, id int32) (*models.Contest, error) { var contest models.Contest query := storage.db.Rebind("SELECT * from contests WHERE id=? LIMIT 1") err := storage.db.GetContext(ctx, &contest, query, id) if err != nil { return nil, storage.HandlePgErr(err) } return &contest, nil } func (storage *ContestStorage) UpdateContest(ctx context.Context, id int32,contest models.Contest) error { query := storage.db.Rebind("UPDATE contests SET name=?") _, err := storage.db.ExecContext(ctx, query, contest.Name) if err != nil { return storage.HandlePgErr(err) } } func (storage *ContestStorage) DeleteContest(ctx context.Context, id int32) error { query := storage.db.Rebind("DELETE FROM contests WHERE id=?") _, err := storage.db.ExecContext(ctx, query, id) if err != nil { return storage.HandlePgErr(err) } return nil }