241 lines
10 KiB
Go
241 lines
10 KiB
Go
package grpc
|
|
|
|
import (
|
|
"context"
|
|
|
|
"go.uber.org/zap"
|
|
"google.golang.org/grpc/codes"
|
|
"google.golang.org/grpc/status"
|
|
"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 {
|
|
CreatePaymentPhone(context.Context, *models.CreatePayment[string]) (string, errors.Error)
|
|
CreatePaymentBankCard(context.Context, *models.CreatePayment[*models.BankCard]) (string, errors.Error)
|
|
CreatePayment(context.Context, *models.CreatePayment[*any]) (string, errors.Error)
|
|
CreatePaymentLogin(context.Context, *models.CreatePayment[string]) (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,
|
|
Requisites: &models.BankCard{
|
|
Number: in.BankCard.Number,
|
|
ExpiryYear: in.BankCard.ExpiryYear,
|
|
ExpiryMonth: in.BankCard.ExpiryMonth,
|
|
CSC: in.BankCard.CSC,
|
|
CardHolderName: in.BankCard.CardHolderName,
|
|
},
|
|
})
|
|
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) GetPaymentLinkQIWI(ctx context.Context, in *treasurer.GetPhonePaymentLinkRequest) (*treasurer.GetPaymentLinkResponse, error) {
|
|
link, err := receiver.paymentService.CreatePaymentPhone(ctx, &models.CreatePayment[string]{
|
|
Type: models.PaymentTypeQiwi,
|
|
Currency: in.MainSettings.Currency,
|
|
UserID: in.MainSettings.UserID,
|
|
ClientIP: in.MainSettings.ClientIP,
|
|
Amount: in.MainSettings.Amount,
|
|
CallbackHostGRPC: in.MainSettings.CallbackHostGRPC,
|
|
ReturnURL: in.MainSettings.ReturnURL,
|
|
Requisites: in.Phone,
|
|
})
|
|
if err != nil {
|
|
receiver.logger.Error("failed to get payment link on <GetPaymentLinkQIWI> of <PaymentController>", zap.Error(err))
|
|
return nil, errors.GRPC("failed to get payment link", err)
|
|
}
|
|
|
|
return &treasurer.GetPaymentLinkResponse{RedirectURL: link}, nil
|
|
}
|
|
|
|
func (receiver *PaymentController) GetPaymentLinkSberPay(ctx context.Context, in *treasurer.GetPhonePaymentLinkRequest) (*treasurer.GetPaymentLinkResponse, error) {
|
|
link, err := receiver.paymentService.CreatePaymentPhone(ctx, &models.CreatePayment[string]{
|
|
Type: models.PaymentTypeSberPay,
|
|
Currency: in.MainSettings.Currency,
|
|
UserID: in.MainSettings.UserID,
|
|
ClientIP: in.MainSettings.ClientIP,
|
|
Amount: in.MainSettings.Amount,
|
|
CallbackHostGRPC: in.MainSettings.CallbackHostGRPC,
|
|
ReturnURL: in.MainSettings.ReturnURL,
|
|
Requisites: in.Phone,
|
|
})
|
|
if err != nil {
|
|
receiver.logger.Error("failed to get payment link on <GetPaymentLinkSberPay> of <PaymentController>", zap.Error(err))
|
|
return nil, errors.GRPC("failed to get payment link", err)
|
|
}
|
|
|
|
return &treasurer.GetPaymentLinkResponse{RedirectURL: link}, nil
|
|
}
|
|
|
|
func (receiver *PaymentController) GetPaymentLinkAlfaClick(ctx context.Context, in *treasurer.GetLoginPaymentLinkRequest) (*treasurer.GetPaymentLinkResponse, error) {
|
|
link, err := receiver.paymentService.CreatePaymentLogin(ctx, &models.CreatePayment[string]{
|
|
Type: models.PaymentTypeAlfabank,
|
|
Currency: in.MainSettings.Currency,
|
|
UserID: in.MainSettings.UserID,
|
|
ClientIP: in.MainSettings.ClientIP,
|
|
Amount: in.MainSettings.Amount,
|
|
CallbackHostGRPC: in.MainSettings.CallbackHostGRPC,
|
|
ReturnURL: in.MainSettings.ReturnURL,
|
|
Requisites: in.Login,
|
|
})
|
|
if err != nil {
|
|
receiver.logger.Error("failed to get payment link on <GetPaymentLinkAlfaClick> 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
|
|
}
|
|
|
|
func (receiver *PaymentController) GetPaymentLinkMobile(ctx context.Context, in *treasurer.GetPhonePaymentLinkRequest) (*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,
|
|
Requisites: in.Phone,
|
|
})
|
|
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
|
|
}
|
|
|
|
func (receiver *PaymentController) GetPaymentLinkCash(ctx context.Context, in *treasurer.GetPhonePaymentLinkRequest) (*treasurer.GetPaymentLinkResponse, error) {
|
|
link, err := receiver.paymentService.CreatePaymentPhone(ctx, &models.CreatePayment[string]{
|
|
Type: models.PaymentTypeCash,
|
|
Currency: in.MainSettings.Currency,
|
|
UserID: in.MainSettings.UserID,
|
|
ClientIP: in.MainSettings.ClientIP,
|
|
Amount: in.MainSettings.Amount,
|
|
CallbackHostGRPC: in.MainSettings.CallbackHostGRPC,
|
|
ReturnURL: in.MainSettings.ReturnURL,
|
|
Requisites: in.Phone,
|
|
})
|
|
if err != nil {
|
|
receiver.logger.Error("failed to get payment link on <GetPaymentLinkCash> of <PaymentController>", zap.Error(err))
|
|
return nil, errors.GRPC("failed to get payment link", err)
|
|
}
|
|
|
|
return &treasurer.GetPaymentLinkResponse{RedirectURL: link}, nil
|
|
}
|
|
|
|
func (receiver *PaymentController) GetPaymentLinkInstallments(ctx context.Context, in *treasurer.GetPaymentLinkRequest) (*treasurer.GetPaymentLinkResponse, error) {
|
|
link, err := receiver.paymentService.CreatePayment(ctx, &models.CreatePayment[*any]{
|
|
Type: models.PaymentTypeInstallments,
|
|
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 <GetPaymentLinkInstallments> of <PaymentController>", zap.Error(err))
|
|
return nil, errors.GRPC("failed to get payment link", err)
|
|
}
|
|
|
|
return &treasurer.GetPaymentLinkResponse{RedirectURL: link}, nil
|
|
}
|
|
|
|
func (receiver *PaymentController) GetPaymentLinkSberbankB2B(_ context.Context, _ *treasurer.GetB2BPaymentLinkRequest) (*treasurer.GetPaymentLinkResponse, error) {
|
|
return nil, status.Error(codes.Unimplemented, "method not implemented")
|
|
}
|