From 094d7b5e21186a179b2036c86eca820ac509b6e7 Mon Sep 17 00:00:00 2001 From: Diyor Khaydarov Date: Sun, 2 Mar 2025 22:58:09 +0500 Subject: [PATCH] refactor: passport repository --- .../entities/passport/passport_repository.go | 4 ++- .../persistence/passport_repository.go | 33 +++++++++++++++++++ .../persistence/client_repository.go | 19 ++--------- 3 files changed, 38 insertions(+), 18 deletions(-) diff --git a/modules/core/domain/entities/passport/passport_repository.go b/modules/core/domain/entities/passport/passport_repository.go index 39232353..0d6151a8 100644 --- a/modules/core/domain/entities/passport/passport_repository.go +++ b/modules/core/domain/entities/passport/passport_repository.go @@ -7,9 +7,11 @@ import ( ) type PassportRepository interface { - Create(ctx context.Context, data Passport) (Passport, error) GetByID(ctx context.Context, id uuid.UUID) (Passport, error) GetByPassportNumber(ctx context.Context, series, number string) (Passport, error) + Exists(ctx context.Context, id uuid.UUID) (bool, error) + Save(ctx context.Context, data Passport) (Passport, error) // Create or Update + Create(ctx context.Context, data Passport) (Passport, error) Update(ctx context.Context, id uuid.UUID, data Passport) (Passport, error) Delete(ctx context.Context, id uuid.UUID) error } diff --git a/modules/core/infrastructure/persistence/passport_repository.go b/modules/core/infrastructure/persistence/passport_repository.go index ceab87be..f68f3b95 100644 --- a/modules/core/infrastructure/persistence/passport_repository.go +++ b/modules/core/infrastructure/persistence/passport_repository.go @@ -154,6 +154,39 @@ func (r *PassportRepository) queryPassports(ctx context.Context, query string, a return passports, nil } +func (r *PassportRepository) Exists(ctx context.Context, id uuid.UUID) (bool, error) { + return r.exists(ctx, id.String()) +} + +func (r *PassportRepository) exists(ctx context.Context, id string) (bool, error) { + pool, err := composables.UseTx(ctx) + if err != nil { + return false, err + } + + var exists bool + err = pool.QueryRow(ctx, "SELECT EXISTS(SELECT 1 FROM passports WHERE id = $1)", id).Scan(&exists) + if err != nil { + return false, err + } + + return exists, nil +} + +func (r *PassportRepository) Save(ctx context.Context, data passport.Passport) (passport.Passport, error) { + if data.ID() == uuid.Nil { + return r.Create(ctx, data) + } + exists, err := r.exists(ctx, data.ID().String()) + if err != nil { + return nil, err + } + if !exists { + return r.Create(ctx, data) + } + return r.Update(ctx, data.ID(), data) +} + func (r *PassportRepository) Create(ctx context.Context, data passport.Passport) (passport.Passport, error) { pool, err := composables.UseTx(ctx) if err != nil { diff --git a/modules/crm/infrastructure/persistence/client_repository.go b/modules/crm/infrastructure/persistence/client_repository.go index b1c7a94c..9d9a36bf 100644 --- a/modules/crm/infrastructure/persistence/client_repository.go +++ b/modules/crm/infrastructure/persistence/client_repository.go @@ -8,7 +8,6 @@ import ( "github.com/google/uuid" "github.com/iota-uz/iota-sdk/modules/core/domain/entities/passport" - corepersistence "github.com/iota-uz/iota-sdk/modules/core/infrastructure/persistence" "github.com/iota-uz/iota-sdk/modules/crm/domain/aggregates/client" "github.com/iota-uz/iota-sdk/modules/crm/infrastructure/persistence/models" "github.com/iota-uz/iota-sdk/pkg/composables" @@ -179,20 +178,6 @@ func (g *ClientRepository) queryClients( return clients, nil } -func (g *ClientRepository) savePassport( - ctx context.Context, - p passport.Passport, -) (passport.Passport, error) { - if p.ID().String() == "" { - return g.passportRepo.Create(ctx, p) - } - _, err := g.passportRepo.GetByID(ctx, p.ID()) - if errors.Is(err, corepersistence.ErrPassportNotFound) { - return g.passportRepo.Create(ctx, p) - } - return g.passportRepo.Update(ctx, p.ID(), p) -} - func (g *ClientRepository) GetPaginated( ctx context.Context, params *client.FindParams, ) ([]client.Client, error) { @@ -280,7 +265,7 @@ func (g *ClientRepository) Create(ctx context.Context, data client.Client) (clie dbRow := ToDBClient(data) if data.Passport() != nil { - p, err := g.savePassport(ctx, data.Passport()) + p, err := g.passportRepo.Save(ctx, data.Passport()) if err != nil { return nil, err } @@ -319,7 +304,7 @@ func (g *ClientRepository) Update(ctx context.Context, data client.Client) (clie dbRow := ToDBClient(data) if data.Passport() != nil { - p, err := g.savePassport(ctx, data.Passport()) + p, err := g.passportRepo.Save(ctx, data.Passport()) if err != nil { return nil, err }