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 ", errors.ErrInvalidArgs) } if deps.PaymentService == nil { return nil, errors.NewWithMessage("PaymentService in nil on ", 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 of ", zap.Error(err)) return errors.HTTP(ctx, err) } return ctx.JSON(http.StatusOK, methods) }