merge fixes and handler dependency injection
This commit is contained in:
parent
fa3b6a24d3
commit
fcd926223a
|
|
@ -191,7 +191,7 @@ func (q *Queries) GetAllBranches(ctx context.Context) ([]BranchDetail, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const GetAllCashiers = `-- name: GetAllCashiers :many
|
const GetAllCashiers = `-- name: GetAllCashiers :many
|
||||||
SELECT users.id, users.first_name, users.last_name, users.email, users.phone_number, users.role, users.password, users.email_verified, users.phone_verified, users.created_at, users.updated_at, users.suspended_at, users.suspended
|
SELECT users.id, users.first_name, users.last_name, users.email, users.phone_number, users.role, users.password, users.email_verified, users.phone_verified, users.created_at, users.updated_at, users.suspended_at, users.suspended, users.referral_code, users.referred_by
|
||||||
FROM branch_cashiers
|
FROM branch_cashiers
|
||||||
JOIN users ON branch_cashiers.user_id = users.id
|
JOIN users ON branch_cashiers.user_id = users.id
|
||||||
`
|
`
|
||||||
|
|
@ -219,6 +219,8 @@ func (q *Queries) GetAllCashiers(ctx context.Context) ([]User, error) {
|
||||||
&i.UpdatedAt,
|
&i.UpdatedAt,
|
||||||
&i.SuspendedAt,
|
&i.SuspendedAt,
|
||||||
&i.Suspended,
|
&i.Suspended,
|
||||||
|
&i.ReferralCode,
|
||||||
|
&i.ReferredBy,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -428,7 +430,7 @@ func (q *Queries) GetBranchOperations(ctx context.Context, branchID int64) ([]Ge
|
||||||
}
|
}
|
||||||
|
|
||||||
const GetCashiersByBranch = `-- name: GetCashiersByBranch :many
|
const GetCashiersByBranch = `-- name: GetCashiersByBranch :many
|
||||||
SELECT users.id, users.first_name, users.last_name, users.email, users.phone_number, users.role, users.password, users.email_verified, users.phone_verified, users.created_at, users.updated_at, users.suspended_at, users.suspended
|
SELECT users.id, users.first_name, users.last_name, users.email, users.phone_number, users.role, users.password, users.email_verified, users.phone_verified, users.created_at, users.updated_at, users.suspended_at, users.suspended, users.referral_code, users.referred_by
|
||||||
FROM branch_cashiers
|
FROM branch_cashiers
|
||||||
JOIN users ON branch_cashiers.user_id = users.id
|
JOIN users ON branch_cashiers.user_id = users.id
|
||||||
WHERE branch_cashiers.branch_id = $1
|
WHERE branch_cashiers.branch_id = $1
|
||||||
|
|
@ -457,6 +459,8 @@ func (q *Queries) GetCashiersByBranch(ctx context.Context, branchID int64) ([]Us
|
||||||
&i.UpdatedAt,
|
&i.UpdatedAt,
|
||||||
&i.SuspendedAt,
|
&i.SuspendedAt,
|
||||||
&i.Suspended,
|
&i.Suspended,
|
||||||
|
&i.ReferralCode,
|
||||||
|
&i.ReferredBy,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
120
gen/db/models.go
120
gen/db/models.go
|
|
@ -33,8 +33,8 @@ func (e *Referralstatus) Scan(src interface{}) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
type NullReferralstatus struct {
|
type NullReferralstatus struct {
|
||||||
Referralstatus Referralstatus
|
Referralstatus Referralstatus `json:"referralstatus"`
|
||||||
Valid bool // Valid is true if Referralstatus is not NULL
|
Valid bool `json:"valid"` // Valid is true if Referralstatus is not NULL
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scan implements the Scanner interface.
|
// Scan implements the Scanner interface.
|
||||||
|
|
@ -223,7 +223,7 @@ type Odd struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type Otp struct {
|
type Otp struct {
|
||||||
ID int64 `json:"id"`
|
ID int64 `json:"id"`
|
||||||
SentTo string `json:"sent_to"`
|
SentTo string `json:"sent_to"`
|
||||||
Medium string `json:"medium"`
|
Medium string `json:"medium"`
|
||||||
OtpFor string `json:"otp_for"`
|
OtpFor string `json:"otp_for"`
|
||||||
|
|
@ -235,55 +235,29 @@ ID int64 `json:"id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Referral struct {
|
type Referral struct {
|
||||||
ID int64
|
ID int64 `json:"id"`
|
||||||
ReferralCode string
|
ReferralCode string `json:"referral_code"`
|
||||||
ReferrerID string
|
ReferrerID string `json:"referrer_id"`
|
||||||
ReferredID pgtype.Text
|
ReferredID pgtype.Text `json:"referred_id"`
|
||||||
Status Referralstatus
|
Status Referralstatus `json:"status"`
|
||||||
RewardAmount pgtype.Numeric
|
RewardAmount pgtype.Numeric `json:"reward_amount"`
|
||||||
CashbackAmount pgtype.Numeric
|
CashbackAmount pgtype.Numeric `json:"cashback_amount"`
|
||||||
CreatedAt pgtype.Timestamptz
|
CreatedAt pgtype.Timestamptz `json:"created_at"`
|
||||||
UpdatedAt pgtype.Timestamptz
|
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
|
||||||
ExpiresAt pgtype.Timestamptz
|
ExpiresAt pgtype.Timestamptz `json:"expires_at"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ReferralSetting struct {
|
type ReferralSetting struct {
|
||||||
ID int64
|
ID int64 `json:"id"`
|
||||||
ReferralRewardAmount pgtype.Numeric
|
ReferralRewardAmount pgtype.Numeric `json:"referral_reward_amount"`
|
||||||
CashbackPercentage pgtype.Numeric
|
CashbackPercentage pgtype.Numeric `json:"cashback_percentage"`
|
||||||
BetReferralBonusPercentage pgtype.Numeric
|
BetReferralBonusPercentage pgtype.Numeric `json:"bet_referral_bonus_percentage"`
|
||||||
MaxReferrals int32
|
MaxReferrals int32 `json:"max_referrals"`
|
||||||
ExpiresAfterDays int32
|
ExpiresAfterDays int32 `json:"expires_after_days"`
|
||||||
UpdatedBy string
|
UpdatedBy string `json:"updated_by"`
|
||||||
CreatedAt pgtype.Timestamptz
|
CreatedAt pgtype.Timestamptz `json:"created_at"`
|
||||||
UpdatedAt pgtype.Timestamptz
|
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
|
||||||
Version int32
|
Version int32 `json:"version"`
|
||||||
}
|
|
||||||
|
|
||||||
type Referral struct {
|
|
||||||
ID int64
|
|
||||||
ReferralCode string
|
|
||||||
ReferrerID string
|
|
||||||
ReferredID pgtype.Text
|
|
||||||
Status Referralstatus
|
|
||||||
RewardAmount pgtype.Numeric
|
|
||||||
CashbackAmount pgtype.Numeric
|
|
||||||
CreatedAt pgtype.Timestamptz
|
|
||||||
UpdatedAt pgtype.Timestamptz
|
|
||||||
ExpiresAt pgtype.Timestamptz
|
|
||||||
}
|
|
||||||
|
|
||||||
type ReferralSetting struct {
|
|
||||||
ID int64
|
|
||||||
ReferralRewardAmount pgtype.Numeric
|
|
||||||
CashbackPercentage pgtype.Numeric
|
|
||||||
BetReferralBonusPercentage pgtype.Numeric
|
|
||||||
MaxReferrals int32
|
|
||||||
ExpiresAfterDays int32
|
|
||||||
UpdatedBy string
|
|
||||||
CreatedAt pgtype.Timestamptz
|
|
||||||
UpdatedAt pgtype.Timestamptz
|
|
||||||
Version int32
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type RefreshToken struct {
|
type RefreshToken struct {
|
||||||
|
|
@ -369,34 +343,34 @@ type User struct {
|
||||||
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
|
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
|
||||||
SuspendedAt pgtype.Timestamptz `json:"suspended_at"`
|
SuspendedAt pgtype.Timestamptz `json:"suspended_at"`
|
||||||
Suspended bool `json:"suspended"`
|
Suspended bool `json:"suspended"`
|
||||||
ReferralCode pgtype.Text
|
ReferralCode pgtype.Text `json:"referral_code"`
|
||||||
ReferredBy pgtype.Text
|
ReferredBy pgtype.Text `json:"referred_by"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type VirtualGameSession struct {
|
type VirtualGameSession struct {
|
||||||
ID int64
|
ID int64 `json:"id"`
|
||||||
UserID int64
|
UserID int64 `json:"user_id"`
|
||||||
GameID string
|
GameID string `json:"game_id"`
|
||||||
SessionToken string
|
SessionToken string `json:"session_token"`
|
||||||
Currency string
|
Currency string `json:"currency"`
|
||||||
Status string
|
Status string `json:"status"`
|
||||||
CreatedAt pgtype.Timestamptz
|
CreatedAt pgtype.Timestamptz `json:"created_at"`
|
||||||
UpdatedAt pgtype.Timestamptz
|
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
|
||||||
ExpiresAt pgtype.Timestamptz
|
ExpiresAt pgtype.Timestamptz `json:"expires_at"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type VirtualGameTransaction struct {
|
type VirtualGameTransaction struct {
|
||||||
ID int64
|
ID int64 `json:"id"`
|
||||||
SessionID int64
|
SessionID int64 `json:"session_id"`
|
||||||
UserID int64
|
UserID int64 `json:"user_id"`
|
||||||
WalletID int64
|
WalletID int64 `json:"wallet_id"`
|
||||||
TransactionType string
|
TransactionType string `json:"transaction_type"`
|
||||||
Amount int64
|
Amount int64 `json:"amount"`
|
||||||
Currency string
|
Currency string `json:"currency"`
|
||||||
ExternalTransactionID string
|
ExternalTransactionID string `json:"external_transaction_id"`
|
||||||
Status string
|
Status string `json:"status"`
|
||||||
CreatedAt pgtype.Timestamptz
|
CreatedAt pgtype.Timestamptz `json:"created_at"`
|
||||||
UpdatedAt pgtype.Timestamptz
|
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Wallet struct {
|
type Wallet struct {
|
||||||
|
|
@ -409,8 +383,8 @@ type Wallet struct {
|
||||||
IsActive bool `json:"is_active"`
|
IsActive bool `json:"is_active"`
|
||||||
CreatedAt pgtype.Timestamp `json:"created_at"`
|
CreatedAt pgtype.Timestamp `json:"created_at"`
|
||||||
UpdatedAt pgtype.Timestamp `json:"updated_at"`
|
UpdatedAt pgtype.Timestamp `json:"updated_at"`
|
||||||
BonusBalance pgtype.Numeric
|
BonusBalance pgtype.Numeric `json:"bonus_balance"`
|
||||||
CashBalance pgtype.Numeric
|
CashBalance pgtype.Numeric `json:"cash_balance"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type WalletTransfer struct {
|
type WalletTransfer struct {
|
||||||
|
|
|
||||||
|
|
@ -24,11 +24,11 @@ INSERT INTO referrals (
|
||||||
`
|
`
|
||||||
|
|
||||||
type CreateReferralParams struct {
|
type CreateReferralParams struct {
|
||||||
ReferralCode string
|
ReferralCode string `json:"referral_code"`
|
||||||
ReferrerID string
|
ReferrerID string `json:"referrer_id"`
|
||||||
Status Referralstatus
|
Status Referralstatus `json:"status"`
|
||||||
RewardAmount pgtype.Numeric
|
RewardAmount pgtype.Numeric `json:"reward_amount"`
|
||||||
ExpiresAt pgtype.Timestamptz
|
ExpiresAt pgtype.Timestamptz `json:"expires_at"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Queries) CreateReferral(ctx context.Context, arg CreateReferralParams) (Referral, error) {
|
func (q *Queries) CreateReferral(ctx context.Context, arg CreateReferralParams) (Referral, error) {
|
||||||
|
|
@ -69,12 +69,12 @@ INSERT INTO referral_settings (
|
||||||
`
|
`
|
||||||
|
|
||||||
type CreateReferralSettingsParams struct {
|
type CreateReferralSettingsParams struct {
|
||||||
ReferralRewardAmount pgtype.Numeric
|
ReferralRewardAmount pgtype.Numeric `json:"referral_reward_amount"`
|
||||||
CashbackPercentage pgtype.Numeric
|
CashbackPercentage pgtype.Numeric `json:"cashback_percentage"`
|
||||||
MaxReferrals int32
|
MaxReferrals int32 `json:"max_referrals"`
|
||||||
BetReferralBonusPercentage pgtype.Numeric
|
BetReferralBonusPercentage pgtype.Numeric `json:"bet_referral_bonus_percentage"`
|
||||||
ExpiresAfterDays int32
|
ExpiresAfterDays int32 `json:"expires_after_days"`
|
||||||
UpdatedBy string
|
UpdatedBy string `json:"updated_by"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Queries) CreateReferralSettings(ctx context.Context, arg CreateReferralSettingsParams) (ReferralSetting, error) {
|
func (q *Queries) CreateReferralSettings(ctx context.Context, arg CreateReferralSettingsParams) (ReferralSetting, error) {
|
||||||
|
|
@ -182,10 +182,10 @@ WHERE referrer_id = $1
|
||||||
`
|
`
|
||||||
|
|
||||||
type GetReferralStatsRow struct {
|
type GetReferralStatsRow struct {
|
||||||
TotalReferrals int64
|
TotalReferrals int64 `json:"total_referrals"`
|
||||||
CompletedReferrals int64
|
CompletedReferrals int64 `json:"completed_referrals"`
|
||||||
TotalRewardEarned interface{}
|
TotalRewardEarned interface{} `json:"total_reward_earned"`
|
||||||
PendingRewards interface{}
|
PendingRewards interface{} `json:"pending_rewards"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Queries) GetReferralStats(ctx context.Context, referrerID string) (GetReferralStatsRow, error) {
|
func (q *Queries) GetReferralStats(ctx context.Context, referrerID string) (GetReferralStatsRow, error) {
|
||||||
|
|
@ -211,9 +211,9 @@ RETURNING id, referral_code, referrer_id, referred_id, status, reward_amount, ca
|
||||||
`
|
`
|
||||||
|
|
||||||
type UpdateReferralParams struct {
|
type UpdateReferralParams struct {
|
||||||
ID int64
|
ID int64 `json:"id"`
|
||||||
ReferredID pgtype.Text
|
ReferredID pgtype.Text `json:"referred_id"`
|
||||||
Status Referralstatus
|
Status Referralstatus `json:"status"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Queries) UpdateReferral(ctx context.Context, arg UpdateReferralParams) (Referral, error) {
|
func (q *Queries) UpdateReferral(ctx context.Context, arg UpdateReferralParams) (Referral, error) {
|
||||||
|
|
@ -243,8 +243,8 @@ WHERE id = $1
|
||||||
`
|
`
|
||||||
|
|
||||||
type UpdateReferralCodeParams struct {
|
type UpdateReferralCodeParams struct {
|
||||||
ID int64
|
ID int64 `json:"id"`
|
||||||
ReferralCode pgtype.Text
|
ReferralCode pgtype.Text `json:"referral_code"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Queries) UpdateReferralCode(ctx context.Context, arg UpdateReferralCodeParams) error {
|
func (q *Queries) UpdateReferralCode(ctx context.Context, arg UpdateReferralCodeParams) error {
|
||||||
|
|
@ -267,13 +267,13 @@ RETURNING id, referral_reward_amount, cashback_percentage, bet_referral_bonus_pe
|
||||||
`
|
`
|
||||||
|
|
||||||
type UpdateReferralSettingsParams struct {
|
type UpdateReferralSettingsParams struct {
|
||||||
ID int64
|
ID int64 `json:"id"`
|
||||||
ReferralRewardAmount pgtype.Numeric
|
ReferralRewardAmount pgtype.Numeric `json:"referral_reward_amount"`
|
||||||
CashbackPercentage pgtype.Numeric
|
CashbackPercentage pgtype.Numeric `json:"cashback_percentage"`
|
||||||
BetReferralBonusPercentage pgtype.Numeric
|
BetReferralBonusPercentage pgtype.Numeric `json:"bet_referral_bonus_percentage"`
|
||||||
MaxReferrals int32
|
MaxReferrals int32 `json:"max_referrals"`
|
||||||
ExpiresAfterDays int32
|
ExpiresAfterDays int32 `json:"expires_after_days"`
|
||||||
UpdatedBy string
|
UpdatedBy string `json:"updated_by"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Queries) UpdateReferralSettings(ctx context.Context, arg UpdateReferralSettingsParams) (ReferralSetting, error) {
|
func (q *Queries) UpdateReferralSettings(ctx context.Context, arg UpdateReferralSettingsParams) (ReferralSetting, error) {
|
||||||
|
|
|
||||||
|
|
@ -20,12 +20,12 @@ INSERT INTO virtual_game_sessions (
|
||||||
`
|
`
|
||||||
|
|
||||||
type CreateVirtualGameSessionParams struct {
|
type CreateVirtualGameSessionParams struct {
|
||||||
UserID int64
|
UserID int64 `json:"user_id"`
|
||||||
GameID string
|
GameID string `json:"game_id"`
|
||||||
SessionToken string
|
SessionToken string `json:"session_token"`
|
||||||
Currency string
|
Currency string `json:"currency"`
|
||||||
Status string
|
Status string `json:"status"`
|
||||||
ExpiresAt pgtype.Timestamptz
|
ExpiresAt pgtype.Timestamptz `json:"expires_at"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Queries) CreateVirtualGameSession(ctx context.Context, arg CreateVirtualGameSessionParams) (VirtualGameSession, error) {
|
func (q *Queries) CreateVirtualGameSession(ctx context.Context, arg CreateVirtualGameSessionParams) (VirtualGameSession, error) {
|
||||||
|
|
@ -61,14 +61,14 @@ INSERT INTO virtual_game_transactions (
|
||||||
`
|
`
|
||||||
|
|
||||||
type CreateVirtualGameTransactionParams struct {
|
type CreateVirtualGameTransactionParams struct {
|
||||||
SessionID int64
|
SessionID int64 `json:"session_id"`
|
||||||
UserID int64
|
UserID int64 `json:"user_id"`
|
||||||
WalletID int64
|
WalletID int64 `json:"wallet_id"`
|
||||||
TransactionType string
|
TransactionType string `json:"transaction_type"`
|
||||||
Amount int64
|
Amount int64 `json:"amount"`
|
||||||
Currency string
|
Currency string `json:"currency"`
|
||||||
ExternalTransactionID string
|
ExternalTransactionID string `json:"external_transaction_id"`
|
||||||
Status string
|
Status string `json:"status"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Queries) CreateVirtualGameTransaction(ctx context.Context, arg CreateVirtualGameTransactionParams) (VirtualGameTransaction, error) {
|
func (q *Queries) CreateVirtualGameTransaction(ctx context.Context, arg CreateVirtualGameTransactionParams) (VirtualGameTransaction, error) {
|
||||||
|
|
@ -154,8 +154,8 @@ WHERE id = $1
|
||||||
`
|
`
|
||||||
|
|
||||||
type UpdateVirtualGameSessionStatusParams struct {
|
type UpdateVirtualGameSessionStatusParams struct {
|
||||||
ID int64
|
ID int64 `json:"id"`
|
||||||
Status string
|
Status string `json:"status"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Queries) UpdateVirtualGameSessionStatus(ctx context.Context, arg UpdateVirtualGameSessionStatusParams) error {
|
func (q *Queries) UpdateVirtualGameSessionStatus(ctx context.Context, arg UpdateVirtualGameSessionStatusParams) error {
|
||||||
|
|
@ -170,8 +170,8 @@ WHERE id = $1
|
||||||
`
|
`
|
||||||
|
|
||||||
type UpdateVirtualGameTransactionStatusParams struct {
|
type UpdateVirtualGameTransactionStatusParams struct {
|
||||||
ID int64
|
ID int64 `json:"id"`
|
||||||
Status string
|
Status string `json:"status"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Queries) UpdateVirtualGameTransactionStatus(ctx context.Context, arg UpdateVirtualGameTransactionStatusParams) error {
|
func (q *Queries) UpdateVirtualGameTransactionStatus(ctx context.Context, arg UpdateVirtualGameTransactionStatusParams) error {
|
||||||
|
|
|
||||||
|
|
@ -124,7 +124,7 @@ func (s *Service) ProcessReferral(ctx context.Context, referredPhone, referralCo
|
||||||
|
|
||||||
walletID := wallets[0].ID
|
walletID := wallets[0].ID
|
||||||
currentBonus := float64(wallets[0].Balance)
|
currentBonus := float64(wallets[0].Balance)
|
||||||
err = s.walletSvc.Add(ctx, walletID, domain.Currency(int64((currentBonus+referral.RewardAmount)*100)))
|
err = s.walletSvc.AddToWallet(ctx, walletID, domain.Currency(int64((currentBonus+referral.RewardAmount)*100)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Error("Failed to add referral reward to wallet", "walletID", walletID, "referrerID", referrerID, "error", err)
|
s.logger.Error("Failed to add referral reward to wallet", "walletID", walletID, "referrerID", referrerID, "error", err)
|
||||||
return err
|
return err
|
||||||
|
|
@ -162,7 +162,7 @@ func (s *Service) ProcessDepositBonus(ctx context.Context, userPhone string, amo
|
||||||
walletID := wallets[0].ID
|
walletID := wallets[0].ID
|
||||||
bonus := amount * (settings.CashbackPercentage / 100)
|
bonus := amount * (settings.CashbackPercentage / 100)
|
||||||
currentBonus := float64(wallets[0].Balance)
|
currentBonus := float64(wallets[0].Balance)
|
||||||
err = s.walletSvc.Add(ctx, walletID, domain.Currency(int64((currentBonus+bonus)*100)))
|
err = s.walletSvc.AddToWallet(ctx, walletID, domain.Currency(int64((currentBonus+bonus)*100)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Error("Failed to add deposit bonus to wallet", "walletID", walletID, "userID", userID, "bonus", bonus, "error", err)
|
s.logger.Error("Failed to add deposit bonus to wallet", "walletID", walletID, "userID", userID, "bonus", bonus, "error", err)
|
||||||
return err
|
return err
|
||||||
|
|
@ -216,7 +216,7 @@ func (s *Service) ProcessBetReferral(ctx context.Context, userPhone string, betA
|
||||||
|
|
||||||
walletID := wallets[0].ID
|
walletID := wallets[0].ID
|
||||||
currentBalance := float64(wallets[0].Balance)
|
currentBalance := float64(wallets[0].Balance)
|
||||||
err = s.walletSvc.Add(ctx, walletID, domain.Currency(int64((currentBalance+bonus)*100)))
|
err = s.walletSvc.AddToWallet(ctx, walletID, domain.Currency(int64((currentBalance+bonus)*100)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Error("Failed to add bet referral bonus to wallet", "walletID", walletID, "referrerID", referrerID, "bonus", bonus, "error", err)
|
s.logger.Error("Failed to add bet referral bonus to wallet", "walletID", walletID, "referrerID", referrerID, "bonus", bonus, "error", err)
|
||||||
return err
|
return err
|
||||||
|
|
|
||||||
|
|
@ -110,7 +110,7 @@ func (s *service) HandleCallback(ctx context.Context, callback *domain.PopOKCall
|
||||||
return errors.New("unknown transaction type")
|
return errors.New("unknown transaction type")
|
||||||
}
|
}
|
||||||
|
|
||||||
err = s.walletSvc.Add(ctx, walletID, domain.Currency(amount))
|
err = s.walletSvc.AddToWallet(ctx, walletID, domain.Currency(amount))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Error("Failed to update wallet", "walletID", walletID, "userID", session.UserID, "amount", amount, "error", err)
|
s.logger.Error("Failed to update wallet", "walletID", walletID, "userID", session.UserID, "amount", amount, "error", err)
|
||||||
return err
|
return err
|
||||||
|
|
|
||||||
|
|
@ -107,7 +107,7 @@ func (h *Handler) RefreshToken(c *fiber.Ctx) error {
|
||||||
userId := c.Locals("user_id").(int64)
|
userId := c.Locals("user_id").(int64)
|
||||||
role := c.Locals("role").(string)
|
role := c.Locals("role").(string)
|
||||||
branchId := c.Locals("branch_id").(int64)
|
branchId := c.Locals("branch_id").(int64)
|
||||||
err := authSvc.RefreshToken(c.Context(), req.RefreshToken)
|
err := h.authSvc.RefreshToken(c.Context(), req.RefreshToken)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
h.logger.Info("Refresh token attempt failed", "refreshToken", req.RefreshToken, "error", err)
|
h.logger.Info("Refresh token attempt failed", "refreshToken", req.RefreshToken, "error", err)
|
||||||
switch {
|
switch {
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,11 @@ package handlers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"log/slog"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/bet"
|
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/response"
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/response"
|
||||||
customvalidator "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/validator"
|
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
)
|
)
|
||||||
|
|
@ -132,7 +129,7 @@ func (h *Handler) CreateBet(c *fiber.Ctx) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deduct a percentage of the amount
|
// Deduct a percentage of the amount
|
||||||
// TODO move to service layer
|
// TODO move to service layer. Make it fetch dynamically from company
|
||||||
var deductedAmount = req.Amount / 10
|
var deductedAmount = req.Amount / 10
|
||||||
err = h.walletSvc.DeductFromWallet(c.Context(), branch.WalletID, domain.ToCurrency(deductedAmount))
|
err = h.walletSvc.DeductFromWallet(c.Context(), branch.WalletID, domain.ToCurrency(deductedAmount))
|
||||||
|
|
||||||
|
|
@ -208,7 +205,7 @@ func (h *Handler) CreateBet(c *fiber.Ctx) error {
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "The event has already expired", nil, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "The event has already expired", nil, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
odds, err := h.oddSvc.GetRawOddsByMarketID(c.Context(), marketIDStr, eventIDStr)
|
odds, err := h.prematchSvc.GetRawOddsByMarketID(c.Context(), marketIDStr, eventIDStr)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid market id", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid market id", err, nil)
|
||||||
|
|
@ -340,8 +337,7 @@ func (h *Handler) GetBetByID(c *fiber.Ctx) error {
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /bet/cashout/{id} [get]
|
// @Router /bet/cashout/{id} [get]
|
||||||
func GetBetByCashoutID(logger *slog.Logger, betSvc *bet.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) GetBetByCashoutID(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
cashoutID := c.Params("id")
|
cashoutID := c.Params("id")
|
||||||
// id, err := strconv.ParseInt(cashoutID, 10, 64)
|
// id, err := strconv.ParseInt(cashoutID, 10, 64)
|
||||||
|
|
||||||
|
|
@ -350,9 +346,9 @@ func GetBetByCashoutID(logger *slog.Logger, betSvc *bet.Service, validator *cust
|
||||||
// return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid cashout ID", err, nil)
|
// return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid cashout ID", err, nil)
|
||||||
// }
|
// }
|
||||||
|
|
||||||
bet, err := betSvc.GetBetByCashoutID(c.Context(), cashoutID)
|
bet, err := h.betSvc.GetBetByCashoutID(c.Context(), cashoutID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to get bet by ID", "cashoutID", cashoutID, "error", err)
|
h.logger.Error("Failed to get bet by ID", "cashoutID", cashoutID, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve bet", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve bet", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -360,7 +356,6 @@ func GetBetByCashoutID(logger *slog.Logger, betSvc *bet.Service, validator *cust
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Bet retrieved successfully", res, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Bet retrieved successfully", res, nil)
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateCashOutReq struct {
|
type UpdateCashOutReq struct {
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,10 @@
|
||||||
package handlers
|
package handlers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log/slog"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/bet"
|
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/branch"
|
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/wallet"
|
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/response"
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/response"
|
||||||
customvalidator "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/validator"
|
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -102,8 +97,7 @@ func convertBranchDetail(branch domain.BranchDetail) BranchDetailRes {
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /branch [post]
|
// @Router /branch [post]
|
||||||
func CreateBranch(logger *slog.Logger, branchSvc *branch.Service, walletSvc *wallet.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) CreateBranch(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
// Check if user is either branch manager / super main
|
// Check if user is either branch manager / super main
|
||||||
// role := string(c.Locals("role").(domain.Role))
|
// role := string(c.Locals("role").(domain.Role))
|
||||||
|
|
||||||
|
|
@ -115,17 +109,17 @@ func CreateBranch(logger *slog.Logger, branchSvc *branch.Service, walletSvc *wal
|
||||||
var req CreateBranchReq
|
var req CreateBranchReq
|
||||||
|
|
||||||
if err := c.BodyParser(&req); err != nil {
|
if err := c.BodyParser(&req); err != nil {
|
||||||
logger.Error("CreateBranchReq failed", "error", err)
|
h.logger.Error("CreateBranchReq failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
valErrs, ok := validator.Validate(c, req)
|
valErrs, ok := h.validator.Validate(c, req)
|
||||||
if !ok {
|
if !ok {
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create Branch Wallet
|
// Create Branch Wallet
|
||||||
newWallet, err := walletSvc.CreateWallet(c.Context(), domain.CreateWallet{
|
newWallet, err := h.walletSvc.CreateWallet(c.Context(), domain.CreateWallet{
|
||||||
IsWithdraw: false,
|
IsWithdraw: false,
|
||||||
IsBettable: true,
|
IsBettable: true,
|
||||||
IsTransferable: true,
|
IsTransferable: true,
|
||||||
|
|
@ -133,11 +127,11 @@ func CreateBranch(logger *slog.Logger, branchSvc *branch.Service, walletSvc *wal
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Create Branch Wallet failed", "error", err)
|
h.logger.Error("Create Branch Wallet failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to create branch wallet", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to create branch wallet", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
branch, err := branchSvc.CreateBranch(c.Context(), domain.CreateBranch{
|
branch, err := h.branchSvc.CreateBranch(c.Context(), domain.CreateBranch{
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
Location: req.Location,
|
Location: req.Location,
|
||||||
WalletID: newWallet.ID,
|
WalletID: newWallet.ID,
|
||||||
|
|
@ -147,19 +141,19 @@ func CreateBranch(logger *slog.Logger, branchSvc *branch.Service, walletSvc *wal
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("CreateBranchReq failed", "error", err)
|
h.logger.Error("CreateBranchReq failed", "error", err)
|
||||||
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
||||||
"error": "Internal server error",
|
"error": "Internal server error",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, operation := range req.Operations {
|
for _, operation := range req.Operations {
|
||||||
err := branchSvc.CreateBranchOperation(c.Context(), domain.CreateBranchOperation{
|
err := h.branchSvc.CreateBranchOperation(c.Context(), domain.CreateBranchOperation{
|
||||||
BranchID: branch.ID,
|
BranchID: branch.ID,
|
||||||
OperationID: operation,
|
OperationID: operation,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to create branch operations", "BranchID", branch.ID, "operation", operation, "error", err)
|
h.logger.Error("Failed to create branch operations", "BranchID", branch.ID, "operation", operation, "error", err)
|
||||||
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
||||||
"error": "Internal server error",
|
"error": "Internal server error",
|
||||||
})
|
})
|
||||||
|
|
@ -169,9 +163,6 @@ func CreateBranch(logger *slog.Logger, branchSvc *branch.Service, walletSvc *wal
|
||||||
res := convertBranch(branch)
|
res := convertBranch(branch)
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusCreated, "Branch Created", res, nil)
|
return response.WriteJSON(c, fiber.StatusCreated, "Branch Created", res, nil)
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateSupportedOperation godoc
|
// CreateSupportedOperation godoc
|
||||||
|
|
@ -185,26 +176,25 @@ func CreateBranch(logger *slog.Logger, branchSvc *branch.Service, walletSvc *wal
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /supportedOperation [post]
|
// @Router /supportedOperation [post]
|
||||||
func CreateSupportedOperation(logger *slog.Logger, branchSvc *branch.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) CreateSupportedOperation(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
var req CreateSupportedOperationReq
|
var req CreateSupportedOperationReq
|
||||||
|
|
||||||
if err := c.BodyParser(&req); err != nil {
|
if err := c.BodyParser(&req); err != nil {
|
||||||
logger.Error("CreateSupportedOperationReq failed", "error", err)
|
h.logger.Error("CreateSupportedOperationReq failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
||||||
}
|
}
|
||||||
valErrs, ok := validator.Validate(c, req)
|
valErrs, ok := h.validator.Validate(c, req)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
||||||
}
|
}
|
||||||
operation, err := branchSvc.CreateSupportedOperation(c.Context(), domain.CreateSupportedOperation{
|
operation, err := h.branchSvc.CreateSupportedOperation(c.Context(), domain.CreateSupportedOperation{
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
Description: req.Description,
|
Description: req.Description,
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("CreateSupportedOperationReq failed", "error", err)
|
h.logger.Error("CreateSupportedOperationReq failed", "error", err)
|
||||||
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
||||||
"error": "Internal server error",
|
"error": "Internal server error",
|
||||||
})
|
})
|
||||||
|
|
@ -216,8 +206,6 @@ func CreateSupportedOperation(logger *slog.Logger, branchSvc *branch.Service, va
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Operation Created", res, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Operation Created", res, nil)
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateBranchOperation godoc
|
// CreateBranchOperation godoc
|
||||||
|
|
@ -231,32 +219,29 @@ func CreateSupportedOperation(logger *slog.Logger, branchSvc *branch.Service, va
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /operation [post]
|
// @Router /operation [post]
|
||||||
func CreateBranchOperation(logger *slog.Logger, branchSvc *branch.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) CreateBranchOperation(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
var req CreateBranchOperationReq
|
var req CreateBranchOperationReq
|
||||||
if err := c.BodyParser(&req); err != nil {
|
if err := c.BodyParser(&req); err != nil {
|
||||||
logger.Error("CreateBranchOperationReq failed", "error", err)
|
h.logger.Error("CreateBranchOperationReq failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
valErrs, ok := validator.Validate(c, req)
|
valErrs, ok := h.validator.Validate(c, req)
|
||||||
if !ok {
|
if !ok {
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
err := branchSvc.CreateBranchOperation(c.Context(), domain.CreateBranchOperation{
|
err := h.branchSvc.CreateBranchOperation(c.Context(), domain.CreateBranchOperation{
|
||||||
BranchID: req.BranchID,
|
BranchID: req.BranchID,
|
||||||
OperationID: req.OperationID,
|
OperationID: req.OperationID,
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("CreateBranchOperationReq failed", "error", err)
|
h.logger.Error("CreateBranchOperationReq failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Internal Server Error", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Internal Server Error", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Branch Operation Created", nil, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Branch Operation Created", nil, nil)
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetBranchByID godoc
|
// GetBranchByID godoc
|
||||||
|
|
@ -270,27 +255,24 @@ func CreateBranchOperation(logger *slog.Logger, branchSvc *branch.Service, valid
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /branch/{id} [get]
|
// @Router /branch/{id} [get]
|
||||||
func GetBranchByID(logger *slog.Logger, branchSvc *branch.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) GetBranchByID(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
branchID := c.Params("id")
|
branchID := c.Params("id")
|
||||||
id, err := strconv.ParseInt(branchID, 10, 64)
|
id, err := strconv.ParseInt(branchID, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Invalid branch ID", "branchID", branchID, "error", err)
|
h.logger.Error("Invalid branch ID", "branchID", branchID, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid branch ID", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid branch ID", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
branch, err := branchSvc.GetBranchByID(c.Context(), id)
|
branch, err := h.branchSvc.GetBranchByID(c.Context(), id)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to get branch by ID", "branchID", id, "error", err)
|
h.logger.Error("Failed to get branch by ID", "branchID", id, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve branch", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve branch", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
res := convertBranchDetail(branch)
|
res := convertBranchDetail(branch)
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Branch retrieved successfully", res, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Branch retrieved successfully", res, nil)
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetBranchByManagerID godoc
|
// GetBranchByManagerID godoc
|
||||||
|
|
@ -304,21 +286,19 @@ func GetBranchByID(logger *slog.Logger, branchSvc *branch.Service, validator *cu
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /manager/{id}/branch [get]
|
// @Router /manager/{id}/branch [get]
|
||||||
func GetBranchByManagerID(logger *slog.Logger, branchSvc *branch.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) GetBranchByManagerID(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
|
|
||||||
// TODO: Restrict any who isn't branch manager or higher
|
// TODO: Restrict any who isn't branch manager or higher
|
||||||
userID := c.Params("id")
|
userID := c.Params("id")
|
||||||
id, err := strconv.ParseInt(userID, 10, 64)
|
id, err := strconv.ParseInt(userID, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Invalid user ID", "userID", userID, "error", err)
|
h.logger.Error("Invalid user ID", "userID", userID, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid user ID", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid user ID", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
branches, err := branchSvc.GetBranchByManagerID(c.Context(), id)
|
branches, err := h.branchSvc.GetBranchByManagerID(c.Context(), id)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to get branches", "error", err)
|
h.logger.Error("Failed to get branches", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to get branches", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to get branches", err, nil)
|
||||||
}
|
}
|
||||||
var result []BranchDetailRes = make([]BranchDetailRes, 0, len(branches))
|
var result []BranchDetailRes = make([]BranchDetailRes, 0, len(branches))
|
||||||
|
|
@ -326,7 +306,6 @@ func GetBranchByManagerID(logger *slog.Logger, branchSvc *branch.Service, valida
|
||||||
result = append(result, convertBranchDetail(branch))
|
result = append(result, convertBranchDetail(branch))
|
||||||
}
|
}
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Branches for Branch Manager retrieved", result, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Branches for Branch Manager retrieved", result, nil)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetBranchByCompanyID godoc
|
// GetBranchByCompanyID godoc
|
||||||
|
|
@ -340,18 +319,17 @@ func GetBranchByManagerID(logger *slog.Logger, branchSvc *branch.Service, valida
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /company/{id}/branch [get]
|
// @Router /company/{id}/branch [get]
|
||||||
func GetBranchByCompanyID(logger *slog.Logger, branchSvc *branch.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) GetBranchByCompanyID(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
companyID := c.Params("id")
|
companyID := c.Params("id")
|
||||||
id, err := strconv.ParseInt(companyID, 10, 64)
|
id, err := strconv.ParseInt(companyID, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Invalid company ID", "companyID", companyID, "error", err)
|
h.logger.Error("Invalid company ID", "companyID", companyID, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid company ID", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid company ID", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
branches, err := branchSvc.GetBranchByCompanyID(c.Context(), id)
|
branches, err := h.branchSvc.GetBranchByCompanyID(c.Context(), id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to get branches", "error", err)
|
h.logger.Error("Failed to get branches", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to get branches", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to get branches", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -360,7 +338,6 @@ func GetBranchByCompanyID(logger *slog.Logger, branchSvc *branch.Service, valida
|
||||||
result = append(result, convertBranchDetail(branch))
|
result = append(result, convertBranchDetail(branch))
|
||||||
}
|
}
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Branches for Company retrieved", result, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Branches for Company retrieved", result, nil)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetAllBranches godoc
|
// GetAllBranches godoc
|
||||||
|
|
@ -373,12 +350,11 @@ func GetBranchByCompanyID(logger *slog.Logger, branchSvc *branch.Service, valida
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /branch [get]
|
// @Router /branch [get]
|
||||||
func GetAllBranches(logger *slog.Logger, branchSvc *branch.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) GetAllBranches(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
// TODO: Limit the get all branches to only the companies for branch manager and cashiers
|
// TODO: Limit the get all branches to only the companies for branch manager and cashiers
|
||||||
branches, err := branchSvc.GetAllBranches(c.Context())
|
branches, err := h.branchSvc.GetAllBranches(c.Context())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to get branches", "error", err)
|
h.logger.Error("Failed to get branches", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to get branches", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to get branches", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -387,8 +363,6 @@ func GetAllBranches(logger *slog.Logger, branchSvc *branch.Service, validator *c
|
||||||
result = append(result, convertBranchDetail(branch))
|
result = append(result, convertBranchDetail(branch))
|
||||||
}
|
}
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Branches for Company retrieved", result, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Branches for Company retrieved", result, nil)
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SearchBranch godoc
|
// SearchBranch godoc
|
||||||
|
|
@ -402,8 +376,7 @@ func GetAllBranches(logger *slog.Logger, branchSvc *branch.Service, validator *c
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /search/branch [get]
|
// @Router /search/branch [get]
|
||||||
func SearchBranch(logger *slog.Logger, branchSvc *branch.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) SearchBranch(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
// Get search query from request
|
// Get search query from request
|
||||||
searchQuery := c.Query("q")
|
searchQuery := c.Query("q")
|
||||||
if searchQuery == "" {
|
if searchQuery == "" {
|
||||||
|
|
@ -411,9 +384,9 @@ func SearchBranch(logger *slog.Logger, branchSvc *branch.Service, validator *cus
|
||||||
}
|
}
|
||||||
|
|
||||||
// Call the service to search for branches
|
// Call the service to search for branches
|
||||||
branches, err := branchSvc.SearchBranchByName(c.Context(), searchQuery)
|
branches, err := h.branchSvc.SearchBranchByName(c.Context(), searchQuery)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to search branches", "query", searchQuery, "error", err)
|
h.logger.Error("Failed to search branches", "query", searchQuery, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to search branches", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to search branches", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -424,7 +397,6 @@ func SearchBranch(logger *slog.Logger, branchSvc *branch.Service, validator *cus
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Branches retrieved successfully", result, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Branches retrieved successfully", result, nil)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetAllSupportedOperations godoc
|
// GetAllSupportedOperations godoc
|
||||||
|
|
@ -437,11 +409,10 @@ func SearchBranch(logger *slog.Logger, branchSvc *branch.Service, validator *cus
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /supportedOperation [get]
|
// @Router /supportedOperation [get]
|
||||||
func GetAllSupportedOperations(logger *slog.Logger, branchSvc *branch.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) GetAllSupportedOperations(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
operations, err := h.branchSvc.GetAllSupportedOperations(c.Context())
|
||||||
operations, err := branchSvc.GetAllSupportedOperations(c.Context())
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to get operations", "error", err)
|
h.logger.Error("Failed to get operations", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to get operations", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to get operations", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -455,7 +426,6 @@ func GetAllSupportedOperations(logger *slog.Logger, branchSvc *branch.Service, v
|
||||||
}
|
}
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "SupportedOperations for Company retrieved", result, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "SupportedOperations for Company retrieved", result, nil)
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetBranchOperations godoc
|
// GetBranchOperations godoc
|
||||||
|
|
@ -469,20 +439,18 @@ func GetAllSupportedOperations(logger *slog.Logger, branchSvc *branch.Service, v
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /branch/{id}/operation [get]
|
// @Router /branch/{id}/operation [get]
|
||||||
func GetBranchOperations(logger *slog.Logger, branchSvc *branch.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) GetBranchOperations(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
|
|
||||||
branchID := c.Params("id")
|
branchID := c.Params("id")
|
||||||
id, err := strconv.ParseInt(branchID, 10, 64)
|
id, err := strconv.ParseInt(branchID, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Invalid branch ID", "branchID", branchID, "error", err)
|
h.logger.Error("Invalid branch ID", "branchID", branchID, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid branch ID", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid branch ID", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
operations, err := branchSvc.GetBranchOperations(c.Context(), id)
|
operations, err := h.branchSvc.GetBranchOperations(c.Context(), id)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to get operation by ID", "branchID", id, "error", err)
|
h.logger.Error("Failed to get operation by ID", "branchID", id, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve operation", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve operation", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -496,7 +464,6 @@ func GetBranchOperations(logger *slog.Logger, branchSvc *branch.Service, validat
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Branch Operations retrieved successfully", result, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Branch Operations retrieved successfully", result, nil)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetBetByBranchID godoc
|
// GetBetByBranchID godoc
|
||||||
|
|
@ -509,19 +476,18 @@ func GetBranchOperations(logger *slog.Logger, branchSvc *branch.Service, validat
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /branch/{id}/bets [get]
|
// @Router /branch/{id}/bets [get]
|
||||||
func GetBetByBranchID(logger *slog.Logger, betSvc *bet.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) GetBetByBranchID(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
branchID := c.Params("id")
|
branchID := c.Params("id")
|
||||||
id, err := strconv.ParseInt(branchID, 10, 64)
|
id, err := strconv.ParseInt(branchID, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Invalid branch ID", "branchID", branchID, "error", err)
|
h.logger.Error("Invalid branch ID", "branchID", branchID, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid branch ID", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid branch ID", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
bets, err := betSvc.GetBetByBranchID(c.Context(), id)
|
bets, err := h.betSvc.GetBetByBranchID(c.Context(), id)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to get bets", "error", err)
|
h.logger.Error("Failed to get bets", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve bets", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve bets", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -531,7 +497,6 @@ func GetBetByBranchID(logger *slog.Logger, betSvc *bet.Service, validator *custo
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Branch Bets Retrieved", res, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Branch Bets Retrieved", res, nil)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateBranch godoc
|
// UpdateBranch godoc
|
||||||
|
|
@ -546,27 +511,26 @@ func GetBetByBranchID(logger *slog.Logger, betSvc *bet.Service, validator *custo
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /branch/{id} [put]
|
// @Router /branch/{id} [put]
|
||||||
func UpdateBranch(logger *slog.Logger, branchSvc *branch.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) UpdateBranch(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
branchID := c.Params("id")
|
branchID := c.Params("id")
|
||||||
id, err := strconv.ParseInt(branchID, 10, 64)
|
id, err := strconv.ParseInt(branchID, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Invalid branch ID", "branchID", branchID, "error", err)
|
h.logger.Error("Invalid branch ID", "branchID", branchID, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid branch ID", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid branch ID", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
var req CreateBranchReq
|
var req CreateBranchReq
|
||||||
|
|
||||||
if err := c.BodyParser(&req); err != nil {
|
if err := c.BodyParser(&req); err != nil {
|
||||||
logger.Error("CreateBranchReq failed", "error", err)
|
h.logger.Error("CreateBranchReq failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
||||||
}
|
}
|
||||||
valErrs, ok := validator.Validate(c, req)
|
valErrs, ok := h.validator.Validate(c, req)
|
||||||
if !ok {
|
if !ok {
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
branch, err := branchSvc.UpdateBranch(c.Context(), id, domain.UpdateBranch{
|
branch, err := h.branchSvc.UpdateBranch(c.Context(), id, domain.UpdateBranch{
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
Location: req.Location,
|
Location: req.Location,
|
||||||
BranchManagerID: req.BranchManagerID,
|
BranchManagerID: req.BranchManagerID,
|
||||||
|
|
@ -575,7 +539,7 @@ func UpdateBranch(logger *slog.Logger, branchSvc *branch.Service, validator *cus
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to update branch", "branchID", id, "error", err)
|
h.logger.Error("Failed to update branch", "branchID", id, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to update branch", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to update branch", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -583,7 +547,6 @@ func UpdateBranch(logger *slog.Logger, branchSvc *branch.Service, validator *cus
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Branch Updated", res, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Branch Updated", res, nil)
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteBranch godoc
|
// DeleteBranch godoc
|
||||||
|
|
@ -597,27 +560,23 @@ func UpdateBranch(logger *slog.Logger, branchSvc *branch.Service, validator *cus
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /branch/{id} [delete]
|
// @Router /branch/{id} [delete]
|
||||||
func DeleteBranch(logger *slog.Logger, branchSvc *branch.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) DeleteBranch(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
|
|
||||||
branchID := c.Params("id")
|
branchID := c.Params("id")
|
||||||
id, err := strconv.ParseInt(branchID, 10, 64)
|
id, err := strconv.ParseInt(branchID, 10, 64)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Invalid Branch ID", "branchID", branchID, "error", err)
|
h.logger.Error("Invalid Branch ID", "branchID", branchID, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid Branch ID", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid Branch ID", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = branchSvc.DeleteBranch(c.Context(), id)
|
err = h.branchSvc.DeleteBranch(c.Context(), id)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to delete by ID", "Branch ID", id, "error", err)
|
h.logger.Error("Failed to delete by ID", "Branch ID", id, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to Delete Branch", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to Delete Branch", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Branch removed successfully", nil, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Branch removed successfully", nil, nil)
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteBranchOperation godoc
|
// DeleteBranchOperation godoc
|
||||||
|
|
@ -632,33 +591,31 @@ func DeleteBranch(logger *slog.Logger, branchSvc *branch.Service, validator *cus
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /branch/{id}/operation/{opID} [delete]
|
// @Router /branch/{id}/operation/{opID} [delete]
|
||||||
func DeleteBranchOperation(logger *slog.Logger, branchSvc *branch.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) DeleteBranchOperation(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
branchID := c.Params("id")
|
branchID := c.Params("id")
|
||||||
opID := c.Params("opID")
|
opID := c.Params("opID")
|
||||||
|
|
||||||
id, err := strconv.ParseInt(branchID, 10, 64)
|
id, err := strconv.ParseInt(branchID, 10, 64)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Invalid Branch ID", "branchID", branchID, "error", err)
|
h.logger.Error("Invalid Branch ID", "branchID", branchID, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid Branch ID", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid Branch ID", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
operationID, err := strconv.ParseInt(opID, 10, 64)
|
operationID, err := strconv.ParseInt(opID, 10, 64)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Invalid Operation ID", "operationID", opID, "error", err)
|
h.logger.Error("Invalid Operation ID", "operationID", opID, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid Operation ID", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid Operation ID", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = branchSvc.DeleteBranchOperation(c.Context(), id, operationID)
|
err = h.branchSvc.DeleteBranchOperation(c.Context(), id, operationID)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to delete operation", "Branch ID", id, "error", err)
|
h.logger.Error("Failed to delete operation", "Branch ID", id, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to Delete Operation", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to Delete Operation", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Branch Operation removed successfully", nil, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Branch Operation removed successfully", nil, nil)
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,11 @@
|
||||||
package handlers
|
package handlers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log/slog"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/branch"
|
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/user"
|
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/response"
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/response"
|
||||||
customvalidator "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/validator"
|
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -34,15 +30,13 @@ type CreateCashierReq struct {
|
||||||
// @Failure 401 {object} response.APIResponse
|
// @Failure 401 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /cashiers [post]
|
// @Router /cashiers [post]
|
||||||
func CreateCashier(logger *slog.Logger, userSvc *user.Service, branchSvc *branch.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) CreateCashier(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
|
|
||||||
var req CreateCashierReq
|
var req CreateCashierReq
|
||||||
if err := c.BodyParser(&req); err != nil {
|
if err := c.BodyParser(&req); err != nil {
|
||||||
logger.Error("RegisterUser failed", "error", err)
|
h.logger.Error("RegisterUser failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
||||||
}
|
}
|
||||||
valErrs, ok := validator.Validate(c, req)
|
valErrs, ok := h.validator.Validate(c, req)
|
||||||
if !ok {
|
if !ok {
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
||||||
}
|
}
|
||||||
|
|
@ -54,19 +48,18 @@ func CreateCashier(logger *slog.Logger, userSvc *user.Service, branchSvc *branch
|
||||||
Password: req.Password,
|
Password: req.Password,
|
||||||
Role: string(domain.RoleCashier),
|
Role: string(domain.RoleCashier),
|
||||||
}
|
}
|
||||||
newUser, err := userSvc.CreateUser(c.Context(), userRequest)
|
newUser, err := h.userSvc.CreateUser(c.Context(), userRequest)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("CreateCashier failed", "error", err)
|
h.logger.Error("CreateCashier failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to create cashier", nil, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to create cashier", nil, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = branchSvc.CreateBranchCashier(c.Context(), req.BranchID, newUser.ID)
|
err = h.branchSvc.CreateBranchCashier(c.Context(), req.BranchID, newUser.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("CreateCashier failed", "error", err)
|
h.logger.Error("CreateCashier failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to create cashier", nil, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to create cashier", nil, nil)
|
||||||
}
|
}
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Cashier created successfully", nil, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Cashier created successfully", nil, nil)
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -98,8 +91,7 @@ type GetCashierRes struct {
|
||||||
// @Failure 401 {object} response.APIResponse
|
// @Failure 401 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /cashiers [get]
|
// @Router /cashiers [get]
|
||||||
func GetAllCashiers(logger *slog.Logger, userSvc *user.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) GetAllCashiers(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
// branchId := int64(12) //c.Locals("branch_id").(int64)
|
// branchId := int64(12) //c.Locals("branch_id").(int64)
|
||||||
// filter := user.Filter{
|
// filter := user.Filter{
|
||||||
// Role: string(domain.RoleCashier),
|
// Role: string(domain.RoleCashier),
|
||||||
|
|
@ -115,9 +107,9 @@ func GetAllCashiers(logger *slog.Logger, userSvc *user.Service, validator *custo
|
||||||
// return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
// return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
||||||
// }
|
// }
|
||||||
|
|
||||||
cashiers, err := userSvc.GetAllCashiers(c.Context())
|
cashiers, err := h.userSvc.GetAllCashiers(c.Context())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("GetAllCashiers failed", "error", err)
|
h.logger.Error("GetAllCashiers failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to get cashiers", nil, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to get cashiers", nil, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -141,7 +133,6 @@ func GetAllCashiers(logger *slog.Logger, userSvc *user.Service, validator *custo
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Cashiers retrieved successfully", result, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Cashiers retrieved successfully", result, nil)
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -163,15 +154,14 @@ type updateUserReq struct {
|
||||||
// @Failure 401 {object} response.APIResponse
|
// @Failure 401 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /cashiers/{id} [put]
|
// @Router /cashiers/{id} [put]
|
||||||
func UpdateCashier(logger *slog.Logger, userSvc *user.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) UpdateCashier(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
var req updateUserReq
|
var req updateUserReq
|
||||||
if err := c.BodyParser(&req); err != nil {
|
if err := c.BodyParser(&req); err != nil {
|
||||||
logger.Error("UpdateCashier failed", "error", err)
|
h.logger.Error("UpdateCashier failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", nil, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", nil, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
valErrs, ok := validator.Validate(c, req)
|
valErrs, ok := h.validator.Validate(c, req)
|
||||||
|
|
||||||
if !ok {
|
if !ok {
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
||||||
|
|
@ -179,10 +169,10 @@ func UpdateCashier(logger *slog.Logger, userSvc *user.Service, validator *custom
|
||||||
cashierIdStr := c.Params("id")
|
cashierIdStr := c.Params("id")
|
||||||
cashierId, err := strconv.ParseInt(cashierIdStr, 10, 64)
|
cashierId, err := strconv.ParseInt(cashierIdStr, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("UpdateCashier failed", "error", err)
|
h.logger.Error("UpdateCashier failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid cashier ID", nil, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid cashier ID", nil, nil)
|
||||||
}
|
}
|
||||||
err = userSvc.UpdateUser(c.Context(), domain.UpdateUserReq{
|
err = h.userSvc.UpdateUser(c.Context(), domain.UpdateUserReq{
|
||||||
UserId: cashierId,
|
UserId: cashierId,
|
||||||
FirstName: domain.ValidString{
|
FirstName: domain.ValidString{
|
||||||
Value: req.FirstName,
|
Value: req.FirstName,
|
||||||
|
|
@ -199,10 +189,9 @@ func UpdateCashier(logger *slog.Logger, userSvc *user.Service, validator *custom
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("UpdateCashier failed", "error", err)
|
h.logger.Error("UpdateCashier failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to update cashier", nil, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to update cashier", nil, nil)
|
||||||
}
|
}
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Cashier updated successfully", nil, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Cashier updated successfully", nil, nil)
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,10 @@
|
||||||
package handlers
|
package handlers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log/slog"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/company"
|
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/wallet"
|
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/response"
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/response"
|
||||||
customvalidator "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/validator"
|
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -44,20 +40,19 @@ func convertCompany(company domain.Company) CompanyRes {
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /company [post]
|
// @Router /company [post]
|
||||||
func CreateCompany(logger *slog.Logger, companySvc *company.Service, walletSvc *wallet.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) CreateCompany(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
var req CreateCompanyReq
|
var req CreateCompanyReq
|
||||||
if err := c.BodyParser(&req); err != nil {
|
if err := c.BodyParser(&req); err != nil {
|
||||||
logger.Error("CreateCompanyReq failed", "error", err)
|
h.logger.Error("CreateCompanyReq failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
valErrs, ok := validator.Validate(c, req)
|
valErrs, ok := h.validator.Validate(c, req)
|
||||||
if !ok {
|
if !ok {
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
||||||
}
|
}
|
||||||
// Create Branch Wallet
|
// Create Branch Wallet
|
||||||
newWallet, err := walletSvc.CreateWallet(c.Context(), domain.CreateWallet{
|
newWallet, err := h.walletSvc.CreateWallet(c.Context(), domain.CreateWallet{
|
||||||
IsWithdraw: false,
|
IsWithdraw: false,
|
||||||
IsBettable: true,
|
IsBettable: true,
|
||||||
IsTransferable: true,
|
IsTransferable: true,
|
||||||
|
|
@ -65,18 +60,18 @@ func CreateCompany(logger *slog.Logger, companySvc *company.Service, walletSvc *
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Create Company Wallet failed", "error", err)
|
h.logger.Error("Create Company Wallet failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to create company wallet", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to create company wallet", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
company, err := companySvc.CreateCompany(c.Context(), domain.CreateCompany{
|
company, err := h.companySvc.CreateCompany(c.Context(), domain.CreateCompany{
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
AdminID: req.AdminID,
|
AdminID: req.AdminID,
|
||||||
WalletID: newWallet.ID,
|
WalletID: newWallet.ID,
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("CreateCompanyReq failed", "error", err)
|
h.logger.Error("CreateCompanyReq failed", "error", err)
|
||||||
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
||||||
"error": "Internal server error",
|
"error": "Internal server error",
|
||||||
})
|
})
|
||||||
|
|
@ -85,8 +80,6 @@ func CreateCompany(logger *slog.Logger, companySvc *company.Service, walletSvc *
|
||||||
res := convertCompany(company)
|
res := convertCompany(company)
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusCreated, "Company Created", res, nil)
|
return response.WriteJSON(c, fiber.StatusCreated, "Company Created", res, nil)
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetAllCompanies godoc
|
// GetAllCompanies godoc
|
||||||
|
|
@ -99,11 +92,11 @@ func CreateCompany(logger *slog.Logger, companySvc *company.Service, walletSvc *
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /company [get]
|
// @Router /company [get]
|
||||||
func GetAllCompanies(logger *slog.Logger, companySvc *company.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) GetAllCompanies(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
companies, err := companySvc.GetAllCompanies(c.Context())
|
companies, err := h.companySvc.GetAllCompanies(c.Context())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to get companies", "error", err)
|
h.logger.Error("Failed to get companies", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to get companies", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to get companies", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -114,7 +107,7 @@ func GetAllCompanies(logger *slog.Logger, companySvc *company.Service, validator
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "All Companies retrieved", result, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "All Companies retrieved", result, nil)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetCompanyByID godoc
|
// GetCompanyByID godoc
|
||||||
|
|
@ -128,26 +121,26 @@ func GetAllCompanies(logger *slog.Logger, companySvc *company.Service, validator
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /company/{id} [get]
|
// @Router /company/{id} [get]
|
||||||
func GetCompanyByID(logger *slog.Logger, companySvc *company.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) GetCompanyByID(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
companyID := c.Params("id")
|
companyID := c.Params("id")
|
||||||
id, err := strconv.ParseInt(companyID, 10, 64)
|
id, err := strconv.ParseInt(companyID, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Invalid company ID", "companyID", companyID, "error", err)
|
h.logger.Error("Invalid company ID", "companyID", companyID, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid company ID", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid company ID", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
company, err := companySvc.GetCompanyByID(c.Context(), id)
|
company, err := h.companySvc.GetCompanyByID(c.Context(), id)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to get company by ID", "companyID", id, "error", err)
|
h.logger.Error("Failed to get company by ID", "companyID", id, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to company branch", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to company branch", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
res := convertCompany(company)
|
res := convertCompany(company)
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Company retrieved successfully", res, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Company retrieved successfully", res, nil)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateCompany godoc
|
// UpdateCompany godoc
|
||||||
|
|
@ -162,39 +155,39 @@ func GetCompanyByID(logger *slog.Logger, companySvc *company.Service, validator
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /company/{id} [put]
|
// @Router /company/{id} [put]
|
||||||
func UpdateCompany(logger *slog.Logger, companySvc *company.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) UpdateCompany(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
companyID := c.Params("id")
|
companyID := c.Params("id")
|
||||||
id, err := strconv.ParseInt(companyID, 10, 64)
|
id, err := strconv.ParseInt(companyID, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Invalid company ID", "companyID", companyID, "error", err)
|
h.logger.Error("Invalid company ID", "companyID", companyID, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid company ID", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid company ID", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
var req CreateCompanyReq
|
var req CreateCompanyReq
|
||||||
if err := c.BodyParser(&req); err != nil {
|
if err := c.BodyParser(&req); err != nil {
|
||||||
logger.Error("CreateCompanyReq failed", "error", err)
|
h.logger.Error("CreateCompanyReq failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
||||||
}
|
}
|
||||||
valErrs, ok := validator.Validate(c, req)
|
valErrs, ok := h.validator.Validate(c, req)
|
||||||
if !ok {
|
if !ok {
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
company, err := companySvc.UpdateCompany(c.Context(), id, domain.UpdateCompany{
|
company, err := h.companySvc.UpdateCompany(c.Context(), id, domain.UpdateCompany{
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
AdminID: req.AdminID,
|
AdminID: req.AdminID,
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to update company", "companyID", id, "error", err)
|
h.logger.Error("Failed to update company", "companyID", id, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to update company", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to update company", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
res := convertCompany(company)
|
res := convertCompany(company)
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Company Updated", res, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Company Updated", res, nil)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteCompany godoc
|
// DeleteCompany godoc
|
||||||
|
|
@ -208,22 +201,22 @@ func UpdateCompany(logger *slog.Logger, companySvc *company.Service, validator *
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /company/{id} [delete]
|
// @Router /company/{id} [delete]
|
||||||
func DeleteCompany(logger *slog.Logger, companySvc *company.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) DeleteCompany(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
companyID := c.Params("id")
|
companyID := c.Params("id")
|
||||||
id, err := strconv.ParseInt(companyID, 10, 64)
|
id, err := strconv.ParseInt(companyID, 10, 64)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Invalid Company ID", "companyID", companyID, "error", err)
|
h.logger.Error("Invalid Company ID", "companyID", companyID, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid Company ID", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid Company ID", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = companySvc.DeleteCompany(c.Context(), id)
|
err = h.companySvc.DeleteCompany(c.Context(), id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to delete by ID", "Company ID", id, "error", err)
|
h.logger.Error("Failed to delete by ID", "Company ID", id, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to Delete Company", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to Delete Company", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Company removed successfully", nil, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Company removed successfully", nil, nil)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,11 @@ import (
|
||||||
|
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/authentication"
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/authentication"
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/bet"
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/bet"
|
||||||
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/branch"
|
||||||
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/company"
|
||||||
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/event"
|
||||||
notificationservice "github.com/SamuelTariku/FortuneBet-Backend/internal/services/notfication"
|
notificationservice "github.com/SamuelTariku/FortuneBet-Backend/internal/services/notfication"
|
||||||
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/odds"
|
||||||
referralservice "github.com/SamuelTariku/FortuneBet-Backend/internal/services/referal"
|
referralservice "github.com/SamuelTariku/FortuneBet-Backend/internal/services/referal"
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/ticket"
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/ticket"
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/transaction"
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/transaction"
|
||||||
|
|
@ -25,14 +29,34 @@ type Handler struct {
|
||||||
transactionSvc *transaction.Service
|
transactionSvc *transaction.Service
|
||||||
ticketSvc *ticket.Service
|
ticketSvc *ticket.Service
|
||||||
betSvc *bet.Service
|
betSvc *bet.Service
|
||||||
|
branchSvc *branch.Service
|
||||||
|
companySvc *company.Service
|
||||||
|
prematchSvc *odds.ServiceImpl
|
||||||
|
eventSvc event.Service
|
||||||
virtualGameSvc virtualgameservice.VirtualGameService
|
virtualGameSvc virtualgameservice.VirtualGameService
|
||||||
authSvc *authentication.Service
|
authSvc *authentication.Service
|
||||||
jwtConfig jwtutil.JwtConfig
|
jwtConfig jwtutil.JwtConfig
|
||||||
validator *customvalidator.CustomValidator
|
validator *customvalidator.CustomValidator
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(logger *slog.Logger, notificationSvc notificationservice.NotificationStore, validator *customvalidator.CustomValidator, walletSvc *wallet.Service,
|
func New(
|
||||||
referralSvc referralservice.ReferralStore, virtualGameSvc virtualgameservice.VirtualGameService, userSvc *user.Service, transactionSvc *transaction.Service, ticketSvc *ticket.Service, betSvc *bet.Service, authSvc *authentication.Service, jwtConfig jwtutil.JwtConfig) *Handler {
|
logger *slog.Logger,
|
||||||
|
notificationSvc notificationservice.NotificationStore,
|
||||||
|
validator *customvalidator.CustomValidator,
|
||||||
|
walletSvc *wallet.Service,
|
||||||
|
referralSvc referralservice.ReferralStore,
|
||||||
|
virtualGameSvc virtualgameservice.VirtualGameService,
|
||||||
|
userSvc *user.Service,
|
||||||
|
transactionSvc *transaction.Service,
|
||||||
|
ticketSvc *ticket.Service,
|
||||||
|
betSvc *bet.Service,
|
||||||
|
authSvc *authentication.Service,
|
||||||
|
jwtConfig jwtutil.JwtConfig,
|
||||||
|
branchSvc *branch.Service,
|
||||||
|
companySvc *company.Service,
|
||||||
|
prematchSvc *odds.ServiceImpl,
|
||||||
|
eventSvc event.Service,
|
||||||
|
) *Handler {
|
||||||
return &Handler{
|
return &Handler{
|
||||||
logger: logger,
|
logger: logger,
|
||||||
notificationSvc: notificationSvc,
|
notificationSvc: notificationSvc,
|
||||||
|
|
@ -43,6 +67,10 @@ func New(logger *slog.Logger, notificationSvc notificationservice.NotificationSt
|
||||||
transactionSvc: transactionSvc,
|
transactionSvc: transactionSvc,
|
||||||
ticketSvc: ticketSvc,
|
ticketSvc: ticketSvc,
|
||||||
betSvc: betSvc,
|
betSvc: betSvc,
|
||||||
|
branchSvc: branchSvc,
|
||||||
|
companySvc: companySvc,
|
||||||
|
prematchSvc: prematchSvc,
|
||||||
|
eventSvc: eventSvc,
|
||||||
virtualGameSvc: virtualGameSvc,
|
virtualGameSvc: virtualGameSvc,
|
||||||
authSvc: authSvc,
|
authSvc: authSvc,
|
||||||
jwtConfig: jwtConfig,
|
jwtConfig: jwtConfig,
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,11 @@
|
||||||
package handlers
|
package handlers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log/slog"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/user"
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/user"
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/response"
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/response"
|
||||||
customvalidator "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/validator"
|
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -31,14 +29,13 @@ type CreateManagerReq struct {
|
||||||
// @Failure 401 {object} response.APIResponse
|
// @Failure 401 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /managers [post]
|
// @Router /managers [post]
|
||||||
func CreateManager(logger *slog.Logger, userSvc *user.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) CreateManager(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
var req CreateManagerReq
|
var req CreateManagerReq
|
||||||
if err := c.BodyParser(&req); err != nil {
|
if err := c.BodyParser(&req); err != nil {
|
||||||
logger.Error("RegisterUser failed", "error", err)
|
h.logger.Error("RegisterUser failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
||||||
}
|
}
|
||||||
valErrs, ok := validator.Validate(c, req)
|
valErrs, ok := h.validator.Validate(c, req)
|
||||||
if !ok {
|
if !ok {
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
||||||
}
|
}
|
||||||
|
|
@ -50,13 +47,12 @@ func CreateManager(logger *slog.Logger, userSvc *user.Service, validator *custom
|
||||||
Password: req.Password,
|
Password: req.Password,
|
||||||
Role: string(domain.RoleBranchManager),
|
Role: string(domain.RoleBranchManager),
|
||||||
}
|
}
|
||||||
_, err := userSvc.CreateUser(c.Context(), user)
|
_, err := h.userSvc.CreateUser(c.Context(), user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("CreateManagers failed", "error", err)
|
h.logger.Error("CreateManagers failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to create Managers", nil, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to create Managers", nil, nil)
|
||||||
}
|
}
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Managers created successfully", nil, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Managers created successfully", nil, nil)
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -73,8 +69,7 @@ func CreateManager(logger *slog.Logger, userSvc *user.Service, validator *custom
|
||||||
// @Failure 401 {object} response.APIResponse
|
// @Failure 401 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /managers [get]
|
// @Router /managers [get]
|
||||||
func GetAllManagers(logger *slog.Logger, userSvc *user.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) GetAllManagers(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
filter := user.Filter{
|
filter := user.Filter{
|
||||||
Role: string(domain.RoleBranchManager),
|
Role: string(domain.RoleBranchManager),
|
||||||
BranchId: user.ValidBranchId{
|
BranchId: user.ValidBranchId{
|
||||||
|
|
@ -84,18 +79,17 @@ func GetAllManagers(logger *slog.Logger, userSvc *user.Service, validator *custo
|
||||||
Page: c.QueryInt("page", 1),
|
Page: c.QueryInt("page", 1),
|
||||||
PageSize: c.QueryInt("page_size", 10),
|
PageSize: c.QueryInt("page_size", 10),
|
||||||
}
|
}
|
||||||
valErrs, ok := validator.Validate(c, filter)
|
valErrs, ok := h.validator.Validate(c, filter)
|
||||||
if !ok {
|
if !ok {
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
||||||
}
|
}
|
||||||
Managers, err := userSvc.GetAllUsers(c.Context(), filter)
|
Managers, err := h.userSvc.GetAllUsers(c.Context(), filter)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("GetAllManagers failed", "error", err)
|
h.logger.Error("GetAllManagers failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to get Managers", nil, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to get Managers", nil, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Managers retrieved successfully", Managers, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Managers retrieved successfully", Managers, nil)
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -111,15 +105,14 @@ func GetAllManagers(logger *slog.Logger, userSvc *user.Service, validator *custo
|
||||||
// @Failure 401 {object} response.APIResponse
|
// @Failure 401 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /managers/{id} [put]
|
// @Router /managers/{id} [put]
|
||||||
func UPdateManagers(logger *slog.Logger, userSvc *user.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) UpdateManagers(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
var req updateUserReq
|
var req updateUserReq
|
||||||
if err := c.BodyParser(&req); err != nil {
|
if err := c.BodyParser(&req); err != nil {
|
||||||
logger.Error("UpdateManagers failed", "error", err)
|
h.logger.Error("UpdateManagers failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", nil, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", nil, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
valErrs, ok := validator.Validate(c, req)
|
valErrs, ok := h.validator.Validate(c, req)
|
||||||
|
|
||||||
if !ok {
|
if !ok {
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
||||||
|
|
@ -127,10 +120,10 @@ func UPdateManagers(logger *slog.Logger, userSvc *user.Service, validator *custo
|
||||||
ManagersIdStr := c.Params("id")
|
ManagersIdStr := c.Params("id")
|
||||||
ManagersId, err := strconv.ParseInt(ManagersIdStr, 10, 64)
|
ManagersId, err := strconv.ParseInt(ManagersIdStr, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("UpdateManagers failed", "error", err)
|
h.logger.Error("UpdateManagers failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid Managers ID", nil, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid Managers ID", nil, nil)
|
||||||
}
|
}
|
||||||
err = userSvc.UpdateUser(c.Context(), domain.UpdateUserReq{
|
err = h.userSvc.UpdateUser(c.Context(), domain.UpdateUserReq{
|
||||||
UserId: ManagersId,
|
UserId: ManagersId,
|
||||||
FirstName: domain.ValidString{
|
FirstName: domain.ValidString{
|
||||||
Value: req.FirstName,
|
Value: req.FirstName,
|
||||||
|
|
@ -147,10 +140,9 @@ func UPdateManagers(logger *slog.Logger, userSvc *user.Service, validator *custo
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("UpdateManagers failed", "error", err)
|
h.logger.Error("UpdateManagers failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to update Managers", nil, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to update Managers", nil, nil)
|
||||||
}
|
}
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Managers updated successfully", nil, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Managers updated successfully", nil, nil)
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,9 @@
|
||||||
package handlers
|
package handlers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log/slog"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/event"
|
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/odds"
|
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/response"
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/response"
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
)
|
)
|
||||||
|
|
@ -22,20 +19,20 @@ import (
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /prematch/odds/{event_id} [get]
|
// @Router /prematch/odds/{event_id} [get]
|
||||||
func GetPrematchOdds(logger *slog.Logger, prematchSvc *odds.ServiceImpl) fiber.Handler {
|
func (h *Handler) GetPrematchOdds(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
eventID := c.Params("event_id")
|
eventID := c.Params("event_id")
|
||||||
if eventID == "" {
|
if eventID == "" {
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Missing event_id", nil, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Missing event_id", nil, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
odds, err := prematchSvc.GetPrematchOdds(c.Context(), eventID)
|
odds, err := h.prematchSvc.GetPrematchOdds(c.Context(), eventID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve odds", nil, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve odds", nil, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Prematch odds retrieved successfully", odds, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Prematch odds retrieved successfully", odds, nil)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetALLPrematchOdds
|
// GetALLPrematchOdds
|
||||||
|
|
@ -47,15 +44,15 @@ func GetPrematchOdds(logger *slog.Logger, prematchSvc *odds.ServiceImpl) fiber.H
|
||||||
// @Success 200 {array} domain.Odd
|
// @Success 200 {array} domain.Odd
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /prematch/odds [get]
|
// @Router /prematch/odds [get]
|
||||||
func GetALLPrematchOdds(logger *slog.Logger, prematchSvc *odds.ServiceImpl) fiber.Handler {
|
func (h *Handler) GetALLPrematchOdds(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
odds, err := prematchSvc.GetALLPrematchOdds(c.Context())
|
odds, err := h.prematchSvc.GetALLPrematchOdds(c.Context())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve all prematch odds", nil, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve all prematch odds", nil, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "All prematch odds retrieved successfully", odds, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "All prematch odds retrieved successfully", odds, nil)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetRawOddsByMarketID
|
// GetRawOddsByMarketID
|
||||||
|
|
@ -70,8 +67,8 @@ func GetALLPrematchOdds(logger *slog.Logger, prematchSvc *odds.ServiceImpl) fibe
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /prematch/odds/upcoming/{upcoming_id}/market/{market_id} [get]
|
// @Router /prematch/odds/upcoming/{upcoming_id}/market/{market_id} [get]
|
||||||
func GetRawOddsByMarketID(logger *slog.Logger, prematchSvc *odds.ServiceImpl) fiber.Handler {
|
func (h *Handler) GetRawOddsByMarketID(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
marketID := c.Params("market_id")
|
marketID := c.Params("market_id")
|
||||||
upcomingID := c.Params("upcoming_id")
|
upcomingID := c.Params("upcoming_id")
|
||||||
if marketID == "" {
|
if marketID == "" {
|
||||||
|
|
@ -82,14 +79,14 @@ func GetRawOddsByMarketID(logger *slog.Logger, prematchSvc *odds.ServiceImpl) fi
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Missing upcoming_id", nil, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Missing upcoming_id", nil, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
rawOdds, err := prematchSvc.GetRawOddsByMarketID(c.Context(), marketID, upcomingID)
|
rawOdds, err := h.prematchSvc.GetRawOddsByMarketID(c.Context(), marketID, upcomingID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("failed to fetch raw odds", "error", err)
|
h.logger.Error("failed to fetch raw odds", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve raw odds", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve raw odds", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Raw odds retrieved successfully", rawOdds, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Raw odds retrieved successfully", rawOdds, nil)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Summary Retrieve all upcoming events
|
// @Summary Retrieve all upcoming events
|
||||||
|
|
@ -104,8 +101,8 @@ func GetRawOddsByMarketID(logger *slog.Logger, prematchSvc *odds.ServiceImpl) fi
|
||||||
// @Success 200 {array} domain.UpcomingEvent
|
// @Success 200 {array} domain.UpcomingEvent
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /prematch/events [get]
|
// @Router /prematch/events [get]
|
||||||
func GetAllUpcomingEvents(logger *slog.Logger, eventSvc event.Service) fiber.Handler {
|
func (h *Handler) GetAllUpcomingEvents(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
page := c.QueryInt("page", 1)
|
page := c.QueryInt("page", 1)
|
||||||
pageSize := c.QueryInt("page_size", 10)
|
pageSize := c.QueryInt("page_size", 10)
|
||||||
leagueIDQuery := c.Query("league_id")
|
leagueIDQuery := c.Query("league_id")
|
||||||
|
|
@ -120,14 +117,14 @@ func GetAllUpcomingEvents(logger *slog.Logger, eventSvc event.Service) fiber.Han
|
||||||
Valid: sportIDQuery != "",
|
Valid: sportIDQuery != "",
|
||||||
}
|
}
|
||||||
|
|
||||||
events, total, err := eventSvc.GetPaginatedUpcomingEvents(c.Context(), int32(pageSize), int32(page)-1, leagueID, sportID)
|
events, total, err := h.eventSvc.GetPaginatedUpcomingEvents(c.Context(), int32(pageSize), int32(page)-1, leagueID, sportID)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve all upcoming events", nil, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve all upcoming events", nil, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.WritePaginatedJSON(c, fiber.StatusOK, "All upcoming events retrieved successfully", events, nil, page, int(total))
|
return response.WritePaginatedJSON(c, fiber.StatusOK, "All upcoming events retrieved successfully", events, nil, page, int(total))
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Summary Retrieve an upcoming by ID
|
// @Summary Retrieve an upcoming by ID
|
||||||
|
|
@ -140,20 +137,20 @@ func GetAllUpcomingEvents(logger *slog.Logger, eventSvc event.Service) fiber.Han
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /prematch/events/{id} [get]
|
// @Router /prematch/events/{id} [get]
|
||||||
func GetUpcomingEventByID(logger *slog.Logger, eventSvc event.Service) fiber.Handler {
|
func (h *Handler) GetUpcomingEventByID(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
id := c.Params("id")
|
id := c.Params("id")
|
||||||
if id == "" {
|
if id == "" {
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Missing id", nil, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Missing id", nil, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
event, err := eventSvc.GetUpcomingEventByID(c.Context(), id)
|
event, err := h.eventSvc.GetUpcomingEventByID(c.Context(), id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve upcoming event", nil, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve upcoming event", nil, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Upcoming event retrieved successfully", event, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Upcoming event retrieved successfully", event, nil)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Summary Retrieve prematch odds by upcoming ID (FI)
|
// @Summary Retrieve prematch odds by upcoming ID (FI)
|
||||||
|
|
@ -168,8 +165,8 @@ func GetUpcomingEventByID(logger *slog.Logger, eventSvc event.Service) fiber.Han
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /prematch/odds/upcoming/{upcoming_id} [get]
|
// @Router /prematch/odds/upcoming/{upcoming_id} [get]
|
||||||
func GetPrematchOddsByUpcomingID(logger *slog.Logger, prematchSvc *odds.ServiceImpl) fiber.Handler {
|
func (h *Handler) GetPrematchOddsByUpcomingID(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
upcomingID := c.Params("upcoming_id")
|
upcomingID := c.Params("upcoming_id")
|
||||||
if upcomingID == "" {
|
if upcomingID == "" {
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Missing upcoming_id", nil, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Missing upcoming_id", nil, nil)
|
||||||
|
|
@ -185,11 +182,11 @@ func GetPrematchOddsByUpcomingID(logger *slog.Logger, prematchSvc *odds.ServiceI
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid offset value", nil, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid offset value", nil, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
odds, err := prematchSvc.GetPrematchOddsByUpcomingID(c.Context(), upcomingID, int32(limit), int32(offset))
|
odds, err := h.prematchSvc.GetPrematchOddsByUpcomingID(c.Context(), upcomingID, int32(limit), int32(offset))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve prematch odds", nil, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve prematch odds", nil, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Prematch odds retrieved successfully", odds, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Prematch odds retrieved successfully", odds, nil)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package handlers
|
package handlers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
|
@ -50,16 +51,6 @@ type TicketRes struct {
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /ticket [post]
|
// @Router /ticket [post]
|
||||||
func (h *Handler) CreateTicket(c *fiber.Ctx) error {
|
func (h *Handler) CreateTicket(c *fiber.Ctx) error {
|
||||||
type CreateTicketReq struct {
|
|
||||||
Outcomes []int64 `json:"outcomes" validate:"required" example:"[1, 2, 3]"`
|
|
||||||
Amount float32 `json:"amount" validate:"required" example:"100.0"`
|
|
||||||
TotalOdds float32 `json:"total_odds" validate:"required" example:"4.22"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateTicketRes struct {
|
|
||||||
FastCode int64 `json:"fast_code" example:"1234"`
|
|
||||||
}
|
|
||||||
|
|
||||||
var req CreateTicketReq
|
var req CreateTicketReq
|
||||||
if err := c.BodyParser(&req); err != nil {
|
if err := c.BodyParser(&req); err != nil {
|
||||||
h.logger.Error("Failed to parse CreateTicket request", "error", err)
|
h.logger.Error("Failed to parse CreateTicket request", "error", err)
|
||||||
|
|
@ -80,7 +71,7 @@ func (h *Handler) CreateTicket(c *fiber.Ctx) error {
|
||||||
eventIDStr := strconv.FormatInt(outcome.EventID, 10)
|
eventIDStr := strconv.FormatInt(outcome.EventID, 10)
|
||||||
marketIDStr := strconv.FormatInt(outcome.MarketID, 10)
|
marketIDStr := strconv.FormatInt(outcome.MarketID, 10)
|
||||||
oddIDStr := strconv.FormatInt(outcome.OddID, 10)
|
oddIDStr := strconv.FormatInt(outcome.OddID, 10)
|
||||||
event, err := eventSvc.GetUpcomingEventByID(c.Context(), eventIDStr)
|
event, err := h.eventSvc.GetUpcomingEventByID(c.Context(), eventIDStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid event id", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid event id", err, nil)
|
||||||
}
|
}
|
||||||
|
|
@ -91,7 +82,7 @@ func (h *Handler) CreateTicket(c *fiber.Ctx) error {
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "The event has already expired", nil, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "The event has already expired", nil, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
odds, err := oddSvc.GetRawOddsByMarketID(c.Context(), marketIDStr, eventIDStr)
|
odds, err := h.prematchSvc.GetRawOddsByMarketID(c.Context(), marketIDStr, eventIDStr)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid market id", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid market id", err, nil)
|
||||||
|
|
@ -110,7 +101,7 @@ func (h *Handler) CreateTicket(c *fiber.Ctx) error {
|
||||||
rawBytes, err := json.Marshal(raw)
|
rawBytes, err := json.Marshal(raw)
|
||||||
err = json.Unmarshal(rawBytes, &rawOdd)
|
err = json.Unmarshal(rawBytes, &rawOdd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Failed to unmarshal raw odd:", err)
|
h.logger.Error("Failed to unmarshal raw odd:", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if rawOdd.ID == oddIDStr {
|
if rawOdd.ID == oddIDStr {
|
||||||
|
|
@ -140,12 +131,12 @@ func (h *Handler) CreateTicket(c *fiber.Ctx) error {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
ticket, err := ticketSvc.CreateTicket(c.Context(), domain.CreateTicket{
|
ticket, err := h.ticketSvc.CreateTicket(c.Context(), domain.CreateTicket{
|
||||||
Amount: domain.ToCurrency(req.Amount),
|
Amount: domain.ToCurrency(req.Amount),
|
||||||
TotalOdds: req.TotalOdds,
|
TotalOdds: req.TotalOdds,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("CreateTicketReq failed", "error", err)
|
h.logger.Error("CreateTicketReq failed", "error", err)
|
||||||
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
||||||
"error": "Internal server error",
|
"error": "Internal server error",
|
||||||
})
|
})
|
||||||
|
|
@ -156,10 +147,10 @@ func (h *Handler) CreateTicket(c *fiber.Ctx) error {
|
||||||
outcomes[index].TicketID = ticket.ID
|
outcomes[index].TicketID = ticket.ID
|
||||||
}
|
}
|
||||||
|
|
||||||
rows, err := ticketSvc.CreateTicketOutcome(c.Context(), outcomes)
|
rows, err := h.ticketSvc.CreateTicketOutcome(c.Context(), outcomes)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("CreateTicketReq failed to create outcomes", "error", err)
|
h.logger.Error("CreateTicketReq failed to create outcomes", "error", err)
|
||||||
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
||||||
"error": "Internal server error",
|
"error": "Internal server error",
|
||||||
})
|
})
|
||||||
|
|
@ -169,7 +160,7 @@ func (h *Handler) CreateTicket(c *fiber.Ctx) error {
|
||||||
CreatedNumber: rows,
|
CreatedNumber: rows,
|
||||||
}
|
}
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Ticket Created", res, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Ticket Created", res, nil)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetTicketByID godoc
|
// GetTicketByID godoc
|
||||||
|
|
@ -184,13 +175,6 @@ func (h *Handler) CreateTicket(c *fiber.Ctx) error {
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /ticket/{id} [get]
|
// @Router /ticket/{id} [get]
|
||||||
func (h *Handler) GetTicketByID(c *fiber.Ctx) error {
|
func (h *Handler) GetTicketByID(c *fiber.Ctx) error {
|
||||||
type TicketRes struct {
|
|
||||||
ID int64 `json:"id" example:"1"`
|
|
||||||
Outcomes []domain.Outcome `json:"outcomes"`
|
|
||||||
Amount float32 `json:"amount" example:"100.0"`
|
|
||||||
TotalOdds float32 `json:"total_odds" example:"4.22"`
|
|
||||||
}
|
|
||||||
|
|
||||||
ticketID := c.Params("id")
|
ticketID := c.Params("id")
|
||||||
id, err := strconv.ParseInt(ticketID, 10, 64)
|
id, err := strconv.ParseInt(ticketID, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -224,12 +208,6 @@ func (h *Handler) GetTicketByID(c *fiber.Ctx) error {
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /ticket [get]
|
// @Router /ticket [get]
|
||||||
func (h *Handler) GetAllTickets(c *fiber.Ctx) error {
|
func (h *Handler) GetAllTickets(c *fiber.Ctx) error {
|
||||||
type TicketRes struct {
|
|
||||||
ID int64 `json:"id" example:"1"`
|
|
||||||
Outcomes []domain.Outcome `json:"outcomes"`
|
|
||||||
Amount float32 `json:"amount" example:"100.0"`
|
|
||||||
TotalOdds float32 `json:"total_odds" example:"4.22"`
|
|
||||||
}
|
|
||||||
|
|
||||||
tickets, err := h.ticketSvc.GetAllTickets(c.Context())
|
tickets, err := h.ticketSvc.GetAllTickets(c.Context())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -74,10 +74,10 @@ func convertTransaction(transaction domain.Transaction) TransactionRes {
|
||||||
// @Router /transaction [post]
|
// @Router /transaction [post]
|
||||||
func (h *Handler) CreateTransaction(c *fiber.Ctx) error {
|
func (h *Handler) CreateTransaction(c *fiber.Ctx) error {
|
||||||
userID := c.Locals("user_id").(int64)
|
userID := c.Locals("user_id").(int64)
|
||||||
user, err := userSvc.GetUserByID(c.Context(), userID)
|
user, err := h.userSvc.GetUserByID(c.Context(), userID)
|
||||||
|
|
||||||
if user.Role == domain.RoleCustomer {
|
if user.Role == domain.RoleCustomer {
|
||||||
logger.Error("CreateTransactionReq failed")
|
h.logger.Error("CreateTransactionReq failed")
|
||||||
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
|
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
|
||||||
"error": "unauthorized access",
|
"error": "unauthorized access",
|
||||||
})
|
})
|
||||||
|
|
@ -86,18 +86,18 @@ func (h *Handler) CreateTransaction(c *fiber.Ctx) error {
|
||||||
// TODO: Add validation to make sure that the bet hasn't already been cashed out by someone else
|
// TODO: Add validation to make sure that the bet hasn't already been cashed out by someone else
|
||||||
var branchID int64
|
var branchID int64
|
||||||
if user.Role == domain.RoleAdmin || user.Role == domain.RoleBranchManager || user.Role == domain.RoleSuperAdmin {
|
if user.Role == domain.RoleAdmin || user.Role == domain.RoleBranchManager || user.Role == domain.RoleSuperAdmin {
|
||||||
branch, err := branchSvc.GetBranchByID(c.Context(), 1)
|
branch, err := h.branchSvc.GetBranchByID(c.Context(), 1)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("CreateTransactionReq no branches")
|
h.logger.Error("CreateTransactionReq no branches")
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "This user type doesn't have branches", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "This user type doesn't have branches", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
branchID = branch.ID
|
branchID = branch.ID
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
branch, err := branchSvc.GetBranchByCashier(c.Context(), user.ID)
|
branch, err := h.branchSvc.GetBranchByCashier(c.Context(), user.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("CreateTransactionReq failed, branch id invalid")
|
h.logger.Error("CreateTransactionReq failed, branch id invalid")
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Branch ID invalid", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Branch ID invalid", err, nil)
|
||||||
}
|
}
|
||||||
branchID = branch.ID
|
branchID = branch.ID
|
||||||
|
|
@ -109,13 +109,13 @@ func (h *Handler) CreateTransaction(c *fiber.Ctx) error {
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
valErrs, ok := validator.Validate(c, req)
|
valErrs, ok := h.validator.Validate(c, req)
|
||||||
if !ok {
|
if !ok {
|
||||||
logger.Error("CreateTransactionReq failed v", "error", valErrs)
|
h.logger.Error("CreateTransactionReq failed v", "error", valErrs)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
transaction, err := transactionSvc.CreateTransaction(c.Context(), domain.CreateTransaction{
|
transaction, err := h.transactionSvc.CreateTransaction(c.Context(), domain.CreateTransaction{
|
||||||
BranchID: branchID,
|
BranchID: branchID,
|
||||||
CashierID: userID,
|
CashierID: userID,
|
||||||
Amount: domain.ToCurrency(req.Amount),
|
Amount: domain.ToCurrency(req.Amount),
|
||||||
|
|
@ -132,17 +132,16 @@ func (h *Handler) CreateTransaction(c *fiber.Ctx) error {
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("CreateTransactionReq failed", "error", err)
|
h.logger.Error("CreateTransactionReq failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Internal Server Error", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Internal Server Error", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = betSvc.UpdateCashOut(c.Context(), req.BetID, true)
|
err = h.betSvc.UpdateCashOut(c.Context(), req.BetID, true)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("CreateTransactionReq failed", "error", err)
|
h.logger.Error("CreateTransactionReq failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Internal Server Error", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Internal Server Error", err, nil)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
res := convertTransaction(transaction)
|
res := convertTransaction(transaction)
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Transaction created successfully", res, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Transaction created successfully", res, nil)
|
||||||
|
|
@ -163,33 +162,35 @@ func (h *Handler) GetAllTransactions(c *fiber.Ctx) error {
|
||||||
userID := c.Locals("user_id").(int64)
|
userID := c.Locals("user_id").(int64)
|
||||||
|
|
||||||
// Fetch user details
|
// Fetch user details
|
||||||
user, err := userSvc.GetUserByID(c.Context(), userID)
|
user, err := h.userSvc.GetUserByID(c.Context(), userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to fetch user details", "user_id", userID, "error", err)
|
h.logger.Error("Failed to fetch user details", "user_id", userID, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve user details", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve user details", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
var transactions []domain.Transaction
|
var transactions []domain.Transaction
|
||||||
|
|
||||||
// Check user role and fetch transactions accordingly
|
// Check user role and fetch transactions accordingly
|
||||||
|
// TODO: filtering by the user role
|
||||||
switch user.Role {
|
switch user.Role {
|
||||||
case domain.RoleSuperAdmin:
|
case domain.RoleSuperAdmin:
|
||||||
// Admin can fetch all transactions
|
// Admin can fetch all transactions
|
||||||
transactions, err = transactionSvc.GetAllTransactions(c.Context())
|
transactions, err = h.transactionSvc.GetAllTransactions(c.Context())
|
||||||
case domain.RoleAdmin:
|
case domain.RoleAdmin:
|
||||||
// Admin can fetch all transactions
|
// Admins can fetch transaction for company branches
|
||||||
transactions, err = transactionSvc.GetAllTransactions(c.Context())
|
|
||||||
|
transactions, err = h.transactionSvc.GetAllTransactions(c.Context())
|
||||||
case domain.RoleBranchManager, domain.RoleCashier:
|
case domain.RoleBranchManager, domain.RoleCashier:
|
||||||
// Branch Manager or Cashier can fetch transactions for their branch
|
// Branch Manager or Cashier can fetch transactions for their branches
|
||||||
// transactions, err = transactionSvc.GetTransactionByBranch(c.Context(), user.BranchID)
|
// transactions, err = transactionSvc.GetTransactionByBranch(c.Context(), user.BranchID)
|
||||||
transactions, err = transactionSvc.GetAllTransactions(c.Context())
|
transactions, err = h.transactionSvc.GetAllTransactions(c.Context())
|
||||||
default:
|
default:
|
||||||
// Unauthorized role
|
// Unauthorized role
|
||||||
return response.WriteJSON(c, fiber.StatusForbidden, "Unauthorized", nil, nil)
|
return response.WriteJSON(c, fiber.StatusForbidden, "Unauthorized", nil, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to get transactions", "error", err)
|
h.logger.Error("Failed to get transactions", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve transactions", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve transactions", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -199,7 +200,7 @@ func (h *Handler) GetAllTransactions(c *fiber.Ctx) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Transactions retrieved successfully", res, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Transactions retrieved successfully", res, nil)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetTransactionByID godoc
|
// GetTransactionByID godoc
|
||||||
|
|
@ -257,7 +258,7 @@ func (h *Handler) UpdateTransactionVerified(c *fiber.Ctx) error {
|
||||||
|
|
||||||
var req UpdateTransactionVerifiedReq
|
var req UpdateTransactionVerifiedReq
|
||||||
if err := c.BodyParser(&req); err != nil {
|
if err := c.BodyParser(&req); err != nil {
|
||||||
logger.Error("Failed to parse UpdateTransactionVerified request", "error", err)
|
h.logger.Error("Failed to parse UpdateTransactionVerified request", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,11 @@
|
||||||
package handlers
|
package handlers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log/slog"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/branch"
|
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/wallet"
|
|
||||||
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/response"
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/response"
|
||||||
customvalidator "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/validator"
|
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -83,20 +79,20 @@ type CreateRefillReq struct {
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /transfer/wallet/{id} [get]
|
// @Router /transfer/wallet/{id} [get]
|
||||||
func GetTransfersByWallet(logger *slog.Logger, walletSvc *wallet.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) GetTransfersByWallet(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
walletID := c.Params("id")
|
walletID := c.Params("id")
|
||||||
|
|
||||||
id, err := strconv.ParseInt(walletID, 10, 64)
|
id, err := strconv.ParseInt(walletID, 10, 64)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Invalid wallet ID", "walletID", walletID, "error", err)
|
h.logger.Error("Invalid wallet ID", "walletID", walletID, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid wallet ID", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid wallet ID", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
transfers, err := walletSvc.GetTransfersByWallet(c.Context(), int64(id))
|
transfers, err := h.walletSvc.GetTransfersByWallet(c.Context(), int64(id))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to get transfers by wallet", "walletID", walletID, "error", err)
|
h.logger.Error("Failed to get transfers by wallet", "walletID", walletID, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve transfers", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve transfers", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -106,7 +102,7 @@ func GetTransfersByWallet(logger *slog.Logger, walletSvc *wallet.Service, valida
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Transfers retrieved successfully", transferResponses, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Transfers retrieved successfully", transferResponses, nil)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TransferToWallet godoc
|
// TransferToWallet godoc
|
||||||
|
|
@ -120,15 +116,14 @@ func GetTransfersByWallet(logger *slog.Logger, walletSvc *wallet.Service, valida
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /transfer/wallet/:id [post]
|
// @Router /transfer/wallet/:id [post]
|
||||||
func TransferToWallet(logger *slog.Logger, walletSvc *wallet.Service, branchSvc *branch.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) TransferToWallet(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
|
|
||||||
receiverIDString := c.Params("id")
|
receiverIDString := c.Params("id")
|
||||||
|
|
||||||
receiverID, err := strconv.ParseInt(receiverIDString, 10, 64)
|
receiverID, err := strconv.ParseInt(receiverIDString, 10, 64)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Invalid wallet ID", "walletID", receiverID, "error", err)
|
h.logger.Error("Invalid wallet ID", "walletID", receiverID, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid wallet ID", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid wallet ID", err, nil)
|
||||||
}
|
}
|
||||||
// Get sender ID from the cashier
|
// Get sender ID from the cashier
|
||||||
|
|
@ -138,17 +133,17 @@ func TransferToWallet(logger *slog.Logger, walletSvc *wallet.Service, branchSvc
|
||||||
var senderID int64
|
var senderID int64
|
||||||
|
|
||||||
if role == string(domain.RoleCustomer) {
|
if role == string(domain.RoleCustomer) {
|
||||||
logger.Error("Unauthorized access", "userID", userID, "role", role)
|
h.logger.Error("Unauthorized access", "userID", userID, "role", role)
|
||||||
return response.WriteJSON(c, fiber.StatusUnauthorized, "Unauthorized access", nil, nil)
|
return response.WriteJSON(c, fiber.StatusUnauthorized, "Unauthorized access", nil, nil)
|
||||||
} else if role == string(domain.RoleBranchManager) || role == string(domain.RoleAdmin) || role == string(domain.RoleSuperAdmin) {
|
} else if role == string(domain.RoleBranchManager) || role == string(domain.RoleAdmin) || role == string(domain.RoleSuperAdmin) {
|
||||||
// TODO Add a way for admins to reference branch wallet
|
// TODO Add a way for admins to reference branch wallet
|
||||||
senderID = 0
|
senderID = 0
|
||||||
logger.Error("Will", "userID", userID, "role", role)
|
h.logger.Error("Will", "userID", userID, "role", role)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Unauthorized access", nil, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Unauthorized access", nil, nil)
|
||||||
} else {
|
} else {
|
||||||
cashierBranch, err := branchSvc.GetBranchByCashier(c.Context(), userID)
|
cashierBranch, err := h.branchSvc.GetBranchByCashier(c.Context(), userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to get branch", "user ID", userID, "error", err)
|
h.logger.Error("Failed to get branch", "user ID", userID, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve cashier branch", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve cashier branch", err, nil)
|
||||||
}
|
}
|
||||||
senderID = cashierBranch.WalletID
|
senderID = cashierBranch.WalletID
|
||||||
|
|
@ -157,16 +152,16 @@ func TransferToWallet(logger *slog.Logger, walletSvc *wallet.Service, branchSvc
|
||||||
var req CreateTransferReq
|
var req CreateTransferReq
|
||||||
|
|
||||||
if err := c.BodyParser(&req); err != nil {
|
if err := c.BodyParser(&req); err != nil {
|
||||||
logger.Error("CreateTransferReq failed", "error", err)
|
h.logger.Error("CreateTransferReq failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
valErrs, ok := validator.Validate(c, req)
|
valErrs, ok := h.validator.Validate(c, req)
|
||||||
if !ok {
|
if !ok {
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
transfer, err := walletSvc.TransferToWallet(c.Context(), senderID, receiverID, domain.ToCurrency(req.Amount), domain.PaymentMethod(req.PaymentMethod), domain.ValidInt64{Value: userID, Valid: true})
|
transfer, err := h.walletSvc.TransferToWallet(c.Context(), senderID, receiverID, domain.ToCurrency(req.Amount), domain.PaymentMethod(req.PaymentMethod), domain.ValidInt64{Value: userID, Valid: true})
|
||||||
|
|
||||||
if !ok {
|
if !ok {
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Transfer Failed", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Transfer Failed", err, nil)
|
||||||
|
|
@ -176,7 +171,6 @@ func TransferToWallet(logger *slog.Logger, walletSvc *wallet.Service, branchSvc
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Transfer Successful", res, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Transfer Successful", res, nil)
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// RefillWallet godoc
|
// RefillWallet godoc
|
||||||
|
|
@ -190,15 +184,14 @@ func TransferToWallet(logger *slog.Logger, walletSvc *wallet.Service, branchSvc
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /transfer/refill/:id [post]
|
// @Router /transfer/refill/:id [post]
|
||||||
func RefillWallet(logger *slog.Logger, walletSvc *wallet.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) RefillWallet(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
|
|
||||||
receiverIDString := c.Params("id")
|
receiverIDString := c.Params("id")
|
||||||
|
|
||||||
receiverID, err := strconv.ParseInt(receiverIDString, 10, 64)
|
receiverID, err := strconv.ParseInt(receiverIDString, 10, 64)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Invalid wallet ID", "walletID", receiverID, "error", err)
|
h.logger.Error("Invalid wallet ID", "walletID", receiverID, "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid wallet ID", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid wallet ID", err, nil)
|
||||||
}
|
}
|
||||||
// Get sender ID from the cashier
|
// Get sender ID from the cashier
|
||||||
|
|
@ -206,23 +199,23 @@ func RefillWallet(logger *slog.Logger, walletSvc *wallet.Service, validator *cus
|
||||||
role := string(c.Locals("role").(domain.Role))
|
role := string(c.Locals("role").(domain.Role))
|
||||||
|
|
||||||
if role != string(domain.RoleSuperAdmin) {
|
if role != string(domain.RoleSuperAdmin) {
|
||||||
logger.Error("Unauthorized access", "userID", userID, "role", role)
|
h.logger.Error("Unauthorized access", "userID", userID, "role", role)
|
||||||
return response.WriteJSON(c, fiber.StatusUnauthorized, "Unauthorized access", nil, nil)
|
return response.WriteJSON(c, fiber.StatusUnauthorized, "Unauthorized access", nil, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
var req CreateRefillReq
|
var req CreateRefillReq
|
||||||
|
|
||||||
if err := c.BodyParser(&req); err != nil {
|
if err := c.BodyParser(&req); err != nil {
|
||||||
logger.Error("CreateRefillReq failed", "error", err)
|
h.logger.Error("CreateRefillReq failed", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
valErrs, ok := validator.Validate(c, req)
|
valErrs, ok := h.validator.Validate(c, req)
|
||||||
if !ok {
|
if !ok {
|
||||||
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
return response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
transfer, err := walletSvc.RefillWallet(c.Context(), domain.CreateTransfer{
|
transfer, err := h.walletSvc.RefillWallet(c.Context(), domain.CreateTransfer{
|
||||||
Amount: domain.ToCurrency(req.Amount),
|
Amount: domain.ToCurrency(req.Amount),
|
||||||
PaymentMethod: domain.TRANSFER_BANK,
|
PaymentMethod: domain.TRANSFER_BANK,
|
||||||
ReceiverWalletID: receiverID,
|
ReceiverWalletID: receiverID,
|
||||||
|
|
@ -241,5 +234,4 @@ func RefillWallet(logger *slog.Logger, walletSvc *wallet.Service, validator *cus
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Transfer Successful", res, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Transfer Successful", res, nil)
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -290,19 +290,7 @@ func (h *Handler) ResetPassword(c *fiber.Ctx) error {
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Password reset successful", nil, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Password reset successful", nil, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// UserProfile godoc
|
type UserProfileRes struct {
|
||||||
// @Summary Get user profile
|
|
||||||
// @Description Get user profile
|
|
||||||
// @Tags user
|
|
||||||
// @Accept json
|
|
||||||
// @Produce json
|
|
||||||
// @Success 200 {object} UserProfileRes
|
|
||||||
// @Failure 400 {object} response.APIResponse
|
|
||||||
// @Failure 500 {object} response.APIResponse
|
|
||||||
// @Security Bearer
|
|
||||||
// @Router /user/profile [get]
|
|
||||||
func (h *Handler) UserProfile(c *fiber.Ctx) error {
|
|
||||||
type UserProfileRes struct {
|
|
||||||
ID int64 `json:"id"`
|
ID int64 `json:"id"`
|
||||||
FirstName string `json:"first_name"`
|
FirstName string `json:"first_name"`
|
||||||
LastName string `json:"last_name"`
|
LastName string `json:"last_name"`
|
||||||
|
|
@ -315,7 +303,20 @@ func (h *Handler) UserProfile(c *fiber.Ctx) error {
|
||||||
UpdatedAt time.Time `json:"updated_at"`
|
UpdatedAt time.Time `json:"updated_at"`
|
||||||
SuspendedAt time.Time `json:"suspended_at"`
|
SuspendedAt time.Time `json:"suspended_at"`
|
||||||
Suspended bool `json:"suspended"`
|
Suspended bool `json:"suspended"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UserProfile godoc
|
||||||
|
// @Summary Get user profile
|
||||||
|
// @Description Get user profile
|
||||||
|
// @Tags user
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
// @Success 200 {object} UserProfileRes
|
||||||
|
// @Failure 400 {object} response.APIResponse
|
||||||
|
// @Failure 500 {object} response.APIResponse
|
||||||
|
// @Security Bearer
|
||||||
|
// @Router /user/profile [get]
|
||||||
|
func (h *Handler) UserProfile(c *fiber.Ctx) error {
|
||||||
|
|
||||||
userID, ok := c.Locals("user_id").(int64)
|
userID, ok := c.Locals("user_id").(int64)
|
||||||
if !ok || userID == 0 {
|
if !ok || userID == 0 {
|
||||||
|
|
@ -372,24 +373,22 @@ type SearchUserByNameOrPhoneReq struct {
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /user/search [post]
|
// @Router /user/search [post]
|
||||||
func SearchUserByNameOrPhone(logger *slog.Logger, userSvc *user.Service,
|
func (h *Handler) SearchUserByNameOrPhone(c *fiber.Ctx) error {
|
||||||
validator *customvalidator.CustomValidator) fiber.Handler {
|
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
var req SearchUserByNameOrPhoneReq
|
var req SearchUserByNameOrPhoneReq
|
||||||
if err := c.BodyParser(&req); err != nil {
|
if err := c.BodyParser(&req); err != nil {
|
||||||
logger.Error("SearchUserByNameOrPhone failed", "error", err)
|
h.logger.Error("SearchUserByNameOrPhone failed", "error", err)
|
||||||
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
||||||
"error": "Invalid request",
|
"error": "Invalid request",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
valErrs, ok := validator.Validate(c, req)
|
valErrs, ok := h.validator.Validate(c, req)
|
||||||
if !ok {
|
if !ok {
|
||||||
response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
response.WriteJSON(c, fiber.StatusBadRequest, "Invalid request", valErrs, nil)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
users, err := userSvc.SearchUserByNameOrPhone(c.Context(), req.SearchString)
|
users, err := h.userSvc.SearchUserByNameOrPhone(c.Context(), req.SearchString)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("SearchUserByNameOrPhone failed", "error", err)
|
h.logger.Error("SearchUserByNameOrPhone failed", "error", err)
|
||||||
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
||||||
"error": "Internal server error",
|
"error": "Internal server error",
|
||||||
})
|
})
|
||||||
|
|
@ -412,5 +411,5 @@ func SearchUserByNameOrPhone(logger *slog.Logger, userSvc *user.Service,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Search Successful", res, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Search Successful", res, nil)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -88,17 +88,6 @@ type BranchWalletRes struct {
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /wallet/{id} [get]
|
// @Router /wallet/{id} [get]
|
||||||
func (h *Handler) GetWalletByID(c *fiber.Ctx) error {
|
func (h *Handler) GetWalletByID(c *fiber.Ctx) error {
|
||||||
type WalletRes struct {
|
|
||||||
ID int64 `json:"id" example:"1"`
|
|
||||||
Balance float32 `json:"amount" example:"100.0"`
|
|
||||||
IsWithdraw bool `json:"is_withdraw" example:"true"`
|
|
||||||
IsBettable bool `json:"is_bettable" example:"true"`
|
|
||||||
IsActive bool `json:"is_active" example:"true"`
|
|
||||||
UserID int64 `json:"user_id" example:"1"`
|
|
||||||
UpdatedAt time.Time `json:"updated_at"`
|
|
||||||
CreatedAt time.Time `json:"created_at"`
|
|
||||||
}
|
|
||||||
|
|
||||||
walletID := c.Params("id")
|
walletID := c.Params("id")
|
||||||
id, err := strconv.ParseInt(walletID, 10, 64)
|
id, err := strconv.ParseInt(walletID, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -127,13 +116,12 @@ func (h *Handler) GetWalletByID(c *fiber.Ctx) error {
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /wallet [get]
|
// @Router /wallet [get]
|
||||||
func GetAllWallets(logger *slog.Logger, walletSvc *wallet.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) GetAllWallets(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
|
|
||||||
wallets, err := walletSvc.GetAllWallets(c.Context())
|
wallets, err := h.walletSvc.GetAllWallets(c.Context())
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to get wallets", "error", err)
|
h.logger.Error("Failed to get wallets", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve wallets", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve wallets", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -143,8 +131,8 @@ func GetAllWallets(logger *slog.Logger, walletSvc *wallet.Service, validator *cu
|
||||||
res = append(res, convertWallet(wallet))
|
res = append(res, convertWallet(wallet))
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "All Wallets retrieved", res, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "All wallets retrieved successfully", res, nil)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetAllBranchWallets godoc
|
// GetAllBranchWallets godoc
|
||||||
|
|
@ -157,13 +145,12 @@ func GetAllWallets(logger *slog.Logger, walletSvc *wallet.Service, validator *cu
|
||||||
// @Failure 400 {object} response.APIResponse
|
// @Failure 400 {object} response.APIResponse
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /branchWallet [get]
|
// @Router /branchWallet [get]
|
||||||
func GetAllBranchWallets(logger *slog.Logger, walletSvc *wallet.Service, validator *customvalidator.CustomValidator) fiber.Handler {
|
func (h *Handler) GetAllBranchWallets(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
|
||||||
|
|
||||||
wallets, err := walletSvc.GetAllBranchWallets(c.Context())
|
wallets, err := h.walletSvc.GetAllBranchWallets(c.Context())
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to get wallets", "error", err)
|
h.logger.Error("Failed to get wallets", "error", err)
|
||||||
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve wallets", err, nil)
|
return response.WriteJSON(c, fiber.StatusInternalServerError, "Failed to retrieve wallets", err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -185,10 +172,7 @@ func GetAllBranchWallets(logger *slog.Logger, walletSvc *wallet.Service, validat
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "All Wallets retrieved", res, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "All Wallets retrieved", res, nil)
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "All wallets retrieved successfully", res, nil)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateWalletActive godoc
|
// UpdateWalletActive godoc
|
||||||
|
|
@ -247,18 +231,6 @@ func (h *Handler) UpdateWalletActive(c *fiber.Ctx) error {
|
||||||
// @Failure 500 {object} response.APIResponse
|
// @Failure 500 {object} response.APIResponse
|
||||||
// @Router /user/wallet [get]
|
// @Router /user/wallet [get]
|
||||||
func (h *Handler) GetCustomerWallet(c *fiber.Ctx) error {
|
func (h *Handler) GetCustomerWallet(c *fiber.Ctx) error {
|
||||||
type CustomerWalletRes struct {
|
|
||||||
ID int64 `json:"id" example:"1"`
|
|
||||||
RegularID int64 `json:"regular_id" example:"1"`
|
|
||||||
RegularBalance float32 `json:"regular_balance" example:"100.0"`
|
|
||||||
StaticID int64 `json:"static_id" example:"1"`
|
|
||||||
StaticBalance float32 `json:"static_balance" example:"100.0"`
|
|
||||||
CustomerID int64 `json:"customer_id" example:"1"`
|
|
||||||
CompanyID int64 `json:"company_id" example:"1"`
|
|
||||||
RegularUpdatedAt time.Time `json:"regular_updated_at"`
|
|
||||||
StaticUpdatedAt time.Time `json:"static_updated_at"`
|
|
||||||
CreatedAt time.Time `json:"created_at"`
|
|
||||||
}
|
|
||||||
|
|
||||||
userID, ok := c.Locals("user_id").(int64)
|
userID, ok := c.Locals("user_id").(int64)
|
||||||
if !ok || userID == 0 {
|
if !ok || userID == 0 {
|
||||||
|
|
@ -291,18 +263,7 @@ func (h *Handler) GetCustomerWallet(c *fiber.Ctx) error {
|
||||||
return fiber.NewError(fiber.StatusInternalServerError, "Failed to retrieve wallet")
|
return fiber.NewError(fiber.StatusInternalServerError, "Failed to retrieve wallet")
|
||||||
}
|
}
|
||||||
|
|
||||||
res := CustomerWalletRes{
|
res := convertCustomerWallet(wallet)
|
||||||
ID: wallet.ID,
|
|
||||||
RegularID: wallet.RegularID,
|
|
||||||
RegularBalance: wallet.RegularBalance.Float64(),
|
|
||||||
StaticID: wallet.StaticID,
|
|
||||||
StaticBalance: wallet.StaticBalance.Float64(),
|
|
||||||
CustomerID: wallet.CustomerID,
|
|
||||||
CompanyID: wallet.CompanyID,
|
|
||||||
RegularUpdatedAt: wallet.RegularUpdatedAt,
|
|
||||||
StaticUpdatedAt: wallet.StaticUpdatedAt,
|
|
||||||
CreatedAt: wallet.CreatedAt,
|
|
||||||
}
|
|
||||||
|
|
||||||
return response.WriteJSON(c, fiber.StatusOK, "Wallet retrieved successfully", res, nil)
|
return response.WriteJSON(c, fiber.StatusOK, "Wallet retrieved successfully", res, nil)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,10 @@ func (a *App) initAppRoutes() {
|
||||||
a.betSvc,
|
a.betSvc,
|
||||||
a.authSvc,
|
a.authSvc,
|
||||||
a.JwtConfig,
|
a.JwtConfig,
|
||||||
|
a.branchSvc,
|
||||||
|
a.companySvc,
|
||||||
|
a.prematchSvc,
|
||||||
|
a.eventSvc,
|
||||||
)
|
)
|
||||||
|
|
||||||
// Auth Routes
|
// Auth Routes
|
||||||
|
|
@ -66,7 +70,7 @@ func (a *App) initAppRoutes() {
|
||||||
a.fiber.Get("/user/profile", a.authMiddleware, h.UserProfile)
|
a.fiber.Get("/user/profile", a.authMiddleware, h.UserProfile)
|
||||||
|
|
||||||
a.fiber.Get("/user/wallet", a.authMiddleware, h.GetCustomerWallet)
|
a.fiber.Get("/user/wallet", a.authMiddleware, h.GetCustomerWallet)
|
||||||
a.fiber.Post("/user/search", a.authMiddleware, handlers.SearchUserByNameOrPhone(a.logger, a.userSvc, a.validator))
|
a.fiber.Post("/user/search", a.authMiddleware, h.SearchUserByNameOrPhone)
|
||||||
|
|
||||||
// Referral Routes
|
// Referral Routes
|
||||||
a.fiber.Post("/referral/create", a.authMiddleware, h.CreateReferralCode)
|
a.fiber.Post("/referral/create", a.authMiddleware, h.CreateReferralCode)
|
||||||
|
|
@ -74,53 +78,53 @@ func (a *App) initAppRoutes() {
|
||||||
a.fiber.Get("/referral/settings", h.GetReferralSettings)
|
a.fiber.Get("/referral/settings", h.GetReferralSettings)
|
||||||
a.fiber.Patch("/referral/settings", a.authMiddleware, h.UpdateReferralSettings)
|
a.fiber.Patch("/referral/settings", a.authMiddleware, h.UpdateReferralSettings)
|
||||||
|
|
||||||
a.fiber.Get("/cashiers", a.authMiddleware, handlers.GetAllCashiers(a.logger, a.userSvc, a.validator))
|
a.fiber.Get("/cashiers", a.authMiddleware, h.GetAllCashiers)
|
||||||
a.fiber.Post("/cashiers", a.authMiddleware, handlers.CreateCashier(a.logger, a.userSvc, a.branchSvc, a.validator))
|
a.fiber.Post("/cashiers", a.authMiddleware, h.CreateCashier)
|
||||||
a.fiber.Put("/cashiers/:id", a.authMiddleware, handlers.UpdateCashier(a.logger, a.userSvc, a.validator))
|
a.fiber.Put("/cashiers/:id", a.authMiddleware, h.UpdateCashier)
|
||||||
//
|
//
|
||||||
|
|
||||||
a.fiber.Get("/managers", a.authMiddleware, handlers.GetAllManagers(a.logger, a.userSvc, a.validator))
|
a.fiber.Get("/managers", a.authMiddleware, h.GetAllManagers)
|
||||||
a.fiber.Post("/managers", a.authMiddleware, handlers.CreateManager(a.logger, a.userSvc, a.validator))
|
a.fiber.Post("/managers", a.authMiddleware, h.CreateManager)
|
||||||
a.fiber.Put("/managers/:id", a.authMiddleware, handlers.UPdateManagers(a.logger, a.userSvc, a.validator))
|
a.fiber.Put("/managers/:id", a.authMiddleware, h.UpdateManagers)
|
||||||
a.fiber.Get("/manager/:id/branch", a.authMiddleware, handlers.GetBranchByManagerID(a.logger, a.branchSvc, a.validator))
|
a.fiber.Get("/manager/:id/branch", a.authMiddleware, h.GetBranchByManagerID)
|
||||||
|
|
||||||
a.fiber.Get("/company/:id/branch", a.authMiddleware, handlers.GetBranchByCompanyID(a.logger, a.branchSvc, a.validator))
|
a.fiber.Get("/company/:id/branch", a.authMiddleware, h.GetBranchByCompanyID)
|
||||||
|
|
||||||
a.fiber.Get("/prematch/odds/:event_id", handlers.GetPrematchOdds(a.logger, a.prematchSvc))
|
a.fiber.Get("/prematch/odds/:event_id", h.GetPrematchOdds)
|
||||||
a.fiber.Get("/prematch/odds", handlers.GetALLPrematchOdds(a.logger, a.prematchSvc))
|
a.fiber.Get("/prematch/odds", h.GetALLPrematchOdds)
|
||||||
a.fiber.Get("/prematch/odds/upcoming/:upcoming_id/market/:market_id", handlers.GetRawOddsByMarketID(a.logger, a.prematchSvc))
|
a.fiber.Get("/prematch/odds/upcoming/:upcoming_id/market/:market_id", h.GetRawOddsByMarketID)
|
||||||
|
|
||||||
a.fiber.Get("/prematch/events/:id", handlers.GetUpcomingEventByID(a.logger, a.eventSvc))
|
a.fiber.Get("/prematch/events/:id", h.GetUpcomingEventByID)
|
||||||
a.fiber.Get("/prematch/events", handlers.GetAllUpcomingEvents(a.logger, a.eventSvc))
|
a.fiber.Get("/prematch/events", h.GetAllUpcomingEvents)
|
||||||
a.fiber.Get("/prematch/odds/upcoming/:upcoming_id", handlers.GetPrematchOddsByUpcomingID(a.logger, a.prematchSvc))
|
a.fiber.Get("/prematch/odds/upcoming/:upcoming_id", h.GetPrematchOddsByUpcomingID)
|
||||||
|
|
||||||
// Swagger
|
// Swagger
|
||||||
a.fiber.Get("/swagger/*", fiberSwagger.FiberWrapHandler())
|
a.fiber.Get("/swagger/*", fiberSwagger.FiberWrapHandler())
|
||||||
|
|
||||||
// Branch
|
// Branch
|
||||||
a.fiber.Post("/branch", a.authMiddleware, handlers.CreateBranch(a.logger, a.branchSvc, a.walletSvc, a.validator))
|
a.fiber.Post("/branch", a.authMiddleware, h.CreateBranch)
|
||||||
a.fiber.Get("/branch", a.authMiddleware, handlers.GetAllBranches(a.logger, a.branchSvc, a.validator))
|
a.fiber.Get("/branch", a.authMiddleware, h.GetAllBranches)
|
||||||
a.fiber.Get("/branch/:id", a.authMiddleware, handlers.GetBranchByID(a.logger, a.branchSvc, a.validator))
|
a.fiber.Get("/branch/:id", a.authMiddleware, h.GetBranchByID)
|
||||||
a.fiber.Get("/branch/:id/bets", a.authMiddleware, handlers.GetBetByBranchID(a.logger, a.betSvc, a.validator))
|
a.fiber.Get("/branch/:id/bets", a.authMiddleware, h.GetBetByBranchID)
|
||||||
a.fiber.Put("/branch/:id", a.authMiddleware, handlers.UpdateBranch(a.logger, a.branchSvc, a.validator))
|
a.fiber.Put("/branch/:id", a.authMiddleware, h.UpdateBranch)
|
||||||
a.fiber.Delete("/branch/:id", a.authMiddleware, handlers.DeleteBranch(a.logger, a.branchSvc, a.validator))
|
a.fiber.Delete("/branch/:id", a.authMiddleware, h.DeleteBranch)
|
||||||
a.fiber.Get("/search/branch", a.authMiddleware, handlers.SearchBranch(a.logger, a.branchSvc, a.validator))
|
a.fiber.Get("/search/branch", a.authMiddleware, h.SearchBranch)
|
||||||
// /branch/search
|
// /branch/search
|
||||||
// branch/wallet
|
// branch/wallet
|
||||||
|
|
||||||
// Branch Operation
|
// Branch Operation
|
||||||
a.fiber.Get("/supportedOperation", a.authMiddleware, handlers.GetAllSupportedOperations(a.logger, a.branchSvc, a.validator))
|
a.fiber.Get("/supportedOperation", a.authMiddleware, h.GetAllSupportedOperations)
|
||||||
a.fiber.Post("/supportedOperation", a.authMiddleware, handlers.CreateSupportedOperation(a.logger, a.branchSvc, a.validator))
|
a.fiber.Post("/supportedOperation", a.authMiddleware, h.CreateSupportedOperation)
|
||||||
a.fiber.Post("/operation", a.authMiddleware, handlers.CreateBranchOperation(a.logger, a.branchSvc, a.validator))
|
a.fiber.Post("/operation", a.authMiddleware, h.CreateBranchOperation)
|
||||||
a.fiber.Get("/branch/:id/operation", a.authMiddleware, handlers.GetBranchOperations(a.logger, a.branchSvc, a.validator))
|
a.fiber.Get("/branch/:id/operation", a.authMiddleware, h.GetBranchOperations)
|
||||||
a.fiber.Delete("/branch/:id/operation/:opID", a.authMiddleware, handlers.DeleteBranchOperation(a.logger, a.branchSvc, a.validator))
|
a.fiber.Delete("/branch/:id/operation/:opID", a.authMiddleware, h.DeleteBranchOperation)
|
||||||
|
|
||||||
// Company
|
// Company
|
||||||
a.fiber.Post("/company", a.authMiddleware, a.SuperAdminOnly, handlers.CreateCompany(a.logger, a.companySvc, a.walletSvc, a.validator))
|
a.fiber.Post("/company", a.authMiddleware, a.SuperAdminOnly, h.CreateCompany)
|
||||||
a.fiber.Get("/company", a.authMiddleware, a.SuperAdminOnly, handlers.GetAllCompanies(a.logger, a.companySvc, a.validator))
|
a.fiber.Get("/company", a.authMiddleware, a.SuperAdminOnly, h.GetAllCompanies)
|
||||||
a.fiber.Get("/company/:id", a.authMiddleware, a.SuperAdminOnly, handlers.GetCompanyByID(a.logger, a.companySvc, a.validator))
|
a.fiber.Get("/company/:id", a.authMiddleware, a.SuperAdminOnly, h.GetCompanyByID)
|
||||||
a.fiber.Put("/company/:id", a.authMiddleware, a.SuperAdminOnly, handlers.UpdateCompany(a.logger, a.companySvc, a.validator))
|
a.fiber.Put("/company/:id", a.authMiddleware, a.SuperAdminOnly, h.UpdateCompany)
|
||||||
a.fiber.Delete("/company/:id", a.authMiddleware, a.SuperAdminOnly, handlers.DeleteCompany(a.logger, a.companySvc, a.validator))
|
a.fiber.Delete("/company/:id", a.authMiddleware, a.SuperAdminOnly, h.DeleteCompany)
|
||||||
|
|
||||||
// Ticket Routes
|
// Ticket Routes
|
||||||
a.fiber.Post("/ticket", h.CreateTicket)
|
a.fiber.Post("/ticket", h.CreateTicket)
|
||||||
|
|
@ -131,21 +135,21 @@ func (a *App) initAppRoutes() {
|
||||||
a.fiber.Post("/bet", h.CreateBet)
|
a.fiber.Post("/bet", h.CreateBet)
|
||||||
a.fiber.Get("/bet", h.GetAllBet)
|
a.fiber.Get("/bet", h.GetAllBet)
|
||||||
a.fiber.Get("/bet/:id", h.GetBetByID)
|
a.fiber.Get("/bet/:id", h.GetBetByID)
|
||||||
a.fiber.Get("/bet/cashout/:id", a.authMiddleware, handlers.GetBetByCashoutID(a.logger, a.betSvc, a.validator))
|
a.fiber.Get("/bet/cashout/:id", a.authMiddleware, h.GetBetByCashoutID)
|
||||||
a.fiber.Patch("/bet/:id", h.UpdateCashOut)
|
a.fiber.Patch("/bet/:id", h.UpdateCashOut)
|
||||||
a.fiber.Delete("/bet/:id", h.DeleteBet)
|
a.fiber.Delete("/bet/:id", h.DeleteBet)
|
||||||
|
|
||||||
// Wallet
|
// Wallet
|
||||||
a.fiber.Get("/wallet", handlers.GetAllWallets(a.logger, a.walletSvc, a.validator))
|
a.fiber.Get("/wallet", h.GetAllWallets)
|
||||||
a.fiber.Get("/wallet/:id", handlers.GetWalletByID(a.logger, a.walletSvc, a.validator))
|
a.fiber.Get("/wallet/:id", h.GetWalletByID)
|
||||||
a.fiber.Put("/wallet/:id", handlers.UpdateWalletActive(a.logger, a.walletSvc, a.validator))
|
a.fiber.Put("/wallet/:id", h.UpdateWalletActive)
|
||||||
a.fiber.Get("/branchWallet", a.authMiddleware, handlers.GetAllBranchWallets(a.logger, a.walletSvc, a.validator))
|
a.fiber.Get("/branchWallet", a.authMiddleware, h.GetAllBranchWallets)
|
||||||
|
|
||||||
// Transfer
|
// Transfer
|
||||||
// /transfer/wallet - transfer from one wallet to another wallet
|
// /transfer/wallet - transfer from one wallet to another wallet
|
||||||
a.fiber.Post("/transfer/wallet/:id", a.authMiddleware, handlers.TransferToWallet(a.logger, a.walletSvc, a.branchSvc, a.validator))
|
a.fiber.Post("/transfer/wallet/:id", a.authMiddleware, h.TransferToWallet)
|
||||||
a.fiber.Get("/transfer/wallet/:id", a.authMiddleware, handlers.GetTransfersByWallet(a.logger, a.walletSvc, a.validator))
|
a.fiber.Get("/transfer/wallet/:id", a.authMiddleware, h.GetTransfersByWallet)
|
||||||
a.fiber.Post("/transfer/refill/:id", a.authMiddleware, handlers.RefillWallet(a.logger, a.walletSvc, a.validator))
|
a.fiber.Post("/transfer/refill/:id", a.authMiddleware, h.RefillWallet)
|
||||||
|
|
||||||
// Transactions /transactions
|
// Transactions /transactions
|
||||||
a.fiber.Post("/transaction", h.CreateTransaction)
|
a.fiber.Post("/transaction", h.CreateTransaction)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user