2024-11-26 23:30:58 +00:00
|
|
|
package service
|
2024-11-26 23:28:48 +00:00
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
2024-11-29 23:52:44 +00:00
|
|
|
"encoding/json"
|
|
|
|
|
2024-11-26 23:28:48 +00:00
|
|
|
"git.itzana.me/strafesnet/maps-service/pkg/api"
|
2024-11-28 00:38:22 +00:00
|
|
|
"git.itzana.me/strafesnet/maps-service/pkg/datastore"
|
2024-11-29 23:52:44 +00:00
|
|
|
"git.itzana.me/strafesnet/maps-service/pkg/model"
|
2024-11-26 23:28:48 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
// POST /submissions
|
2024-12-06 02:48:26 +00:00
|
|
|
func (svc *Service) CreateSubmission(ctx context.Context, request *api.SubmissionCreate) (*api.ID, error) {
|
2024-12-10 05:19:38 +00:00
|
|
|
userInfo, ok := ctx.Value("UserInfo").(UserInfo)
|
2024-12-12 22:29:20 +00:00
|
|
|
if !ok {
|
2024-11-29 21:58:47 +00:00
|
|
|
return nil, ErrUserInfo
|
|
|
|
}
|
|
|
|
|
2024-11-27 23:38:17 +00:00
|
|
|
submission, err := svc.DB.Submissions().Create(ctx, model.Submission{
|
|
|
|
ID: 0,
|
2024-12-06 02:48:26 +00:00
|
|
|
DisplayName: request.DisplayName,
|
|
|
|
Creator: request.Creator,
|
|
|
|
GameID: request.GameID,
|
2024-12-11 03:18:04 +00:00
|
|
|
Submitter: userInfo.UserID,
|
|
|
|
AssetID: uint64(request.AssetID),
|
|
|
|
AssetVersion: uint64(request.AssetVersion),
|
2024-11-27 23:38:17 +00:00
|
|
|
Completed: false,
|
2024-12-11 03:18:04 +00:00
|
|
|
TargetAssetID: uint64(request.TargetAssetID.Value),
|
2024-11-28 01:59:29 +00:00
|
|
|
StatusID: model.StatusUnderConstruction,
|
2024-11-27 23:38:17 +00:00
|
|
|
})
|
2024-12-12 22:29:20 +00:00
|
|
|
if err != nil {
|
2024-11-27 23:38:17 +00:00
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return &api.ID{
|
2024-12-12 22:29:20 +00:00
|
|
|
ID: submission.ID,
|
2024-11-27 23:38:17 +00:00
|
|
|
}, nil
|
2024-11-26 23:28:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// GetSubmission implements getSubmission operation.
|
|
|
|
//
|
|
|
|
// Retrieve map with ID.
|
|
|
|
//
|
|
|
|
// GET /submissions/{SubmissionID}
|
2024-11-26 23:30:58 +00:00
|
|
|
func (svc *Service) GetSubmission(ctx context.Context, params api.GetSubmissionParams) (*api.Submission, error) {
|
2024-11-26 23:55:56 +00:00
|
|
|
submission, err := svc.DB.Submissions().Get(ctx, params.SubmissionID)
|
2024-12-12 22:29:20 +00:00
|
|
|
if err != nil {
|
2024-11-26 23:55:56 +00:00
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return &api.Submission{
|
2024-12-12 22:29:20 +00:00
|
|
|
ID: submission.ID,
|
|
|
|
DisplayName: submission.DisplayName,
|
|
|
|
Creator: submission.Creator,
|
|
|
|
GameID: submission.GameID,
|
|
|
|
CreatedAt: submission.CreatedAt.Unix(),
|
|
|
|
UpdatedAt: submission.UpdatedAt.Unix(),
|
|
|
|
Submitter: int64(submission.Submitter),
|
|
|
|
AssetID: int64(submission.AssetID),
|
|
|
|
AssetVersion: int64(submission.AssetVersion),
|
|
|
|
Completed: submission.Completed,
|
|
|
|
TargetAssetID: api.NewOptInt64(int64(submission.TargetAssetID)),
|
|
|
|
StatusID: int32(submission.StatusID),
|
2024-11-26 23:55:56 +00:00
|
|
|
}, nil
|
2024-11-26 23:28:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// ListSubmissions implements listSubmissions operation.
|
|
|
|
//
|
|
|
|
// Get list of submissions.
|
|
|
|
//
|
|
|
|
// GET /submissions
|
2024-12-18 05:39:04 +00:00
|
|
|
func (svc *Service) ListSubmissions(ctx context.Context, params api.ListSubmissionsParams) ([]api.Submission, error) {
|
2024-11-28 00:38:22 +00:00
|
|
|
filter := datastore.Optional()
|
2024-12-18 05:39:04 +00:00
|
|
|
|
|
|
|
if params.DisplayName.IsSet(){
|
|
|
|
filter.Add("display_name", params.DisplayName.Value)
|
|
|
|
}
|
|
|
|
if params.Creator.IsSet(){
|
|
|
|
filter.Add("creator", params.Creator.Value)
|
|
|
|
}
|
|
|
|
if params.GameID.IsSet(){
|
|
|
|
filter.Add("game_id", params.GameID.Value)
|
2024-11-28 00:38:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
items, err := svc.DB.Submissions().List(ctx, filter, model.Page{
|
2024-12-18 05:39:04 +00:00
|
|
|
Number: params.Page,
|
|
|
|
Size: params.Limit,
|
2024-11-28 00:38:22 +00:00
|
|
|
})
|
2024-12-12 22:29:20 +00:00
|
|
|
if err != nil {
|
2024-11-28 00:38:22 +00:00
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
var resp []api.Submission
|
|
|
|
for i := 0; i < len(items); i++ {
|
|
|
|
resp = append(resp, api.Submission{
|
2024-12-12 22:29:20 +00:00
|
|
|
ID: items[i].ID,
|
|
|
|
DisplayName: items[i].DisplayName,
|
|
|
|
Creator: items[i].Creator,
|
|
|
|
GameID: items[i].GameID,
|
|
|
|
CreatedAt: items[i].CreatedAt.Unix(),
|
|
|
|
UpdatedAt: items[i].UpdatedAt.Unix(),
|
|
|
|
Submitter: int64(items[i].Submitter),
|
|
|
|
AssetID: int64(items[i].AssetID),
|
|
|
|
AssetVersion: int64(items[i].AssetVersion),
|
|
|
|
Completed: items[i].Completed,
|
|
|
|
TargetAssetID: api.NewOptInt64(int64(items[i].TargetAssetID)),
|
|
|
|
StatusID: int32(items[i].StatusID),
|
2024-11-28 00:38:22 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
return resp, nil
|
2024-11-26 23:28:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// PatchSubmissionCompleted implements patchSubmissionCompleted operation.
|
|
|
|
//
|
|
|
|
// Retrieve map with ID.
|
|
|
|
//
|
2024-12-10 06:09:52 +00:00
|
|
|
// POST /submissions/{SubmissionID}/completed
|
|
|
|
func (svc *Service) SetSubmissionCompleted(ctx context.Context, params api.SetSubmissionCompletedParams) error {
|
2024-12-10 05:19:38 +00:00
|
|
|
userInfo, ok := ctx.Value("UserInfo").(UserInfo)
|
2024-12-12 22:29:20 +00:00
|
|
|
if !ok {
|
2024-11-29 21:58:47 +00:00
|
|
|
return ErrUserInfo
|
|
|
|
}
|
|
|
|
|
2024-11-28 01:27:40 +00:00
|
|
|
// check if caller has MaptestGame role (request must originate from a maptest roblox game)
|
2024-12-12 22:29:20 +00:00
|
|
|
if !userInfo.Roles.Maptest {
|
2024-11-29 21:58:47 +00:00
|
|
|
return ErrPermissionDenied
|
|
|
|
}
|
|
|
|
|
2024-11-28 00:44:50 +00:00
|
|
|
pmap := datastore.Optional()
|
2024-11-28 01:22:59 +00:00
|
|
|
pmap.Add("completed", true)
|
2024-11-28 00:44:50 +00:00
|
|
|
err := svc.DB.Submissions().Update(ctx, params.SubmissionID, pmap)
|
|
|
|
return err
|
2024-11-26 23:28:48 +00:00
|
|
|
}
|
|
|
|
|
2024-12-18 02:26:07 +00:00
|
|
|
// UpdateSubmissionModel implements patchSubmissionModel operation.
|
2024-11-26 23:28:48 +00:00
|
|
|
//
|
|
|
|
// Update model following role restrictions.
|
|
|
|
//
|
2024-12-10 06:09:52 +00:00
|
|
|
// POST /submissions/{SubmissionID}/model
|
|
|
|
func (svc *Service) UpdateSubmissionModel(ctx context.Context, params api.UpdateSubmissionModelParams) error {
|
2024-12-10 05:19:38 +00:00
|
|
|
userInfo, ok := ctx.Value("UserInfo").(UserInfo)
|
2024-12-12 22:29:20 +00:00
|
|
|
if !ok {
|
2024-11-29 21:58:47 +00:00
|
|
|
return ErrUserInfo
|
|
|
|
}
|
|
|
|
|
|
|
|
// read submission (this could be done with a transaction WHERE clause)
|
|
|
|
submission, err := svc.DB.Submissions().Get(ctx, params.SubmissionID)
|
2024-12-12 22:29:20 +00:00
|
|
|
if err != nil {
|
2024-11-29 21:58:47 +00:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
// check if caller is the submitter
|
2024-12-12 22:29:20 +00:00
|
|
|
if !userInfo.IsSubmitter(submission.Submitter) {
|
2024-11-29 21:58:47 +00:00
|
|
|
return ErrPermissionDenied
|
|
|
|
}
|
|
|
|
|
2024-11-28 01:27:40 +00:00
|
|
|
// check if Status is ChangesRequested|Submitted|UnderConstruction
|
2024-11-28 00:44:50 +00:00
|
|
|
pmap := datastore.Optional()
|
|
|
|
pmap.AddNotNil("asset_id", params.ModelID)
|
|
|
|
pmap.AddNotNil("asset_version", params.VersionID)
|
2024-11-28 01:27:44 +00:00
|
|
|
//always reset completed when model changes
|
2024-12-12 22:29:20 +00:00
|
|
|
pmap.Add("completed", false)
|
|
|
|
return svc.DB.Submissions().IfStatusThenUpdate(ctx, params.SubmissionID, []model.Status{model.StatusChangesRequested, model.StatusSubmitted, model.StatusUnderConstruction}, pmap)
|
2024-11-26 23:28:48 +00:00
|
|
|
}
|
|
|
|
|
2024-11-28 01:46:54 +00:00
|
|
|
// ActionSubmissionReject invokes actionSubmissionReject operation.
|
|
|
|
//
|
|
|
|
// Role Reviewer changes status from Submitted -> Rejected.
|
|
|
|
//
|
2024-12-10 06:09:52 +00:00
|
|
|
// POST /submissions/{SubmissionID}/status/reject
|
2024-11-28 01:46:54 +00:00
|
|
|
func (svc *Service) ActionSubmissionReject(ctx context.Context, params api.ActionSubmissionRejectParams) error {
|
2024-12-10 05:19:38 +00:00
|
|
|
userInfo, ok := ctx.Value("UserInfo").(UserInfo)
|
2024-12-12 22:29:20 +00:00
|
|
|
if !ok {
|
2024-11-29 21:58:47 +00:00
|
|
|
return ErrUserInfo
|
|
|
|
}
|
|
|
|
|
2024-11-28 02:19:19 +00:00
|
|
|
// check if caller has required role
|
2024-12-12 22:29:20 +00:00
|
|
|
if !userInfo.Roles.SubmissionReview {
|
2024-11-29 21:58:47 +00:00
|
|
|
return ErrPermissionDenied
|
|
|
|
}
|
|
|
|
|
2024-11-28 02:57:42 +00:00
|
|
|
// transaction
|
2024-11-28 02:19:19 +00:00
|
|
|
smap := datastore.Optional()
|
2024-12-12 22:29:20 +00:00
|
|
|
smap.Add("status_id", model.StatusRejected)
|
2024-11-28 02:57:42 +00:00
|
|
|
return svc.DB.Submissions().IfStatusThenUpdate(ctx, params.SubmissionID, []model.Status{model.StatusSubmitted}, smap)
|
2024-11-28 01:46:54 +00:00
|
|
|
}
|
2024-12-12 22:29:20 +00:00
|
|
|
|
2024-11-28 01:46:54 +00:00
|
|
|
// ActionSubmissionRequestChanges invokes actionSubmissionRequestChanges operation.
|
|
|
|
//
|
|
|
|
// Role Reviewer changes status from Validated|Accepted|Submitted -> ChangesRequested.
|
|
|
|
//
|
2024-12-10 06:09:52 +00:00
|
|
|
// POST /submissions/{SubmissionID}/status/request-changes
|
2024-11-28 01:46:54 +00:00
|
|
|
func (svc *Service) ActionSubmissionRequestChanges(ctx context.Context, params api.ActionSubmissionRequestChangesParams) error {
|
2024-12-10 05:19:38 +00:00
|
|
|
userInfo, ok := ctx.Value("UserInfo").(UserInfo)
|
2024-12-12 22:29:20 +00:00
|
|
|
if !ok {
|
2024-11-29 21:58:47 +00:00
|
|
|
return ErrUserInfo
|
|
|
|
}
|
|
|
|
|
2024-11-28 02:19:19 +00:00
|
|
|
// check if caller has required role
|
2024-12-12 22:29:20 +00:00
|
|
|
if !userInfo.Roles.SubmissionReview {
|
2024-11-29 21:58:47 +00:00
|
|
|
return ErrPermissionDenied
|
|
|
|
}
|
|
|
|
|
2024-11-28 02:57:42 +00:00
|
|
|
// transaction
|
2024-11-28 02:19:19 +00:00
|
|
|
smap := datastore.Optional()
|
2024-12-12 22:29:20 +00:00
|
|
|
smap.Add("status_id", model.StatusChangesRequested)
|
|
|
|
return svc.DB.Submissions().IfStatusThenUpdate(ctx, params.SubmissionID, []model.Status{model.StatusValidated, model.StatusAccepted, model.StatusSubmitted}, smap)
|
2024-11-28 01:46:54 +00:00
|
|
|
}
|
2024-12-12 22:29:20 +00:00
|
|
|
|
2024-11-28 01:46:54 +00:00
|
|
|
// ActionSubmissionRevoke invokes actionSubmissionRevoke operation.
|
|
|
|
//
|
|
|
|
// Role Submitter changes status from Submitted|ChangesRequested -> UnderConstruction.
|
|
|
|
//
|
2024-12-10 06:09:52 +00:00
|
|
|
// POST /submissions/{SubmissionID}/status/revoke
|
2024-11-28 01:46:54 +00:00
|
|
|
func (svc *Service) ActionSubmissionRevoke(ctx context.Context, params api.ActionSubmissionRevokeParams) error {
|
2024-12-10 05:19:38 +00:00
|
|
|
userInfo, ok := ctx.Value("UserInfo").(UserInfo)
|
2024-12-12 22:29:20 +00:00
|
|
|
if !ok {
|
2024-11-29 21:58:47 +00:00
|
|
|
return ErrUserInfo
|
|
|
|
}
|
|
|
|
|
|
|
|
// read submission (this could be done with a transaction WHERE clause)
|
|
|
|
submission, err := svc.DB.Submissions().Get(ctx, params.SubmissionID)
|
2024-12-12 22:29:20 +00:00
|
|
|
if err != nil {
|
2024-11-29 21:58:47 +00:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
// check if caller is the submitter
|
2024-12-12 22:29:20 +00:00
|
|
|
if !userInfo.IsSubmitter(submission.Submitter) {
|
2024-11-29 21:58:47 +00:00
|
|
|
return ErrPermissionDenied
|
|
|
|
}
|
|
|
|
|
2024-11-28 02:57:42 +00:00
|
|
|
// transaction
|
2024-11-28 02:19:19 +00:00
|
|
|
smap := datastore.Optional()
|
2024-12-12 22:29:20 +00:00
|
|
|
smap.Add("status_id", model.StatusUnderConstruction)
|
|
|
|
return svc.DB.Submissions().IfStatusThenUpdate(ctx, params.SubmissionID, []model.Status{model.StatusSubmitted, model.StatusChangesRequested}, smap)
|
2024-11-28 01:46:54 +00:00
|
|
|
}
|
2024-12-12 22:29:20 +00:00
|
|
|
|
2024-11-28 01:46:54 +00:00
|
|
|
// ActionSubmissionSubmit invokes actionSubmissionSubmit operation.
|
|
|
|
//
|
|
|
|
// Role Submitter changes status from UnderConstruction|ChangesRequested -> Submitted.
|
|
|
|
//
|
2024-12-10 06:09:52 +00:00
|
|
|
// POST /submissions/{SubmissionID}/status/submit
|
2024-11-28 01:46:54 +00:00
|
|
|
func (svc *Service) ActionSubmissionSubmit(ctx context.Context, params api.ActionSubmissionSubmitParams) error {
|
2024-12-10 05:19:38 +00:00
|
|
|
userInfo, ok := ctx.Value("UserInfo").(UserInfo)
|
2024-12-12 22:29:20 +00:00
|
|
|
if !ok {
|
2024-11-29 21:58:47 +00:00
|
|
|
return ErrUserInfo
|
|
|
|
}
|
|
|
|
|
|
|
|
// read submission (this could be done with a transaction WHERE clause)
|
|
|
|
submission, err := svc.DB.Submissions().Get(ctx, params.SubmissionID)
|
2024-12-12 22:29:20 +00:00
|
|
|
if err != nil {
|
2024-11-29 21:58:47 +00:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
// check if caller is the submitter
|
2024-12-12 22:29:20 +00:00
|
|
|
if !userInfo.IsSubmitter(submission.Submitter) {
|
2024-11-29 21:58:47 +00:00
|
|
|
return ErrPermissionDenied
|
|
|
|
}
|
|
|
|
|
2024-11-28 02:57:42 +00:00
|
|
|
// transaction
|
2024-11-28 02:19:19 +00:00
|
|
|
smap := datastore.Optional()
|
2024-12-12 22:29:20 +00:00
|
|
|
smap.Add("status_id", model.StatusSubmitted)
|
|
|
|
return svc.DB.Submissions().IfStatusThenUpdate(ctx, params.SubmissionID, []model.Status{model.StatusUnderConstruction, model.StatusChangesRequested}, smap)
|
2024-11-28 01:46:54 +00:00
|
|
|
}
|
2024-12-12 22:29:20 +00:00
|
|
|
|
2024-12-14 12:06:49 +00:00
|
|
|
// ActionSubmissionTriggerUpload invokes actionSubmissionTriggerUpload operation.
|
2024-11-28 01:46:54 +00:00
|
|
|
//
|
2024-12-14 12:06:49 +00:00
|
|
|
// Role Admin changes status from Validated -> Uploading.
|
2024-11-28 01:46:54 +00:00
|
|
|
//
|
2024-12-14 12:06:49 +00:00
|
|
|
// POST /submissions/{SubmissionID}/status/trigger-upload
|
|
|
|
func (svc *Service) ActionSubmissionTriggerUpload(ctx context.Context, params api.ActionSubmissionTriggerUploadParams) error {
|
2024-12-10 05:19:38 +00:00
|
|
|
userInfo, ok := ctx.Value("UserInfo").(UserInfo)
|
2024-12-12 22:29:20 +00:00
|
|
|
if !ok {
|
2024-11-29 21:58:47 +00:00
|
|
|
return ErrUserInfo
|
|
|
|
}
|
|
|
|
|
2024-11-28 02:19:19 +00:00
|
|
|
// check if caller has required role
|
2024-12-14 12:06:49 +00:00
|
|
|
if !userInfo.Roles.SubmissionRelease {
|
2024-11-29 21:58:47 +00:00
|
|
|
return ErrPermissionDenied
|
|
|
|
}
|
|
|
|
|
2024-11-28 02:57:42 +00:00
|
|
|
// transaction
|
2024-11-28 02:19:19 +00:00
|
|
|
smap := datastore.Optional()
|
2024-12-14 12:06:49 +00:00
|
|
|
smap.Add("status_id", model.StatusUploading)
|
2024-11-29 23:52:44 +00:00
|
|
|
submission, err := svc.DB.Submissions().IfStatusThenUpdateAndGet(ctx, params.SubmissionID, []model.Status{model.StatusValidated}, smap)
|
2024-12-12 22:29:20 +00:00
|
|
|
if err != nil {
|
2024-11-29 23:52:44 +00:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
// sentinel value because we are not using rust
|
2024-12-12 22:29:20 +00:00
|
|
|
if submission.TargetAssetID == 0 {
|
2024-11-29 23:52:44 +00:00
|
|
|
// this is a new map
|
|
|
|
publish_new_request := model.PublishNewRequest{
|
|
|
|
SubmissionID: submission.ID,
|
|
|
|
ModelID: submission.AssetID,
|
|
|
|
ModelVersion: submission.AssetVersion,
|
2024-12-15 08:21:01 +00:00
|
|
|
// publish as displayname, whatever
|
|
|
|
ModelName: submission.DisplayName,
|
2024-11-29 23:52:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
j, err := json.Marshal(publish_new_request)
|
2024-12-12 22:29:20 +00:00
|
|
|
if err != nil {
|
2024-11-29 23:52:44 +00:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2024-12-14 02:01:47 +00:00
|
|
|
svc.Nats.Publish("maptest.submissions.publishnew", []byte(j))
|
2024-12-12 22:29:20 +00:00
|
|
|
} else {
|
2024-11-29 23:52:44 +00:00
|
|
|
// this is a map fix
|
|
|
|
publish_fix_request := model.PublishFixRequest{
|
|
|
|
SubmissionID: submission.ID,
|
|
|
|
ModelID: submission.AssetID,
|
|
|
|
ModelVersion: submission.AssetVersion,
|
|
|
|
TargetAssetID: submission.TargetAssetID,
|
|
|
|
}
|
|
|
|
|
|
|
|
j, err := json.Marshal(publish_fix_request)
|
2024-12-12 22:29:20 +00:00
|
|
|
if err != nil {
|
2024-11-29 23:52:44 +00:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2024-12-14 02:01:47 +00:00
|
|
|
svc.Nats.Publish("maptest.submissions.publishfix", []byte(j))
|
2024-11-29 23:52:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
2024-11-28 01:46:54 +00:00
|
|
|
}
|
2024-12-12 22:29:20 +00:00
|
|
|
|
2024-11-28 01:46:54 +00:00
|
|
|
// ActionSubmissionTriggerValidate invokes actionSubmissionTriggerValidate operation.
|
|
|
|
//
|
|
|
|
// Role Reviewer triggers validation and changes status from Submitted|Accepted -> Validating.
|
|
|
|
//
|
2024-12-10 06:09:52 +00:00
|
|
|
// POST /submissions/{SubmissionID}/status/trigger-validate
|
2024-11-28 01:46:54 +00:00
|
|
|
func (svc *Service) ActionSubmissionTriggerValidate(ctx context.Context, params api.ActionSubmissionTriggerValidateParams) error {
|
2024-12-10 05:19:38 +00:00
|
|
|
userInfo, ok := ctx.Value("UserInfo").(UserInfo)
|
2024-12-12 22:29:20 +00:00
|
|
|
if !ok {
|
2024-11-29 21:58:47 +00:00
|
|
|
return ErrUserInfo
|
|
|
|
}
|
|
|
|
|
2024-11-28 02:19:19 +00:00
|
|
|
// check if caller has required role
|
2024-12-12 22:29:20 +00:00
|
|
|
if !userInfo.Roles.SubmissionReview {
|
2024-11-29 21:58:47 +00:00
|
|
|
return ErrPermissionDenied
|
|
|
|
}
|
|
|
|
|
2024-11-28 02:57:42 +00:00
|
|
|
// transaction
|
2024-11-28 02:19:19 +00:00
|
|
|
smap := datastore.Optional()
|
2024-12-12 22:29:20 +00:00
|
|
|
smap.Add("status_id", model.StatusValidating)
|
|
|
|
submission, err := svc.DB.Submissions().IfStatusThenUpdateAndGet(ctx, params.SubmissionID, []model.Status{model.StatusSubmitted, model.StatusAccepted}, smap)
|
|
|
|
if err != nil {
|
2024-11-29 23:52:44 +00:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
validate_request := model.ValidateRequest{
|
|
|
|
SubmissionID: submission.ID,
|
|
|
|
ModelID: submission.AssetID,
|
|
|
|
ModelVersion: submission.AssetVersion,
|
|
|
|
ValidatedModelID: 0, //TODO: reuse velidation models
|
|
|
|
}
|
|
|
|
|
|
|
|
j, err := json.Marshal(validate_request)
|
2024-12-12 22:29:20 +00:00
|
|
|
if err != nil {
|
2024-11-29 23:52:44 +00:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2024-12-12 05:07:51 +00:00
|
|
|
svc.Nats.Publish("maptest.submissions.validate", []byte(j))
|
2024-11-29 23:52:44 +00:00
|
|
|
|
|
|
|
return nil
|
2024-11-28 01:46:54 +00:00
|
|
|
}
|