2025-06-03 13:31:31 +00:00
|
|
|
package payment
|
2025-06-03 09:22:27 +00:00
|
|
|
|
|
|
|
import (
|
2025-06-03 13:31:31 +00:00
|
|
|
"gitea.pena/PenaSide/treasurer/internal/payment_provider"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
2025-06-03 09:22:27 +00:00
|
|
|
"sync"
|
|
|
|
|
|
|
|
"gitea.pena/PenaSide/treasurer/internal/errors"
|
|
|
|
"gitea.pena/PenaSide/treasurer/internal/models"
|
|
|
|
"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
|
|
|
|
}
|
|
|
|
|
|
|
|
// запросы на создание платежа
|
2025-06-03 13:31:31 +00:00
|
|
|
func (receiver *PaymentController) createPayment(ctx *fiber.Ctx) error {
|
2025-06-03 09:22:27 +00:00
|
|
|
return nil
|
|
|
|
}
|