2024-06-05 00:24:53 +07:00

75 lines
2.1 KiB
Go

package repository
import (
"context"
"furtuna-be/internal/common/logger"
"furtuna-be/internal/entity"
"go.uber.org/zap"
"gorm.io/gorm"
)
type WalletRepository struct {
db *gorm.DB
}
func NewWalletRepository(db *gorm.DB) *WalletRepository {
return &WalletRepository{
db: db,
}
}
func (r *WalletRepository) Create(ctx context.Context, tx *gorm.DB, wallet *entity.Wallet) (*entity.Wallet, error) {
err := tx.Create(wallet).Error
if err != nil {
logger.ContextLogger(ctx).Error("error when creating wallet", zap.Error(err))
return nil, err
}
return wallet, nil
}
func (r *WalletRepository) Update(ctx context.Context, db *gorm.DB, wallet *entity.Wallet) (*entity.Wallet, error) {
if err := db.Save(wallet).Error; err != nil {
logger.ContextLogger(ctx).Error("error when updating wallet", zap.Error(err))
return nil, err
}
return wallet, nil
}
func (r *WalletRepository) GetByPartnerID(ctx context.Context, db *gorm.DB, partnerID int64) (*entity.Wallet, error) {
wallet := new(entity.Wallet)
if err := db.WithContext(ctx).Where("partner_id = ?", partnerID).First(wallet).Error; err != nil {
logger.ContextLogger(ctx).Error("error when finding wallet by partner ID", zap.Error(err))
return nil, err
}
return wallet, nil
}
func (r *WalletRepository) GetByID(ctx context.Context, id int64) (*entity.Wallet, error) {
wallet := new(entity.Wallet)
if err := r.db.First(wallet, id).Error; err != nil {
logger.ContextLogger(ctx).Error("error when getting wallet by id", zap.Error(err))
return nil, err
}
return wallet, nil
}
func (r *WalletRepository) GetAll(ctx context.Context) ([]*entity.Wallet, error) {
var wallets []*entity.Wallet
if err := r.db.Find(&wallets).Error; err != nil {
logger.ContextLogger(ctx).Error("error when getting all wallets", zap.Error(err))
return nil, err
}
return wallets, nil
}
func (r *WalletRepository) Delete(ctx context.Context, id int64) error {
wallet := new(entity.Wallet)
wallet.ID = id
if err := r.db.Delete(wallet).Error; err != nil {
logger.ContextLogger(ctx).Error("error when deleting wallet", zap.Error(err))
return err
}
return nil
}