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 (
"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/eventstore"
"github.com/zitadel/zitadel/backend/storage/repository"
"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/logging"
"github.com/zitadel/zitadel/backend/telemetry/tracing"
)
type Instance struct {
db database.Pool
tracer *tracing.Tracer
logger *slog.Logger
logger *logging.Logger
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{
db: db,
tracer: tracer,

View File

@@ -1,13 +1,13 @@
package domain
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/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 {

View File

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

View File

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

View File

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

View File

@@ -3,8 +3,8 @@ package event
import (
"context"
"github.com/zitadel/zitadel/backend/repository"
"github.com/zitadel/zitadel/backend/storage/eventstore"
"github.com/zitadel/zitadel/backend/storage/repository"
)
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"
type InstanceRepository interface {
SetUp(ctx context.Context, instance *Instance) error
ByID(ctx context.Context, id string) (*Instance, error)
ByDomain(ctx context.Context, domain string) (*Instance, error)
InstanceSetuper
instanceByIDQuerier
instanceByDomainQuerier
}
type Instance struct {
ID 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 (
"context"
"github.com/zitadel/zitadel/backend/repository"
"github.com/zitadel/zitadel/backend/storage/database"
"github.com/zitadel/zitadel/backend/storage/repository"
)
func NewInstance(client database.QueryExecutor) repository.InstanceRepository {

View File

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

View File

@@ -4,16 +4,17 @@ import (
"context"
"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 {
*slog.Logger
*logging.Logger
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}
}

View File

@@ -4,32 +4,33 @@ import (
"context"
"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 {
*slog.Logger
logger *logging.Logger
next repository.UserRepository
}
func NewUser(logger *slog.Logger, next repository.UserRepository) *User {
return &User{Logger: logger, next: next}
func NewUser(logger *logging.Logger, next repository.UserRepository) *User {
return &User{logger: logger, next: next}
}
var _ repository.UserRepository = (*User)(nil)
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)
}
func (i *User) Create(ctx context.Context, user *repository.User) error {
err := i.next.Create(ctx, user)
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
}
i.Logger.InfoContext(ctx, "User created successfully", slog.Any("user", user))
i.logger.InfoContext(ctx, "User created successfully", slog.Any("user", user))
return nil
}

View File

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

View File

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

View File

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