submissions: implement CreateSubmissionAdmin endpoint
This commit is contained in:
parent
1b4456f30a
commit
649b941d5f
@ -124,6 +124,82 @@ func (svc *Service) CreateSubmission(ctx context.Context, request *api.Submissio
|
|||||||
OperationID: operation.ID,
|
OperationID: operation.ID,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
// POST /submissions-admin
|
||||||
|
func (svc *Service) CreateSubmissionAdmin(ctx context.Context, request *api.SubmissionTriggerCreate) (*api.OperationID, error) {
|
||||||
|
// sanitization
|
||||||
|
if request.AssetID<0{
|
||||||
|
return nil, ErrNegativeID
|
||||||
|
}
|
||||||
|
var ModelID=uint64(request.AssetID);
|
||||||
|
|
||||||
|
userInfo, ok := ctx.Value("UserInfo").(UserInfoHandle)
|
||||||
|
if !ok {
|
||||||
|
return nil, ErrUserInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
userId, err := userInfo.GetUserID()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
roles, err := userInfo.GetRoles()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if caller has required role
|
||||||
|
has_role := roles & RolesSubmissionReview == RolesSubmissionReview
|
||||||
|
if !has_role {
|
||||||
|
return nil, ErrPermissionDeniedNeedRoleSubmissionReview
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if too many operations have been created recently
|
||||||
|
{
|
||||||
|
count, err := svc.DB.Operations().CountSince(ctx,
|
||||||
|
int64(userId),
|
||||||
|
time.Now().Add(-CreateSubmissionRecencyWindow),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if CreateSubmissionRateLimit < count {
|
||||||
|
return nil, ErrCreateSubmissionRateLimit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
operation, err := svc.DB.Operations().Create(ctx, model.Operation{
|
||||||
|
Owner: userId,
|
||||||
|
StatusID: model.OperationStatusCreated,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
create_request := model.CreateSubmissionRequest{
|
||||||
|
OperationID: operation.ID,
|
||||||
|
ModelID: ModelID,
|
||||||
|
DisplayName: request.DisplayName,
|
||||||
|
Creator: request.Creator,
|
||||||
|
GameID: uint32(request.GameID),
|
||||||
|
Status: uint32(model.SubmissionStatusChangesRequested),
|
||||||
|
Roles: uint32(roles),
|
||||||
|
}
|
||||||
|
|
||||||
|
j, err := json.Marshal(create_request)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = svc.Nats.Publish("maptest.submissions.create", []byte(j))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &api.OperationID{
|
||||||
|
OperationID: operation.ID,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
// GetSubmission implements getSubmission operation.
|
// GetSubmission implements getSubmission operation.
|
||||||
//
|
//
|
||||||
|
Loading…
x
Reference in New Issue
Block a user