package submission import ( "git.0x7f.app/WOJ/woj-server/internal/e" "git.0x7f.app/WOJ/woj-server/internal/model" "github.com/gin-gonic/gin" ) type rejudgeRequest struct { Sid uint `form:"sid" json:"sid" binding:"required"` } // Rejudge // @Summary [admin] rejudge a specific submission // @Description rejudge a specific submission // @Tags submission,admin // @Accept application/x-www-form-urlencoded // @Produce json // @Param sid formData int true "submission id" // @Response 200 {object} e.Response[any] "nothing" // @Security Authentication // @Router /v1/submission/rejudge [post] func (h *handler) Rejudge(c *gin.Context) { claim, exist := c.Get("claim") if !exist { e.Pong[any](c, e.UserUnauthenticated, nil) return } req := new(rejudgeRequest) if err := c.ShouldBind(req); err != nil { e.Pong(c, e.InvalidParameter, err.Error()) return } // only admin can rejudge role := claim.(*model.Claim).Role if role < model.RoleAdmin { e.Pong[any](c, e.UserUnauthorized, nil) return } // query submission s, status := h.submissionService.QueryBySid(req.Sid, false) if status != e.Success { e.Pong[any](c, status, nil) return } // query latest problem version pv, status := h.problemService.QueryLatestVersion(s.ProblemID) if status != e.Success { e.Pong[any](c, status, nil) return } // submit judge _, status = h.taskService.SubmitJudge(&model.SubmitJudgePayload{ ProblemVersionID: pv.ID, StorageKey: pv.StorageKey, Submission: *s, }) e.Pong[any](c, status, nil) }