Yimaru-BackEnd/internal/repository/referal.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
}