Track Button Clicker For Important Actions #39

Merged
Quaternions merged 2 commits from track into staging 2025-03-28 22:34:52 +00:00
2 changed files with 15 additions and 2 deletions

@ -40,6 +40,10 @@ type Submission struct {
CreatedAt time.Time CreatedAt time.Time
UpdatedAt time.Time UpdatedAt time.Time
Submitter int64 // UserID Submitter int64 // UserID
// Who clicked the Accept button
AcceptedBy int64 // UserID
// Who clicked the Upload button
UploadedBy int64 // UserID
AssetID int64 AssetID int64
AssetVersion int64 AssetVersion int64
ValidatedAssetID int64 ValidatedAssetID int64

@ -406,9 +406,16 @@ func (svc *Service) ActionSubmissionTriggerUpload(ctx context.Context, params ap
return ErrPermissionDeniedNeedSubmissionUpload return ErrPermissionDeniedNeedSubmissionUpload
} }
// track who is performing the upload action
userId, err := userInfo.GetUserID()
if err != nil {
return err
}
// transaction // transaction
smap := datastore.Optional() smap := datastore.Optional()
smap.Add("status_id", model.StatusUploading) smap.Add("status_id", model.StatusUploading)
smap.Add("uploaded_by", userId)
submission, err := svc.DB.Submissions().IfStatusThenUpdateAndGet(ctx, params.SubmissionID, []model.Status{model.StatusValidated}, smap) submission, err := svc.DB.Submissions().IfStatusThenUpdateAndGet(ctx, params.SubmissionID, []model.Status{model.StatusValidated}, smap)
if err != nil { if err != nil {
return err return err
@ -513,18 +520,20 @@ func (svc *Service) ActionSubmissionTriggerValidate(ctx context.Context, params
return err return err
} }
has_role, err = userInfo.IsSubmitter(uint64(submission.Submitter)) // track who is performing the accept action
userId, err := userInfo.GetUserID()
if err != nil { if err != nil {
return err return err
} }
// check if caller is NOT the submitter // check if caller is NOT the submitter
if has_role { if userId == uint64(submission.Submitter) {
return ErrAcceptOwnSubmission return ErrAcceptOwnSubmission
} }
// transaction // transaction
smap := datastore.Optional() smap := datastore.Optional()
smap.Add("status_id", model.StatusValidating) smap.Add("status_id", model.StatusValidating)
smap.Add("accepted_by", userId)
submission, err = svc.DB.Submissions().IfStatusThenUpdateAndGet(ctx, params.SubmissionID, []model.Status{model.StatusSubmitted}, smap) submission, err = svc.DB.Submissions().IfStatusThenUpdateAndGet(ctx, params.SubmissionID, []model.Status{model.StatusSubmitted}, smap)
if err != nil { if err != nil {
return err return err