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) { if db == nil { db = r.db } 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 }