package status import ( "git.0x7f.app/WOJ/woj-server/internal/e" "git.0x7f.app/WOJ/woj-server/internal/model" "github.com/gin-gonic/gin" ) type queryByVersionRequest struct { ProblemVersionID uint `form:"pvid" json:"pvid" binding:"required"` Offset int `form:"offset" json:"offset"` Limit int `form:"limit" json:"limit" binding:"required"` } // QueryByProblemVersion // @Summary [admin] query status by problem version // @Description Retrieve all judgement results corresponding to the problem version. // @Tags status,admin // @Accept application/x-www-form-urlencoded // @Produce json // @Param pvid formData uint true "problem version" // @Param offset formData int false "start position" // @Param limit formData int true "max number of results" // @Response 200 {object} e.Response[e.WithCount[model.Status]] "submission status array" // @Security Authentication // @Router /v1/status/query/version [post] func (h *handler) QueryByProblemVersion(c *gin.Context) { claim, exist := c.Get("claim") if !exist { e.Pong[any](c, e.UserUnauthenticated, nil) return } req := new(queryByVersionRequest) if err := c.ShouldBind(req); err != nil { e.Pong(c, e.InvalidParameter, err.Error()) return } // check permission role := claim.(*model.Claim).Role if role < model.RoleAdmin { e.Pong[any](c, e.UserUnauthorized, nil) return } var count int64 submitStatus, status := h.statusService.QueryByVersion(req.ProblemVersionID, req.Offset, req.Limit, &count) e.Pong(c, status, e.WithCount[*model.Status]{Count: count, Data: submitStatus}) }