chore: wrap errors to custom errors

This commit is contained in:
adlerhurst
2025-07-17 00:54:21 +02:00
parent 75a04e83ae
commit f8934b0c88
10 changed files with 331 additions and 69 deletions

View File

@@ -4,8 +4,6 @@ import (
"context"
"errors"
"github.com/jackc/pgx/v5/pgconn"
"github.com/zitadel/zitadel/backend/v3/domain"
"github.com/zitadel/zitadel/backend/v3/storage/database"
)
@@ -67,28 +65,7 @@ func (i *instance) Create(ctx context.Context, instance *domain.Instance) error
builder.AppendArgs(instance.ID, instance.Name, instance.DefaultOrgID, instance.IAMProjectID, instance.ConsoleClientID, instance.ConsoleAppID, instance.DefaultLanguage)
builder.WriteString(createInstanceStmt)
err := i.client.QueryRow(ctx, builder.String(), builder.Args()...).Scan(&instance.CreatedAt, &instance.UpdatedAt)
if err != nil {
var pgErr *pgconn.PgError
if errors.As(err, &pgErr) {
// constraint violation
if pgErr.Code == "23514" {
if pgErr.ConstraintName == "instances_name_check" {
return errors.New("instance name not provided")
}
if pgErr.ConstraintName == "instances_id_check" {
return errors.New("instance id not provided")
}
}
// duplicate
if pgErr.Code == "23505" {
if pgErr.ConstraintName == "instances_pkey" {
return errors.New("instance id already exists")
}
}
}
}
return err
return i.client.QueryRow(ctx, builder.String(), builder.Args()...).Scan(&instance.CreatedAt, &instance.UpdatedAt)
}
// Update implements [domain.InstanceRepository].
@@ -107,8 +84,7 @@ func (i instance) Update(ctx context.Context, id string, changes ...database.Cha
stmt := builder.String()
rowsAffected, err := i.client.Exec(ctx, stmt, builder.Args()...)
return rowsAffected, err
return i.client.Exec(ctx, stmt, builder.Args()...)
}
// Delete implements [domain.InstanceRepository].
@@ -203,9 +179,6 @@ func scanInstance(ctx context.Context, querier database.Querier, builder *databa
instance := new(domain.Instance)
if err := rows.(database.CollectableRows).CollectExactlyOneRow(instance); err != nil {
if err.Error() == "no rows in result set" {
return nil, ErrResourceDoesNotExist
}
return nil, err
}
@@ -219,12 +192,6 @@ func scanInstances(ctx context.Context, querier database.Querier, builder *datab
}
if err := rows.(database.CollectableRows).Collect(&instances); err != nil {
// if no results returned, this is not a error
// it just means the instance was not found
// the caller should check if the returned instance is nil
if err.Error() == "no rows in result set" {
return nil, nil
}
return nil, err
}

View File

@@ -2,7 +2,6 @@ package repository_test
import (
"context"
"errors"
"testing"
"time"
@@ -55,7 +54,7 @@ func TestCreateInstance(t *testing.T) {
}
return instance
}(),
err: errors.New("instance name not provided"),
err: new(database.CheckErr),
},
{
name: "adding same instance twice",
@@ -80,7 +79,7 @@ func TestCreateInstance(t *testing.T) {
require.NoError(t, err)
return &inst
},
err: errors.New("instance id already exists"),
err: new(database.UniqueErr),
},
func() struct {
name string
@@ -146,7 +145,7 @@ func TestCreateInstance(t *testing.T) {
}
return instance
}(),
err: errors.New("instance id not provided"),
err: new(database.CheckErr),
},
}
for _, tt := range tests {
@@ -164,7 +163,7 @@ func TestCreateInstance(t *testing.T) {
// create instance
beforeCreate := time.Now()
err := instanceRepo.Create(ctx, instance)
assert.Equal(t, tt.err, err)
assert.ErrorIs(t, err, tt.err)
if err != nil {
return
}
@@ -263,7 +262,7 @@ func TestUpdateInstance(t *testing.T) {
return &inst
},
rowsAffected: 0,
getErr: repository.ErrResourceDoesNotExist,
getErr: new(database.ErrNoRowFound),
},
}
for _, tt := range tests {
@@ -342,7 +341,7 @@ func TestGetInstance(t *testing.T) {
}
return &inst
},
err: repository.ErrResourceDoesNotExist,
err: new(database.ErrNoRowFound),
},
}
for _, tt := range tests {
@@ -360,7 +359,7 @@ func TestGetInstance(t *testing.T) {
instance.ID,
)
if tt.err != nil {
require.Equal(t, tt.err, err)
require.ErrorIs(t, err, tt.err)
return
}
@@ -655,7 +654,7 @@ func TestDeleteInstance(t *testing.T) {
instance, err := instanceRepo.Get(ctx,
tt.instanceID,
)
require.Equal(t, err, repository.ErrResourceDoesNotExist)
require.ErrorIs(t, err, new(database.ErrNoRowFound))
assert.Nil(t, instance)
})
}

View File

@@ -1,13 +1,9 @@
package repository
import (
"errors"
"github.com/zitadel/zitadel/backend/v3/storage/database"
)
var ErrResourceDoesNotExist = errors.New("resource does not exist")
type repository struct {
client database.QueryExecutor
}