186 lines
6.1 KiB
Go
186 lines
6.1 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
|
|
dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db"
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
|
)
|
|
|
|
type ReferralRepository interface {
|
|
CreateReferralCode(ctx context.Context, referralCode domain.CreateReferralCode) (domain.ReferralCode, error)
|
|
CreateUserReferral(ctx context.Context, referral domain.CreateUserReferrals) (domain.UserReferral, error)
|
|
GetReferralCodesByUser(ctx context.Context, userID int64) ([]domain.ReferralCode, error)
|
|
GetReferralCode(ctx context.Context, code string) (domain.ReferralCode, error)
|
|
UpdateReferralCode(ctx context.Context, referral domain.UpdateReferralCode) error
|
|
GetReferralStats(ctx context.Context, userID int64, companyID int64) (domain.ReferralStats, error)
|
|
GetUserReferral(ctx context.Context, referredID int64) (domain.UserReferral, error)
|
|
GetUserReferralsByCode(ctx context.Context, code string) ([]domain.UserReferral, error)
|
|
GetUserReferralCount(ctx context.Context, referrerID int64) (int64, error)
|
|
}
|
|
|
|
type ReferralRepo struct {
|
|
store *Store
|
|
}
|
|
|
|
func NewReferralRepository(store *Store) ReferralRepository {
|
|
return &ReferralRepo{store: store}
|
|
}
|
|
|
|
func (r *ReferralRepo) CreateReferralCode(ctx context.Context, referralCode domain.CreateReferralCode) (domain.ReferralCode, error) {
|
|
newReferralCode, err := r.store.queries.CreateReferralCode(ctx, domain.ConvertCreateReferralCode(referralCode))
|
|
|
|
if err != nil {
|
|
return domain.ReferralCode{}, err
|
|
}
|
|
return domain.ConvertDBReferralCode(newReferralCode), nil
|
|
}
|
|
|
|
func (r *ReferralRepo) CreateUserReferral(ctx context.Context, referral domain.CreateUserReferrals) (domain.UserReferral, error) {
|
|
newReferral, err := r.store.queries.CreateUserReferral(ctx, domain.ConvertCreateUserReferral(referral))
|
|
|
|
if err != nil {
|
|
return domain.UserReferral{}, err
|
|
}
|
|
|
|
return domain.ConvertDBUserReferral(newReferral), nil
|
|
}
|
|
|
|
func (r *ReferralRepo) GetReferralCodesByUser(ctx context.Context, userID int64) ([]domain.ReferralCode, error) {
|
|
codes, err := r.store.queries.GetReferralCodeByUser(ctx, userID)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return domain.ConvertDBReferralCodes(codes), nil
|
|
}
|
|
|
|
func (r *ReferralRepo) GetReferralCode(ctx context.Context, code string) (domain.ReferralCode, error) {
|
|
referralCode, err := r.store.queries.GetReferralCode(ctx, code)
|
|
|
|
if err != nil {
|
|
return domain.ReferralCode{}, err
|
|
}
|
|
|
|
return domain.ConvertDBReferralCode(referralCode), nil
|
|
|
|
}
|
|
func (r *ReferralRepo) UpdateReferralCode(ctx context.Context, referral domain.UpdateReferralCode) error {
|
|
err := r.store.queries.UpdateReferralCode(ctx, domain.ConvertUpdateReferralCode(referral))
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (r *ReferralRepo) GetReferralStats(ctx context.Context, userID int64, companyID int64) (domain.ReferralStats, error) {
|
|
stats, err := r.store.queries.GetReferralStats(ctx, dbgen.GetReferralStatsParams{
|
|
ReferrerID: userID,
|
|
CompanyID: companyID,
|
|
})
|
|
if err != nil {
|
|
return domain.ReferralStats{}, err
|
|
}
|
|
|
|
return domain.ConvertDBReferralStats(stats), nil
|
|
}
|
|
|
|
func (r *ReferralRepo) GetUserReferral(ctx context.Context, referredID int64) (domain.UserReferral, error) {
|
|
dbReferral, err := r.store.queries.GetUserReferral(ctx, referredID)
|
|
if err != nil {
|
|
return domain.UserReferral{}, err
|
|
}
|
|
return domain.ConvertDBUserReferral(dbReferral), nil
|
|
}
|
|
|
|
func (r *ReferralRepo) GetUserReferralsByCode(ctx context.Context, code string) ([]domain.UserReferral, error) {
|
|
dbReferrals, err := r.store.queries.GetUserReferralsByCode(ctx, code)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return domain.ConvertDBUserReferrals(dbReferrals), nil
|
|
}
|
|
|
|
func (r *ReferralRepo) GetUserReferralCount(ctx context.Context, referrerID int64) (int64, error) {
|
|
count, err := r.store.queries.GetUserReferralsCount(ctx, referrerID)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return count, nil
|
|
}
|
|
|
|
// func (r *ReferralRepo) mapToDomainReferral(dbRef *dbgen.Referral) *domain.Referral {
|
|
// var referredID *int64
|
|
// if dbRef.ReferredID.Valid {
|
|
// referredID = &dbRef.ReferredID.Int64
|
|
// }
|
|
|
|
// rewardAmount := 0.0
|
|
// if dbRef.RewardAmount.Valid {
|
|
// if f8, err := dbRef.RewardAmount.Float64Value(); err == nil {
|
|
// rewardAmount = f8.Float64
|
|
// }
|
|
// }
|
|
|
|
// cashbackAmount := 0.0
|
|
// if dbRef.CashbackAmount.Valid {
|
|
// if f8, err := dbRef.CashbackAmount.Float64Value(); err == nil {
|
|
// cashbackAmount = f8.Float64
|
|
// }
|
|
// }
|
|
|
|
// return &domain.Referral{
|
|
// ID: dbRef.ID,
|
|
// ReferralCode: dbRef.ReferralCode,
|
|
// ReferrerID: dbRef.ReferrerID,
|
|
// ReferredID: referredID,
|
|
// Status: domain.ReferralStatus(dbRef.Status),
|
|
// RewardAmount: rewardAmount,
|
|
// CashbackAmount: cashbackAmount,
|
|
// CreatedAt: dbRef.CreatedAt.Time,
|
|
// UpdatedAt: dbRef.UpdatedAt.Time,
|
|
// ExpiresAt: dbRef.ExpiresAt.Time,
|
|
// }
|
|
// }
|
|
|
|
// func (r *ReferralRepo) mapToDomainSettings(dbSettings *dbgen.ReferralSetting) *domain.ReferralSettings {
|
|
// rewardAmount := 0.0
|
|
// if dbSettings.ReferralRewardAmount.Valid {
|
|
// if f8, err := dbSettings.ReferralRewardAmount.Float64Value(); err == nil {
|
|
// rewardAmount = f8.Float64
|
|
// }
|
|
// }
|
|
|
|
// cashbackPercentage := 0.0
|
|
// if dbSettings.CashbackPercentage.Valid {
|
|
// if f8, err := dbSettings.CashbackPercentage.Float64Value(); err == nil {
|
|
// cashbackPercentage = f8.Float64
|
|
// }
|
|
// }
|
|
|
|
// betReferralBonusPercentage := 0.0
|
|
// if dbSettings.BetReferralBonusPercentage.Valid {
|
|
// if f8, err := dbSettings.BetReferralBonusPercentage.Float64Value(); err == nil {
|
|
// betReferralBonusPercentage = f8.Float64
|
|
// }
|
|
// }
|
|
|
|
// return &domain.ReferralSettings{
|
|
// ID: dbSettings.ID,
|
|
// ReferralRewardAmount: rewardAmount,
|
|
// CashbackPercentage: cashbackPercentage,
|
|
// BetReferralBonusPercentage: betReferralBonusPercentage, // New field
|
|
// MaxReferrals: dbSettings.MaxReferrals,
|
|
// ExpiresAfterDays: dbSettings.ExpiresAfterDays,
|
|
// UpdatedBy: dbSettings.UpdatedBy,
|
|
// CreatedAt: dbSettings.CreatedAt.Time,
|
|
// UpdatedAt: dbSettings.UpdatedAt.Time,
|
|
// Version: dbSettings.Version,
|
|
// }
|
|
// }
|