From e1720e7f82cfe6cb0ddc7635b6732d7e67323881 Mon Sep 17 00:00:00 2001 From: Vyacheslav1557 Date: Fri, 7 Mar 2025 17:04:19 +0500 Subject: [PATCH] feat(tester): add UpdateContest endpoint --- internal/models/contest.go | 4 ++++ internal/tester/delivery.go | 1 + internal/tester/delivery/rest/handlers.go | 17 +++++++++++++++++ internal/tester/pg_repository.go | 1 + .../tester/repository/pg_contests_repository.go | 16 ++++++++++++++++ internal/tester/usecase.go | 1 + internal/tester/usecase/contests_usecase.go | 4 ++++ proto | 2 +- 8 files changed, 45 insertions(+), 1 deletion(-) diff --git a/internal/models/contest.go b/internal/models/contest.go index ceedf75..62d4d30 100644 --- a/internal/models/contest.go +++ b/internal/models/contest.go @@ -15,3 +15,7 @@ type ContestsListItem struct { CreatedAt time.Time `db:"created_at"` UpdatedAt time.Time `db:"updated_at"` } + +type ContestUpdate struct { + Title *string `json:"title"` +} diff --git a/internal/tester/delivery.go b/internal/tester/delivery.go index 06789ca..c2fbb69 100644 --- a/internal/tester/delivery.go +++ b/internal/tester/delivery.go @@ -20,4 +20,5 @@ type Handlers interface { GetProblem(c *fiber.Ctx, id int32) error ListParticipants(c *fiber.Ctx, params testerv1.ListParticipantsParams) error UpdateProblem(c *fiber.Ctx, id int32) error + UpdateContest(c *fiber.Ctx, id int32) error } diff --git a/internal/tester/delivery/rest/handlers.go b/internal/tester/delivery/rest/handlers.go index 9ee35de..3c13004 100644 --- a/internal/tester/delivery/rest/handlers.go +++ b/internal/tester/delivery/rest/handlers.go @@ -290,3 +290,20 @@ func (h *TesterHandlers) UpdateProblem(c *fiber.Ctx, id int32) error { return c.SendStatus(fiber.StatusOK) } + +func (h *TesterHandlers) UpdateContest(c *fiber.Ctx, id int32) error { + var req testerv1.UpdateContestRequest + err := c.BodyParser(&req) + if err != nil { + return err + } + + err = h.contestsUC.UpdateContest(c.Context(), id, models.ContestUpdate{ + Title: req.Title, + }) + if err != nil { + return c.SendStatus(pkg.ToREST(err)) + } + + return c.SendStatus(fiber.StatusOK) +} diff --git a/internal/tester/pg_repository.go b/internal/tester/pg_repository.go index c922202..77e502f 100644 --- a/internal/tester/pg_repository.go +++ b/internal/tester/pg_repository.go @@ -42,4 +42,5 @@ type ContestRepository interface { ReadRichTasks(ctx context.Context, contestId int32) ([]*models.RichTask, error) ListContests(ctx context.Context, page int32, pageSize int32) ([]*models.ContestsListItem, int32, error) ListParticipants(ctx context.Context, contestId int32, page int32, pageSize int32) ([]*models.ParticipantsListItem, int32, error) + UpdateContest(ctx context.Context, id int32, contestUpdate models.ContestUpdate) error } diff --git a/internal/tester/repository/pg_contests_repository.go b/internal/tester/repository/pg_contests_repository.go index b774955..96ba888 100644 --- a/internal/tester/repository/pg_contests_repository.go +++ b/internal/tester/repository/pg_contests_repository.go @@ -212,3 +212,19 @@ func (r *ContestRepository) ListParticipants(ctx context.Context, contestId int3 return participants, count, nil } + +const ( + updateContestQuery = "UPDATE contests SET title = COALESCE(?, title) WHERE id = ?" +) + +func (r *ContestRepository) UpdateContest(ctx context.Context, id int32, contestUpdate models.ContestUpdate) error { + const op = "ContestRepository.UpdateContest" + + query := r.db.Rebind(updateContestQuery) + _, err := r.db.ExecContext(ctx, query, contestUpdate.Title, id) + if err != nil { + return handlePgErr(err, op) + } + + return nil +} diff --git a/internal/tester/usecase.go b/internal/tester/usecase.go index 0c77d19..3685c70 100644 --- a/internal/tester/usecase.go +++ b/internal/tester/usecase.go @@ -24,4 +24,5 @@ type ContestUseCase interface { ReadRichTasks(ctx context.Context, contestId int32) ([]*models.RichTask, error) ListContests(ctx context.Context, page int32, pageSize int32) ([]*models.ContestsListItem, int32, error) ListParticipants(ctx context.Context, contestId int32, page int32, pageSize int32) ([]*models.ParticipantsListItem, int32, error) + UpdateContest(ctx context.Context, id int32, contestUpdate models.ContestUpdate) error } diff --git a/internal/tester/usecase/contests_usecase.go b/internal/tester/usecase/contests_usecase.go index 75c495c..b901af7 100644 --- a/internal/tester/usecase/contests_usecase.go +++ b/internal/tester/usecase/contests_usecase.go @@ -57,3 +57,7 @@ func (uc *ContestUseCase) ListContests(ctx context.Context, page int32, pageSize func (uc *ContestUseCase) ListParticipants(ctx context.Context, contestId int32, page int32, pageSize int32) ([]*models.ParticipantsListItem, int32, error) { return uc.contestRepo.ListParticipants(ctx, contestId, page, pageSize) } + +func (uc *ContestUseCase) UpdateContest(ctx context.Context, id int32, contestUpdate models.ContestUpdate) error { + return uc.contestRepo.UpdateContest(ctx, id, contestUpdate) +} diff --git a/proto b/proto index e5f7902..9be6a6c 160000 --- a/proto +++ b/proto @@ -1 +1 @@ -Subproject commit e5f7902c188a6b3daae9b147f687c4564cbfdfba +Subproject commit 9be6a6ca9859e44d4b4502b89c071bc8587491b6