diff --git a/stackit/internal/services/postgresflexalpha/database/resource.go b/stackit/internal/services/postgresflexalpha/database/resource.go index 07597430..e2013f29 100644 --- a/stackit/internal/services/postgresflexalpha/database/resource.go +++ b/stackit/internal/services/postgresflexalpha/database/resource.go @@ -419,7 +419,7 @@ func (r *databaseResource) Update( } // Update existing database - res, err := r.client.UpdateDatabasePartiallyRequest( + err := r.client.UpdateDatabasePartiallyRequest( ctx, projectId, region, @@ -434,12 +434,26 @@ func (r *databaseResource) Update( ctx = core.LogResponse(ctx) // Map response body to schema - err = mapResourceFields(res.Database, &model) + databaseResp, err := getDatabaseById(ctx, r.client, projectId, region, instanceId, databaseId64) + if err != nil { + oapiErr, ok := err.(*oapierror.GenericOpenAPIError) //nolint:errorlint //complaining that error.As should be used to catch wrapped errors, but this error should not be wrapped + if (ok && oapiErr.StatusCode == http.StatusNotFound) || errors.Is(err, errDatabaseNotFound) { + resp.State.RemoveResource(ctx) + return + } + core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading database", fmt.Sprintf("Calling API: %v", err)) + return + } + + ctx = core.LogResponse(ctx) + + // Map response body to schema + err = mapResourceFields(databaseResp, &model) if err != nil { core.LogAndAddError( ctx, &resp.Diagnostics, - "Error updating database", + "Error reading database", fmt.Sprintf("Processing API payload: %v", err), ) return diff --git a/stackit/internal/services/sqlserverflexalpha/user/mapper_test.go b/stackit/internal/services/sqlserverflexalpha/user/mapper_test.go index c97fee9c..e450b581 100644 --- a/stackit/internal/services/sqlserverflexalpha/user/mapper_test.go +++ b/stackit/internal/services/sqlserverflexalpha/user/mapper_test.go @@ -42,7 +42,7 @@ func TestMapDataSourceFields(t *testing.T) { "simple_values", &sqlserverflexalpha.GetUserResponse{ - Roles: &[]sqlserverflexalpha.UserRole{ + Roles: &[]string{ "role_1", "role_2", "", @@ -79,7 +79,7 @@ func TestMapDataSourceFields(t *testing.T) { "null_fields_and_int_conversions", &sqlserverflexalpha.GetUserResponse{ Id: utils.Ptr(int64(1)), - Roles: &[]sqlserverflexalpha.UserRole{}, + Roles: &[]string{}, Username: nil, Host: nil, Port: utils.Ptr(int64(2123456789)), @@ -180,7 +180,7 @@ func TestMapFieldsCreate(t *testing.T) { "simple_values", &sqlserverflexalpha.CreateUserResponse{ Id: utils.Ptr(int64(2)), - Roles: &[]sqlserverflexalpha.UserRole{ + Roles: &[]string{ "role_1", "role_2", "", @@ -221,7 +221,7 @@ func TestMapFieldsCreate(t *testing.T) { "null_fields_and_int_conversions", &sqlserverflexalpha.CreateUserResponse{ Id: utils.Ptr(int64(3)), - Roles: &[]sqlserverflexalpha.UserRole{}, + Roles: &[]string{}, Username: nil, Password: utils.Ptr(""), Host: nil, @@ -329,7 +329,7 @@ func TestMapFields(t *testing.T) { { "simple_values", &sqlserverflexalpha.GetUserResponse{ - Roles: &[]sqlserverflexalpha.UserRole{ + Roles: &[]string{ "role_1", "role_2", "", @@ -364,7 +364,7 @@ func TestMapFields(t *testing.T) { "null_fields_and_int_conversions", &sqlserverflexalpha.GetUserResponse{ Id: utils.Ptr(int64(1)), - Roles: &[]sqlserverflexalpha.UserRole{}, + Roles: &[]string{}, Username: nil, Host: nil, Port: utils.Ptr(int64(2123456789)), @@ -435,16 +435,16 @@ func TestToCreatePayload(t *testing.T) { tests := []struct { description string input *resourceModel - inputRoles []sqlserverflexalpha.UserRole + inputRoles []string expected *sqlserverflexalpha.CreateUserRequestPayload isValid bool }{ { "default_values", &resourceModel{}, - []sqlserverflexalpha.UserRole{}, + []string{}, &sqlserverflexalpha.CreateUserRequestPayload{ - Roles: &[]sqlserverflexalpha.UserRole{}, + Roles: &[]string{}, Username: nil, }, true, @@ -454,12 +454,12 @@ func TestToCreatePayload(t *testing.T) { &resourceModel{ Username: types.StringValue("username"), }, - []sqlserverflexalpha.UserRole{ + []string{ "role_1", "role_2", }, &sqlserverflexalpha.CreateUserRequestPayload{ - Roles: &[]sqlserverflexalpha.UserRole{ + Roles: &[]string{ "role_1", "role_2", }, @@ -472,11 +472,11 @@ func TestToCreatePayload(t *testing.T) { &resourceModel{ Username: types.StringNull(), }, - []sqlserverflexalpha.UserRole{ + []string{ "", }, &sqlserverflexalpha.CreateUserRequestPayload{ - Roles: &[]sqlserverflexalpha.UserRole{ + Roles: &[]string{ "", }, Username: nil, @@ -486,7 +486,7 @@ func TestToCreatePayload(t *testing.T) { { "nil_model", nil, - []sqlserverflexalpha.UserRole{}, + []string{}, nil, false, }, @@ -495,9 +495,9 @@ func TestToCreatePayload(t *testing.T) { &resourceModel{ Username: types.StringValue("username"), }, - []sqlserverflexalpha.UserRole{}, + []string{}, &sqlserverflexalpha.CreateUserRequestPayload{ - Roles: &[]sqlserverflexalpha.UserRole{}, + Roles: &[]string{}, Username: utils.Ptr("username"), }, true, diff --git a/stackit/internal/services/sqlserverflexbeta/user/mapper_test.go b/stackit/internal/services/sqlserverflexbeta/user/mapper_test.go index 23c6121c..7b23805c 100644 --- a/stackit/internal/services/sqlserverflexbeta/user/mapper_test.go +++ b/stackit/internal/services/sqlserverflexbeta/user/mapper_test.go @@ -42,7 +42,7 @@ func TestMapDataSourceFields(t *testing.T) { "simple_values", &sqlserverflexbeta.GetUserResponse{ - Roles: &[]sqlserverflexbeta.UserRole{ + Roles: &[]string{ "role_1", "role_2", "", @@ -81,7 +81,7 @@ func TestMapDataSourceFields(t *testing.T) { "null_fields_and_int_conversions", &sqlserverflexbeta.GetUserResponse{ Id: utils.Ptr(int64(1)), - Roles: &[]sqlserverflexbeta.UserRole{}, + Roles: &[]string{}, Username: nil, Host: nil, Port: utils.Ptr(int64(2123456789)), @@ -182,7 +182,7 @@ func TestMapFieldsCreate(t *testing.T) { "simple_values", &sqlserverflexbeta.CreateUserResponse{ Id: utils.Ptr(int64(2)), - Roles: &[]sqlserverflexbeta.UserRole{ + Roles: &[]string{ "role_1", "role_2", "", @@ -223,7 +223,7 @@ func TestMapFieldsCreate(t *testing.T) { "null_fields_and_int_conversions", &sqlserverflexbeta.CreateUserResponse{ Id: utils.Ptr(int64(3)), - Roles: &[]sqlserverflexbeta.UserRole{}, + Roles: &[]string{}, Username: nil, Password: utils.Ptr(""), Host: nil, @@ -331,7 +331,7 @@ func TestMapFields(t *testing.T) { { "simple_values", &sqlserverflexbeta.GetUserResponse{ - Roles: &[]sqlserverflexbeta.UserRole{ + Roles: &[]string{ "role_1", "role_2", "", @@ -366,7 +366,7 @@ func TestMapFields(t *testing.T) { "null_fields_and_int_conversions", &sqlserverflexbeta.GetUserResponse{ Id: utils.Ptr(int64(1)), - Roles: &[]sqlserverflexbeta.UserRole{}, + Roles: &[]string{}, Username: nil, Host: nil, Port: utils.Ptr(int64(2123456789)), @@ -437,16 +437,16 @@ func TestToCreatePayload(t *testing.T) { tests := []struct { description string input *resourceModel - inputRoles []sqlserverflexbeta.UserRole + inputRoles []string expected *sqlserverflexbeta.CreateUserRequestPayload isValid bool }{ { "default_values", &resourceModel{}, - []sqlserverflexbeta.UserRole{}, + []string{}, &sqlserverflexbeta.CreateUserRequestPayload{ - Roles: &[]sqlserverflexbeta.UserRole{}, + Roles: &[]string{}, Username: nil, }, true, @@ -456,12 +456,12 @@ func TestToCreatePayload(t *testing.T) { &resourceModel{ Username: types.StringValue("username"), }, - []sqlserverflexbeta.UserRole{ + []string{ "role_1", "role_2", }, &sqlserverflexbeta.CreateUserRequestPayload{ - Roles: &[]sqlserverflexbeta.UserRole{ + Roles: &[]string{ "role_1", "role_2", }, @@ -474,11 +474,11 @@ func TestToCreatePayload(t *testing.T) { &resourceModel{ Username: types.StringNull(), }, - []sqlserverflexbeta.UserRole{ + []string{ "", }, &sqlserverflexbeta.CreateUserRequestPayload{ - Roles: &[]sqlserverflexbeta.UserRole{ + Roles: &[]string{ "", }, Username: nil, @@ -488,7 +488,7 @@ func TestToCreatePayload(t *testing.T) { { "nil_model", nil, - []sqlserverflexbeta.UserRole{}, + []string{}, nil, false, }, @@ -497,9 +497,9 @@ func TestToCreatePayload(t *testing.T) { &resourceModel{ Username: types.StringValue("username"), }, - []sqlserverflexbeta.UserRole{}, + []string{}, &sqlserverflexbeta.CreateUserRequestPayload{ - Roles: &[]sqlserverflexbeta.UserRole{}, + Roles: &[]string{}, Username: utils.Ptr("username"), }, true,