Yimaru-BackEnd/internal/repository/shop_bet.go

167 lines
4.9 KiB
Go

package repository
import (
"context"
"fmt"
dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db"
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
"github.com/jackc/pgx/v5/pgtype"
"go.uber.org/zap"
)
func convertDBShopBet(bet dbgen.ShopBet) domain.ShopBet {
return domain.ShopBet{
ID: bet.ID,
ShopTransactionID: bet.ShopTransactionID,
CashoutID: bet.CashoutID,
CashedOut: bet.CashedOut,
BetID: bet.BetID,
NumberOfOutcomes: bet.NumberOfOutcomes,
}
}
func convertDBShopBetDetail(bet dbgen.ShopBetDetail) domain.ShopBetDetail {
var outcomes []domain.BetOutcome = make([]domain.BetOutcome, 0, len(bet.Outcomes))
for _, outcome := range bet.Outcomes {
outcomes = append(outcomes, domain.ConvertDBBetOutcomes(outcome))
}
return domain.ShopBetDetail{
ID: bet.ID,
ShopTransactionID: bet.ShopTransactionID,
TotalOdds: bet.TotalOdds,
BranchID: bet.BranchID,
CompanyID: bet.CompanyID,
FullName: bet.CustomerFullName,
PhoneNumber: bet.CustomerPhoneNumber,
CashoutID: bet.CashoutID,
CashedOut: bet.CashedOut,
BetID: bet.BetID,
NumberOfOutcomes: bet.NumberOfOutcomes,
Status: domain.OutcomeStatus(bet.Status),
Amount: domain.Currency(bet.Amount),
Outcomes: outcomes,
TransactionVerified: bet.TransactionVerified,
UpdatedAt: bet.UpdatedAt.Time,
CreatedAt: bet.CreatedAt.Time,
}
}
func convertCreateShopBet(bet domain.CreateShopBet) dbgen.CreateShopBetParams {
return dbgen.CreateShopBetParams{
ShopTransactionID: bet.ShopTransactionID,
CashoutID: bet.CashoutID,
BetID: bet.BetID,
NumberOfOutcomes: bet.NumberOfOutcomes,
}
}
func (s *Store) CreateShopBet(ctx context.Context, bet domain.CreateShopBet) (domain.ShopBet, error) {
newShopBet, err := s.queries.CreateShopBet(ctx, convertCreateShopBet(bet))
if err != nil {
return domain.ShopBet{}, err
}
return convertDBShopBet(newShopBet), err
}
func (s *Store) GetAllShopBet(ctx context.Context, filter domain.ShopBetFilter) ([]domain.ShopBetDetail, error) {
bets, err := s.queries.GetAllShopBets(ctx, dbgen.GetAllShopBetsParams{
BranchID: pgtype.Int8{
Int64: filter.BranchID.Value,
Valid: filter.BranchID.Valid,
},
CompanyID: pgtype.Int8{
Int64: filter.CompanyID.Value,
Valid: filter.CompanyID.Valid,
},
Query: pgtype.Text{
String: filter.Query.Value,
Valid: filter.Query.Valid,
},
CreatedBefore: pgtype.Timestamp{
Time: filter.CreatedBefore.Value,
Valid: filter.CreatedBefore.Valid,
},
CreatedAfter: pgtype.Timestamp{
Time: filter.CreatedAfter.Value,
Valid: filter.CreatedAfter.Valid,
},
})
if err != nil {
return nil, err
}
var result []domain.ShopBetDetail = make([]domain.ShopBetDetail, 0, len(bets))
for _, bet := range bets {
result = append(result, convertDBShopBetDetail(bet))
}
return result, nil
}
func (s *Store) GetShopBetByID(ctx context.Context, id int64) (domain.ShopBetDetail, error) {
bet, err := s.queries.GetShopBetByID(ctx, id)
if err != nil {
fmt.Printf("GetShopBetByID Repo BetID %d err %v \n", id, err.Error())
return domain.ShopBetDetail{}, err
}
return convertDBShopBetDetail(bet), nil
}
func (s *Store) GetShopBetByBetID(ctx context.Context, betID int64) (domain.ShopBetDetail, error) {
bet, err := s.queries.GetShopBetByBetID(ctx, betID)
if err != nil {
return domain.ShopBetDetail{}, err
}
return convertDBShopBetDetail(bet), nil
}
func (s *Store) GetShopBetByCashoutID(ctx context.Context, cashoutID string) (domain.ShopBetDetail, error) {
bet, err := s.queries.GetShopBetByCashoutID(ctx, cashoutID)
if err != nil {
return domain.ShopBetDetail{}, err
}
return convertDBShopBetDetail(bet), nil
}
func (s *Store) GetShopBetByShopTransactionID(ctx context.Context, shopTransactionID int64) (domain.ShopBetDetail, error) {
bet, err := s.queries.GetShopBetByShopTransactionID(ctx, shopTransactionID)
if err != nil {
return domain.ShopBetDetail{}, err
}
return convertDBShopBetDetail(bet), nil
}
func (s *Store) UpdateShopBetCashOut(ctx context.Context, id int64, cashedOut bool) error {
err := s.queries.UpdateShopBetCashOut(ctx, dbgen.UpdateShopBetCashOutParams{
ID: id,
CashedOut: cashedOut,
})
if err != nil {
domain.MongoDBLogger.Error("failed to update cashout",
zap.Int64("id", id),
zap.Bool("cashed_out", cashedOut),
zap.Error(err),
)
}
return err
}
func (s *Store) UpdateShopBetCashoutID(ctx context.Context, id int64, cashoutID string) error {
err := s.queries.UpdateShopBetCashoutID(ctx, dbgen.UpdateShopBetCashoutIDParams{
ID: id,
CashoutID: cashoutID,
})
if err != nil {
domain.MongoDBLogger.Error("failed to update cashout_id",
zap.Int64("id", id),
zap.String("cashout_id", cashoutID),
zap.Error(err),
)
}
return err
}