treasurer/internal/interface/controller/rest/common.go
2023-06-13 13:22:51 +00:00

51 lines
1.4 KiB
Go

package rest
import (
"context"
"net/http"
"github.com/labstack/echo/v4"
"go.uber.org/zap"
"penahub.gitlab.yandexcloud.net/external/treasurer/internal/errors"
"penahub.gitlab.yandexcloud.net/external/treasurer/internal/models"
)
type PaymentService interface {
GetAvailablePaymentMethods(context.Context) ([]models.PaymentType, errors.Error)
}
type CommonControllerDeps struct {
Logger *zap.Logger
PaymentService PaymentService
}
type CommonController struct {
logger *zap.Logger
paymentService PaymentService
}
func NewCommonController(deps CommonControllerDeps) (*CommonController, errors.Error) {
if deps.Logger == nil {
return nil, errors.NewWithMessage("Logger in nil on <NewCommonController>", errors.ErrInvalidArgs)
}
if deps.PaymentService == nil {
return nil, errors.NewWithMessage("PaymentService in nil on <NewCommonController>", errors.ErrInvalidArgs)
}
return &CommonController{
logger: deps.Logger,
paymentService: deps.PaymentService,
}, nil
}
func (receiver *CommonController) GetAvailablePayments(ctx echo.Context) error {
methods, err := receiver.paymentService.GetAvailablePaymentMethods(ctx.Request().Context())
if err != nil {
receiver.logger.Error("failed to get payment link on <GetAvailablePayments> of <CommonController>", zap.Error(err))
return errors.HTTP(ctx, err)
}
return ctx.JSON(http.StatusOK, methods)
}