treasurer/internal/interface/controller/rest/payment.go

63 lines
1.8 KiB
Go

package rest
import (
"sync"
"gitea.pena/PenaSide/treasurer/internal/errors"
"gitea.pena/PenaSide/treasurer/internal/interface/payment_provider"
"gitea.pena/PenaSide/treasurer/internal/models"
"github.com/labstack/echo/v4"
"go.uber.org/zap"
)
type PaymentControllerDeps struct {
Logger *zap.Logger
PaymentProviders []payment_provider.PaymentProvider
}
type PaymentController struct {
logger *zap.Logger
paymentProviders []payment_provider.PaymentProvider
providerMap map[models.PaymentType][]payment_provider.PaymentProvider
mu sync.RWMutex
}
func NewPaymentController(deps PaymentControllerDeps) (*PaymentController, errors.Error) {
if deps.Logger == nil {
return nil, errors.NewWithMessage("Logger is nil on <NewPaymentController>", errors.ErrInvalidArgs)
}
if len(deps.PaymentProviders) == 0 {
return nil, errors.NewWithMessage("No payment providers provided on <NewPaymentController>", errors.ErrInvalidArgs)
}
controller := &PaymentController{
logger: deps.Logger,
paymentProviders: deps.PaymentProviders,
providerMap: make(map[models.PaymentType][]payment_provider.PaymentProvider),
}
for _, provider := range deps.PaymentProviders {
for _, method := range provider.GetSupportedPaymentMethods() {
controller.providerMap[method] = append(controller.providerMap[method], provider)
}
}
return controller, nil
}
func (c *PaymentController) RegisterRoutes(router *echo.Group) {
// вебхуки для каждого провайдера
for _, provider := range c.paymentProviders {
provider.RegisterWebhookHandlers(router)
}
// эндпоинт создания платежа
router.POST("/payment", c.createPayment)
}
// запросы на создание платежа
func (c *PaymentController) createPayment(ctx echo.Context) error {
return nil
}