customer/internal/interface/swagger/money.go

194 lines
6.8 KiB
Go
Raw Normal View History

2023-11-07 08:13:22 +00:00
package swagger
import (
"context"
"go.uber.org/zap"
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/errors"
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/models"
2024-05-02 19:36:53 +00:00
utils "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/utils/transfer"
2023-11-07 08:13:22 +00:00
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/proto/treasurer"
)
func (api *API2) GetPaymentLink(ctx context.Context, request *models.GetPaymentLinkRequest) (string, errors.Error) {
if _, userErr := api.clients.auth.GetUser(ctx, request.UserID); userErr != nil {
api.logger.Error("failed to get user on <GetPaymentLink> on <PaymentService>",
zap.Error(userErr),
zap.String("userID", request.UserID),
)
return "", userErr
}
switch request.Body.Type {
case models.PaymentTypeBankCard:
return api.GetPaymentLinkBankCard(ctx, request)
case models.PaymentTypeYoomoney:
return api.GetPaymentLinkYooMoney(ctx, request)
case models.PaymentTypeSberPay:
return api.GetPaymentLinkSberPay(ctx, request)
case models.PaymentTypeTinkoff:
return api.GetPaymentLinkTinkoff(ctx, request)
case models.PaymentTypeSBP:
return api.GetPaymentLinkSBP(ctx, request)
2023-11-07 08:13:22 +00:00
}
return "", errors.NewWithMessage("invalid payment method type", errors.ErrInvalidArgs)
}
func (api *API2) GetPaymentLinkBankCard(ctx context.Context, request *models.GetPaymentLinkRequest) (string, errors.Error) {
2024-04-18 17:10:23 +00:00
link, err := api.clients.payment.GetPaymentLinkBankCard(ctx, &treasurer.GetPaymentLinkRequest{
2023-11-07 08:13:22 +00:00
MainSettings: &treasurer.MainPaymentSettings{
Currency: request.Body.Currency,
Amount: request.Body.Amount,
UserID: request.UserID,
ClientIP: request.ClientIP,
CallbackHostGRPC: []string{api.grpc.Domen},
ReturnURL: request.Body.ReturnURL,
2024-05-02 19:36:53 +00:00
Customer: &treasurer.Customer{
FullName: request.Customer.FullName,
INN: request.Customer.INN,
Email: request.Customer.Email,
Phone: request.Customer.Phone,
},
Items: utils.ReceiptItemsToProto(request.Items),
2023-11-07 08:13:22 +00:00
},
})
if err != nil {
api.logger.Error("failed to get bankcard payment link on <GetPaymentLinkBankCard> of <PaymentService>", zap.Error(err))
return "", err
}
return link, nil
}
func (api *API2) GetPaymentLinkYooMoney(ctx context.Context, request *models.GetPaymentLinkRequest) (string, errors.Error) {
2024-04-18 17:10:23 +00:00
link, err := api.clients.payment.GetPaymentLinkYooMoney(ctx, &treasurer.GetPaymentLinkRequest{
2023-11-07 08:13:22 +00:00
MainSettings: &treasurer.MainPaymentSettings{
Currency: request.Body.Currency,
Amount: request.Body.Amount,
UserID: request.UserID,
ClientIP: request.ClientIP,
CallbackHostGRPC: []string{api.grpc.Domen},
ReturnURL: request.Body.ReturnURL,
2024-05-02 19:36:53 +00:00
Customer: &treasurer.Customer{
FullName: request.Customer.FullName,
INN: request.Customer.INN,
Email: request.Customer.Email,
Phone: request.Customer.Phone,
},
Items: utils.ReceiptItemsToProto(request.Items),
2023-11-07 08:13:22 +00:00
},
})
if err != nil {
api.logger.Error("failed to get yoomoney payment link on <GetPaymentLinkYooMoney> of <PaymentService>", zap.Error(err))
return "", err
}
return link, nil
}
func (api *API2) GetPaymentLinkSberPay(ctx context.Context, request *models.GetPaymentLinkRequest) (string, errors.Error) {
2024-04-18 17:10:23 +00:00
link, err := api.clients.payment.GetPaymentLinkSberPay(ctx, &treasurer.GetPaymentLinkRequest{
2023-11-07 08:13:22 +00:00
MainSettings: &treasurer.MainPaymentSettings{
Currency: request.Body.Currency,
Amount: request.Body.Amount,
UserID: request.UserID,
ClientIP: request.ClientIP,
CallbackHostGRPC: []string{api.grpc.Domen},
ReturnURL: request.Body.ReturnURL,
2024-05-02 19:36:53 +00:00
Customer: &treasurer.Customer{
FullName: request.Customer.FullName,
INN: request.Customer.INN,
Email: request.Customer.Email,
Phone: request.Customer.Phone,
},
Items: utils.ReceiptItemsToProto(request.Items),
2023-11-07 08:13:22 +00:00
},
})
if err != nil {
api.logger.Error("failed to get sberpay payment link on <GetPaymentLinkSberPay> of <PaymentService>", zap.Error(err))
2024-05-03 11:08:57 +00:00
return "", err
}
return link, nil
}
func (api *API2) GetPaymentLinkSberB2B(ctx context.Context, request *models.GetPaymentLinkRequest) (string, errors.Error) {
link, err := api.clients.payment.GetPaymentLinkSberbankB2B(ctx, &treasurer.GetPaymentLinkRequest{
MainSettings: &treasurer.MainPaymentSettings{
Currency: request.Body.Currency,
Amount: request.Body.Amount,
UserID: request.UserID,
ClientIP: request.ClientIP,
CallbackHostGRPC: []string{api.grpc.Domen},
ReturnURL: request.Body.ReturnURL,
Customer: &treasurer.Customer{
FullName: request.Customer.FullName,
INN: request.Customer.INN,
Email: request.Customer.Email,
Phone: request.Customer.Phone,
},
Items: utils.ReceiptItemsToProto(request.Items),
},
})
if err != nil {
api.logger.Error("failed to get sberpay payment link on <GetPaymentLinkSberPay> of <PaymentService>", zap.Error(err))
return "", err
}
return link, nil
}
func (api *API2) GetPaymentLinkSBP(ctx context.Context, request *models.GetPaymentLinkRequest) (string, errors.Error) {
link, err := api.clients.payment.GetPaymentLinkSBP(ctx, &treasurer.GetPaymentLinkRequest{
MainSettings: &treasurer.MainPaymentSettings{
Currency: request.Body.Currency,
Amount: request.Body.Amount,
UserID: request.UserID,
ClientIP: request.ClientIP,
CallbackHostGRPC: []string{api.grpc.Domen},
ReturnURL: request.Body.ReturnURL,
Customer: &treasurer.Customer{
FullName: request.Customer.FullName,
INN: request.Customer.INN,
Email: request.Customer.Email,
Phone: request.Customer.Phone,
},
Items: utils.ReceiptItemsToProto(request.Items),
},
})
if err != nil {
api.logger.Error("failed to get sberpay payment link on <GetPaymentLinkSberPay> of <PaymentService>", zap.Error(err))
2023-11-07 08:13:22 +00:00
return "", err
}
return link, nil
}
func (api *API2) GetPaymentLinkTinkoff(ctx context.Context, request *models.GetPaymentLinkRequest) (string, errors.Error) {
2024-04-18 17:10:23 +00:00
link, err := api.clients.payment.GetPaymentLinkTinkoff(ctx, &treasurer.GetPaymentLinkRequest{
2023-11-07 08:13:22 +00:00
MainSettings: &treasurer.MainPaymentSettings{
Currency: request.Body.Currency,
Amount: request.Body.Amount,
UserID: request.UserID,
ClientIP: request.ClientIP,
CallbackHostGRPC: []string{api.grpc.Domen},
ReturnURL: request.Body.ReturnURL,
2024-05-02 19:36:53 +00:00
Customer: &treasurer.Customer{
FullName: request.Customer.FullName,
INN: request.Customer.INN,
Email: request.Customer.Email,
Phone: request.Customer.Phone,
},
Items: utils.ReceiptItemsToProto(request.Items),
2023-11-07 08:13:22 +00:00
},
})
if err != nil {
api.logger.Error("failed to get tinkoff payment link on <GetPaymentLinkTinkoff> of <PaymentService>", zap.Error(err))
return "", err
}
return link, nil
}