package repository import ( "context" dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db" "github.com/SamuelTariku/FortuneBet-Backend/internal/domain" "github.com/SamuelTariku/FortuneBet-Backend/internal/ports" ) // Interface for creating new referral store func NewReferralStore(s *Store) ports.ReferralStore { return s } func (s *Store) CreateReferralCode(ctx context.Context, referralCode domain.CreateReferralCode) (domain.ReferralCode, error) { newReferralCode, err := s.queries.CreateReferralCode(ctx, domain.ConvertCreateReferralCode(referralCode)) if err != nil { return domain.ReferralCode{}, err } return domain.ConvertDBReferralCode(newReferralCode), nil } func (s *Store) CreateUserReferral(ctx context.Context, referral domain.CreateUserReferrals) (domain.UserReferral, error) { newReferral, err := s.queries.CreateUserReferral(ctx, domain.ConvertCreateUserReferral(referral)) if err != nil { return domain.UserReferral{}, err } return domain.ConvertDBUserReferral(newReferral), nil } func (s *Store) GetReferralCodesByUser(ctx context.Context, userID int64) ([]domain.ReferralCode, error) { codes, err := s.queries.GetReferralCodeByUser(ctx, userID) if err != nil { return nil, err } return domain.ConvertDBReferralCodes(codes), nil } func (s *Store) GetReferralCode(ctx context.Context, code string) (domain.ReferralCode, error) { referralCode, err := s.queries.GetReferralCode(ctx, code) if err != nil { return domain.ReferralCode{}, err } return domain.ConvertDBReferralCode(referralCode), nil } func (s *Store) UpdateReferralCode(ctx context.Context, referral domain.UpdateReferralCode) error { err := s.queries.UpdateReferralCode(ctx, domain.ConvertUpdateReferralCode(referral)) if err != nil { return err } return nil } func (s *Store) GetReferralStats(ctx context.Context, userID int64, companyID int64) (domain.ReferralStats, error) { stats, err := s.queries.GetReferralStats(ctx, dbgen.GetReferralStatsParams{ ReferrerID: userID, CompanyID: companyID, }) if err != nil { return domain.ReferralStats{}, err } return domain.ConvertDBReferralStats(stats), nil } func (s *Store) GetUserReferral(ctx context.Context, referredID int64) (domain.UserReferral, error) { dbReferral, err := s.queries.GetUserReferral(ctx, referredID) if err != nil { return domain.UserReferral{}, err } return domain.ConvertDBUserReferral(dbReferral), nil } func (s *Store) GetUserReferralsByCode(ctx context.Context, code string) ([]domain.UserReferral, error) { dbReferrals, err := s.queries.GetUserReferralsByCode(ctx, code) if err != nil { return nil, err } return domain.ConvertDBUserReferrals(dbReferrals), nil } func (s *Store) GetUserReferralCount(ctx context.Context, referrerID int64) (int64, error) { count, err := s.queries.GetUserReferralsCount(ctx, referrerID) if err != nil { return 0, err } return count, nil }