package repository import ( "context" "github.com/Caknoooo/go-gin-clean-starter/database/entities" "github.com/google/uuid" "gorm.io/gorm" ) type ( ClientRepository interface { Create(ctx context.Context, tx *gorm.DB, client entities.M_Client) (entities.M_Client, error) GetById(ctx context.Context, tx *gorm.DB, clientId string) (entities.M_Client, error) GetByName(ctx context.Context, tx *gorm.DB, name string) (entities.M_Client, error) Update(ctx context.Context, tx *gorm.DB, client entities.M_Client) (entities.M_Client, error) Delete(ctx context.Context, tx *gorm.DB, clientId string) error } clientRepository struct { db *gorm.DB } ) func (r *clientRepository) Create(ctx context.Context, tx *gorm.DB, client entities.M_Client) (entities.M_Client, error) { if tx == nil { tx = r.db } if client.ID == uuid.Nil { client.ID = uuid.New() } if err := tx.WithContext(ctx).Create(&client).Error; err != nil { return entities.M_Client{}, err } return client, nil } func (r *clientRepository) GetById(ctx context.Context, tx *gorm.DB, clientId string) (entities.M_Client, error) { if tx == nil { tx = r.db } var client entities.M_Client if err := tx.WithContext(ctx).First(&client, "id = ?", clientId).Error; err != nil { return entities.M_Client{}, err } return client, nil } func (r *clientRepository) GetByName(ctx context.Context, tx *gorm.DB, name string) (entities.M_Client, error) { if tx == nil { tx = r.db } var client entities.M_Client if err := tx.WithContext(ctx).Where("name = ?", name).First(&client).Error; err != nil { return entities.M_Client{}, err } return client, nil } func (r *clientRepository) Update(ctx context.Context, tx *gorm.DB, client entities.M_Client) (entities.M_Client, error) { if tx == nil { tx = r.db } if err := tx.WithContext(ctx).Updates(&client).Error; err != nil { return entities.M_Client{}, err } return client, nil } func (r *clientRepository) Delete(ctx context.Context, tx *gorm.DB, clientId string) error { if tx == nil { tx = r.db } if err := tx.WithContext(ctx).Delete(&entities.M_Client{}, "id = ?", clientId).Error; err != nil { return err } return nil } func NewClientRepository(db *gorm.DB) ClientRepository { return &clientRepository{db: db} }