From 31f1db6446f0c1eea6967c03236e4dbd4bf62a2f Mon Sep 17 00:00:00 2001 From: Quaternions <krakow20@gmail.com> Date: Wed, 19 Mar 2025 17:38:40 -0700 Subject: [PATCH] submissions: implement reset from softlock --- pkg/service/submissions.go | 53 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/pkg/service/submissions.go b/pkg/service/submissions.go index 0be5a06..b4bca23 100644 --- a/pkg/service/submissions.go +++ b/pkg/service/submissions.go @@ -439,6 +439,32 @@ func (svc *Service) ActionSubmissionTriggerUpload(ctx context.Context, params ap return nil } +// ActionSubmissionValidate invokes actionSubmissionValidate operation. +// +// Role SubmissionRelease changes status from Uploading -> Validated. +// +// POST /submissions/{SubmissionID}/status/reset-uploading +func (svc *Service) ActionSubmissionValidated(ctx context.Context, params api.ActionSubmissionValidatedParams) error { + userInfo, ok := ctx.Value("UserInfo").(UserInfo) + if !ok { + return ErrUserInfo + } + + has_role, err := userInfo.HasRoleSubmissionRelease() + if err != nil { + return err + } + // check if caller has required role + if !has_role { + return ErrPermissionDenied + } + + // transaction + smap := datastore.Optional() + smap.Add("status_id", model.StatusValidated) + return svc.DB.Submissions().IfStatusThenUpdate(ctx, params.SubmissionID, []model.Status{model.StatusUploading}, smap) +} + // ActionSubmissionTriggerValidate invokes actionSubmissionTriggerValidate operation. // // Role Reviewer triggers validation and changes status from Submitted|Accepted -> Validating. @@ -484,6 +510,33 @@ func (svc *Service) ActionSubmissionTriggerValidate(ctx context.Context, params return nil } +// ActionSubmissionAccepted implements actionSubmissionAccepted operation. +// +// Role SubmissionReview changes status from Validating -> Accepted. +// +// POST /submissions/{SubmissionID}/status/reset-validating +func (svc *Service) ActionSubmissionAccepted(ctx context.Context, params api.ActionSubmissionAcceptedParams) error { + userInfo, ok := ctx.Value("UserInfo").(UserInfo) + if !ok { + return ErrUserInfo + } + + has_role, err := userInfo.HasRoleSubmissionReview() + if err != nil { + return err + } + // check if caller has required role + if !has_role { + return ErrPermissionDenied + } + + // transaction + smap := datastore.Optional() + smap.Add("status_id", model.StatusAccepted) + smap.Add("status_message", "Manually forced reset") + return svc.DB.Submissions().IfStatusThenUpdate(ctx, params.SubmissionID, []model.Status{model.StatusValidating}, smap) +} + // ReleaseSubmissions invokes releaseSubmissions operation. // // Release a set of uploaded maps.