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 ", errors.ErrInvalidArgs) } if len(deps.PaymentProviders) == 0 { return nil, errors.NewWithMessage("No payment providers provided on ", 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 }