diff --git a/backend/domain/builder/builder.go b/backend/domain/builder/builder.go new file mode 100644 index 0000000000..c5cf23ed03 --- /dev/null +++ b/backend/domain/builder/builder.go @@ -0,0 +1,35 @@ +package builder + +import "sync" + +type builder interface { + reset() +} + +type Builder[T builder] struct { + *sync.Pool +} + +func NewBuilder[T builder](creator func() T) *Builder[T] { + if creator == nil { + creator = func() T { + var x T + return x + } + } + return &Builder[T]{ + Pool: &sync.Pool{ + New: func() any { + return creator() + }, + }, + } +} + +func (b *Builder[T]) Get() T { + return b.Pool.Get().(T) +} + +func (b *Builder[T]) Put(x T) { + b.Pool.Put(x) +} diff --git a/backend/domain/builder/instance.go b/backend/domain/builder/instance.go new file mode 100644 index 0000000000..bcf2c2ab62 --- /dev/null +++ b/backend/domain/builder/instance.go @@ -0,0 +1,54 @@ +package builder + +import ( + "context" + "log/slog" + + "github.com/zitadel/zitadel/backend/repository" + "github.com/zitadel/zitadel/backend/repository/cache" + "github.com/zitadel/zitadel/backend/telemetry/logging" + "github.com/zitadel/zitadel/backend/telemetry/tracing" +) + +type InstanceBuilder struct { + *Builder[*InstanceBuilder] + + tracer tracing.Tracer + logger *logging.Logger + cache *cache.Instance + db repository.InstanceRepository +} + +func NewInstanceBuilder() *InstanceBuilder { + return &InstanceBuilder{ + Builder: NewBuilder(func() *InstanceBuilder { + return new(InstanceBuilder) + }), + cache: new(cache.Instance), + tracer: tracing.NewTracer("instance"), + logger: &logging.Logger{Logger: slog.Default().With("service", "instance")}, + } +} + +var _ builder = (*InstanceBuilder)(nil) + +func (b *InstanceBuilder) reset() { + b.db = nil +} + +var _ repository.InstanceRepository = (*InstanceBuilder)(nil) + +// ByDomain implements repository.InstanceRepository. +func (b *InstanceBuilder) ByDomain(ctx context.Context, domain string) (*repository.Instance, error) { + panic("unimplemented") +} + +// ByID implements repository.InstanceRepository. +func (b *InstanceBuilder) ByID(ctx context.Context, id string) (*repository.Instance, error) { + panic("unimplemented") +} + +// SetUp implements repository.InstanceRepository. +func (b *InstanceBuilder) SetUp(ctx context.Context, instance *repository.Instance) error { + panic("unimplemented") +}