diff --git a/backend/v3/storage/database/repository/array.go b/backend/v3/storage/database/repository/array.go index 49c150fd5..6b5c87cc0 100644 --- a/backend/v3/storage/database/repository/array.go +++ b/backend/v3/storage/database/repository/array.go @@ -7,7 +7,7 @@ import ( "github.com/zitadel/zitadel/backend/v3/storage/database" ) -type JSONArray[T any] []*T +type JSONArray[T any] []T var ErrScanSource = errors.New("unsupported scan source") diff --git a/backend/v3/storage/database/repository/array_test.go b/backend/v3/storage/database/repository/array_test.go index 9f320190f..c10ef2b38 100644 --- a/backend/v3/storage/database/repository/array_test.go +++ b/backend/v3/storage/database/repository/array_test.go @@ -108,7 +108,7 @@ func TestJSONArray_Scan(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - var a repository.JSONArray[testObject] + var a repository.JSONArray[*testObject] gotErr := a.Scan(tt.src) require.ErrorIs(t, gotErr, tt.want.err) require.Len(t, a, len(tt.want.res)) diff --git a/backend/v3/storage/database/repository/instance.go b/backend/v3/storage/database/repository/instance.go index d96d11608..03f2e3446 100644 --- a/backend/v3/storage/database/repository/instance.go +++ b/backend/v3/storage/database/repository/instance.go @@ -270,7 +270,7 @@ func (i instance) UpdatedAtColumn() database.Column { type rawInstance struct { *domain.Instance - Domains JSONArray[domain.InstanceDomain] `json:"domains,omitempty" db:"domains"` + Domains JSONArray[*domain.InstanceDomain] `json:"domains,omitempty" db:"domains"` } func scanInstance(ctx context.Context, querier database.Querier, builder *database.StatementBuilder) (*domain.Instance, error) { diff --git a/backend/v3/storage/database/repository/org.go b/backend/v3/storage/database/repository/org.go index 2f7e20f98..58b98e32c 100644 --- a/backend/v3/storage/database/repository/org.go +++ b/backend/v3/storage/database/repository/org.go @@ -297,8 +297,8 @@ func (o org) UpdatedAtColumn() database.Column { type rawOrg struct { *domain.Organization - Domains JSONArray[domain.OrganizationDomain] `json:"domains,omitempty" db:"domains"` - Metadata JSONArray[domain.OrganizationMetadata] `json:"metadata,omitempty" db:"metadata"` + Domains JSONArray[*domain.OrganizationDomain] `json:"domains,omitempty" db:"domains"` + Metadata JSONArray[*domain.OrganizationMetadata] `json:"metadata,omitempty" db:"metadata"` } func scanOrganization(ctx context.Context, querier database.Querier, builder *database.StatementBuilder) (*domain.Organization, error) { diff --git a/backend/v3/storage/database/repository/session.go b/backend/v3/storage/database/repository/session.go index be7d629d2..23339112d 100644 --- a/backend/v3/storage/database/repository/session.go +++ b/backend/v3/storage/database/repository/session.go @@ -549,13 +549,13 @@ func (s session) UpdatedAtColumn() database.Column { type rawSession struct { *domain.Session - TokenID *string `json:"tokenID" db:"token_id"` - Lifetime *time.Duration `json:"lifetime" db:"lifetime"` - Expiration *time.Time `json:"expiration" db:"expiration"` - UserID *string `json:"userID" db:"user_id"` - CreatorID *string `json:"creatorID" db:"creator_id"` - Factors JSONArray[rawFactor] `json:"factors,omitempty" db:"factors"` - Metadata JSONArray[domain.SessionMetadata] `json:"metadata,omitempty" db:"metadata"` + TokenID *string `json:"tokenID" db:"token_id"` + Lifetime *time.Duration `json:"lifetime" db:"lifetime"` + Expiration *time.Time `json:"expiration" db:"expiration"` + UserID *string `json:"userID" db:"user_id"` + CreatorID *string `json:"creatorID" db:"creator_id"` + Factors JSONArray[*rawFactor] `json:"factors,omitempty" db:"factors"` + Metadata JSONArray[*domain.SessionMetadata] `json:"metadata,omitempty" db:"metadata"` } func scanSession(ctx context.Context, querier database.Querier, builder *database.StatementBuilder) (*domain.Session, error) { diff --git a/backend/v3/storage/database/repository/user.go b/backend/v3/storage/database/repository/user.go index 7c8b415cc..622b4a5da 100644 --- a/backend/v3/storage/database/repository/user.go +++ b/backend/v3/storage/database/repository/user.go @@ -351,8 +351,10 @@ func (u user) organizationIDColumn() database.Column { type rawUser struct { domain.User - Machine *json.RawMessage `json:"machine,omitempty" db:"machine"` - Human *json.RawMessage `json:"human,omitempty" db:"human"` + Machine *json.RawMessage `json:"machine,omitempty" db:"machine"` + Human *json.RawMessage `json:"human,omitempty" db:"human"` + LoginNames JSONArray[domain.LoginName] `json:"loginNames,omitempty" db:"login_names"` + Metadata JSONArray[*domain.Metadata] `json:"metadata,omitempty" db:"metadata"` } func (u *rawUser) toDomain() (*domain.User, error) { @@ -367,6 +369,8 @@ func (u *rawUser) toDomain() (*domain.User, error) { return nil, err } } + u.User.LoginNames = u.LoginNames + u.User.Metadata = u.Metadata return &u.User, nil } diff --git a/backend/v3/storage/database/repository/user_test.go b/backend/v3/storage/database/repository/user_test.go index f4d576ea7..186bb4f58 100644 --- a/backend/v3/storage/database/repository/user_test.go +++ b/backend/v3/storage/database/repository/user_test.go @@ -139,6 +139,15 @@ func Test_user_Get(t *testing.T) { Name: "My Machine", Description: "This is my machine user", }, + Metadata: []*domain.Metadata{ + { + InstanceID: instanceID, + Key: "key", + Value: []byte(`"something"`), + CreatedAt: now, + UpdatedAt: now, + }, + }, } err = userRepo.Create(t.Context(), tx, human)