Yimaru-BackEnd/internal/domain/referal.go

187 lines
5.2 KiB
Go

package domain
import (
"time"
dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db"
)
type ReferralCode struct {
ID int64
ReferrerID int64
ReferralCode string
CompanyID int64
NumberOfReferrals int64
RewardAmount Currency
CreatedAt time.Time
UpdatedAt time.Time
}
type ReferralCodeRes struct {
ID int64 `json:"id"`
ReferrerID int64 `json:"referrer_id"`
ReferralCode string `json:"referral_code"`
CompanyID int64 `json:"company_id"`
NumberOfReferrals int64 `json:"number_of_referrals"`
RewardAmount float32 `json:"reward_amount"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
type CreateReferralCode struct {
ReferrerID int64
ReferralCode string
CompanyID int64
NumberOfReferrals int64
RewardAmount Currency
}
type UserReferral struct {
ReferredID int64
ReferralCodeID int64
}
type CreateUserReferrals struct {
ReferredID int64
ReferralCodeID int64
}
type UpdateReferralCode struct {
ID int64
IsActive bool
ReferralCode string
RewardAmount Currency
NumberOfReferrals int64
}
type ReferralStats struct {
TotalReferrals int64
TotalRewardEarned Currency
}
type ReferralStatsRes struct {
TotalReferrals int64 `json:"total_referrals"`
TotalRewardEarned float32 `json:"total_reward_earned"`
}
// type ReferralSettings struct {
// ID int64
// ReferralRewardAmount float64
// CashbackPercentage float64
// BetReferralBonusPercentage float64
// MaxReferrals int32
// ExpiresAfterDays int32
// UpdatedBy string
// CreatedAt time.Time
// UpdatedAt time.Time
// Version int32
// }
// type ReferralSettingsReq struct {
// ReferralRewardAmount float64 `json:"referral_reward_amount" validate:"required"`
// CashbackPercentage float64 `json:"cashback_percentage" validate:"required"`
// MaxReferrals int32 `json:"max_referrals" validate:"required"`
// UpdatedBy string `json:"updated_by" validate:"required"`
// }
func ConvertCreateReferralCode(code CreateReferralCode) dbgen.CreateReferralCodeParams {
return dbgen.CreateReferralCodeParams{
ReferralCode: code.ReferralCode,
ReferrerID: code.ReferrerID,
CompanyID: code.CompanyID,
NumberOfReferrals: code.NumberOfReferrals,
RewardAmount: int64(code.RewardAmount),
}
}
func ConvertDBReferralCode(code dbgen.ReferralCode) ReferralCode {
return ReferralCode{
ID: code.ID,
ReferrerID: code.ReferrerID,
ReferralCode: code.ReferralCode,
NumberOfReferrals: code.NumberOfReferrals,
RewardAmount: Currency(code.RewardAmount),
CompanyID: code.CompanyID,
CreatedAt: code.CreatedAt.Time,
UpdatedAt: code.UpdatedAt.Time,
}
}
func ConvertDBReferralCodes(codes []dbgen.ReferralCode) []ReferralCode {
result := make([]ReferralCode, len(codes))
for i, code := range codes {
result[i] = ConvertDBReferralCode(code)
}
return result
}
func ConvertCreateUserReferral(referral CreateUserReferrals) dbgen.CreateUserReferralParams {
return dbgen.CreateUserReferralParams{
ReferredID: referral.ReferredID,
ReferralCodeID: referral.ReferralCodeID,
}
}
func ConvertDBUserReferral(referral dbgen.UserReferral) UserReferral {
return UserReferral{
ReferredID: referral.ReferredID,
ReferralCodeID: referral.ReferralCodeID,
}
}
func ConvertDBUserReferrals(referrals []dbgen.UserReferral) []UserReferral {
result := make([]UserReferral, len(referrals))
for i, referral := range referrals {
result[i] = ConvertDBUserReferral(referral)
}
return result
}
func ConvertUpdateReferralCode(referralCode UpdateReferralCode) dbgen.UpdateReferralCodeParams {
return dbgen.UpdateReferralCodeParams{
ID: referralCode.ID,
IsActive: referralCode.IsActive,
ReferralCode: referralCode.ReferralCode,
NumberOfReferrals: referralCode.NumberOfReferrals,
RewardAmount: int64(referralCode.RewardAmount),
}
}
func ConvertDBReferralStats(stats dbgen.GetReferralStatsRow) ReferralStats {
return ReferralStats{
TotalReferrals: stats.TotalReferrals,
TotalRewardEarned: Currency(stats.TotalRewardEarned),
}
}
func ConvertReferralCodeRes(referral ReferralCode) ReferralCodeRes {
return ReferralCodeRes{
ID: referral.ID,
ReferrerID: referral.ReferrerID,
ReferralCode: referral.ReferralCode,
CompanyID: referral.CompanyID,
NumberOfReferrals: referral.NumberOfReferrals,
RewardAmount: referral.RewardAmount.Float32(),
CreatedAt: referral.CreatedAt,
UpdatedAt: referral.UpdatedAt,
}
}
func ConvertReferralCodeResList(referrals []ReferralCode) []ReferralCodeRes {
result := make([]ReferralCodeRes, len(referrals))
for i, referral := range referrals {
result[i] = ConvertReferralCodeRes(referral)
}
return result
}
func ConvertReferralStatsRes(stats ReferralStats) ReferralStatsRes {
return ReferralStatsRes{
TotalReferrals: stats.TotalReferrals,
TotalRewardEarned: stats.TotalRewardEarned.Float32(),
}
}