fix(api): return AlreadyExists error for duplicate memo IDs (AIP-133)

Ensure AIP-133 compliance by returning codes.AlreadyExists when
a duplicate memo ID is provided, rather than a generic database
error.

Handles unique constraint violations across all database drivers:
- SQLite: "UNIQUE constraint failed"
- PostgreSQL: "duplicate key"
- MySQL: "Duplicate entry"

This provides a clear, standardized error response per Google's
API design guidelines (AIP-133 for Create methods).
This commit is contained in:
Claude 2025-11-08 01:32:03 +00:00
parent c8900acc4e
commit 652c855145
No known key found for this signature in database

View file

@ -70,6 +70,13 @@ func (s *APIV1Service) CreateMemo(ctx context.Context, request *v1pb.CreateMemoR
memo, err := s.Store.CreateMemo(ctx, create)
if err != nil {
// Check for unique constraint violation (AIP-133 compliance)
errMsg := err.Error()
if strings.Contains(errMsg, "UNIQUE constraint failed") ||
strings.Contains(errMsg, "duplicate key") ||
strings.Contains(errMsg, "Duplicate entry") {
return nil, status.Errorf(codes.AlreadyExists, "memo with ID %q already exists", memoUID)
}
return nil, err
}