diff --git a/cmd/main.go b/cmd/main.go index c430131..b644b2f 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -137,6 +137,7 @@ func main() { wallet.TransferStore(store), *walletSvc, user.UserStore(store), + cfg, chapaClient, ) diff --git a/gen/db/auth.sql.go b/gen/db/auth.sql.go index 527f25c..9c55b29 100644 --- a/gen/db/auth.sql.go +++ b/gen/db/auth.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 // source: auth.sql package dbgen diff --git a/gen/db/bet.sql.go b/gen/db/bet.sql.go index 848a779..52452f2 100644 --- a/gen/db/bet.sql.go +++ b/gen/db/bet.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 // source: bet.sql package dbgen diff --git a/gen/db/branch.sql.go b/gen/db/branch.sql.go index e343ce4..7e8a754 100644 --- a/gen/db/branch.sql.go +++ b/gen/db/branch.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 // source: branch.sql package dbgen diff --git a/gen/db/cashier.sql.go b/gen/db/cashier.sql.go index 27a1ffb..113771c 100644 --- a/gen/db/cashier.sql.go +++ b/gen/db/cashier.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 // source: cashier.sql package dbgen diff --git a/gen/db/company.sql.go b/gen/db/company.sql.go index 3c5a6b1..449c8fd 100644 --- a/gen/db/company.sql.go +++ b/gen/db/company.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 // source: company.sql package dbgen diff --git a/gen/db/copyfrom.go b/gen/db/copyfrom.go index 900af58..1212253 100644 --- a/gen/db/copyfrom.go +++ b/gen/db/copyfrom.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 // source: copyfrom.go package dbgen diff --git a/gen/db/db.go b/gen/db/db.go index d892683..84de07c 100644 --- a/gen/db/db.go +++ b/gen/db/db.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 package dbgen diff --git a/gen/db/events.sql.go b/gen/db/events.sql.go index 0ce862a..bd84b8d 100644 --- a/gen/db/events.sql.go +++ b/gen/db/events.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 // source: events.sql package dbgen diff --git a/gen/db/leagues.sql.go b/gen/db/leagues.sql.go index 4bae480..fa5da4c 100644 --- a/gen/db/leagues.sql.go +++ b/gen/db/leagues.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 // source: leagues.sql package dbgen diff --git a/gen/db/models.go b/gen/db/models.go index 3f62b18..4ff2f82 100644 --- a/gen/db/models.go +++ b/gen/db/models.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 package dbgen diff --git a/gen/db/monitor.sql.go b/gen/db/monitor.sql.go index db8a9ba..a9a7ecb 100644 --- a/gen/db/monitor.sql.go +++ b/gen/db/monitor.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 // source: monitor.sql package dbgen diff --git a/gen/db/notification.sql.go b/gen/db/notification.sql.go index 9d9b242..ba9882b 100644 --- a/gen/db/notification.sql.go +++ b/gen/db/notification.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 // source: notification.sql package dbgen diff --git a/gen/db/odds.sql.go b/gen/db/odds.sql.go index 99c47b7..cb30007 100644 --- a/gen/db/odds.sql.go +++ b/gen/db/odds.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 // source: odds.sql package dbgen diff --git a/gen/db/otp.sql.go b/gen/db/otp.sql.go index 99cdd4c..7dba175 100644 --- a/gen/db/otp.sql.go +++ b/gen/db/otp.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 // source: otp.sql package dbgen diff --git a/gen/db/referal.sql.go b/gen/db/referal.sql.go index d0ab21e..3a7f337 100644 --- a/gen/db/referal.sql.go +++ b/gen/db/referal.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 // source: referal.sql package dbgen diff --git a/gen/db/result.sql.go b/gen/db/result.sql.go index cb3fdd8..bff7b1e 100644 --- a/gen/db/result.sql.go +++ b/gen/db/result.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 // source: result.sql package dbgen diff --git a/gen/db/settings.sql.go b/gen/db/settings.sql.go index a7c9187..352966a 100644 --- a/gen/db/settings.sql.go +++ b/gen/db/settings.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 // source: settings.sql package dbgen diff --git a/gen/db/ticket.sql.go b/gen/db/ticket.sql.go index 443b266..4140384 100644 --- a/gen/db/ticket.sql.go +++ b/gen/db/ticket.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 // source: ticket.sql package dbgen diff --git a/gen/db/transactions.sql.go b/gen/db/transactions.sql.go index 80e6022..cbd5743 100644 --- a/gen/db/transactions.sql.go +++ b/gen/db/transactions.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 // source: transactions.sql package dbgen diff --git a/gen/db/transfer.sql.go b/gen/db/transfer.sql.go index e7bcba8..18b6243 100644 --- a/gen/db/transfer.sql.go +++ b/gen/db/transfer.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 // source: transfer.sql package dbgen diff --git a/gen/db/user.sql.go b/gen/db/user.sql.go index 2b440c2..89051b2 100644 --- a/gen/db/user.sql.go +++ b/gen/db/user.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 // source: user.sql package dbgen diff --git a/gen/db/virtual_games.sql.go b/gen/db/virtual_games.sql.go index a2e0de0..94cdeca 100644 --- a/gen/db/virtual_games.sql.go +++ b/gen/db/virtual_games.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 // source: virtual_games.sql package dbgen diff --git a/gen/db/wallet.sql.go b/gen/db/wallet.sql.go index 1bcfa9a..c0c3d3c 100644 --- a/gen/db/wallet.sql.go +++ b/gen/db/wallet.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 // source: wallet.sql package dbgen diff --git a/internal/repository/transfer.go b/internal/repository/transfer.go index e5adcd4..afa603a 100644 --- a/internal/repository/transfer.go +++ b/internal/repository/transfer.go @@ -46,6 +46,8 @@ func convertCreateTransfer(transfer domain.CreateTransfer) dbgen.CreateTransferP Int64: transfer.CashierID.Value, Valid: transfer.CashierID.Valid, }, + ReferenceNumber: pgtype.Text{String: string(transfer.ReferenceNumber), Valid: true}, + PaymentMethod: pgtype.Text{String: string(transfer.PaymentMethod), Valid: true}, } } diff --git a/internal/repository/virtual_game.go b/internal/repository/virtual_game.go index c174a36..25c5280 100644 --- a/internal/repository/virtual_game.go +++ b/internal/repository/virtual_game.go @@ -96,9 +96,9 @@ func (r *VirtualGameRepo) CreateVirtualGameTransaction(ctx context.Context, tx * func (r *VirtualGameRepo) CreateVirtualGameHistory(ctx context.Context, his *domain.VirtualGameHistory) error { params := dbgen.CreateVirtualGameHistoryParams{ - SessionID: pgtype.Text{String: his.SessionID, Valid: true}, - UserID: his.UserID, - WalletID: pgtype.Int8{Int64: *his.WalletID, Valid: true}, + SessionID: pgtype.Text{String: his.SessionID, Valid: true}, + UserID: his.UserID, + // WalletID: pgtype.Int8{Int64: *his.WalletID, Valid: true}, TransactionType: his.TransactionType, Amount: his.Amount, Currency: his.Currency, diff --git a/internal/services/chapa/client.go b/internal/services/chapa/client.go index 94e1573..748bc13 100644 --- a/internal/services/chapa/client.go +++ b/internal/services/chapa/client.go @@ -5,6 +5,7 @@ import ( "context" "encoding/json" "fmt" + "io" "net/http" "net/url" "time" @@ -30,9 +31,9 @@ func NewClient(baseURL, secretKey string) *Client { func (c *Client) InitializePayment(ctx context.Context, req domain.ChapaDepositRequest) (domain.ChapaDepositResponse, error) { payload := map[string]interface{}{ - "amount": req.Amount, + "amount": fmt.Sprintf("%.2f", float64(req.Amount)/100), "currency": req.Currency, - "email": req.Email, + // "email": req.Email, "first_name": req.FirstName, "last_name": req.LastName, "tx_ref": req.TxRef, @@ -40,6 +41,8 @@ func (c *Client) InitializePayment(ctx context.Context, req domain.ChapaDepositR "return_url": req.ReturnURL, } + fmt.Printf("\n\nChapa Payload: %+v\n\n", payload) + payloadBytes, err := json.Marshal(payload) if err != nil { return domain.ChapaDepositResponse{}, fmt.Errorf("failed to marshal payload: %w", err) @@ -50,6 +53,8 @@ func (c *Client) InitializePayment(ctx context.Context, req domain.ChapaDepositR return domain.ChapaDepositResponse{}, fmt.Errorf("failed to create request: %w", err) } + fmt.Printf("\n\nBase URL is: %+v\n\n", c.baseURL) + httpReq.Header.Set("Authorization", "Bearer "+c.secretKey) httpReq.Header.Set("Content-Type", "application/json") @@ -59,6 +64,11 @@ func (c *Client) InitializePayment(ctx context.Context, req domain.ChapaDepositR } defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + body, _ := io.ReadAll(resp.Body) // <-- Add this + return domain.ChapaDepositResponse{}, fmt.Errorf("unexpected status code: %d - %s", resp.StatusCode, string(body)) // <-- Log it + } + if resp.StatusCode != http.StatusOK { return domain.ChapaDepositResponse{}, fmt.Errorf("unexpected status code: %d", resp.StatusCode) } @@ -77,7 +87,7 @@ func (c *Client) InitializePayment(ctx context.Context, req domain.ChapaDepositR return domain.ChapaDepositResponse{ CheckoutURL: response.Data.CheckoutURL, - // Reference: req.TxRef, + Reference: req.TxRef, }, nil } diff --git a/internal/services/chapa/service.go b/internal/services/chapa/service.go index 72e1306..273e5d4 100644 --- a/internal/services/chapa/service.go +++ b/internal/services/chapa/service.go @@ -31,6 +31,7 @@ func NewService( transferStore wallet.TransferStore, walletStore wallet.Service, userStore user.UserStore, + cfg *config.Config, chapaClient *Client, ) *Service { @@ -38,6 +39,7 @@ func NewService( transferStore: transferStore, walletStore: walletStore, userStore: userStore, + cfg: cfg, chapaClient: chapaClient, } } @@ -102,8 +104,8 @@ func (s *Service) InitiateDeposit(ctx context.Context, userID int64, amount doma FirstName: user.FirstName, LastName: user.LastName, TxRef: reference, - CallbackURL: "https://fortunebet.com/api/v1/payments/callback", - ReturnURL: "https://fortunebet.com/api/v1/payment-success", + CallbackURL: s.cfg.CHAPA_CALLBACK_URL, + ReturnURL: s.cfg.CHAPA_RETURN_URL, }) if err != nil { @@ -220,6 +222,9 @@ func (s *Service) ManualVerifTransaction(ctx context.Context, txRef string) (*do }, nil } + fmt.Printf("\n\nSender wallet ID is:%v\n\n", transfer.SenderWalletID.Value) + fmt.Printf("\n\nTransfer is:%v\n\n", transfer) + // just making sure that the sender id is valid if !transfer.SenderWalletID.Valid { return nil, fmt.Errorf("sender wallet id is invalid: %v \n", transfer.SenderWalletID) diff --git a/internal/web_server/handlers/chapa.go b/internal/web_server/handlers/chapa.go index 7d84ddf..751f78c 100644 --- a/internal/web_server/handlers/chapa.go +++ b/internal/web_server/handlers/chapa.go @@ -24,7 +24,8 @@ func (h *Handler) InitiateDeposit(c *fiber.Ctx) error { userID, ok := c.Locals("user_id").(int64) if !ok { return c.Status(fiber.StatusBadRequest).JSON(domain.ErrorResponse{ - Error: "invalid user ID", + Error: "invalid user ID", + Message: "User ID is required to initiate a deposit", }) } @@ -33,7 +34,8 @@ func (h *Handler) InitiateDeposit(c *fiber.Ctx) error { if err := c.BodyParser(&req); err != nil { fmt.Sprintln("We first first are here init Chapa payment") return c.Status(fiber.StatusBadRequest).JSON(domain.ErrorResponse{ - Error: err.Error(), + Error: err.Error(), + Message: "Failed to parse request body", }) } @@ -45,12 +47,15 @@ func (h *Handler) InitiateDeposit(c *fiber.Ctx) error { if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(domain.ErrorResponse{ Error: err.Error(), - Message: checkoutURL, + Message: "Failed to initiate Chapa deposit", }) } - return c.Status(fiber.StatusOK).JSON(domain.ChapaDepositResponse{ - CheckoutURL: checkoutURL, + return c.Status(fiber.StatusOK).JSON(domain.Response{ + Message: "Chapa deposit process initiated successfully", + Data: checkoutURL, + StatusCode: 200, + Success: true, }) } diff --git a/internal/web_server/routes.go b/internal/web_server/routes.go index 6fa1c57..97e7a40 100644 --- a/internal/web_server/routes.go +++ b/internal/web_server/routes.go @@ -248,7 +248,7 @@ func (a *App) initAppRoutes() { group.Get("/logs", a.authMiddleware, a.SuperAdminOnly, handlers.GetLogsHandler(ctx)) // Recommendation Routes - group.Get("/virtual-games/recommendations/:userID", h.GetRecommendations) + // group.Get("/virtual-games/recommendations/:userID", h.GetRecommendations) // Transactions /transactions a.fiber.Post("/transaction", a.authMiddleware, h.CreateTransaction)