chain of responsibilities

This commit is contained in:
adlerhurst
2025-02-26 09:49:38 +01:00
parent 16a324b8fd
commit fb3b451d4d
18 changed files with 86 additions and 35 deletions

View File

@@ -0,0 +1,21 @@
package factory
import (
"context"
"github.com/zitadel/zitadel/backend/repository"
"github.com/zitadel/zitadel/backend/storage/database"
"github.com/zitadel/zitadel/backend/telemetry/logging"
"github.com/zitadel/zitadel/backend/telemetry/tracing"
)
type InstanceBuilder struct {
tracer *tracing.Tracer
logger *logging.Logger
}
func (f *InstanceBuilder) BuildSetUpInstance(tx database.Transaction) func(ctx context.Context, instance *repository.Instance) error {
return func(ctx context.Context, instance *repository.Instance) error {
return tx.Exec(ctx, "INSERT INTO instances (id, name) VALUES ($1, $2)", instance.ID, instance.Name)
}
}

View File

@@ -2,27 +2,27 @@ package domain
import ( import (
"context" "context"
"log/slog"
"github.com/zitadel/zitadel/backend/repository"
"github.com/zitadel/zitadel/backend/repository/cache"
"github.com/zitadel/zitadel/backend/repository/event"
"github.com/zitadel/zitadel/backend/repository/sql"
"github.com/zitadel/zitadel/backend/repository/telemetry/logged"
"github.com/zitadel/zitadel/backend/repository/telemetry/traced"
"github.com/zitadel/zitadel/backend/storage/database" "github.com/zitadel/zitadel/backend/storage/database"
"github.com/zitadel/zitadel/backend/storage/eventstore" "github.com/zitadel/zitadel/backend/storage/eventstore"
"github.com/zitadel/zitadel/backend/storage/repository" "github.com/zitadel/zitadel/backend/telemetry/logging"
"github.com/zitadel/zitadel/backend/storage/repository/cache"
"github.com/zitadel/zitadel/backend/storage/repository/event"
"github.com/zitadel/zitadel/backend/storage/repository/sql"
"github.com/zitadel/zitadel/backend/storage/repository/telemetry/logged"
"github.com/zitadel/zitadel/backend/storage/repository/telemetry/traced"
"github.com/zitadel/zitadel/backend/telemetry/tracing" "github.com/zitadel/zitadel/backend/telemetry/tracing"
) )
type Instance struct { type Instance struct {
db database.Pool db database.Pool
tracer *tracing.Tracer tracer *tracing.Tracer
logger *slog.Logger logger *logging.Logger
cache *cache.Instance cache *cache.Instance
} }
func NewInstance(db database.Pool, tracer *tracing.Tracer, logger *slog.Logger) *Instance { func NewInstance(db database.Pool, tracer *tracing.Tracer, logger *logging.Logger) *Instance {
b := &Instance{ b := &Instance{
db: db, db: db,
tracer: tracer, tracer: tracer,

View File

@@ -1,13 +1,13 @@
package domain package domain
import ( import (
"github.com/zitadel/zitadel/backend/repository"
"github.com/zitadel/zitadel/backend/repository/event"
"github.com/zitadel/zitadel/backend/repository/sql"
"github.com/zitadel/zitadel/backend/repository/telemetry/logged"
"github.com/zitadel/zitadel/backend/repository/telemetry/traced"
"github.com/zitadel/zitadel/backend/storage/database" "github.com/zitadel/zitadel/backend/storage/database"
"github.com/zitadel/zitadel/backend/storage/eventstore" "github.com/zitadel/zitadel/backend/storage/eventstore"
"github.com/zitadel/zitadel/backend/storage/repository"
"github.com/zitadel/zitadel/backend/storage/repository/event"
"github.com/zitadel/zitadel/backend/storage/repository/sql"
"github.com/zitadel/zitadel/backend/storage/repository/telemetry/logged"
"github.com/zitadel/zitadel/backend/storage/repository/telemetry/traced"
) )
func (b *Instance) userCommandRepo(tx database.Transaction) repository.UserRepository { func (b *Instance) userCommandRepo(tx database.Transaction) repository.UserRepository {

View File

@@ -4,8 +4,8 @@ import (
"context" "context"
"sync" "sync"
"github.com/zitadel/zitadel/backend/repository"
"github.com/zitadel/zitadel/backend/storage/cache" "github.com/zitadel/zitadel/backend/storage/cache"
"github.com/zitadel/zitadel/backend/storage/repository"
) )
type Instance struct { type Instance struct {

View File

@@ -3,8 +3,8 @@ package cache
import ( import (
"context" "context"
"github.com/zitadel/zitadel/backend/repository"
"github.com/zitadel/zitadel/backend/storage/cache" "github.com/zitadel/zitadel/backend/storage/cache"
"github.com/zitadel/zitadel/backend/storage/repository"
) )
type User struct { type User struct {

View File

@@ -3,8 +3,8 @@ package event
import ( import (
"context" "context"
"github.com/zitadel/zitadel/backend/repository"
"github.com/zitadel/zitadel/backend/storage/eventstore" "github.com/zitadel/zitadel/backend/storage/eventstore"
"github.com/zitadel/zitadel/backend/storage/repository"
) )
var _ repository.InstanceRepository = (*Instance)(nil) var _ repository.InstanceRepository = (*Instance)(nil)

View File

@@ -3,8 +3,8 @@ package event
import ( import (
"context" "context"
"github.com/zitadel/zitadel/backend/repository"
"github.com/zitadel/zitadel/backend/storage/eventstore" "github.com/zitadel/zitadel/backend/storage/eventstore"
"github.com/zitadel/zitadel/backend/storage/repository"
) )
var _ repository.UserRepository = (*User)(nil) var _ repository.UserRepository = (*User)(nil)

View File

@@ -0,0 +1,5 @@
package repository
type Handler interface {
SetNext(next Handler) Handler
}

View File

@@ -3,12 +3,28 @@ package repository
import "context" import "context"
type InstanceRepository interface { type InstanceRepository interface {
SetUp(ctx context.Context, instance *Instance) error InstanceSetuper
ByID(ctx context.Context, id string) (*Instance, error) instanceByIDQuerier
ByDomain(ctx context.Context, domain string) (*Instance, error) instanceByDomainQuerier
} }
type Instance struct { type Instance struct {
ID string ID string
Name string Name string
} }
type InstanceSetuper interface {
SetUp(ctx context.Context, instance *Instance) error
}
type instanceByIDQuerier interface {
ByID(ctx context.Context, id string) (*Instance, error)
}
type instanceByDomainQuerier interface {
ByDomain(ctx context.Context, domain string) (*Instance, error)
}
type InstanceLister interface {
List(ctx context.Context) ([]*Instance, error)
}

View File

@@ -3,8 +3,8 @@ package sql
import ( import (
"context" "context"
"github.com/zitadel/zitadel/backend/repository"
"github.com/zitadel/zitadel/backend/storage/database" "github.com/zitadel/zitadel/backend/storage/database"
"github.com/zitadel/zitadel/backend/storage/repository"
) )
func NewInstance(client database.QueryExecutor) repository.InstanceRepository { func NewInstance(client database.QueryExecutor) repository.InstanceRepository {

View File

@@ -3,8 +3,8 @@ package sql
import ( import (
"context" "context"
"github.com/zitadel/zitadel/backend/repository"
"github.com/zitadel/zitadel/backend/storage/database" "github.com/zitadel/zitadel/backend/storage/database"
"github.com/zitadel/zitadel/backend/storage/repository"
) )
func NewUser(client database.QueryExecutor) repository.UserRepository { func NewUser(client database.QueryExecutor) repository.UserRepository {

View File

@@ -4,16 +4,17 @@ import (
"context" "context"
"log/slog" "log/slog"
"github.com/zitadel/zitadel/backend/storage/repository" "github.com/zitadel/zitadel/backend/repository"
"github.com/zitadel/zitadel/backend/telemetry/logging"
) )
type Instance struct { type Instance struct {
*slog.Logger *logging.Logger
next repository.InstanceRepository next repository.InstanceRepository
} }
func NewInstance(logger *slog.Logger, next repository.InstanceRepository) *Instance { func NewInstance(logger *logging.Logger, next repository.InstanceRepository) *Instance {
return &Instance{Logger: logger, next: next} return &Instance{Logger: logger, next: next}
} }

View File

@@ -4,32 +4,33 @@ import (
"context" "context"
"log/slog" "log/slog"
"github.com/zitadel/zitadel/backend/storage/repository" "github.com/zitadel/zitadel/backend/repository"
"github.com/zitadel/zitadel/backend/telemetry/logging"
) )
type User struct { type User struct {
*slog.Logger logger *logging.Logger
next repository.UserRepository next repository.UserRepository
} }
func NewUser(logger *slog.Logger, next repository.UserRepository) *User { func NewUser(logger *logging.Logger, next repository.UserRepository) *User {
return &User{Logger: logger, next: next} return &User{logger: logger, next: next}
} }
var _ repository.UserRepository = (*User)(nil) var _ repository.UserRepository = (*User)(nil)
func (i *User) ByID(ctx context.Context, id string) (*repository.User, error) { func (i *User) ByID(ctx context.Context, id string) (*repository.User, error) {
i.Logger.InfoContext(ctx, "By ID Query", slog.String("id", id)) i.logger.InfoContext(ctx, "By ID Query", slog.String("id", id))
return i.next.ByID(ctx, id) return i.next.ByID(ctx, id)
} }
func (i *User) Create(ctx context.Context, user *repository.User) error { func (i *User) Create(ctx context.Context, user *repository.User) error {
err := i.next.Create(ctx, user) err := i.next.Create(ctx, user)
if err != nil { if err != nil {
i.Logger.ErrorContext(ctx, "Failed to create user", slog.Any("user", user), slog.Any("cause", err)) i.logger.ErrorContext(ctx, "Failed to create user", slog.Any("user", user), slog.Any("cause", err))
return err return err
} }
i.Logger.InfoContext(ctx, "User created successfully", slog.Any("user", user)) i.logger.InfoContext(ctx, "User created successfully", slog.Any("user", user))
return nil return nil
} }

View File

@@ -3,7 +3,7 @@ package traced
import ( import (
"context" "context"
"github.com/zitadel/zitadel/backend/storage/repository" "github.com/zitadel/zitadel/backend/repository"
"github.com/zitadel/zitadel/backend/telemetry/tracing" "github.com/zitadel/zitadel/backend/telemetry/tracing"
) )

View File

@@ -3,7 +3,7 @@ package traced
import ( import (
"context" "context"
"github.com/zitadel/zitadel/backend/storage/repository" "github.com/zitadel/zitadel/backend/repository"
"github.com/zitadel/zitadel/backend/telemetry/tracing" "github.com/zitadel/zitadel/backend/telemetry/tracing"
) )

View File

@@ -0,0 +1,7 @@
package logging
import "log/slog"
type Logger struct {
*slog.Logger
}