59 lines
1.7 KiB
Go
59 lines
1.7 KiB
Go
package handlers
|
|
|
|
import (
|
|
"Yimaru-Backend/internal/domain"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
// @Summary Get supported currencies
|
|
// @Description Returns list of supported currencies
|
|
// @Tags Multi-Currency
|
|
// @Produce json
|
|
// @Success 200 {object} domain.Response{data=[]domain.Currency}
|
|
// @Router /api/v1/currencies [get]
|
|
func (h *Handler) GetSupportedCurrencies(c *fiber.Ctx) error {
|
|
currencies, err := h.currSvc.GetSupportedCurrencies(c.Context())
|
|
if err != nil {
|
|
return domain.UnExpectedErrorResponse(c)
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(domain.Response{
|
|
Success: true,
|
|
Message: "Supported currencies retrieved successfully",
|
|
Data: currencies,
|
|
StatusCode: fiber.StatusOK,
|
|
})
|
|
}
|
|
|
|
// @Summary Convert currency
|
|
// @Description Converts amount from one currency to another
|
|
// @Tags Multi-Currency
|
|
// @Produce json
|
|
// @Param from query string true "Source currency code (e.g., USD)"
|
|
// @Param to query string true "Target currency code (e.g., ETB)"
|
|
// @Param amount query number true "Amount to convert"
|
|
// @Success 200 {object} domain.Response{data=float64}
|
|
// @Failure 400 {object} domain.ErrorResponse
|
|
// @Router /api/v1/currencies/convert [get]
|
|
func (h *Handler) ConvertCurrency(c *fiber.Ctx) error {
|
|
from := domain.IntCurrency(c.Query("from"))
|
|
to := domain.IntCurrency(c.Query("to"))
|
|
amount := c.QueryFloat("amount", 0)
|
|
// if err != nil {
|
|
// return domain.BadRequestResponse(c)
|
|
// }
|
|
|
|
converted, err := h.currSvc.Convert(c.Context(), amount, from, to)
|
|
if err != nil {
|
|
return domain.UnExpectedErrorResponse(c)
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(domain.Response{
|
|
Success: true,
|
|
Message: "Currency converted successfully",
|
|
Data: converted,
|
|
StatusCode: fiber.StatusOK,
|
|
})
|
|
}
|