package http import ( "context" "go.uber.org/zap" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/errors" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/models" "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 on ", 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) case models.PaymentTypeSberB2B: return api.GetPaymentLinkB2B(ctx, request) } return "", errors.NewWithMessage("invalid payment method type", errors.ErrInvalidArgs) } func (api *API2) GetPaymentLinkBankCard(ctx context.Context, request *models.GetPaymentLinkRequest) (string, errors.Error) { link, err := api.clients.payment.GetPaymentLinkBankCard(ctx, &treasurer.GetBankCardPaymentLinkRequest{ 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, }, }) if err != nil { api.logger.Error("failed to get bankcard payment link on of ", zap.Error(err)) return "", err } return link, nil } func (api *API2) GetPaymentLinkYooMoney(ctx context.Context, request *models.GetPaymentLinkRequest) (string, errors.Error) { link, err := api.clients.payment.GetPaymentLinkYooMoney(ctx, &treasurer.GetPaymentLinkBody{ 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, }, }) if err != nil { api.logger.Error("failed to get yoomoney payment link on of ", zap.Error(err)) return "", err } return link, nil } func (api *API2) GetPaymentLinkSberPay(ctx context.Context, request *models.GetPaymentLinkRequest) (string, errors.Error) { link, err := api.clients.payment.GetPaymentLinkSberPay(ctx, &treasurer.GetPaymentLinkBody{ 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, }, }) if err != nil { api.logger.Error("failed to get sberpay payment link on of ", zap.Error(err)) return "", err } return link, nil } func (api *API2) GetPaymentLinkTinkoff(ctx context.Context, request *models.GetPaymentLinkRequest) (string, errors.Error) { link, err := api.clients.payment.GetPaymentLinkTinkoff(ctx, &treasurer.GetPaymentLinkBody{ 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, }, }) if err != nil { api.logger.Error("failed to get tinkoff payment link on of ", 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.GetPaymentLinkBody{ 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, }, }) if err != nil { api.logger.Error("failed to get sbp payment link on of ", zap.Error(err)) return "", err } return link, nil } func (api *API2) GetPaymentLinkB2B(ctx context.Context, request *models.GetPaymentLinkRequest) (string, errors.Error) { link, err := api.clients.payment.GetPaymentLinkSberbankB2B(ctx, &treasurer.GetPaymentLinkBody{ 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, }, }) if err != nil { api.logger.Error("failed to get sberbankb2b payment link on of ", zap.Error(err)) return "", err } return link, nil }