treasurer/internal/yoomoney/provider.go

73 lines
2.0 KiB
Go
Raw Normal View History

package yoomoney
import (
"context"
"gitea.pena/PenaSide/treasurer/internal/errors"
"gitea.pena/PenaSide/treasurer/internal/models"
"gitea.pena/PenaSide/treasurer/internal/payment_provider"
"github.com/go-resty/resty/v2"
"github.com/gofiber/fiber/v2"
"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 *payment_provider.PaymentRequest) (*payment_provider.PaymentResponse, errors.Error) {
return &payment_provider.PaymentResponse{}, nil
}
func (p *Provider) RegisterWebhookHandlers(router fiber.Router) {
router.Post(p.config.WebhooksURL, p.handleWebhook)
}
func (p *Provider) handleWebhook(c *fiber.Ctx) error {
return nil
}