2023-06-13 13:22:51 +00:00
|
|
|
package grpc
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
|
|
|
|
"go.uber.org/zap"
|
|
|
|
"penahub.gitlab.yandexcloud.net/external/treasurer/internal/errors"
|
|
|
|
"penahub.gitlab.yandexcloud.net/external/treasurer/internal/models"
|
|
|
|
"penahub.gitlab.yandexcloud.net/external/treasurer/internal/proto/treasurer"
|
|
|
|
)
|
|
|
|
|
|
|
|
type PaymentService interface {
|
|
|
|
CreatePaymentBankCard(context.Context, *models.CreatePayment[*models.BankCard]) (string, errors.Error)
|
|
|
|
CreatePayment(context.Context, *models.CreatePayment[*any]) (string, errors.Error)
|
|
|
|
}
|
|
|
|
|
|
|
|
type PaymentControllerDeps struct {
|
|
|
|
Logger *zap.Logger
|
|
|
|
PaymentService PaymentService
|
|
|
|
}
|
|
|
|
|
|
|
|
type PaymentController struct {
|
|
|
|
logger *zap.Logger
|
|
|
|
paymentService PaymentService
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewPaymentController(deps PaymentControllerDeps) (*PaymentController, errors.Error) {
|
|
|
|
if deps.Logger == nil {
|
|
|
|
return nil, errors.NewWithMessage("Logger in nil on <NewPaymentController>", errors.ErrInvalidArgs)
|
|
|
|
}
|
|
|
|
|
|
|
|
if deps.PaymentService == nil {
|
|
|
|
return nil, errors.NewWithMessage("PaymentService in nil on <NewPaymentController>", errors.ErrInvalidArgs)
|
|
|
|
}
|
|
|
|
|
|
|
|
return &PaymentController{
|
|
|
|
logger: deps.Logger,
|
|
|
|
paymentService: deps.PaymentService,
|
|
|
|
}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (receiver *PaymentController) GetPaymentLinkBankCard(ctx context.Context, in *treasurer.GetBankCardPaymentLinkRequest) (*treasurer.GetPaymentLinkResponse, error) {
|
|
|
|
link, err := receiver.paymentService.CreatePaymentBankCard(ctx, &models.CreatePayment[*models.BankCard]{
|
|
|
|
Type: models.PaymentTypeBankCard,
|
|
|
|
Currency: in.MainSettings.Currency,
|
|
|
|
UserID: in.MainSettings.UserID,
|
|
|
|
ClientIP: in.MainSettings.ClientIP,
|
|
|
|
Amount: in.MainSettings.Amount,
|
|
|
|
CallbackHostGRPC: in.MainSettings.CallbackHostGRPC,
|
|
|
|
ReturnURL: in.MainSettings.ReturnURL,
|
|
|
|
})
|
|
|
|
if err != nil {
|
|
|
|
receiver.logger.Error("failed to get payment link on <GetPaymentLinkBankCard> of <PaymentController>", zap.Error(err))
|
|
|
|
return nil, errors.GRPC("failed to get payment link", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
return &treasurer.GetPaymentLinkResponse{RedirectURL: link}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (receiver *PaymentController) GetPaymentLinkYooMoney(ctx context.Context, in *treasurer.GetPaymentLinkRequest) (*treasurer.GetPaymentLinkResponse, error) {
|
|
|
|
link, err := receiver.paymentService.CreatePayment(ctx, &models.CreatePayment[*any]{
|
|
|
|
Type: models.PaymentTypeYoomoney,
|
|
|
|
Currency: in.MainSettings.Currency,
|
|
|
|
UserID: in.MainSettings.UserID,
|
|
|
|
ClientIP: in.MainSettings.ClientIP,
|
|
|
|
Amount: in.MainSettings.Amount,
|
|
|
|
CallbackHostGRPC: in.MainSettings.CallbackHostGRPC,
|
|
|
|
ReturnURL: in.MainSettings.ReturnURL,
|
|
|
|
})
|
|
|
|
if err != nil {
|
|
|
|
receiver.logger.Error("failed to get payment link on <GetPaymentLinkYooMoney> of <PaymentController>", zap.Error(err))
|
|
|
|
return nil, errors.GRPC("failed to get payment link", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
return &treasurer.GetPaymentLinkResponse{RedirectURL: link}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (receiver *PaymentController) GetPaymentLinkTinkoff(ctx context.Context, in *treasurer.GetPaymentLinkRequest) (*treasurer.GetPaymentLinkResponse, error) {
|
|
|
|
link, err := receiver.paymentService.CreatePayment(ctx, &models.CreatePayment[*any]{
|
|
|
|
Type: models.PaymentTypeTinkoff,
|
|
|
|
Currency: in.MainSettings.Currency,
|
|
|
|
UserID: in.MainSettings.UserID,
|
|
|
|
ClientIP: in.MainSettings.ClientIP,
|
|
|
|
Amount: in.MainSettings.Amount,
|
|
|
|
CallbackHostGRPC: in.MainSettings.CallbackHostGRPC,
|
|
|
|
ReturnURL: in.MainSettings.ReturnURL,
|
|
|
|
})
|
|
|
|
if err != nil {
|
|
|
|
receiver.logger.Error("failed to get payment link on <GetPaymentLinkTinkoff> of <PaymentController>", zap.Error(err))
|
|
|
|
return nil, errors.GRPC("failed to get payment link", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
return &treasurer.GetPaymentLinkResponse{RedirectURL: link}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (receiver *PaymentController) GetPaymentLinkSBP(ctx context.Context, in *treasurer.GetPaymentLinkRequest) (*treasurer.GetPaymentLinkResponse, error) {
|
|
|
|
link, err := receiver.paymentService.CreatePayment(ctx, &models.CreatePayment[*any]{
|
|
|
|
Type: models.PaymentTypeSBP,
|
|
|
|
Currency: in.MainSettings.Currency,
|
|
|
|
UserID: in.MainSettings.UserID,
|
|
|
|
ClientIP: in.MainSettings.ClientIP,
|
|
|
|
Amount: in.MainSettings.Amount,
|
|
|
|
CallbackHostGRPC: in.MainSettings.CallbackHostGRPC,
|
|
|
|
ReturnURL: in.MainSettings.ReturnURL,
|
|
|
|
})
|
|
|
|
if err != nil {
|
|
|
|
receiver.logger.Error("failed to get payment link on <GetPaymentLinkSBP> of <PaymentController>", zap.Error(err))
|
|
|
|
return nil, errors.GRPC("failed to get payment link", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
return &treasurer.GetPaymentLinkResponse{RedirectURL: link}, nil
|
|
|
|
}
|
|
|
|
|
2024-03-16 15:50:37 +00:00
|
|
|
func (receiver *PaymentController) GetPaymentLinkMobile(ctx context.Context, in *treasurer.GetPaymentLinkRequest) (*treasurer.GetPaymentLinkResponse, error) {
|
|
|
|
// link, err := receiver.paymentService.CreatePaymentPhone(ctx, &models.CreatePayment[string]{
|
|
|
|
// Type: models.PaymentTypeMobile,
|
|
|
|
// Currency: in.MainSettings.Currency,
|
|
|
|
// UserID: in.MainSettings.UserID,
|
|
|
|
// ClientIP: in.MainSettings.ClientIP,
|
|
|
|
// Amount: in.MainSettings.Amount,
|
|
|
|
// CallbackHostGRPC: in.MainSettings.CallbackHostGRPC,
|
|
|
|
// ReturnURL: in.MainSettings.ReturnURL,
|
|
|
|
// })
|
|
|
|
// if err != nil {
|
|
|
|
// receiver.logger.Error("failed to get payment link on <GetPaymentLinkMobile> of <PaymentController>", zap.Error(err))
|
|
|
|
// return nil, errors.GRPC("failed to get payment link", err)
|
|
|
|
// }
|
|
|
|
|
|
|
|
return &treasurer.GetPaymentLinkResponse{RedirectURL: "link"}, nil
|
2023-06-13 13:22:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (receiver *PaymentController) GetPaymentLinkSberbankB2B(_ context.Context, _ *treasurer.GetB2BPaymentLinkRequest) (*treasurer.GetPaymentLinkResponse, error) {
|
2024-03-16 15:50:37 +00:00
|
|
|
return nil, nil
|
2023-06-13 13:22:51 +00:00
|
|
|
}
|
2024-03-16 15:50:37 +00:00
|
|
|
|