From 28fa38c9304519daf60bf80b51b761ee6608998c Mon Sep 17 00:00:00 2001 From: Vyacheslav1557 Date: Wed, 23 Apr 2025 16:02:40 +0500 Subject: [PATCH] fix: fix UploadProblem data format --- contracts | 2 +- internal/problems/delivery/rest/handlers.go | 29 ++++++++++++++++----- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/contracts b/contracts index a0e07aa..91b7c68 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit a0e07aab6642f7594065af8a3b28702156e2aa7d +Subproject commit 91b7c6804671bcd533ab09939f21d27aacd5f793 diff --git a/internal/problems/delivery/rest/handlers.go b/internal/problems/delivery/rest/handlers.go index 5dc7bd4..337aebc 100644 --- a/internal/problems/delivery/rest/handlers.go +++ b/internal/problems/delivery/rest/handlers.go @@ -7,6 +7,7 @@ import ( "git.sch9.ru/new_gate/ms-tester/internal/problems" "git.sch9.ru/new_gate/ms-tester/pkg" "github.com/gofiber/fiber/v2" + "io" ) type Handlers struct { @@ -176,24 +177,38 @@ func (h *Handlers) UpdateProblem(c *fiber.Ctx, id int32) error { func (h *Handlers) UploadProblem(c *fiber.Ctx, id int32) error { ctx := c.Context() - session, err := sessionFromCtx(ctx) - if err != nil { - return c.SendStatus(pkg.ToREST(err)) + //session, err := sessionFromCtx(ctx) + //if err != nil { + // return c.SendStatus(pkg.ToREST(err)) + //} + + session := models.Session{ + Role: models.RoleAdmin, } switch session.Role { case models.RoleAdmin, models.RoleTeacher: - var req testerv1.UploadProblemRequest - err := c.BodyParser(&req) + a, err := c.FormFile("archive") if err != nil { return err } - data, err := req.Archive.Bytes() + if a.Size == 0 { // FIXME: check max size + return c.SendStatus(fiber.StatusBadRequest) + } + + f, err := a.Open() if err != nil { return err } - if err = h.problemsUC.UploadProblem(c.Context(), id, data); err != nil { + defer f.Close() + + data, err := io.ReadAll(f) + if err != nil { + return err + } + + if err = h.problemsUC.UploadProblem(ctx, id, data); err != nil { return err } return nil