package repository import ( "context" "github.com/Caknoooo/go-gin-clean-starter/database/entities" "gorm.io/gorm" ) type ( UserRepository interface { Register(ctx context.Context, tx *gorm.DB, user entities.User) (entities.User, error) GetUserById(ctx context.Context, tx *gorm.DB, userId string) (entities.User, error) GetUserByEmail(ctx context.Context, tx *gorm.DB, email string) (entities.User, error) CheckEmail(ctx context.Context, tx *gorm.DB, email string) (entities.User, bool, error) Update(ctx context.Context, tx *gorm.DB, user entities.User) (entities.User, error) Delete(ctx context.Context, tx *gorm.DB, userId string) error } userRepository struct { db *gorm.DB } ) func NewUserRepository(db *gorm.DB) UserRepository { return &userRepository{ db: db, } } func (r *userRepository) Register(ctx context.Context, tx *gorm.DB, user entities.User) (entities.User, error) { if tx == nil { tx = r.db } if err := tx.WithContext(ctx).Create(&user).Error; err != nil { return entities.User{}, err } return user, nil } func (r *userRepository) GetUserById(ctx context.Context, tx *gorm.DB, userId string) (entities.User, error) { if tx == nil { tx = r.db } var user entities.User if err := tx.WithContext(ctx).Where("id = ?", userId).Take(&user).Error; err != nil { return entities.User{}, err } return user, nil } func (r *userRepository) GetUserByEmail(ctx context.Context, tx *gorm.DB, email string) (entities.User, error) { if tx == nil { tx = r.db } var user entities.User if err := tx.WithContext(ctx).Where("email = ?", email).Take(&user).Error; err != nil { return entities.User{}, err } return user, nil } func (r *userRepository) CheckEmail(ctx context.Context, tx *gorm.DB, email string) (entities.User, bool, error) { if tx == nil { tx = r.db } var user entities.User if err := tx.WithContext(ctx).Where("email = ?", email).Take(&user).Error; err != nil { return entities.User{}, false, err } return user, true, nil } func (r *userRepository) Update(ctx context.Context, tx *gorm.DB, user entities.User) (entities.User, error) { if tx == nil { tx = r.db } if err := tx.WithContext(ctx).Updates(&user).Error; err != nil { return entities.User{}, err } return user, nil } func (r *userRepository) Delete(ctx context.Context, tx *gorm.DB, userId string) error { if tx == nil { tx = r.db } if err := tx.WithContext(ctx).Delete(&entities.User{}, "id = ?", userId).Error; err != nil { return err } return nil }