Skip to content

Commit 1428f5c

Browse files
committed
feat: add support for approval_id in update_approval api
1 parent e359e07 commit 1428f5c

3 files changed

Lines changed: 30 additions & 5 deletions

File tree

api/handler/v1beta1/approval.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ func (s *GRPCServer) UpdateApproval(ctx context.Context, req *guardianv1beta1.Up
9393
a, err := s.appealService.UpdateApproval(ctx, domain.ApprovalAction{
9494
AppealID: id,
9595
ApprovalName: req.GetApprovalName(),
96+
ApprovalID: req.GetApprovalId(),
9697
Actor: actor,
9798
Action: req.GetAction().GetAction(),
9899
Reason: req.GetAction().GetReason(),

core/appeal/service.go

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -850,9 +850,31 @@ func (s *Service) UpdateApproval(ctx context.Context, approvalAction domain.Appr
850850
return nil, err
851851
}
852852

853-
currentApproval := appeal.GetApproval(approvalAction.ApprovalName)
853+
// Prioritize approval_id over approval_name
854+
var currentApproval *domain.Approval
855+
if approvalAction.ApprovalID != "" {
856+
currentApproval = appeal.GetApproval(approvalAction.ApprovalID)
857+
} else {
858+
currentApproval = appeal.GetApproval(approvalAction.ApprovalName)
859+
}
860+
854861
if currentApproval == nil {
855-
return nil, fmt.Errorf("%w: %q", ErrApprovalNotFound, approvalAction.ApprovalName)
862+
identifier := approvalAction.ApprovalID
863+
if identifier == "" {
864+
identifier = approvalAction.ApprovalName
865+
}
866+
return nil, fmt.Errorf("%w: %q", ErrApprovalNotFound, identifier)
867+
}
868+
869+
// If both approval_id and approval_name are provided, verify they match
870+
if approvalAction.ApprovalID != "" && approvalAction.ApprovalName != "" {
871+
if currentApproval.Name != approvalAction.ApprovalName {
872+
return nil, fmt.Errorf("%w: approval with id %q has name %q, but expected %q",
873+
ErrInvalidUpdateApprovalParameter,
874+
approvalAction.ApprovalID,
875+
currentApproval.Name,
876+
approvalAction.ApprovalName)
877+
}
856878
}
857879

858880
// validate previous approvals status

domain/appeal.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,8 @@ const (
373373

374374
type ApprovalAction struct {
375375
AppealID string `validate:"required" json:"appeal_id"`
376-
ApprovalName string `validate:"required" json:"approval_name"`
376+
ApprovalName string `json:"approval_name"`
377+
ApprovalID string `json:"approval_id"`
377378
Actor string `validate:"email" json:"actor"`
378379
Action string `validate:"required,oneof=approve reject" json:"action"`
379380
Reason string `json:"reason"`
@@ -383,8 +384,9 @@ func (a ApprovalAction) Validate() error {
383384
if a.AppealID == "" {
384385
return fmt.Errorf("appeal id is required")
385386
}
386-
if a.ApprovalName == "" {
387-
return fmt.Errorf("approval name is required")
387+
// Either approval_name or approval_id must be provided
388+
if a.ApprovalName == "" && a.ApprovalID == "" {
389+
return fmt.Errorf("either approval_name or approval_id is required")
388390
}
389391
if validator.New().Var(a.Actor, "email") != nil {
390392
return fmt.Errorf("actor is not a valid email: %q", a.Actor)

0 commit comments

Comments
 (0)