package yoomoney import ( "context" "gitea.pena/PenaSide/treasurer/internal/errors" "gitea.pena/PenaSide/treasurer/internal/models" "github.com/go-resty/resty/v2" "github.com/labstack/echo/v4" "go.uber.org/zap" ) const ( ProviderName = "yoomoney" ) type Config struct { StoreID string `env:"YOOMONEY_STORE_ID,required"` SecretKey string `env:"YOOMONEY_SECRET_KEY,required"` WebhooksURL string `env:"YOOMONEY_WEBHOOKS_URL,required"` PaymentsURL string `env:"YOOMONEY_PAYMENTS_URL,required"` } type Provider struct { logger *zap.Logger config *Config httpClient *resty.Client repository PaymentRepository } type PaymentRepository interface { Insert(context.Context, *models.Payment) (*models.Payment, errors.Error) SetPaymentStatus(ctx context.Context, paymentID string, status models.PaymentStatus) (*models.Payment, errors.Error) SetPaymentComplete(ctx context.Context, paymentID string) (*models.Payment, errors.Error) } func New(logger *zap.Logger, config *Config, repository PaymentRepository) (*Provider, errors.Error) { return &Provider{ logger: logger, config: config, httpClient: resty.New(), repository: repository, }, nil } func (p *Provider) GetName() string { return ProviderName } func (p *Provider) GetSupportedPaymentMethods() []models.PaymentType { return []models.PaymentType{ models.PaymentTypeBankCard, models.PaymentTypeTinkoff, models.PaymentTypeSberPay, models.PaymentTypeYoomoney, models.PaymentTypeMobile, models.PaymentTypeSBP, models.PaymentTypeSberB2B, } } func (p *Provider) CreateInvoice(ctx context.Context, request *models.PaymentRequest) (*models.PaymentResponse, errors.Error) { return &models.PaymentResponse{}, nil } func (p *Provider) RegisterWebhookHandlers(router *echo.Group) { router.POST(p.config.WebhooksURL, p.handleWebhook) } func (p *Provider) handleWebhook(c echo.Context) error { return nil }