From e1a4cf17134b1e16fa744aed59dd13d34b8fa651 Mon Sep 17 00:00:00 2001 From: Quaternions <krakow20@gmail.com> Date: Wed, 2 Apr 2025 14:13:21 -0700 Subject: [PATCH] submissions: trigger validator to create submissions & mapfixes --- pkg/model/nats.go | 12 +++++++ pkg/service/mapfixes.go | 64 ++++++++++++-------------------------- pkg/service/submissions.go | 62 +++++++++++------------------------- 3 files changed, 51 insertions(+), 87 deletions(-) diff --git a/pkg/model/nats.go b/pkg/model/nats.go index 6add04f..832c340 100644 --- a/pkg/model/nats.go +++ b/pkg/model/nats.go @@ -5,6 +5,18 @@ package model // Requests are sent from maps-service to validator +type CreateSubmissionRequest struct { + // operation_id is passed back in the response message + OperationID int32 + ModelID int64 +} + +type CreateMapfixRequest struct { + OperationID int32 + ModelID int64 + TargetAssetID int64 +} + type ValidateSubmissionRequest struct { // submission_id is passed back in the response message SubmissionID int64 diff --git a/pkg/service/mapfixes.go b/pkg/service/mapfixes.go index ba38707..6fc922c 100644 --- a/pkg/service/mapfixes.go +++ b/pkg/service/mapfixes.go @@ -19,16 +19,6 @@ var( model.MapfixStatusSubmitted, model.MapfixStatusUnderConstruction, } - // prevent two mapfixes with same asset id - ActiveMapfixStatuses = []model.MapfixStatus{ - model.MapfixStatusUploading, - model.MapfixStatusValidated, - model.MapfixStatusValidating, - model.MapfixStatusAccepted, - model.MapfixStatusChangesRequested, - model.MapfixStatusSubmitted, - model.MapfixStatusUnderConstruction, - } // limit mapfixes in the pipeline to one per target map ActiveAcceptedMapfixStatuses = []model.MapfixStatus{ model.MapfixStatusUploading, @@ -40,13 +30,12 @@ var( var ( ErrCreationPhaseMapfixesLimit = errors.New("Active mapfixes limited to 20") - ErrActiveMapfixSameAssetID = errors.New("There is an active mapfix with the same AssetID") ErrActiveMapfixSameTargetAssetID = errors.New("There is an active mapfix with the same TargetAssetID") ErrAcceptOwnMapfix = fmt.Errorf("%w: You cannot accept your own mapfix as the submitter", ErrPermissionDenied) ) // POST /mapfixes -func (svc *Service) CreateMapfix(ctx context.Context, request *api.MapfixCreate) (*api.ID, error) { +func (svc *Service) CreateMapfix(ctx context.Context, request *api.MapfixTriggerCreate) (*api.OperationID, error) { userInfo, ok := ctx.Value("UserInfo").(UserInfoHandle) if !ok { return nil, ErrUserInfo @@ -74,42 +63,29 @@ func (svc *Service) CreateMapfix(ctx context.Context, request *api.MapfixCreate) return nil, ErrCreationPhaseMapfixesLimit } } - - // Check if an active mapfix with the same asset id exists - { - filter := datastore.Optional() - filter.Add("asset_id", request.AssetID) - filter.Add("asset_version", request.AssetVersion) - filter.Add("status_id", ActiveMapfixStatuses) - active_mapfixes, err := svc.DB.Mapfixes().List(ctx, filter, model.Page{ - Number: 1, - Size: 1, - },datastore.ListSortDisabled) - if err != nil { - return nil, err - } - if len(active_mapfixes) != 0{ - return nil, ErrActiveMapfixSameAssetID - } - } - - mapfix, err := svc.DB.Mapfixes().Create(ctx, model.Mapfix{ - ID: 0, - DisplayName: request.DisplayName, - Creator: request.Creator, - GameID: request.GameID, - Submitter: int64(userId), - AssetID: request.AssetID, - AssetVersion: request.AssetVersion, - Completed: false, - TargetAssetID: request.TargetAssetID, - StatusID: model.MapfixStatusUnderConstruction, + operation, err := svc.DB.Operations().Create(ctx, model.Operation{ + Owner: int64(userId), + StatusID: model.OperationStatusCreated, }) if err != nil { return nil, err } - return &api.ID{ - ID: mapfix.ID, + + create_request := model.CreateMapfixRequest{ + OperationID: operation.ID, + ModelID: request.AssetID, + TargetAssetID: request.TargetAssetID, + } + + j, err := json.Marshal(create_request) + if err != nil { + return nil, err + } + + svc.Nats.Publish("maptest.mapfixes.create", []byte(j)) + + return &api.OperationID{ + OperationID: operation.ID, }, nil } diff --git a/pkg/service/submissions.go b/pkg/service/submissions.go index 5944eff..f36a18a 100644 --- a/pkg/service/submissions.go +++ b/pkg/service/submissions.go @@ -20,16 +20,6 @@ var( model.SubmissionStatusSubmitted, model.SubmissionStatusUnderConstruction, } - // prevent two mapfixes with same asset id - ActiveSubmissionStatuses = []model.SubmissionStatus{ - model.SubmissionStatusUploading, - model.SubmissionStatusValidated, - model.SubmissionStatusValidating, - model.SubmissionStatusAccepted, - model.SubmissionStatusChangesRequested, - model.SubmissionStatusSubmitted, - model.SubmissionStatusUnderConstruction, - } // limit mapfixes in the pipeline to one per target map ActiveAcceptedSubmissionStatuses = []model.SubmissionStatus{ model.SubmissionStatusUploading, @@ -41,7 +31,6 @@ var( var ( ErrCreationPhaseSubmissionsLimit = errors.New("Active submissions limited to 20") - ErrActiveSubmissionSameAssetID = errors.New("There is an active submission with the same AssetID") ErrUploadedAssetIDAlreadyExists = errors.New("The submission UploadedAssetID is already set") ErrReleaseInvalidStatus = errors.New("Only submissions with Uploaded status can be released") ErrReleaseNoUploadedAssetID = errors.New("Only submissions with a UploadedAssetID can be released") @@ -49,7 +38,7 @@ var ( ) // POST /submissions -func (svc *Service) CreateSubmission(ctx context.Context, request *api.SubmissionCreate) (*api.ID, error) { +func (svc *Service) CreateSubmission(ctx context.Context, request *api.SubmissionTriggerCreate) (*api.OperationID, error) { userInfo, ok := ctx.Value("UserInfo").(UserInfoHandle) if !ok { return nil, ErrUserInfo @@ -77,41 +66,28 @@ func (svc *Service) CreateSubmission(ctx context.Context, request *api.Submissio return nil, ErrCreationPhaseSubmissionsLimit } } - - // Check if an active submission with the same asset id exists - { - filter := datastore.Optional() - filter.Add("asset_id", request.AssetID) - filter.Add("asset_version", request.AssetVersion) - filter.Add("status_id", ActiveSubmissionStatuses) - active_submissions, err := svc.DB.Submissions().List(ctx, filter, model.Page{ - Number: 1, - Size: 1, - },datastore.ListSortDisabled) - if err != nil { - return nil, err - } - if len(active_submissions) != 0{ - return nil, ErrActiveSubmissionSameAssetID - } - } - - submission, err := svc.DB.Submissions().Create(ctx, model.Submission{ - ID: 0, - DisplayName: request.DisplayName, - Creator: request.Creator, - GameID: request.GameID, - Submitter: int64(userId), - AssetID: request.AssetID, - AssetVersion: request.AssetVersion, - Completed: false, - StatusID: model.SubmissionStatusUnderConstruction, + operation, err := svc.DB.Operations().Create(ctx, model.Operation{ + Owner: int64(userId), + StatusID: model.OperationStatusCreated, }) if err != nil { return nil, err } - return &api.ID{ - ID: submission.ID, + + create_request := model.CreateSubmissionRequest{ + OperationID: operation.ID, + ModelID: request.AssetID, + } + + j, err := json.Marshal(create_request) + if err != nil { + return nil, err + } + + svc.Nats.Publish("maptest.submissions.create", []byte(j)) + + return &api.OperationID{ + OperationID: operation.ID, }, nil }