package grpc import ( "context" "go.uber.org/zap" "gitea.pena/PenaSide/treasurer/internal/errors" "gitea.pena/PenaSide/treasurer/internal/models" "gitea.pena/PenaSide/treasurer/internal/utils" "gitea.pena/PenaSide/treasurer/internal/models/yandex" "gitea.pena/PenaSide/treasurer/internal/proto/treasurer" ) type PaymentService interface { CreatePaymentBankCard(context.Context, *models.CreatePayment[yandex.Receipt]) (string, errors.Error) CreatePayment(context.Context, *models.CreatePayment[yandex.Receipt]) (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 ", errors.ErrInvalidArgs) } if deps.PaymentService == nil { return nil, errors.NewWithMessage("PaymentService in nil on ", errors.ErrInvalidArgs) } return &PaymentController{ logger: deps.Logger, paymentService: deps.PaymentService, }, nil } func (receiver *PaymentController) GetPaymentLinkBankCard(ctx context.Context, in *treasurer.GetPaymentLinkRequest) (*treasurer.GetPaymentLinkResponse, error) { receiver.logger.Info("f of ", zap.Any("Customer", in.MainSettings.Customer)) link, err := receiver.paymentService.CreatePaymentBankCard(ctx, &models.CreatePayment[yandex.Receipt]{ 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: yandex.Receipt{ TaxSystemCode: 2, Customer: yandex.Customer{ FullName: in.MainSettings.Customer.FullName, Email: in.MainSettings.Customer.Email, }, Items: utils.ProtoItems2ReceiptItems(in.MainSettings.Items), }, }) if err != nil { receiver.logger.Error("failed to get payment link on of ", 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[yandex.Receipt]{ 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, Requisites: yandex.Receipt{ TaxSystemCode: 2, Customer: yandex.Customer{ FullName: in.MainSettings.Customer.FullName, Email: in.MainSettings.Customer.Email, }, Items: utils.ProtoItems2ReceiptItems(in.MainSettings.Items), }, }) if err != nil { receiver.logger.Error("failed to get payment link on of ", 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[yandex.Receipt]{ 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, Requisites: yandex.Receipt{ TaxSystemCode: 2, Customer: yandex.Customer{ FullName: in.MainSettings.Customer.FullName, Email: in.MainSettings.Customer.Email, }, Items: utils.ProtoItems2ReceiptItems(in.MainSettings.Items), }, }) if err != nil { receiver.logger.Error("failed to get payment link on of ", 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[yandex.Receipt]{ 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, Requisites: yandex.Receipt{ TaxSystemCode: 2, Customer: yandex.Customer{ FullName: in.MainSettings.Customer.FullName, Email: in.MainSettings.Customer.Email, }, Items: utils.ProtoItems2ReceiptItems(in.MainSettings.Items), }, }) if err != nil { receiver.logger.Error("failed to get payment link on of ", 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.GetPaymentLinkRequest) (*treasurer.GetPaymentLinkResponse, error) { link, err := receiver.paymentService.CreatePayment(ctx, &models.CreatePayment[yandex.Receipt]{ 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: yandex.Receipt{ TaxSystemCode: 2, Customer: yandex.Customer{ FullName: in.MainSettings.Customer.FullName, Email: in.MainSettings.Customer.Email, }, Items: utils.ProtoItems2ReceiptItems(in.MainSettings.Items), }, }) if err != nil { receiver.logger.Error("failed to get payment link on of ", zap.Error(err)) return nil, errors.GRPC("failed to get payment link", err) } return &treasurer.GetPaymentLinkResponse{RedirectURL: link}, nil } func (receiver *PaymentController) GetPaymentLinkSberbankB2B(ctx context.Context, in *treasurer.GetPaymentLinkRequest) (*treasurer.GetPaymentLinkResponse, error) { link, err := receiver.paymentService.CreatePayment(ctx, &models.CreatePayment[yandex.Receipt]{ Type: models.PaymentTypeSberB2B, 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: yandex.Receipt{ TaxSystemCode: 2, Customer: yandex.Customer{ FullName: in.MainSettings.Customer.FullName, Email: in.MainSettings.Customer.Email, }, Items: utils.ProtoItems2ReceiptItems(in.MainSettings.Items), }, }) if err != nil { receiver.logger.Error("failed to get payment link on of ", zap.Error(err)) return nil, errors.GRPC("failed to get payment link", err) } return &treasurer.GetPaymentLinkResponse{RedirectURL: link}, nil }