100 lines
2.8 KiB
Go
100 lines
2.8 KiB
Go
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
|
|
}
|