diff --git a/controller/konnect/ops/ops_errors.go b/controller/konnect/ops/ops_errors.go index b95609ca..ee4b2628 100644 --- a/controller/konnect/ops/ops_errors.go +++ b/controller/konnect/ops/ops_errors.go @@ -131,7 +131,7 @@ func SDKErrorIsConflict(sdkError *sdkkonnecterrs.SDKError) bool { // handleUpdateError handles errors that occur during an update operation. // If the entity is not found, then it uses the provided create function to -// recreate the it. +// recreate it. func handleUpdateError[ T constraints.SupportedKonnectEntityType, TEnt constraints.EntityType[T], @@ -141,41 +141,25 @@ func handleUpdateError[ ent TEnt, createFunc func(ctx context.Context) error, ) error { - var ( - sdkError *sdkkonnecterrs.SDKError - id = ent.GetKonnectStatus().GetKonnectID() - ) - if errors.As(err, &sdkError) { - switch sdkError.StatusCode { - case http.StatusNotFound: - logEntityNotFoundRecreating(ctx, ent, id) - if err := createFunc(ctx); err != nil { - return FailedKonnectOpError[T]{ - Op: UpdateOp, - Err: err, - } - } - return nil - default: - return FailedKonnectOpError[T]{ - Op: UpdateOp, - Err: sdkError, - } - } - } - - var notFoundError *sdkkonnecterrs.NotFoundError - if errors.As(err, ¬FoundError) { + isNotFound := func() bool { + var ( + notFoundError *sdkkonnecterrs.NotFoundError + sdkError *sdkkonnecterrs.SDKError + ) + return errors.As(err, ¬FoundError) || + errors.As(err, &sdkError) && sdkError.StatusCode == http.StatusNotFound + }() + + if isNotFound { + id := ent.GetKonnectStatus().GetKonnectID() logEntityNotFoundRecreating(ctx, ent, id) - if err := createFunc(ctx); err != nil { + if createErr := createFunc(ctx); createErr != nil { return FailedKonnectOpError[T]{ - Op: UpdateOp, - Err: err, + Op: CreateOp, + Err: fmt.Errorf("failed to create %s %s: %w", ent.GetTypeName(), id, createErr), } } - return nil } - return FailedKonnectOpError[T]{ Op: UpdateOp, Err: err,