v4 without errors

This commit is contained in:
adlerhurst
2025-04-30 09:30:48 +02:00
parent 597781b389
commit 050aa7dd48
11 changed files with 314 additions and 130 deletions

View File

@@ -15,7 +15,7 @@ var (
userCodeAlgorithm crypto.EncryptionAlgorithm
tracer tracing.Tracer
// userRepo func(database.QueryExecutor) UserRepository
userRepo func(database.QueryExecutor) UserRepository
instanceRepo func(database.QueryExecutor) InstanceRepository
cryptoRepo func(database.QueryExecutor) CryptoRepository
orgRepo func(database.QueryExecutor) OrgRepository
@@ -39,9 +39,9 @@ func SetTracer(t tracing.Tracer) {
tracer = t
}
// func SetUserRepository(repo func(database.QueryExecutor) UserRepository) {
// userRepo = repo
// }
func SetUserRepository(repo func(database.QueryExecutor) UserRepository) {
userRepo = repo
}
func SetInstanceRepository(repo func(database.QueryExecutor) InstanceRepository) {
instanceRepo = repo

View File

@@ -2,8 +2,7 @@ package domain
import (
"context"
v4 "github.com/zitadel/zitadel/backend/v3/storage/database/repository/stmt/v4"
"time"
)
type EmailVerifiedCommand struct {
@@ -27,7 +26,8 @@ var (
// Execute implements [Commander]
func (cmd *EmailVerifiedCommand) Execute(ctx context.Context, opts *CommandOpts) error {
return userRepo(opts.DB).Human().ByID(cmd.UserID).Exec().SetEmailVerified(ctx, cmd.Email.Address)
repo := userRepo(opts.DB).Human()
return repo.Update(ctx, repo.IDCondition(cmd.UserID), repo.SetEmailVerifiedAt(time.Time{}))
}
// applyOnSetEmail implements [SetEmailOpt]
@@ -78,8 +78,9 @@ func (cmd *SendCodeCommand) ensureEmail(ctx context.Context, opts *CommandOpts)
if cmd.Email != "" {
return nil
}
email, err := userRepo(opts.DB).Human().ByID(cmd.UserID).Exec().GetEmail(ctx)
if err != nil || email.IsVerified {
repo := userRepo(opts.DB).Human()
email, err := repo.GetEmail(ctx, repo.IDCondition(cmd.UserID))
if err != nil || !email.VerifiedAt.IsZero() {
return err
}
cmd.Email = email.Address
@@ -137,10 +138,9 @@ func (cmd *ReturnCodeCommand) ensureEmail(ctx context.Context, opts *CommandOpts
if cmd.Email != "" {
return nil
}
user := v4.UserRepository(opts.DB)
user.WithCondition(user.IDCondition(cmd.UserID))
email, err := user.he.GetEmail(ctx)
if err != nil || email.IsVerified {
repo := userRepo(opts.DB).Human()
email, err := repo.GetEmail(ctx, repo.IDCondition(cmd.UserID))
if err != nil || !email.VerifiedAt.IsZero() {
return err
}
cmd.Email = email.Address

View File

@@ -38,7 +38,8 @@ func (cmd *SetEmailCommand) Execute(ctx context.Context, opts *CommandOpts) erro
}
defer func() { err = close(ctx, err) }()
// userStatement(opts.DB).Human().ByID(cmd.UserID).SetEmail(ctx, cmd.Email)
err = userRepo(opts.DB).Human().ByID(cmd.UserID).Exec().SetEmail(ctx, cmd.Email)
repo := userRepo(opts.DB).Human()
err = repo.Update(ctx, repo.IDCondition(cmd.UserID), repo.SetEmailAddress(cmd.Email))
if err != nil {
return err
}
@@ -59,6 +60,6 @@ func (cmd *SetEmailCommand) Events() []*eventstore.Event {
}
// applyOnCreateHuman implements [CreateHumanOpt].
func (cmd *SetEmailCommand) applyOnCreateHuman(createUserCmd *CreateUserCommand[Human]) {
func (cmd *SetEmailCommand) applyOnCreateHuman(createUserCmd *CreateUserCommand) {
createUserCmd.email = cmd
}

View File

@@ -9,13 +9,13 @@ import (
type userColumns interface {
// TODO: move v4.columns to domain
InstanceIDColumn() column
OrgIDColumn() column
IDColumn() column
usernameColumn() column
CreatedAtColumn() column
UpdatedAtColumn() column
DeletedAtColumn() column
InstanceIDColumn() v4.Column
OrgIDColumn() v4.Column
IDColumn() v4.Column
usernameColumn() v4.Column
CreatedAtColumn() v4.Column
UpdatedAtColumn() v4.Column
DeletedAtColumn() v4.Column
}
type userConditions interface {
@@ -29,30 +29,35 @@ type userConditions interface {
DeletedAtCondition(op v4.NumberOperator, deletedAt time.Time) v4.Condition
}
type userChanges interface {
SetUsername(username string) v4.Change
}
type UserRepository interface {
userColumns
userConditions
userChanges
// TODO: move condition to domain
WithCondition(condition v4.Condition) UserRepository
Get(ctx context.Context) (*User, error)
List(ctx context.Context) ([]*User, error)
Create(ctx context.Context, user *User) error
Delete(ctx context.Context) error
Get(ctx context.Context, opts v4.QueryOption) (*User, error)
List(ctx context.Context, opts v4.QueryOption) ([]*User, error)
Delete(ctx context.Context, condition v4.Condition) error
Human() HumanRepository
Machine() MachineRepository
}
type humanColumns interface {
FirstNameColumn() column
LastNameColumn() column
EmailAddressColumn() column
EmailVerifiedAtColumn() column
PhoneNumberColumn() column
PhoneVerifiedAtColumn() column
userColumns
FirstNameColumn() v4.Column
LastNameColumn() v4.Column
EmailAddressColumn() v4.Column
EmailVerifiedAtColumn() v4.Column
PhoneNumberColumn() v4.Column
PhoneVerifiedAtColumn() v4.Column
}
type humanConditions interface {
userConditions
FirstNameCondition(op v4.TextOperator, firstName string) v4.Condition
LastNameCondition(op v4.TextOperator, lastName string) v4.Condition
EmailAddressCondition(op v4.TextOperator, email string) v4.Condition
@@ -63,26 +68,53 @@ type humanConditions interface {
PhoneVerifiedAtCondition(op v4.TextOperator, phoneVerifiedAt string) v4.Condition
}
type humanChanges interface {
userChanges
SetFirstName(firstName string) v4.Change
SetLastName(lastName string) v4.Change
SetEmail(address string, verified *time.Time) v4.Change
SetEmailAddress(email string) v4.Change
SetEmailVerifiedAt(emailVerifiedAt time.Time) v4.Change
SetPhone(number string, verifiedAt *time.Time) v4.Change
SetPhoneNumber(phoneNumber string) v4.Change
SetPhoneVerifiedAt(phoneVerifiedAt time.Time) v4.Change
}
type HumanRepository interface {
humanColumns
humanConditions
humanChanges
GetEmail(ctx context.Context) (*Email, error)
GetEmail(ctx context.Context, condition v4.Condition) (*Email, error)
// TODO: replace any with add email update columns
SetEmail(ctx context.Context, columns ...any) error
Create(ctx context.Context, user *User) error
Update(ctx context.Context, condition v4.Condition, changes ...v4.Change) error
}
type machineColumns interface {
DescriptionColumn() column
userColumns
DescriptionColumn() v4.Column
}
type machineConditions interface {
userConditions
DescriptionCondition(op v4.TextOperator, description string) v4.Condition
}
type machineChanges interface {
userChanges
SetDescription(description string) v4.Change
}
type MachineRepository interface {
machineColumns
machineConditions
machineChanges
Create(ctx context.Context, user *User) error
Update(ctx context.Context, condition v4.Condition, changes ...v4.Change) error
}
// type UserRepository interface {
@@ -171,6 +203,11 @@ type User struct {
v4.User
}
type Email struct {
v4.Email
IsVerified bool
}
// type userTraits interface {
// isUserTraits()
// }