mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-11 23:47:33 +00:00
chain of responsibilities
This commit is contained in:
21
backend/domain/factory/instance.go
Normal file
21
backend/domain/factory/instance.go
Normal 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)
|
||||||
|
}
|
||||||
|
}
|
@@ -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,
|
||||||
|
@@ -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 {
|
||||||
|
@@ -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 {
|
@@ -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 {
|
@@ -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)
|
@@ -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)
|
5
backend/repository/handler.go
Normal file
5
backend/repository/handler.go
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
package repository
|
||||||
|
|
||||||
|
type Handler interface {
|
||||||
|
SetNext(next Handler) Handler
|
||||||
|
}
|
@@ -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)
|
||||||
|
}
|
@@ -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 {
|
@@ -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 {
|
@@ -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}
|
||||||
}
|
}
|
||||||
|
|
@@ -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
|
||||||
}
|
}
|
@@ -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"
|
||||||
)
|
)
|
||||||
|
|
@@ -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"
|
||||||
)
|
)
|
||||||
|
|
7
backend/telemetry/logging/logger.go
Normal file
7
backend/telemetry/logging/logger.go
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
package logging
|
||||||
|
|
||||||
|
import "log/slog"
|
||||||
|
|
||||||
|
type Logger struct {
|
||||||
|
*slog.Logger
|
||||||
|
}
|
Reference in New Issue
Block a user