diff --git a/CHANGELOG.md b/CHANGELOG.md index 9bda07cc4..e39142753 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,10 @@ All notable changes to this project will be documented in this file. - Simplified policy data model by removing version field and optimistic concurrency - Refactored policy update flow to load-modify-save pattern +### Fixed + +- Added user-friendly error messages when importing frameworks that already exist + ## [0.4.1] - 2025-04-09 ### Changed diff --git a/pkg/server/api/console/v1/v1_resolver.go b/pkg/server/api/console/v1/v1_resolver.go index 2ac772167..972bfb94d 100644 --- a/pkg/server/api/console/v1/v1_resolver.go +++ b/pkg/server/api/console/v1/v1_resolver.go @@ -7,6 +7,7 @@ package console_v1 import ( "context" "encoding/json" + "errors" "fmt" "time" @@ -459,6 +460,17 @@ func (r *mutationResolver) ImportFramework(ctx context.Context, input types.Impo framework, err := svc.Frameworks.Import(ctx, input.OrganizationID, req) if err != nil { + var errFrameworkReferenceIDAlreadyExists *coredata.ErrFrameworkReferenceIDAlreadyExists + if errors.As(err, &errFrameworkReferenceIDAlreadyExists) { + return nil, &gqlerror.Error{ + Err: err, + Message: fmt.Sprintf("framework %q already exists", req.Framework.Name), + Extensions: map[string]any{ + "frameworkReferenceId": errFrameworkReferenceIDAlreadyExists.ReferenceID, + }, + } + } + return nil, fmt.Errorf("cannot import framework: %w", err) }