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
UpdatedAt time.Time
Submitter int64 // UserID
// Who clicked the Accept button
AcceptedBy int64 // UserID
// Who clicked the Upload button
UploadedBy int64 // UserID
AssetID int64
AssetVersion int64
ValidatedAssetID int64

@ -406,9 +406,16 @@ func (svc *Service) ActionSubmissionTriggerUpload(ctx context.Context, params ap
return ErrPermissionDeniedNeedSubmissionUpload
}
// track who is performing the upload action
userId, err := userInfo.GetUserID()
if err != nil {
return err
}
// transaction
smap := datastore.Optional()
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)
if err != nil {
return err
@ -513,18 +520,20 @@ func (svc *Service) ActionSubmissionTriggerValidate(ctx context.Context, params
return err
}
has_role, err = userInfo.IsSubmitter(uint64(submission.Submitter))
// track who is performing the accept action
userId, err := userInfo.GetUserID()
if err != nil {
return err
}
// check if caller is NOT the submitter
if has_role {
if userId == uint64(submission.Submitter) {
return ErrAcceptOwnSubmission
}
// transaction
smap := datastore.Optional()
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)
if err != nil {
return err