124 lines
3.6 KiB
Go
124 lines
3.6 KiB
Go
package handlers
|
|
|
|
import (
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
// InitiateDirectDeposit godoc
|
|
// @Summary Initiate a direct deposit
|
|
// @Description Customer initiates a direct deposit from mobile banking
|
|
// @Tags Direct Deposits
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param request body domain.DirectDepositRequest true "Deposit details"
|
|
// @Success 201 {object} domain.Response
|
|
// @Failure 400 {object} domain.ErrorResponse
|
|
// @Failure 500 {object} domain.ErrorResponse
|
|
// @Router /api/v1/direct_deposit [post]
|
|
func (h *Handler) InitiateDirectDeposit(c *fiber.Ctx) error {
|
|
var req domain.DirectDepositRequest
|
|
if err := c.BodyParser(&req); err != nil {
|
|
return c.Status(fiber.StatusBadRequest).JSON(domain.ErrorResponse{
|
|
Error: err.Error(),
|
|
Message: "Invalid request payload",
|
|
})
|
|
}
|
|
|
|
deposit, err := h.walletSvc.InitiateDirectDeposit(
|
|
c.Context(),
|
|
req.CustomerID,
|
|
req.Amount,
|
|
req.BankReference,
|
|
req.SenderAccount,
|
|
)
|
|
if err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(domain.ErrorResponse{
|
|
Error: err.Error(),
|
|
Message: "Failed to initiate direct deposit",
|
|
})
|
|
}
|
|
|
|
return c.Status(fiber.StatusCreated).JSON(domain.Response{
|
|
Message: "Direct deposit initiated successfully",
|
|
Data: deposit,
|
|
Success: true,
|
|
StatusCode: fiber.StatusCreated,
|
|
})
|
|
}
|
|
|
|
// VerifyDirectDeposit godoc
|
|
// @Summary Verify a direct deposit
|
|
// @Description Cashier verifies a direct deposit transaction
|
|
// @Tags Direct Deposits
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param request body domain.VerifyDirectDepositRequest true "Verification details"
|
|
// @Success 200 {object} domain.Response
|
|
// @Failure 400 {object} domain.ErrorResponse
|
|
// @Failure 401 {object} domain.ErrorResponse
|
|
// @Failure 500 {object} domain.ErrorResponse
|
|
// @Router /api/v1/direct_deposit/verify [post]
|
|
func (h *Handler) VerifyDirectDeposit(c *fiber.Ctx) error {
|
|
var req domain.VerifyDirectDepositRequest
|
|
if err := c.BodyParser(&req); err != nil {
|
|
return c.Status(fiber.StatusBadRequest).JSON(domain.ErrorResponse{
|
|
Error: err.Error(),
|
|
Message: "Invalid verification request",
|
|
})
|
|
}
|
|
|
|
cashierID := c.Locals("user_id")
|
|
if cashierID == nil {
|
|
return c.Status(fiber.StatusUnauthorized).JSON(domain.ErrorResponse{
|
|
Error: "missing user_id in context",
|
|
Message: "Unauthorized access",
|
|
})
|
|
}
|
|
|
|
deposit, err := h.walletSvc.VerifyDirectDeposit(
|
|
c.Context(),
|
|
req.DepositID,
|
|
cashierID.(int64),
|
|
req.IsVerified,
|
|
req.Notes,
|
|
)
|
|
if err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(domain.ErrorResponse{
|
|
Error: err.Error(),
|
|
Message: "Failed to verify deposit",
|
|
})
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(domain.Response{
|
|
Message: "Deposit verification processed successfully",
|
|
Data: deposit,
|
|
Success: true,
|
|
StatusCode: fiber.StatusOK,
|
|
})
|
|
}
|
|
|
|
// GetPendingDeposits godoc
|
|
// @Summary Get pending direct deposits
|
|
// @Description Get list of direct deposits needing verification
|
|
// @Tags Direct Deposits
|
|
// @Produce json
|
|
// @Success 200 {object} domain.Response
|
|
// @Failure 500 {object} domain.ErrorResponse
|
|
// @Router /api/v1/direct_deposit/pending [get]
|
|
func (h *Handler) GetPendingDirectDeposits(c *fiber.Ctx) error {
|
|
deposits, err := h.walletSvc.GetPendingDirectDeposits(c.Context())
|
|
if err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(domain.ErrorResponse{
|
|
Error: err.Error(),
|
|
Message: "Failed to retrieve pending deposits",
|
|
})
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(domain.Response{
|
|
Message: "Pending deposits retrieved successfully",
|
|
Data: deposits,
|
|
Success: true,
|
|
StatusCode: fiber.StatusOK,
|
|
})
|
|
} |