Merge pull request 'dev' (#9) from dev into staging
All checks were successful
Deploy / CreateImage (push) Successful in 1m58s
Deploy / DeployService (push) Successful in 28s

Reviewed-on: https://gitea.pena/PenaSide/treasurer/pulls/9
This commit is contained in:
skeris 2025-08-13 20:36:14 +00:00
commit fe902d9823
25 changed files with 1455 additions and 802 deletions

@ -4,6 +4,7 @@ import (
"context" "context"
"errors" "errors"
"fmt" "fmt"
"gitea.pena/PenaSide/common/closer"
"gitea.pena/PenaSide/common/mongo" "gitea.pena/PenaSide/common/mongo"
"gitea.pena/PenaSide/treasurer/internal/server/grpc" "gitea.pena/PenaSide/treasurer/internal/server/grpc"
"gitea.pena/PenaSide/treasurer/internal/server/http" "gitea.pena/PenaSide/treasurer/internal/server/http"
@ -11,7 +12,6 @@ import (
"gitea.pena/PenaSide/treasurer/internal/initialize" "gitea.pena/PenaSide/treasurer/internal/initialize"
"gitea.pena/PenaSide/treasurer/internal/worker" "gitea.pena/PenaSide/treasurer/internal/worker"
"gitea.pena/PenaSide/treasurer/pkg/closer"
"go.uber.org/zap" "go.uber.org/zap"
) )
@ -74,6 +74,7 @@ func Run(ctx context.Context, config initialize.Config, logger *zap.Logger) (app
controllers, err := initialize.NewControllers(initialize.ControllersDeps{ controllers, err := initialize.NewControllers(initialize.ControllersDeps{
Logger: logger, Logger: logger,
Services: *services, Services: *services,
Repositories: *repositories,
}) })
if err != nil { if err != nil {
return err return err

@ -65,6 +65,10 @@ func (c *CallbackClient) SendOnSuccess(ctx context.Context, host string, event *
return errors.NewWithError(fmt.Errorf("failed to send success callback: %w", err), errors.ErrInternalError) return errors.NewWithError(fmt.Errorf("failed to send success callback: %w", err), errors.ErrInternalError)
} }
if err := c.SendOnCartPurchase(ctx, host, event); err != nil {
return err
}
return nil return nil
} }
@ -107,3 +111,43 @@ func (c *CallbackClient) SendOnFailure(ctx context.Context, host string, event *
return nil return nil
} }
func (c *CallbackClient) SendOnCartPurchase(ctx context.Context, host string, event *models.Event) errors.Error {
connection, err := grpc.Dial(host, grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
c.logger.Error("failed to connect on <SendOnCartPurchase> of <CallbackClient>", zap.Error(err), zap.String("host", host))
return errors.NewWithError(fmt.Errorf("failed connect to callback service: %w", err), errors.ErrInternalError)
}
defer func() {
if closeErr := connection.Close(); closeErr != nil {
c.logger.Error("failed to close connection on <SendOnCartPurchase> of <CallbackClient>", zap.Error(closeErr))
}
}()
client := payment_callback.NewPaymentCallbackServiceClient(connection)
if _, err := client.OnCartPurchase(ctx, &payment_callback.Event{
Key: event.Key,
Message: event.Message,
Payment: &payment_callback.Payment{
ID: event.Payment.ID,
UserID: event.Payment.UserID,
PaymentID: event.Payment.PaymentID,
IdempotencePaymentID: event.Payment.IdempotencePaymentID,
Amount: event.Payment.Amount,
Currency: event.Payment.Currency,
Type: string(event.Payment.Type),
Status: string(event.Payment.Status),
Completed: event.Payment.Completed,
},
}); err != nil {
c.logger.Error("failed to send cart purchase callback on <SendOnCartPurchase> of <CallbackClient>",
zap.Error(err),
zap.String("host", host),
zap.Any("event", event),
)
return errors.NewWithError(fmt.Errorf("failed to cart purchase callback: %w", err), errors.ErrInternalError)
}
return nil
}

@ -5,7 +5,10 @@ import (
"fmt" "fmt"
"gitea.pena/PenaSide/treasurer/internal/models/yandex" "gitea.pena/PenaSide/treasurer/internal/models/yandex"
"gitea.pena/PenaSide/treasurer/internal/payment_provider" "gitea.pena/PenaSide/treasurer/internal/payment_provider"
"gitea.pena/PenaSide/treasurer/internal/repository"
"gitea.pena/PenaSide/treasurer/internal/utils" "gitea.pena/PenaSide/treasurer/internal/utils"
"google.golang.org/protobuf/types/known/emptypb"
"strconv"
"strings" "strings"
"sync" "sync"
@ -18,13 +21,16 @@ import (
type PaymentControllerDeps struct { type PaymentControllerDeps struct {
Logger *zap.Logger Logger *zap.Logger
PaymentProviders []payment_provider.PaymentProvider PaymentProviders []payment_provider.PaymentProvider
PaymentMethodRepository *repository.PaymentMethodRepository
} }
type PaymentController struct { type PaymentController struct {
logger *zap.Logger logger *zap.Logger
paymentProviders []payment_provider.PaymentProvider paymentProviders []payment_provider.PaymentProvider
paymentMethodRepository *repository.PaymentMethodRepository
providerMap map[models.PaymentType][]payment_provider.PaymentProvider providerMap map[models.PaymentType][]payment_provider.PaymentProvider
mu sync.RWMutex mu sync.RWMutex
treasurer.UnimplementedTreasurerServiceServer
} }
func NewPaymentController(deps PaymentControllerDeps) (*PaymentController, errors.Error) { func NewPaymentController(deps PaymentControllerDeps) (*PaymentController, errors.Error) {
@ -40,6 +46,7 @@ func NewPaymentController(deps PaymentControllerDeps) (*PaymentController, error
logger: deps.Logger, logger: deps.Logger,
paymentProviders: deps.PaymentProviders, paymentProviders: deps.PaymentProviders,
providerMap: make(map[models.PaymentType][]payment_provider.PaymentProvider), providerMap: make(map[models.PaymentType][]payment_provider.PaymentProvider),
paymentMethodRepository: deps.PaymentMethodRepository,
} }
for _, provider := range deps.PaymentProviders { for _, provider := range deps.PaymentProviders {
@ -89,6 +96,11 @@ func (r *PaymentController) createPayment(ctx context.Context, paymentType model
}, },
Items: utils.ProtoItems2ReceiptItems(in.MainSettings.Items), Items: utils.ProtoItems2ReceiptItems(in.MainSettings.Items),
}), }),
"save_payment_method": strconv.FormatBool(in.MainSettings.Auto),
"recurrent": strconv.FormatBool(in.MainSettings.Recurrent),
"fromWalletAddress": in.MainSettings.FromWalletAddress,
"toWalletAddress": in.MainSettings.ToWalletAddress,
"cryptoAmount": fmt.Sprintf("%f", in.MainSettings.CryptoAmount),
} }
link, err := provider.CreateInvoice(ctx, request) link, err := provider.CreateInvoice(ctx, request)
if err != nil { if err != nil {
@ -124,3 +136,21 @@ func (r *PaymentController) GetPaymentLinkSberPay(ctx context.Context, in *treas
func (r *PaymentController) GetPaymentLinkSberbankB2B(ctx context.Context, in *treasurer.GetPaymentLinkRequest) (*treasurer.GetPaymentLinkResponse, error) { func (r *PaymentController) GetPaymentLinkSberbankB2B(ctx context.Context, in *treasurer.GetPaymentLinkRequest) (*treasurer.GetPaymentLinkResponse, error) {
return r.createPayment(ctx, models.PaymentTypeSberB2B, in) return r.createPayment(ctx, models.PaymentTypeSberB2B, in)
} }
func (r *PaymentController) GetPaymentLinkAlchemy(ctx context.Context, in *treasurer.GetPaymentLinkRequest) (*treasurer.GetPaymentLinkResponse, error) {
return r.createPayment(ctx, models.PaymentTypeAlchemy, in)
}
func (r *PaymentController) DeleteSavedPaymentMethods(ctx context.Context, in *treasurer.DeleteSavedPaymentMethodsRequest) (*emptypb.Empty, error) {
if in.UserID == "" {
r.logger.Error("empty user id provided")
return nil, errors.GRPC("user id is required", errors.NewWithMessage("user id is required", errors.ErrInvalidArgs))
}
err := r.paymentMethodRepository.DeleteByUserID(ctx, in.UserID)
if err != nil {
r.logger.Error("failed to delete payment methods", zap.Error(err), zap.String("userId", in.UserID))
return nil, errors.GRPC("failed to delete payment methods", errors.NewWithMessage("failed to delete payment methods", errors.ErrInternalError))
}
return &emptypb.Empty{}, nil
}

@ -15,6 +15,7 @@ type Config struct {
MockServiceHost string `env:"MOCK_SERVICE_HOST" envDefault:"http://treasurer-mock:8080"` MockServiceHost string `env:"MOCK_SERVICE_HOST" envDefault:"http://treasurer-mock:8080"`
YooMoneyWebhooksURL string `env:"YOOMONEY_WEBHOOKS_URL" envDefault:"http://treasurer-mock:8080/webhooks"` YooMoneyWebhooksURL string `env:"YOOMONEY_WEBHOOKS_URL" envDefault:"http://treasurer-mock:8080/webhooks"`
YooMoneyPaymentsURL string `env:"YOOMONEY_PAYMENTS_URL" envDefault:"http://treasurer-mock:8080/payments"` YooMoneyPaymentsURL string `env:"YOOMONEY_PAYMENTS_URL" envDefault:"http://treasurer-mock:8080/payments"`
AlchemyWalletAddress string `env:"ALCHEMY_WALLET_ADDRESS" envDefault:"0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d"`
Database mongo.Configuration Database mongo.Configuration
} }

@ -11,6 +11,7 @@ import (
type ControllersDeps struct { type ControllersDeps struct {
Logger *zap.Logger Logger *zap.Logger
Services Services Services Services
Repositories Repositories
} }
type Controllers struct { type Controllers struct {
@ -32,6 +33,7 @@ func NewControllers(deps ControllersDeps) (*Controllers, errors.Error) {
paymentControllerGRPC, err := grpc.NewPaymentController(grpc.PaymentControllerDeps{ paymentControllerGRPC, err := grpc.NewPaymentController(grpc.PaymentControllerDeps{
Logger: deps.Logger, Logger: deps.Logger,
PaymentProviders: deps.Services.PaymentProviders, PaymentProviders: deps.Services.PaymentProviders,
PaymentMethodRepository: deps.Repositories.PaymentMethod,
}) })
if err != nil { if err != nil {
return nil, err return nil, err

@ -14,6 +14,7 @@ type RepositoriesDeps struct {
type Repositories struct { type Repositories struct {
Payment *repository.PaymentRepository Payment *repository.PaymentRepository
PaymentMethod *repository.PaymentMethodRepository
} }
func NewRepositories(deps RepositoriesDeps) (*Repositories, errors.Error) { func NewRepositories(deps RepositoriesDeps) (*Repositories, errors.Error) {
@ -25,5 +26,10 @@ func NewRepositories(deps RepositoriesDeps) (*Repositories, errors.Error) {
return nil, err return nil, err
} }
return &Repositories{Payment: paymentRepository}, nil paymentMethod := repository.NewPaymentMethodRepository(repository.PaymentMethodRepositoryDeps{
Logger: deps.Logger,
Collection: deps.Database.Collection("payment_methods"),
})
return &Repositories{Payment: paymentRepository, PaymentMethod: paymentMethod}, nil
} }

@ -3,6 +3,7 @@ package initialize
import ( import (
"gitea.pena/PenaSide/treasurer/internal/errors" "gitea.pena/PenaSide/treasurer/internal/errors"
"gitea.pena/PenaSide/treasurer/internal/payment_provider" "gitea.pena/PenaSide/treasurer/internal/payment_provider"
"gitea.pena/PenaSide/treasurer/internal/payment_provider/alchemy"
"gitea.pena/PenaSide/treasurer/internal/payment_provider/yoomoney" "gitea.pena/PenaSide/treasurer/internal/payment_provider/yoomoney"
"gitea.pena/PenaSide/treasurer/internal/service/callback" "gitea.pena/PenaSide/treasurer/internal/service/callback"
"gitea.pena/PenaSide/treasurer/internal/service/mock" "gitea.pena/PenaSide/treasurer/internal/service/mock"
@ -101,11 +102,20 @@ func NewServices(deps ServicesDeps) (*Services, errors.Error) {
}, },
Repository: deps.Repositories.Payment, Repository: deps.Repositories.Payment,
CallbackService: callbackService, CallbackService: callbackService,
PaymentMethodRepository: deps.Repositories.PaymentMethod,
}) })
if err != nil { if err != nil {
return nil, err return nil, err
} }
alchemyProvider := alchemy.New(alchemy.Deps{
Repository: deps.Repositories.Payment,
Logger: deps.Logger,
Config: &alchemy.Config{
WalletAddress: deps.Config.AlchemyWalletAddress,
},
})
return &Services{ return &Services{
Callback: callbackService, Callback: callbackService,
Payment: paymentService, Payment: paymentService,
@ -113,6 +123,6 @@ func NewServices(deps ServicesDeps) (*Services, errors.Error) {
Status: statusService, Status: statusService,
//YandexWebhook: yandexWebhookService, //YandexWebhook: yandexWebhookService,
Mock: mockService, Mock: mockService,
PaymentProviders: []payment_provider.PaymentProvider{yooMoneyProvider}, PaymentProviders: []payment_provider.PaymentProvider{yooMoneyProvider, alchemyProvider},
}, nil }, nil
} }

@ -0,0 +1,39 @@
package alchemy
type AlchemyAddressActivityWebhook struct {
CreatedAt string `json:"createdAt"`
Event struct {
Activity []struct {
Asset string `json:"asset"`
BlockNum string `json:"blockNum"`
Category string `json:"category"`
//Erc1155Metadata interface{} `json:"erc1155Metadata"`
//Erc721TokenId interface{} `json:"erc721TokenId"`
FromAddress string `json:"fromAddress"`
Hash string `json:"hash"`
Log struct {
Address string `json:"address"`
BlockHash string `json:"blockHash"`
BlockNumber string `json:"blockNumber"`
Data string `json:"data"`
LogIndex string `json:"logIndex"`
Removed bool `json:"removed"`
Topics []string `json:"topics"`
TransactionHash string `json:"transactionHash"`
TransactionIndex string `json:"transactionIndex"`
} `json:"log"`
RawContract struct {
Address string `json:"address"`
Decimals int `json:"decimals"`
RawValue string `json:"rawValue"`
} `json:"rawContract"`
ToAddress string `json:"toAddress"`
//TypeTraceAddress interface{} `json:"typeTraceAddress"`
Value float64 `json:"value"`
} `json:"activity"`
Network string `json:"network"`
} `json:"event"`
ID string `json:"id"`
Type string `json:"type"`
WebhookId string `json:"webhookId"`
}

@ -29,6 +29,10 @@ type Payment struct {
Запрос будет отправляться по протоколу GRPC Запрос будет отправляться по протоколу GRPC
*/ */
CallbackHostGRPC []string `json:"callbackHostGrpc" bson:"callbackHostGrpc"` CallbackHostGRPC []string `json:"callbackHostGrpc" bson:"callbackHostGrpc"`
ToWalletAddress string `json:"toWalletAddress" bson:"toWalletAddress"` // for crypto our
FromWalletAddress string `json:"fromWalletAddress" bson:"fromWalletAddress"` // for crypto them
CryptoAmount float64 `json:"cryptoAmount" bson:"cryptoAmount"` // for crypto
} }
func (p *Payment) Sanitize() *Payment { func (p *Payment) Sanitize() *Payment {
@ -58,6 +62,8 @@ type CreatePayment[T any] struct {
UserID string UserID string
ClientIP string ClientIP string
Requisites T Requisites T
Auto bool
Recurrent bool
} }
type BankCard struct { type BankCard struct {
@ -78,6 +84,7 @@ const (
PaymentTypeMobile PaymentType = "mobile" PaymentTypeMobile PaymentType = "mobile"
PaymentTypeSBP PaymentType = "sbp" PaymentTypeSBP PaymentType = "sbp"
PaymentTypeSberB2B PaymentType = "b2bSberbank" PaymentTypeSberB2B PaymentType = "b2bSberbank"
PaymentTypeAlchemy PaymentType = "alchemy"
) )
var ( var (

@ -1,5 +1,7 @@
package yandex package yandex
import "time"
// Payment description https://yookassa.ru/developers/api#payment_object // Payment description https://yookassa.ru/developers/api#payment_object
type Payment struct { type Payment struct {
ID string `json:"id" bson:"id"` ID string `json:"id" bson:"id"`
@ -8,7 +10,7 @@ type Payment struct {
Confirmation *ConfirmationRedirect `json:"confirmation" bson:"confirmation"` Confirmation *ConfirmationRedirect `json:"confirmation" bson:"confirmation"`
IncomeAmount *Amount `json:"income_amount,omitempty" bson:"income_amount,omitempty"` IncomeAmount *Amount `json:"income_amount,omitempty" bson:"income_amount,omitempty"`
Description string `json:"description,omitempty" bson:"description,omitempty"` Description string `json:"description,omitempty" bson:"description,omitempty"`
PaymentMethod any `json:"payment_method,omitempty" bson:"payment_method,omitempty"` PaymentMethod *PaymentMethod `json:"payment_method,omitempty" bson:"payment_method,omitempty"`
Recipient Recipient `json:"recipient" bson:"recipient"` Recipient Recipient `json:"recipient" bson:"recipient"`
CapturedAt string `json:"captured_at,omitempty" bson:"captured_at,omitempty"` CapturedAt string `json:"captured_at,omitempty" bson:"captured_at,omitempty"`
ExpiresAt string `json:"expires_at,omitempty" bson:"expires_at,omitempty"` ExpiresAt string `json:"expires_at,omitempty" bson:"expires_at,omitempty"`
@ -42,3 +44,31 @@ const (
PaymentStatusSuccessfully PaymentStatus = "succeeded" PaymentStatusSuccessfully PaymentStatus = "succeeded"
PaymentStatusCanceled PaymentStatus = "canceled" PaymentStatusCanceled PaymentStatus = "canceled"
) )
type PaymentMethod struct {
ID string `json:"_id" bson:"_id,omitempty"`
UserID string `json:"userId" bson:"userId"`
Type string `json:"type" bson:"type"`
MethodID string `json:"id" bson:"id"`
Saved bool `json:"saved" bson:"saved"`
Card *Card `json:"card,omitempty" bson:"card,omitempty"`
Title string `json:"title" bson:"title"`
CreatedAt time.Time `json:"createdAt" bson:"createdAt"`
UpdatedAt time.Time `json:"updatedAt" bson:"updatedAt"`
}
type Card struct {
First6 string `json:"first6" bson:"first6"`
Last4 string `json:"last4" bson:"last4"`
ExpiryMonth string `json:"expiry_month" bson:"expiry_month"`
ExpiryYear string `json:"expiry_year" bson:"expiry_year"`
CardType string `json:"card_type" bson:"card_type"`
CardProduct *CardProduct `json:"card_product,omitempty" bson:"card_product,omitempty"`
IssuerCountry string `json:"issuer_country" bson:"issuer_country"`
IssuerName string `json:"issuer_name" bson:"issuer_name"`
}
type CardProduct struct {
Code string `json:"code" bson:"code"`
Name string `json:"name" bson:"name"`
}

@ -11,6 +11,7 @@ type CreatePaymentRequest[T any] struct {
Deal any `json:"deal,omitempty"` Deal any `json:"deal,omitempty"`
MerchantCustomerID any `json:"merchant_customer_id,omitempty"` MerchantCustomerID any `json:"merchant_customer_id,omitempty"`
Receipt Receipt `json:"receipt,omitempty"` Receipt Receipt `json:"receipt,omitempty"`
SavePaymentMethod bool `json:"save_payment_method"`
} }
type Receipt struct { type Receipt struct {
@ -40,3 +41,10 @@ type Customer struct {
Email string `json:"email,omitempty"` Email string `json:"email,omitempty"`
Phone string `json:"phone,omitempty"` Phone string `json:"phone,omitempty"`
} }
type CreateRecurrentPayment struct {
Amount Amount `json:"amount"`
Capture bool `json:"capture"`
PaymentMethodID string `json:"payment_method_id"`
Description string `json:"description,omitempty"`
}

@ -0,0 +1,124 @@
package alchemy
import (
"context"
"fmt"
"gitea.pena/PenaSide/treasurer/internal/errors"
"gitea.pena/PenaSide/treasurer/internal/models"
"gitea.pena/PenaSide/treasurer/internal/models/alchemy"
"gitea.pena/PenaSide/treasurer/internal/repository"
"github.com/gofiber/fiber/v2"
"github.com/google/uuid"
"go.uber.org/zap"
"strconv"
"strings"
"time"
)
const ProviderName = "alchemy"
type Config struct {
WalletAddress string `json:"walletAddress"`
}
type Provider struct {
repository *repository.PaymentRepository
logger *zap.Logger
config *Config
}
type Deps struct {
Repository *repository.PaymentRepository
Logger *zap.Logger
Config *Config
}
func New(deps Deps) *Provider {
return &Provider{
logger: deps.Logger,
config: deps.Config,
repository: deps.Repository,
}
}
func (p *Provider) GetName() string {
return ProviderName
}
func (p *Provider) GetSupportedPaymentMethods() []models.PaymentType {
return []models.PaymentType{models.PaymentTypeAlchemy}
}
func (p *Provider) CreateInvoice(ctx context.Context, req map[string]string) (string, errors.Error) {
amountStr := req["cryptoAmount"]
fromWallet := req["fromWalletAddress"]
if amountStr == "" || fromWallet == "" {
p.logger.Error("amount or fromWallet address is empty", zap.String("fromWalletAddress", fromWallet), zap.String("cryptoAmount", amountStr))
return "", errors.NewWithMessage("cryptoAmount and fromWalletAddress required", errors.ErrInvalidArgs)
}
cryptoAmount, err := strconv.ParseFloat(amountStr, 64)
if err != nil {
p.logger.Error("failed to parse cryptoAmount from wallet address", zap.Error(err))
return "", errors.NewWithMessage("invalid cryptoAmount", errors.ErrInvalidArgs)
}
now := time.Now()
payment := &models.Payment{
PaymentID: uuid.NewString(),
UserID: req["user_id"],
ClientIP: req["client_ip"],
Currency: req["currency"],
Type: models.PaymentTypeAlchemy,
Status: models.PaymentStatusWaiting,
CreatedAt: now,
UpdatedAt: now,
ToWalletAddress: p.config.WalletAddress,
FromWalletAddress: fromWallet,
CryptoAmount: cryptoAmount,
}
var callbackHosts []string
if val, ok := req["callback_host_grpc"]; ok && val != "" {
callbackHosts = strings.Split(val, ",")
}
payment.CallbackHostGRPC = callbackHosts
_, err = p.repository.Insert(ctx, payment)
if err != nil {
p.logger.Error("failed to insert payment into database", zap.Error(err))
return "", errors.NewWithMessage(fmt.Sprintf("failed to insert payment into database: %v", err), errors.ErrInternalError)
}
return p.config.WalletAddress, nil
}
func (p *Provider) RegisterWebhookHandlers(router fiber.Router) {
router.Post("/webhook/alchemy", p.handleWebhook)
}
func (p *Provider) handleWebhook(ctx *fiber.Ctx) error {
var payload alchemy.AlchemyAddressActivityWebhook
if err := ctx.BodyParser(&payload); err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString(fmt.Sprintf("failed to parse Alchemy webhook: %s", err.Error()))
}
for _, act := range payload.Event.Activity {
if act.ToAddress != p.config.WalletAddress {
continue
}
// todo нужно подумать как сделать так если сумма оплаты оказалась чуть больше ожидаемой...
payment, err := p.repository.FindByWalletsAndAmount(ctx.Context(), act.ToAddress, act.FromAddress, act.Value)
if err != nil {
if err.Type() == errors.ErrNotFound {
return ctx.Status(fiber.StatusNotFound).SendString(fmt.Sprintf("payment not found: %s", err.Error()))
}
return ctx.Status(fiber.StatusInternalServerError).SendString(fmt.Sprintf("internal error while searching payment: %s", err.Error()))
}
_, err = p.repository.SetPaymentStatus(ctx.Context(), payment.PaymentID, models.PaymentStatusSuccessfully)
if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(fmt.Sprintf("failed to set payment complete: %s", err.Error()))
}
}
return ctx.SendStatus(fiber.StatusOK)
}

@ -34,6 +34,7 @@ type Provider struct {
httpClient *resty.Client httpClient *resty.Client
repository *repository.PaymentRepository repository *repository.PaymentRepository
callbackService *callback.Service callbackService *callback.Service
paymentMethodRepository *repository.PaymentMethodRepository
} }
type Deps struct { type Deps struct {
@ -41,6 +42,7 @@ type Deps struct {
Config *Config Config *Config
Repository *repository.PaymentRepository Repository *repository.PaymentRepository
CallbackService *callback.Service CallbackService *callback.Service
PaymentMethodRepository *repository.PaymentMethodRepository
} }
func New(deps Deps) (*Provider, errors.Error) { func New(deps Deps) (*Provider, errors.Error) {
@ -50,6 +52,7 @@ func New(deps Deps) (*Provider, errors.Error) {
httpClient: resty.New(), httpClient: resty.New(),
repository: deps.Repository, repository: deps.Repository,
callbackService: deps.CallbackService, callbackService: deps.CallbackService,
paymentMethodRepository: deps.PaymentMethodRepository,
}, nil }, nil
} }
@ -76,6 +79,11 @@ func (p *Provider) CreateInvoice(ctx context.Context, req map[string]string) (st
p.logger.Error("failed to create payment yandex receipt by parse map", zap.Error(err)) p.logger.Error("failed to create payment yandex receipt by parse map", zap.Error(err))
return "", errors.NewWithMessage("failed to parse input request by parse map", errors.ErrInvalidArgs) return "", errors.NewWithMessage("failed to parse input request by parse map", errors.ErrInvalidArgs)
} }
if request.Recurrent {
return p.CreateRecurrentPayment(ctx, request)
}
idempotenceKey := uuid.New().String() idempotenceKey := uuid.New().String()
yandexPayment, err := p.httpClient.R(). yandexPayment, err := p.httpClient.R().
@ -102,6 +110,7 @@ func (p *Provider) CreateInvoice(ctx context.Context, req map[string]string) (st
}, },
Capture: true, Capture: true,
ClientIP: request.ClientIP, ClientIP: request.ClientIP,
SavePaymentMethod: request.Auto,
}). }).
Post(p.config.PaymentsURL) Post(p.config.PaymentsURL)
@ -163,6 +172,42 @@ func (p *Provider) handleWebhook(ctx *fiber.Ctx) error {
p.logger.Error("failed to set payment complete", zap.Error(err)) p.logger.Error("failed to set payment complete", zap.Error(err))
return errors.HTTP(ctx, err) return errors.HTTP(ctx, err)
} }
if notification.Object.PaymentMethod != nil && notification.Object.PaymentMethod.Saved {
method := &yandex.PaymentMethod{
UserID: payment.UserID,
MethodID: notification.Object.PaymentMethod.ID,
Type: notification.Object.PaymentMethod.Type,
Title: notification.Object.PaymentMethod.Title,
Saved: notification.Object.PaymentMethod.Saved,
}
if notification.Object.PaymentMethod.Card != nil {
method.Card = &yandex.Card{
First6: notification.Object.PaymentMethod.Card.First6,
Last4: notification.Object.PaymentMethod.Card.Last4,
ExpiryMonth: notification.Object.PaymentMethod.Card.ExpiryMonth,
ExpiryYear: notification.Object.PaymentMethod.Card.ExpiryYear,
CardType: notification.Object.PaymentMethod.Card.CardType,
IssuerName: notification.Object.PaymentMethod.Card.IssuerName,
IssuerCountry: notification.Object.PaymentMethod.Card.IssuerCountry,
}
}
if notification.Object.PaymentMethod.Card.CardProduct != nil {
method.Card.CardProduct = &yandex.CardProduct{
Code: notification.Object.PaymentMethod.Card.CardProduct.Code,
Name: notification.Object.PaymentMethod.Card.CardProduct.Name,
}
}
if err := p.paymentMethodRepository.Save(ctx.Context(), method); err != nil {
p.logger.Error("failed to save payment method", zap.Error(err),
zap.String("userId", payment.UserID), zap.String("methodId", method.MethodID))
// todo стоит ли возвращать ошибку?
}
}
case yandex.WebhookEventPaymentCanceled: case yandex.WebhookEventPaymentCanceled:
payment, err = p.repository.SetPaymentStatus(ctx.Context(), notification.Object.ID, models.PaymentStatusCanceled) payment, err = p.repository.SetPaymentStatus(ctx.Context(), notification.Object.ID, models.PaymentStatusCanceled)
if err != nil { if err != nil {
@ -210,3 +255,77 @@ func (p *Provider) handleWebhook(ctx *fiber.Ctx) error {
return ctx.SendStatus(http.StatusOK) return ctx.SendStatus(http.StatusOK)
} }
func (p *Provider) CreateRecurrentPayment(ctx context.Context, request *models.CreatePayment[yandex.Receipt]) (string, errors.Error) {
methods, err := p.paymentMethodRepository.GetByUserID(ctx, request.UserID)
if err != nil {
p.logger.Error("failed to get payment methods", zap.Error(err), zap.String("userId", request.UserID))
return "", errors.NewWithError(err, errors.ErrInternalError)
}
if len(methods) == 0 {
p.logger.Warn("no saved payment methods found", zap.String("userId", request.UserID))
return "", errors.NewWithMessage("no saved payment methods found", errors.ErrInvalidArgs)
}
for _, method := range methods {
idempotenceKey := uuid.New().String()
yandexPayment, err := p.httpClient.R().
SetContext(ctx).
SetHeader("Content-Type", "application/json").
SetHeader("Idempotence-Key", idempotenceKey).
SetHeader("Authorization", utils.ConvertYoomoneySercetsToAuth("Basic", p.config.StoreID, p.config.SecretKey)).
SetBody(&yandex.CreateRecurrentPayment{
Amount: yandex.Amount{
Value: utils.ConvertAmountToStringFloat(request.Amount),
Currency: request.Currency,
},
PaymentMethodID: method.MethodID,
Capture: true,
}).
Post(p.config.PaymentsURL)
if err != nil {
p.logger.Error("failed to create recurrent payment", zap.Error(err), zap.String("userId", request.UserID))
return "", errors.NewWithError(fmt.Errorf("failed to create recurrent payment"), errors.ErrInternalError)
}
if yandexPayment.StatusCode() != http.StatusOK {
p.logger.Error("unexpected status code from yandex", zap.Int("statusCode", yandexPayment.StatusCode()), zap.String("userId", request.UserID))
return "", errors.NewWithError(fmt.Errorf("unexpected status code: %d", yandexPayment.StatusCode()), errors.ErrInternalError)
}
var payment yandex.Payment
if err := json.Unmarshal(yandexPayment.Body(), &payment); err != nil {
p.logger.Error("failed to unmarshal payment response", zap.Error(err), zap.String("userId", request.UserID), zap.String("methodId", method.MethodID))
return "", errors.NewWithError(err, errors.ErrInternalError)
}
if payment.Status != yandex.PaymentStatusSuccessfully {
p.logger.Error("payment not succeeded", zap.String("userId", request.UserID), zap.String("status", string(payment.Status)))
continue
}
_, err = p.repository.Insert(ctx, &models.Payment{
UserID: request.UserID,
PaymentID: payment.ID,
IdempotencePaymentID: idempotenceKey,
ClientIP: request.ClientIP,
Currency: request.Currency,
Amount: request.Amount,
Type: request.Type,
Status: models.PaymentStatusMap[string(payment.Status)],
Completed: false,
RawPaymentBody: payment,
CallbackHostGRPC: request.CallbackHostGRPC,
})
if err != nil {
p.logger.Error("failed to save payment to database", zap.Error(err))
return "", errors.NewWithError(fmt.Errorf("failed to save payment to database: %w", err), errors.ErrInternalError)
}
return payment.ID, nil
}
return "", errors.NewWithMessage("failed to create recurrent payment with any saved method", errors.ErrInternalError)
}

@ -1,8 +1,8 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.33.0 // protoc-gen-go v1.25.0-devel
// protoc (unknown) // protoc v3.14.0
// source: callback/service.proto // source: service.proto
package payment_callback package payment_callback
@ -10,7 +10,6 @@ import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl" protoimpl "google.golang.org/protobuf/runtime/protoimpl"
emptypb "google.golang.org/protobuf/types/known/emptypb" emptypb "google.golang.org/protobuf/types/known/emptypb"
_ "google.golang.org/protobuf/types/known/timestamppb"
reflect "reflect" reflect "reflect"
sync "sync" sync "sync"
) )
@ -35,7 +34,7 @@ type Event struct {
func (x *Event) Reset() { func (x *Event) Reset() {
*x = Event{} *x = Event{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_callback_service_proto_msgTypes[0] mi := &file_service_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -48,7 +47,7 @@ func (x *Event) String() string {
func (*Event) ProtoMessage() {} func (*Event) ProtoMessage() {}
func (x *Event) ProtoReflect() protoreflect.Message { func (x *Event) ProtoReflect() protoreflect.Message {
mi := &file_callback_service_proto_msgTypes[0] mi := &file_service_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -61,7 +60,7 @@ func (x *Event) ProtoReflect() protoreflect.Message {
// Deprecated: Use Event.ProtoReflect.Descriptor instead. // Deprecated: Use Event.ProtoReflect.Descriptor instead.
func (*Event) Descriptor() ([]byte, []int) { func (*Event) Descriptor() ([]byte, []int) {
return file_callback_service_proto_rawDescGZIP(), []int{0} return file_service_proto_rawDescGZIP(), []int{0}
} }
func (x *Event) GetKey() string { func (x *Event) GetKey() string {
@ -104,7 +103,7 @@ type Payment struct {
func (x *Payment) Reset() { func (x *Payment) Reset() {
*x = Payment{} *x = Payment{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_callback_service_proto_msgTypes[1] mi := &file_service_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -117,7 +116,7 @@ func (x *Payment) String() string {
func (*Payment) ProtoMessage() {} func (*Payment) ProtoMessage() {}
func (x *Payment) ProtoReflect() protoreflect.Message { func (x *Payment) ProtoReflect() protoreflect.Message {
mi := &file_callback_service_proto_msgTypes[1] mi := &file_service_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -130,7 +129,7 @@ func (x *Payment) ProtoReflect() protoreflect.Message {
// Deprecated: Use Payment.ProtoReflect.Descriptor instead. // Deprecated: Use Payment.ProtoReflect.Descriptor instead.
func (*Payment) Descriptor() ([]byte, []int) { func (*Payment) Descriptor() ([]byte, []int) {
return file_callback_service_proto_rawDescGZIP(), []int{1} return file_service_proto_rawDescGZIP(), []int{1}
} }
func (x *Payment) GetID() string { func (x *Payment) GetID() string {
@ -196,90 +195,94 @@ func (x *Payment) GetCompleted() bool {
return false return false
} }
var File_callback_service_proto protoreflect.FileDescriptor var File_service_proto protoreflect.FileDescriptor
var file_callback_service_proto_rawDesc = []byte{ var file_service_proto_rawDesc = []byte{
0x0a, 0x16, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x10, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63,
0x74, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6b, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x68,
0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x18, 0x01,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, 0x73,
0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x68, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73,
0x74, 0x12, 0x10, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x67, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03,
0x4b, 0x65, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63,
0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x33, 0x0a, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52,
0x07, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x07, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x81, 0x02, 0x0a, 0x07, 0x50, 0x61, 0x79,
0x2e, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x6b, 0x2e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x07, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x52, 0x02, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02,
0x6e, 0x74, 0x22, 0x81, 0x02, 0x0a, 0x07, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09,
0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, 0x12, 0x16, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x09, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x14, 0x49, 0x64,
0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74,
0x74, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x49, 0x64, 0x65, 0x6d, 0x70, 0x6f,
0x6e, 0x74, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x14, 0x49, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x16,
0x6e, 0x63, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x0a, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06,
0x28, 0x09, 0x52, 0x14, 0x49, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x50, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e,
0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e,
0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x63, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
0x12, 0x1a, 0x0a, 0x08, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
0x28, 0x09, 0x52, 0x08, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c,
0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x0a, 0x09, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28,
0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x08, 0x52, 0x09, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x32, 0xdd, 0x01, 0x0a,
0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x6f, 0x6d, 0x70, 0x16, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b,
0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x43, 0x6f, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3e, 0x0a, 0x09, 0x4f, 0x6e, 0x53, 0x75, 0x63,
0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x32, 0x98, 0x01, 0x0a, 0x16, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x63, 0x65, 0x73, 0x73, 0x12, 0x17, 0x2e, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63,
0x6e, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x1a, 0x16, 0x2e,
0x65, 0x12, 0x3e, 0x0a, 0x09, 0x4f, 0x6e, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
0x2e, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x09, 0x4f, 0x6e, 0x46, 0x61, 0x69,
0x6b, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x6c, 0x75, 0x72, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x1a, 0x16, 0x2e,
0x00, 0x12, 0x3e, 0x0a, 0x09, 0x4f, 0x6e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x12, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
0x2e, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0e, 0x4f, 0x6e, 0x43, 0x61, 0x72,
0x6b, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x74, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x61, 0x79, 0x6d,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x2e, 0x45, 0x76, 0x65,
0x00, 0x42, 0x14, 0x5a, 0x12, 0x2e, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6e, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0x14, 0x5a, 0x12,
0x2e, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61,
0x63, 0x6b, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (
file_callback_service_proto_rawDescOnce sync.Once file_service_proto_rawDescOnce sync.Once
file_callback_service_proto_rawDescData = file_callback_service_proto_rawDesc file_service_proto_rawDescData = file_service_proto_rawDesc
) )
func file_callback_service_proto_rawDescGZIP() []byte { func file_service_proto_rawDescGZIP() []byte {
file_callback_service_proto_rawDescOnce.Do(func() { file_service_proto_rawDescOnce.Do(func() {
file_callback_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_callback_service_proto_rawDescData) file_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_service_proto_rawDescData)
}) })
return file_callback_service_proto_rawDescData return file_service_proto_rawDescData
} }
var file_callback_service_proto_msgTypes = make([]protoimpl.MessageInfo, 2) var file_service_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
var file_callback_service_proto_goTypes = []interface{}{ var file_service_proto_goTypes = []interface{}{
(*Event)(nil), // 0: payment_callback.Event (*Event)(nil), // 0: payment_callback.Event
(*Payment)(nil), // 1: payment_callback.Payment (*Payment)(nil), // 1: payment_callback.Payment
(*emptypb.Empty)(nil), // 2: google.protobuf.Empty (*emptypb.Empty)(nil), // 2: google.protobuf.Empty
} }
var file_callback_service_proto_depIdxs = []int32{ var file_service_proto_depIdxs = []int32{
1, // 0: payment_callback.Event.Payment:type_name -> payment_callback.Payment 1, // 0: payment_callback.Event.Payment:type_name -> payment_callback.Payment
0, // 1: payment_callback.PaymentCallbackService.OnSuccess:input_type -> payment_callback.Event 0, // 1: payment_callback.PaymentCallbackService.OnSuccess:input_type -> payment_callback.Event
0, // 2: payment_callback.PaymentCallbackService.OnFailure:input_type -> payment_callback.Event 0, // 2: payment_callback.PaymentCallbackService.OnFailure:input_type -> payment_callback.Event
2, // 3: payment_callback.PaymentCallbackService.OnSuccess:output_type -> google.protobuf.Empty 0, // 3: payment_callback.PaymentCallbackService.OnCartPurchase:input_type -> payment_callback.Event
2, // 4: payment_callback.PaymentCallbackService.OnFailure:output_type -> google.protobuf.Empty 2, // 4: payment_callback.PaymentCallbackService.OnSuccess:output_type -> google.protobuf.Empty
3, // [3:5] is the sub-list for method output_type 2, // 5: payment_callback.PaymentCallbackService.OnFailure:output_type -> google.protobuf.Empty
1, // [1:3] is the sub-list for method input_type 2, // 6: payment_callback.PaymentCallbackService.OnCartPurchase:output_type -> google.protobuf.Empty
4, // [4:7] is the sub-list for method output_type
1, // [1:4] is the sub-list for method input_type
1, // [1:1] is the sub-list for extension type_name 1, // [1:1] is the sub-list for extension type_name
1, // [1:1] is the sub-list for extension extendee 1, // [1:1] is the sub-list for extension extendee
0, // [0:1] is the sub-list for field type_name 0, // [0:1] is the sub-list for field type_name
} }
func init() { file_callback_service_proto_init() } func init() { file_service_proto_init() }
func file_callback_service_proto_init() { func file_service_proto_init() {
if File_callback_service_proto != nil { if File_service_proto != nil {
return return
} }
if !protoimpl.UnsafeEnabled { if !protoimpl.UnsafeEnabled {
file_callback_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { file_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Event); i { switch v := v.(*Event); i {
case 0: case 0:
return &v.state return &v.state
@ -291,7 +294,7 @@ func file_callback_service_proto_init() {
return nil return nil
} }
} }
file_callback_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { file_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Payment); i { switch v := v.(*Payment); i {
case 0: case 0:
return &v.state return &v.state
@ -308,18 +311,18 @@ func file_callback_service_proto_init() {
out := protoimpl.TypeBuilder{ out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{ File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_callback_service_proto_rawDesc, RawDescriptor: file_service_proto_rawDesc,
NumEnums: 0, NumEnums: 0,
NumMessages: 2, NumMessages: 2,
NumExtensions: 0, NumExtensions: 0,
NumServices: 1, NumServices: 1,
}, },
GoTypes: file_callback_service_proto_goTypes, GoTypes: file_service_proto_goTypes,
DependencyIndexes: file_callback_service_proto_depIdxs, DependencyIndexes: file_service_proto_depIdxs,
MessageInfos: file_callback_service_proto_msgTypes, MessageInfos: file_service_proto_msgTypes,
}.Build() }.Build()
File_callback_service_proto = out.File File_service_proto = out.File
file_callback_service_proto_rawDesc = nil file_service_proto_rawDesc = nil
file_callback_service_proto_goTypes = nil file_service_proto_goTypes = nil
file_callback_service_proto_depIdxs = nil file_service_proto_depIdxs = nil
} }

@ -1,8 +1,4 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT. // Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
// - protoc-gen-go-grpc v1.3.0
// - protoc (unknown)
// source: callback/service.proto
package payment_callback package payment_callback
@ -19,17 +15,13 @@ import (
// Requires gRPC-Go v1.32.0 or later. // Requires gRPC-Go v1.32.0 or later.
const _ = grpc.SupportPackageIsVersion7 const _ = grpc.SupportPackageIsVersion7
const (
PaymentCallbackService_OnSuccess_FullMethodName = "/payment_callback.PaymentCallbackService/OnSuccess"
PaymentCallbackService_OnFailure_FullMethodName = "/payment_callback.PaymentCallbackService/OnFailure"
)
// PaymentCallbackServiceClient is the client API for PaymentCallbackService service. // PaymentCallbackServiceClient is the client API for PaymentCallbackService service.
// //
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
type PaymentCallbackServiceClient interface { type PaymentCallbackServiceClient interface {
OnSuccess(ctx context.Context, in *Event, opts ...grpc.CallOption) (*emptypb.Empty, error) OnSuccess(ctx context.Context, in *Event, opts ...grpc.CallOption) (*emptypb.Empty, error)
OnFailure(ctx context.Context, in *Event, opts ...grpc.CallOption) (*emptypb.Empty, error) OnFailure(ctx context.Context, in *Event, opts ...grpc.CallOption) (*emptypb.Empty, error)
OnCartPurchase(ctx context.Context, in *Event, opts ...grpc.CallOption) (*emptypb.Empty, error)
} }
type paymentCallbackServiceClient struct { type paymentCallbackServiceClient struct {
@ -42,7 +34,7 @@ func NewPaymentCallbackServiceClient(cc grpc.ClientConnInterface) PaymentCallbac
func (c *paymentCallbackServiceClient) OnSuccess(ctx context.Context, in *Event, opts ...grpc.CallOption) (*emptypb.Empty, error) { func (c *paymentCallbackServiceClient) OnSuccess(ctx context.Context, in *Event, opts ...grpc.CallOption) (*emptypb.Empty, error) {
out := new(emptypb.Empty) out := new(emptypb.Empty)
err := c.cc.Invoke(ctx, PaymentCallbackService_OnSuccess_FullMethodName, in, out, opts...) err := c.cc.Invoke(ctx, "/payment_callback.PaymentCallbackService/OnSuccess", in, out, opts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -51,7 +43,16 @@ func (c *paymentCallbackServiceClient) OnSuccess(ctx context.Context, in *Event,
func (c *paymentCallbackServiceClient) OnFailure(ctx context.Context, in *Event, opts ...grpc.CallOption) (*emptypb.Empty, error) { func (c *paymentCallbackServiceClient) OnFailure(ctx context.Context, in *Event, opts ...grpc.CallOption) (*emptypb.Empty, error) {
out := new(emptypb.Empty) out := new(emptypb.Empty)
err := c.cc.Invoke(ctx, PaymentCallbackService_OnFailure_FullMethodName, in, out, opts...) err := c.cc.Invoke(ctx, "/payment_callback.PaymentCallbackService/OnFailure", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *paymentCallbackServiceClient) OnCartPurchase(ctx context.Context, in *Event, opts ...grpc.CallOption) (*emptypb.Empty, error) {
out := new(emptypb.Empty)
err := c.cc.Invoke(ctx, "/payment_callback.PaymentCallbackService/OnCartPurchase", in, out, opts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -59,14 +60,16 @@ func (c *paymentCallbackServiceClient) OnFailure(ctx context.Context, in *Event,
} }
// PaymentCallbackServiceServer is the server API for PaymentCallbackService service. // PaymentCallbackServiceServer is the server API for PaymentCallbackService service.
// All implementations should embed UnimplementedPaymentCallbackServiceServer // All implementations must embed UnimplementedPaymentCallbackServiceServer
// for forward compatibility // for forward compatibility
type PaymentCallbackServiceServer interface { type PaymentCallbackServiceServer interface {
OnSuccess(context.Context, *Event) (*emptypb.Empty, error) OnSuccess(context.Context, *Event) (*emptypb.Empty, error)
OnFailure(context.Context, *Event) (*emptypb.Empty, error) OnFailure(context.Context, *Event) (*emptypb.Empty, error)
OnCartPurchase(context.Context, *Event) (*emptypb.Empty, error)
mustEmbedUnimplementedPaymentCallbackServiceServer()
} }
// UnimplementedPaymentCallbackServiceServer should be embedded to have forward compatible implementations. // UnimplementedPaymentCallbackServiceServer must be embedded to have forward compatible implementations.
type UnimplementedPaymentCallbackServiceServer struct { type UnimplementedPaymentCallbackServiceServer struct {
} }
@ -76,6 +79,11 @@ func (UnimplementedPaymentCallbackServiceServer) OnSuccess(context.Context, *Eve
func (UnimplementedPaymentCallbackServiceServer) OnFailure(context.Context, *Event) (*emptypb.Empty, error) { func (UnimplementedPaymentCallbackServiceServer) OnFailure(context.Context, *Event) (*emptypb.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method OnFailure not implemented") return nil, status.Errorf(codes.Unimplemented, "method OnFailure not implemented")
} }
func (UnimplementedPaymentCallbackServiceServer) OnCartPurchase(context.Context, *Event) (*emptypb.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method OnCartPurchase not implemented")
}
func (UnimplementedPaymentCallbackServiceServer) mustEmbedUnimplementedPaymentCallbackServiceServer() {
}
// UnsafePaymentCallbackServiceServer may be embedded to opt out of forward compatibility for this service. // UnsafePaymentCallbackServiceServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to PaymentCallbackServiceServer will // Use of this interface is not recommended, as added methods to PaymentCallbackServiceServer will
@ -98,7 +106,7 @@ func _PaymentCallbackService_OnSuccess_Handler(srv interface{}, ctx context.Cont
} }
info := &grpc.UnaryServerInfo{ info := &grpc.UnaryServerInfo{
Server: srv, Server: srv,
FullMethod: PaymentCallbackService_OnSuccess_FullMethodName, FullMethod: "/payment_callback.PaymentCallbackService/OnSuccess",
} }
handler := func(ctx context.Context, req interface{}) (interface{}, error) { handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(PaymentCallbackServiceServer).OnSuccess(ctx, req.(*Event)) return srv.(PaymentCallbackServiceServer).OnSuccess(ctx, req.(*Event))
@ -116,7 +124,7 @@ func _PaymentCallbackService_OnFailure_Handler(srv interface{}, ctx context.Cont
} }
info := &grpc.UnaryServerInfo{ info := &grpc.UnaryServerInfo{
Server: srv, Server: srv,
FullMethod: PaymentCallbackService_OnFailure_FullMethodName, FullMethod: "/payment_callback.PaymentCallbackService/OnFailure",
} }
handler := func(ctx context.Context, req interface{}) (interface{}, error) { handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(PaymentCallbackServiceServer).OnFailure(ctx, req.(*Event)) return srv.(PaymentCallbackServiceServer).OnFailure(ctx, req.(*Event))
@ -124,6 +132,24 @@ func _PaymentCallbackService_OnFailure_Handler(srv interface{}, ctx context.Cont
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _PaymentCallbackService_OnCartPurchase_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Event)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(PaymentCallbackServiceServer).OnCartPurchase(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/payment_callback.PaymentCallbackService/OnCartPurchase",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(PaymentCallbackServiceServer).OnCartPurchase(ctx, req.(*Event))
}
return interceptor(ctx, in, info, handler)
}
// PaymentCallbackService_ServiceDesc is the grpc.ServiceDesc for PaymentCallbackService service. // PaymentCallbackService_ServiceDesc is the grpc.ServiceDesc for PaymentCallbackService service.
// It's only intended for direct use with grpc.RegisterService, // It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy) // and not to be introspected or modified (even as a copy)
@ -139,7 +165,11 @@ var PaymentCallbackService_ServiceDesc = grpc.ServiceDesc{
MethodName: "OnFailure", MethodName: "OnFailure",
Handler: _PaymentCallbackService_OnFailure_Handler, Handler: _PaymentCallbackService_OnFailure_Handler,
}, },
{
MethodName: "OnCartPurchase",
Handler: _PaymentCallbackService_OnCartPurchase_Handler,
},
}, },
Streams: []grpc.StreamDesc{}, Streams: []grpc.StreamDesc{},
Metadata: "callback/service.proto", Metadata: "service.proto",
} }

@ -1,408 +0,0 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.33.0
// protoc (unknown)
// source: treasurer/payment.model.proto
package treasurer
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
type MainPaymentSettings struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Currency string `protobuf:"bytes,1,opt,name=Currency,proto3" json:"Currency,omitempty"`
Amount int64 `protobuf:"varint,2,opt,name=Amount,proto3" json:"Amount,omitempty"`
CallbackHostGRPC []string `protobuf:"bytes,3,rep,name=CallbackHostGRPC,proto3" json:"CallbackHostGRPC,omitempty"`
ReturnURL string `protobuf:"bytes,4,opt,name=ReturnURL,proto3" json:"ReturnURL,omitempty"`
UserID string `protobuf:"bytes,5,opt,name=UserID,proto3" json:"UserID,omitempty"`
ClientIP string `protobuf:"bytes,6,opt,name=ClientIP,proto3" json:"ClientIP,omitempty"`
Customer *Customer `protobuf:"bytes,7,opt,name=Customer,proto3" json:"Customer,omitempty"`
Items []*Item `protobuf:"bytes,8,rep,name=Items,proto3" json:"Items,omitempty"`
}
func (x *MainPaymentSettings) Reset() {
*x = MainPaymentSettings{}
if protoimpl.UnsafeEnabled {
mi := &file_treasurer_payment_model_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *MainPaymentSettings) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MainPaymentSettings) ProtoMessage() {}
func (x *MainPaymentSettings) ProtoReflect() protoreflect.Message {
mi := &file_treasurer_payment_model_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use MainPaymentSettings.ProtoReflect.Descriptor instead.
func (*MainPaymentSettings) Descriptor() ([]byte, []int) {
return file_treasurer_payment_model_proto_rawDescGZIP(), []int{0}
}
func (x *MainPaymentSettings) GetCurrency() string {
if x != nil {
return x.Currency
}
return ""
}
func (x *MainPaymentSettings) GetAmount() int64 {
if x != nil {
return x.Amount
}
return 0
}
func (x *MainPaymentSettings) GetCallbackHostGRPC() []string {
if x != nil {
return x.CallbackHostGRPC
}
return nil
}
func (x *MainPaymentSettings) GetReturnURL() string {
if x != nil {
return x.ReturnURL
}
return ""
}
func (x *MainPaymentSettings) GetUserID() string {
if x != nil {
return x.UserID
}
return ""
}
func (x *MainPaymentSettings) GetClientIP() string {
if x != nil {
return x.ClientIP
}
return ""
}
func (x *MainPaymentSettings) GetCustomer() *Customer {
if x != nil {
return x.Customer
}
return nil
}
func (x *MainPaymentSettings) GetItems() []*Item {
if x != nil {
return x.Items
}
return nil
}
type Customer struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
FullName string `protobuf:"bytes,1,opt,name=FullName,proto3" json:"FullName,omitempty"`
INN string `protobuf:"bytes,2,opt,name=INN,proto3" json:"INN,omitempty"`
Email string `protobuf:"bytes,3,opt,name=Email,proto3" json:"Email,omitempty"`
Phone string `protobuf:"bytes,4,opt,name=Phone,proto3" json:"Phone,omitempty"`
}
func (x *Customer) Reset() {
*x = Customer{}
if protoimpl.UnsafeEnabled {
mi := &file_treasurer_payment_model_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Customer) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Customer) ProtoMessage() {}
func (x *Customer) ProtoReflect() protoreflect.Message {
mi := &file_treasurer_payment_model_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Customer.ProtoReflect.Descriptor instead.
func (*Customer) Descriptor() ([]byte, []int) {
return file_treasurer_payment_model_proto_rawDescGZIP(), []int{1}
}
func (x *Customer) GetFullName() string {
if x != nil {
return x.FullName
}
return ""
}
func (x *Customer) GetINN() string {
if x != nil {
return x.INN
}
return ""
}
func (x *Customer) GetEmail() string {
if x != nil {
return x.Email
}
return ""
}
func (x *Customer) GetPhone() string {
if x != nil {
return x.Phone
}
return ""
}
type Item struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Description string `protobuf:"bytes,1,opt,name=Description,proto3" json:"Description,omitempty"`
Measure string `protobuf:"bytes,2,opt,name=Measure,proto3" json:"Measure,omitempty"`
Quantity string `protobuf:"bytes,3,opt,name=Quantity,proto3" json:"Quantity,omitempty"`
Money string `protobuf:"bytes,4,opt,name=Money,proto3" json:"Money,omitempty"`
Currency string `protobuf:"bytes,5,opt,name=Currency,proto3" json:"Currency,omitempty"`
}
func (x *Item) Reset() {
*x = Item{}
if protoimpl.UnsafeEnabled {
mi := &file_treasurer_payment_model_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Item) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Item) ProtoMessage() {}
func (x *Item) ProtoReflect() protoreflect.Message {
mi := &file_treasurer_payment_model_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Item.ProtoReflect.Descriptor instead.
func (*Item) Descriptor() ([]byte, []int) {
return file_treasurer_payment_model_proto_rawDescGZIP(), []int{2}
}
func (x *Item) GetDescription() string {
if x != nil {
return x.Description
}
return ""
}
func (x *Item) GetMeasure() string {
if x != nil {
return x.Measure
}
return ""
}
func (x *Item) GetQuantity() string {
if x != nil {
return x.Quantity
}
return ""
}
func (x *Item) GetMoney() string {
if x != nil {
return x.Money
}
return ""
}
func (x *Item) GetCurrency() string {
if x != nil {
return x.Currency
}
return ""
}
var File_treasurer_payment_model_proto protoreflect.FileDescriptor
var file_treasurer_payment_model_proto_rawDesc = []byte{
0x0a, 0x1d, 0x74, 0x72, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2f, 0x70, 0x61, 0x79, 0x6d,
0x65, 0x6e, 0x74, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
0x09, 0x74, 0x72, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x22, 0x9f, 0x02, 0x0a, 0x13, 0x4d,
0x61, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x16,
0x0a, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06,
0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61,
0x63, 0x6b, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x52, 0x50, 0x43, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09,
0x52, 0x10, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x52,
0x50, 0x43, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x55, 0x52, 0x4c, 0x18,
0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x55, 0x52, 0x4c,
0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6c, 0x69, 0x65,
0x6e, 0x74, 0x49, 0x50, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x43, 0x6c, 0x69, 0x65,
0x6e, 0x74, 0x49, 0x50, 0x12, 0x2f, 0x0a, 0x08, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72,
0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x74, 0x72, 0x65, 0x61, 0x73, 0x75, 0x72,
0x65, 0x72, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x52, 0x08, 0x43, 0x75, 0x73,
0x74, 0x6f, 0x6d, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x08,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x72, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72,
0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x64, 0x0a, 0x08,
0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x46, 0x75, 0x6c, 0x6c,
0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x46, 0x75, 0x6c, 0x6c,
0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x49, 0x4e, 0x4e, 0x18, 0x02, 0x20, 0x01, 0x28,
0x09, 0x52, 0x03, 0x49, 0x4e, 0x4e, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x18,
0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x14, 0x0a, 0x05,
0x50, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x50, 0x68, 0x6f,
0x6e, 0x65, 0x22, 0x90, 0x01, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x44,
0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x0b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a,
0x07, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x51, 0x75, 0x61, 0x6e, 0x74,
0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x51, 0x75, 0x61, 0x6e, 0x74,
0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01,
0x28, 0x09, 0x52, 0x05, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x75, 0x72,
0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x43, 0x75, 0x72,
0x72, 0x65, 0x6e, 0x63, 0x79, 0x42, 0x0d, 0x5a, 0x0b, 0x2e, 0x2f, 0x74, 0x72, 0x65, 0x61, 0x73,
0x75, 0x72, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_treasurer_payment_model_proto_rawDescOnce sync.Once
file_treasurer_payment_model_proto_rawDescData = file_treasurer_payment_model_proto_rawDesc
)
func file_treasurer_payment_model_proto_rawDescGZIP() []byte {
file_treasurer_payment_model_proto_rawDescOnce.Do(func() {
file_treasurer_payment_model_proto_rawDescData = protoimpl.X.CompressGZIP(file_treasurer_payment_model_proto_rawDescData)
})
return file_treasurer_payment_model_proto_rawDescData
}
var file_treasurer_payment_model_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
var file_treasurer_payment_model_proto_goTypes = []interface{}{
(*MainPaymentSettings)(nil), // 0: treasurer.MainPaymentSettings
(*Customer)(nil), // 1: treasurer.Customer
(*Item)(nil), // 2: treasurer.Item
}
var file_treasurer_payment_model_proto_depIdxs = []int32{
1, // 0: treasurer.MainPaymentSettings.Customer:type_name -> treasurer.Customer
2, // 1: treasurer.MainPaymentSettings.Items:type_name -> treasurer.Item
2, // [2:2] is the sub-list for method output_type
2, // [2:2] is the sub-list for method input_type
2, // [2:2] is the sub-list for extension type_name
2, // [2:2] is the sub-list for extension extendee
0, // [0:2] is the sub-list for field type_name
}
func init() { file_treasurer_payment_model_proto_init() }
func file_treasurer_payment_model_proto_init() {
if File_treasurer_payment_model_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_treasurer_payment_model_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MainPaymentSettings); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_treasurer_payment_model_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Customer); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_treasurer_payment_model_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Item); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_treasurer_payment_model_proto_rawDesc,
NumEnums: 0,
NumMessages: 3,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_treasurer_payment_model_proto_goTypes,
DependencyIndexes: file_treasurer_payment_model_proto_depIdxs,
MessageInfos: file_treasurer_payment_model_proto_msgTypes,
}.Build()
File_treasurer_payment_model_proto = out.File
file_treasurer_payment_model_proto_rawDesc = nil
file_treasurer_payment_model_proto_goTypes = nil
file_treasurer_payment_model_proto_depIdxs = nil
}

@ -1,8 +1,8 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.33.0 // protoc-gen-go v1.25.0-devel
// protoc (unknown) // protoc v3.14.0
// source: treasurer/service.proto // source: service.proto
package treasurer package treasurer
@ -32,7 +32,7 @@ type GetBankCardPaymentLinkRequest struct {
func (x *GetBankCardPaymentLinkRequest) Reset() { func (x *GetBankCardPaymentLinkRequest) Reset() {
*x = GetBankCardPaymentLinkRequest{} *x = GetBankCardPaymentLinkRequest{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_treasurer_service_proto_msgTypes[0] mi := &file_service_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -45,7 +45,7 @@ func (x *GetBankCardPaymentLinkRequest) String() string {
func (*GetBankCardPaymentLinkRequest) ProtoMessage() {} func (*GetBankCardPaymentLinkRequest) ProtoMessage() {}
func (x *GetBankCardPaymentLinkRequest) ProtoReflect() protoreflect.Message { func (x *GetBankCardPaymentLinkRequest) ProtoReflect() protoreflect.Message {
mi := &file_treasurer_service_proto_msgTypes[0] mi := &file_service_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -58,7 +58,7 @@ func (x *GetBankCardPaymentLinkRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetBankCardPaymentLinkRequest.ProtoReflect.Descriptor instead. // Deprecated: Use GetBankCardPaymentLinkRequest.ProtoReflect.Descriptor instead.
func (*GetBankCardPaymentLinkRequest) Descriptor() ([]byte, []int) { func (*GetBankCardPaymentLinkRequest) Descriptor() ([]byte, []int) {
return file_treasurer_service_proto_rawDescGZIP(), []int{0} return file_service_proto_rawDescGZIP(), []int{0}
} }
func (x *GetBankCardPaymentLinkRequest) GetMainSettings() *MainPaymentSettings { func (x *GetBankCardPaymentLinkRequest) GetMainSettings() *MainPaymentSettings {
@ -79,7 +79,7 @@ type GetPaymentLinkRequest struct {
func (x *GetPaymentLinkRequest) Reset() { func (x *GetPaymentLinkRequest) Reset() {
*x = GetPaymentLinkRequest{} *x = GetPaymentLinkRequest{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_treasurer_service_proto_msgTypes[1] mi := &file_service_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -92,7 +92,7 @@ func (x *GetPaymentLinkRequest) String() string {
func (*GetPaymentLinkRequest) ProtoMessage() {} func (*GetPaymentLinkRequest) ProtoMessage() {}
func (x *GetPaymentLinkRequest) ProtoReflect() protoreflect.Message { func (x *GetPaymentLinkRequest) ProtoReflect() protoreflect.Message {
mi := &file_treasurer_service_proto_msgTypes[1] mi := &file_service_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -105,7 +105,7 @@ func (x *GetPaymentLinkRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetPaymentLinkRequest.ProtoReflect.Descriptor instead. // Deprecated: Use GetPaymentLinkRequest.ProtoReflect.Descriptor instead.
func (*GetPaymentLinkRequest) Descriptor() ([]byte, []int) { func (*GetPaymentLinkRequest) Descriptor() ([]byte, []int) {
return file_treasurer_service_proto_rawDescGZIP(), []int{1} return file_service_proto_rawDescGZIP(), []int{1}
} }
func (x *GetPaymentLinkRequest) GetMainSettings() *MainPaymentSettings { func (x *GetPaymentLinkRequest) GetMainSettings() *MainPaymentSettings {
@ -128,7 +128,7 @@ type GetB2BPaymentLinkRequest struct {
func (x *GetB2BPaymentLinkRequest) Reset() { func (x *GetB2BPaymentLinkRequest) Reset() {
*x = GetB2BPaymentLinkRequest{} *x = GetB2BPaymentLinkRequest{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_treasurer_service_proto_msgTypes[2] mi := &file_service_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -141,7 +141,7 @@ func (x *GetB2BPaymentLinkRequest) String() string {
func (*GetB2BPaymentLinkRequest) ProtoMessage() {} func (*GetB2BPaymentLinkRequest) ProtoMessage() {}
func (x *GetB2BPaymentLinkRequest) ProtoReflect() protoreflect.Message { func (x *GetB2BPaymentLinkRequest) ProtoReflect() protoreflect.Message {
mi := &file_treasurer_service_proto_msgTypes[2] mi := &file_service_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -154,7 +154,7 @@ func (x *GetB2BPaymentLinkRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetB2BPaymentLinkRequest.ProtoReflect.Descriptor instead. // Deprecated: Use GetB2BPaymentLinkRequest.ProtoReflect.Descriptor instead.
func (*GetB2BPaymentLinkRequest) Descriptor() ([]byte, []int) { func (*GetB2BPaymentLinkRequest) Descriptor() ([]byte, []int) {
return file_treasurer_service_proto_rawDescGZIP(), []int{2} return file_service_proto_rawDescGZIP(), []int{2}
} }
func (x *GetB2BPaymentLinkRequest) GetMainSettings() *MainPaymentSettings { func (x *GetB2BPaymentLinkRequest) GetMainSettings() *MainPaymentSettings {
@ -189,7 +189,7 @@ type GetPaymentLinkResponse struct {
func (x *GetPaymentLinkResponse) Reset() { func (x *GetPaymentLinkResponse) Reset() {
*x = GetPaymentLinkResponse{} *x = GetPaymentLinkResponse{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_treasurer_service_proto_msgTypes[3] mi := &file_service_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -202,7 +202,7 @@ func (x *GetPaymentLinkResponse) String() string {
func (*GetPaymentLinkResponse) ProtoMessage() {} func (*GetPaymentLinkResponse) ProtoMessage() {}
func (x *GetPaymentLinkResponse) ProtoReflect() protoreflect.Message { func (x *GetPaymentLinkResponse) ProtoReflect() protoreflect.Message {
mi := &file_treasurer_service_proto_msgTypes[3] mi := &file_service_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -215,7 +215,7 @@ func (x *GetPaymentLinkResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetPaymentLinkResponse.ProtoReflect.Descriptor instead. // Deprecated: Use GetPaymentLinkResponse.ProtoReflect.Descriptor instead.
func (*GetPaymentLinkResponse) Descriptor() ([]byte, []int) { func (*GetPaymentLinkResponse) Descriptor() ([]byte, []int) {
return file_treasurer_service_proto_rawDescGZIP(), []int{3} return file_service_proto_rawDescGZIP(), []int{3}
} }
func (x *GetPaymentLinkResponse) GetRedirectURL() string { func (x *GetPaymentLinkResponse) GetRedirectURL() string {
@ -225,137 +225,544 @@ func (x *GetPaymentLinkResponse) GetRedirectURL() string {
return "" return ""
} }
var File_treasurer_service_proto protoreflect.FileDescriptor type DeleteSavedPaymentMethodsRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
var file_treasurer_service_proto_rawDesc = []byte{ UserID string `protobuf:"bytes,1,opt,name=UserID,proto3" json:"UserID,omitempty"`
0x0a, 0x17, 0x74, 0x72, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2f, 0x73, 0x65, 0x72, 0x76, }
0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x74, 0x72, 0x65, 0x61, 0x73,
0x75, 0x72, 0x65, 0x72, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, func (x *DeleteSavedPaymentMethodsRequest) Reset() {
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, *x = DeleteSavedPaymentMethodsRequest{}
0x6f, 0x1a, 0x1d, 0x74, 0x72, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2f, 0x70, 0x61, 0x79, if protoimpl.UnsafeEnabled {
0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, mi := &file_service_proto_msgTypes[4]
0x22, 0x63, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6e, 0x6b, 0x43, 0x61, 0x72, 0x64, 0x50, ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, ms.StoreMessageInfo(mi)
0x74, 0x12, 0x42, 0x0a, 0x0c, 0x4d, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, }
0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x72, 0x65, 0x61, 0x73, 0x75, }
0x72, 0x65, 0x72, 0x2e, 0x4d, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53,
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0c, 0x4d, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x74, func (x *DeleteSavedPaymentMethodsRequest) String() string {
0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x5b, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, return protoimpl.X.MessageStringOf(x)
0x65, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, }
0x0a, 0x0c, 0x4d, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x72, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, func (*DeleteSavedPaymentMethodsRequest) ProtoMessage() {}
0x2e, 0x4d, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x74,
0x69, 0x6e, 0x67, 0x73, 0x52, 0x0c, 0x4d, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, func (x *DeleteSavedPaymentMethodsRequest) ProtoReflect() protoreflect.Message {
0x67, 0x73, 0x22, 0xb8, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x42, 0x32, 0x42, 0x50, 0x61, 0x79, mi := &file_service_proto_msgTypes[4]
0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, if protoimpl.UnsafeEnabled && x != nil {
0x42, 0x0a, 0x0c, 0x4d, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x72, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, if ms.LoadMessageInfo() == nil {
0x72, 0x2e, 0x4d, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, ms.StoreMessageInfo(mi)
0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0c, 0x4d, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, }
0x6e, 0x67, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x75, return ms
0x72, 0x70, 0x6f, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x50, 0x61, 0x79, }
0x6d, 0x65, 0x6e, 0x74, 0x50, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x07, 0x56, return mi.MessageOf(x)
0x61, 0x74, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, }
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
0x6d, 0x70, 0x74, 0x79, 0x52, 0x07, 0x56, 0x61, 0x74, 0x44, 0x61, 0x74, 0x61, 0x22, 0x3a, 0x0a, // Deprecated: Use DeleteSavedPaymentMethodsRequest.ProtoReflect.Descriptor instead.
0x16, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, func (*DeleteSavedPaymentMethodsRequest) Descriptor() ([]byte, []int) {
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x64, 0x69, 0x72, return file_service_proto_rawDescGZIP(), []int{4}
0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x52, 0x65, }
0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x32, 0xd4, 0x04, 0x0a, 0x10, 0x54, 0x72,
0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5f, func (x *DeleteSavedPaymentMethodsRequest) GetUserID() string {
0x0a, 0x16, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, if x != nil {
0x42, 0x61, 0x6e, 0x6b, 0x43, 0x61, 0x72, 0x64, 0x12, 0x20, 0x2e, 0x74, 0x72, 0x65, 0x61, 0x73, return x.UserID
0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, }
0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x74, 0x72, 0x65, return ""
0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, }
0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
type MainPaymentSettings struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Currency string `protobuf:"bytes,1,opt,name=Currency,proto3" json:"Currency,omitempty"`
Amount int64 `protobuf:"varint,2,opt,name=Amount,proto3" json:"Amount,omitempty"`
CallbackHostGRPC []string `protobuf:"bytes,3,rep,name=CallbackHostGRPC,proto3" json:"CallbackHostGRPC,omitempty"`
ReturnURL string `protobuf:"bytes,4,opt,name=ReturnURL,proto3" json:"ReturnURL,omitempty"`
UserID string `protobuf:"bytes,5,opt,name=UserID,proto3" json:"UserID,omitempty"`
ClientIP string `protobuf:"bytes,6,opt,name=ClientIP,proto3" json:"ClientIP,omitempty"`
Customer *Customer `protobuf:"bytes,7,opt,name=Customer,proto3" json:"Customer,omitempty"`
Items []*Item `protobuf:"bytes,8,rep,name=Items,proto3" json:"Items,omitempty"`
Auto bool `protobuf:"varint,9,opt,name=Auto,proto3" json:"Auto,omitempty"`
Recurrent bool `protobuf:"varint,10,opt,name=Recurrent,proto3" json:"Recurrent,omitempty"`
// Для крипто-платежей:
FromWalletAddress string `protobuf:"bytes,11,opt,name=from_wallet_address,json=fromWalletAddress,proto3" json:"from_wallet_address,omitempty"`
ToWalletAddress string `protobuf:"bytes,12,opt,name=to_wallet_address,json=toWalletAddress,proto3" json:"to_wallet_address,omitempty"`
CryptoAmount float64 `protobuf:"fixed64,13,opt,name=crypto_amount,json=cryptoAmount,proto3" json:"crypto_amount,omitempty"`
}
func (x *MainPaymentSettings) Reset() {
*x = MainPaymentSettings{}
if protoimpl.UnsafeEnabled {
mi := &file_service_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *MainPaymentSettings) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MainPaymentSettings) ProtoMessage() {}
func (x *MainPaymentSettings) ProtoReflect() protoreflect.Message {
mi := &file_service_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use MainPaymentSettings.ProtoReflect.Descriptor instead.
func (*MainPaymentSettings) Descriptor() ([]byte, []int) {
return file_service_proto_rawDescGZIP(), []int{5}
}
func (x *MainPaymentSettings) GetCurrency() string {
if x != nil {
return x.Currency
}
return ""
}
func (x *MainPaymentSettings) GetAmount() int64 {
if x != nil {
return x.Amount
}
return 0
}
func (x *MainPaymentSettings) GetCallbackHostGRPC() []string {
if x != nil {
return x.CallbackHostGRPC
}
return nil
}
func (x *MainPaymentSettings) GetReturnURL() string {
if x != nil {
return x.ReturnURL
}
return ""
}
func (x *MainPaymentSettings) GetUserID() string {
if x != nil {
return x.UserID
}
return ""
}
func (x *MainPaymentSettings) GetClientIP() string {
if x != nil {
return x.ClientIP
}
return ""
}
func (x *MainPaymentSettings) GetCustomer() *Customer {
if x != nil {
return x.Customer
}
return nil
}
func (x *MainPaymentSettings) GetItems() []*Item {
if x != nil {
return x.Items
}
return nil
}
func (x *MainPaymentSettings) GetAuto() bool {
if x != nil {
return x.Auto
}
return false
}
func (x *MainPaymentSettings) GetRecurrent() bool {
if x != nil {
return x.Recurrent
}
return false
}
func (x *MainPaymentSettings) GetFromWalletAddress() string {
if x != nil {
return x.FromWalletAddress
}
return ""
}
func (x *MainPaymentSettings) GetToWalletAddress() string {
if x != nil {
return x.ToWalletAddress
}
return ""
}
func (x *MainPaymentSettings) GetCryptoAmount() float64 {
if x != nil {
return x.CryptoAmount
}
return 0
}
type Customer struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
FullName string `protobuf:"bytes,1,opt,name=FullName,proto3" json:"FullName,omitempty"`
INN string `protobuf:"bytes,2,opt,name=INN,proto3" json:"INN,omitempty"`
Email string `protobuf:"bytes,3,opt,name=Email,proto3" json:"Email,omitempty"`
Phone string `protobuf:"bytes,4,opt,name=Phone,proto3" json:"Phone,omitempty"`
}
func (x *Customer) Reset() {
*x = Customer{}
if protoimpl.UnsafeEnabled {
mi := &file_service_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Customer) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Customer) ProtoMessage() {}
func (x *Customer) ProtoReflect() protoreflect.Message {
mi := &file_service_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Customer.ProtoReflect.Descriptor instead.
func (*Customer) Descriptor() ([]byte, []int) {
return file_service_proto_rawDescGZIP(), []int{6}
}
func (x *Customer) GetFullName() string {
if x != nil {
return x.FullName
}
return ""
}
func (x *Customer) GetINN() string {
if x != nil {
return x.INN
}
return ""
}
func (x *Customer) GetEmail() string {
if x != nil {
return x.Email
}
return ""
}
func (x *Customer) GetPhone() string {
if x != nil {
return x.Phone
}
return ""
}
type Item struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Description string `protobuf:"bytes,1,opt,name=Description,proto3" json:"Description,omitempty"`
Measure string `protobuf:"bytes,2,opt,name=Measure,proto3" json:"Measure,omitempty"`
Quantity string `protobuf:"bytes,3,opt,name=Quantity,proto3" json:"Quantity,omitempty"`
Money string `protobuf:"bytes,4,opt,name=Money,proto3" json:"Money,omitempty"`
Currency string `protobuf:"bytes,5,opt,name=Currency,proto3" json:"Currency,omitempty"`
}
func (x *Item) Reset() {
*x = Item{}
if protoimpl.UnsafeEnabled {
mi := &file_service_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Item) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Item) ProtoMessage() {}
func (x *Item) ProtoReflect() protoreflect.Message {
mi := &file_service_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Item.ProtoReflect.Descriptor instead.
func (*Item) Descriptor() ([]byte, []int) {
return file_service_proto_rawDescGZIP(), []int{7}
}
func (x *Item) GetDescription() string {
if x != nil {
return x.Description
}
return ""
}
func (x *Item) GetMeasure() string {
if x != nil {
return x.Measure
}
return ""
}
func (x *Item) GetQuantity() string {
if x != nil {
return x.Quantity
}
return ""
}
func (x *Item) GetMoney() string {
if x != nil {
return x.Money
}
return ""
}
func (x *Item) GetCurrency() string {
if x != nil {
return x.Currency
}
return ""
}
var File_service_proto protoreflect.FileDescriptor
var file_service_proto_rawDesc = []byte{
0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
0x09, 0x74, 0x72, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74,
0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x63, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x42, 0x61,
0x6e, 0x6b, 0x43, 0x61, 0x72, 0x64, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x6e,
0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x0c, 0x4d, 0x61, 0x69, 0x6e,
0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e,
0x2e, 0x74, 0x72, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x4d, 0x61, 0x69, 0x6e, 0x50,
0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0c,
0x4d, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x5b, 0x0a, 0x15,
0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x0c, 0x4d, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x74,
0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x72,
0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x4d, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x6d,
0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0c, 0x4d, 0x61, 0x69,
0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0xb8, 0x01, 0x0a, 0x18, 0x47, 0x65,
0x74, 0x42, 0x32, 0x42, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x0c, 0x4d, 0x61, 0x69, 0x6e, 0x53, 0x65,
0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74,
0x72, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x4d, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x79,
0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0c, 0x4d, 0x61,
0x69, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x50, 0x61,
0x79, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x75, 0x72, 0x70, 0x6f,
0x73, 0x65, 0x12, 0x30, 0x0a, 0x07, 0x56, 0x61, 0x74, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x07, 0x56, 0x61, 0x74,
0x44, 0x61, 0x74, 0x61, 0x22, 0x3a, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65,
0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20,
0x0a, 0x0b, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x0b, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x52, 0x4c,
0x22, 0x3a, 0x0a, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x61, 0x76, 0x65, 0x64, 0x50,
0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x22, 0xd2, 0x03, 0x0a,
0x13, 0x4d, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x74,
0x69, 0x6e, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79,
0x12, 0x16, 0x0a, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,
0x52, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x43, 0x61, 0x6c, 0x6c,
0x62, 0x61, 0x63, 0x6b, 0x48, 0x6f, 0x73, 0x74, 0x47, 0x52, 0x50, 0x43, 0x18, 0x03, 0x20, 0x03,
0x28, 0x09, 0x52, 0x10, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x48, 0x6f, 0x73, 0x74,
0x47, 0x52, 0x50, 0x43, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x55, 0x52,
0x4c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x55,
0x52, 0x4c, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01,
0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6c,
0x69, 0x65, 0x6e, 0x74, 0x49, 0x50, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x43, 0x6c,
0x69, 0x65, 0x6e, 0x74, 0x49, 0x50, 0x12, 0x2f, 0x0a, 0x08, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d,
0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x74, 0x72, 0x65, 0x61, 0x73,
0x75, 0x72, 0x65, 0x72, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x52, 0x08, 0x43,
0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73,
0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x72, 0x65, 0x61, 0x73, 0x75, 0x72,
0x65, 0x72, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x12,
0x0a, 0x04, 0x41, 0x75, 0x74, 0x6f, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x41, 0x75,
0x74, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18,
0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x52, 0x65, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74,
0x12, 0x2e, 0x0a, 0x13, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f,
0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x66,
0x72, 0x6f, 0x6d, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
0x12, 0x2a, 0x0a, 0x11, 0x74, 0x6f, 0x5f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x64,
0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x6f, 0x57,
0x61, 0x6c, 0x6c, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x23, 0x0a, 0x0d,
0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0d, 0x20,
0x01, 0x28, 0x01, 0x52, 0x0c, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x41, 0x6d, 0x6f, 0x75, 0x6e,
0x74, 0x22, 0x64, 0x0a, 0x08, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x12, 0x1a, 0x0a,
0x08, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x08, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x49, 0x4e, 0x4e,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x49, 0x4e, 0x4e, 0x12, 0x14, 0x0a, 0x05, 0x45,
0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x45, 0x6d, 0x61, 0x69,
0x6c, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
0x52, 0x05, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x22, 0x90, 0x01, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d,
0x12, 0x20, 0x0a, 0x0b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20,
0x01, 0x28, 0x09, 0x52, 0x07, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08,
0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x6f, 0x6e, 0x65,
0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x12, 0x1a,
0x0a, 0x08, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
0x52, 0x08, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x32, 0x98, 0x06, 0x0a, 0x10, 0x54,
0x72, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
0x5f, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x5f, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x6e,
0x6b, 0x59, 0x6f, 0x6f, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x12, 0x20, 0x2e, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x42, 0x61, 0x6e, 0x6b, 0x43, 0x61, 0x72, 0x64, 0x12, 0x20, 0x2e, 0x74, 0x72, 0x65, 0x61,
0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74,
0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x74, 0x72, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x74, 0x72,
0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65,
0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
0x12, 0x5e, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x12, 0x5f, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69,
0x6e, 0x6b, 0x54, 0x69, 0x6e, 0x6b, 0x6f, 0x66, 0x66, 0x12, 0x20, 0x2e, 0x74, 0x72, 0x65, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x6f, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x12, 0x20, 0x2e, 0x74, 0x72, 0x65,
0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e,
0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x74, 0x72, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x74,
0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x72, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d,
0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
0x12, 0x62, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x00, 0x12, 0x5e, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c,
0x6e, 0x6b, 0x53, 0x62, 0x65, 0x72, 0x62, 0x61, 0x6e, 0x6b, 0x42, 0x32, 0x42, 0x12, 0x20, 0x2e, 0x69, 0x6e, 0x6b, 0x54, 0x69, 0x6e, 0x6b, 0x6f, 0x66, 0x66, 0x12, 0x20, 0x2e, 0x74, 0x72, 0x65,
0x74, 0x72, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e,
0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x74,
0x21, 0x2e, 0x74, 0x72, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d,
0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x00, 0x12, 0x62, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c,
0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x53, 0x42, 0x50, 0x12, 0x20, 0x2e, 0x74, 0x72, 0x65, 0x61, 0x69, 0x6e, 0x6b, 0x53, 0x62, 0x65, 0x72, 0x62, 0x61, 0x6e, 0x6b, 0x42, 0x32, 0x42, 0x12, 0x20,
0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x74, 0x72, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61,
0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x74, 0x72, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x1a, 0x21, 0x2e, 0x74, 0x72, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74,
0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x12, 0x5e, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d,
0x6e, 0x6b, 0x53, 0x62, 0x65, 0x72, 0x50, 0x61, 0x79, 0x12, 0x20, 0x2e, 0x74, 0x72, 0x65, 0x61, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x53, 0x42, 0x50, 0x12, 0x20, 0x2e, 0x74, 0x72, 0x65,
0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e,
0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x74, 0x72, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x74,
0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x72, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d,
0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
0x42, 0x0d, 0x5a, 0x0b, 0x2e, 0x2f, 0x74, 0x72, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x62, 0x00, 0x12, 0x5e, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c,
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x69, 0x6e, 0x6b, 0x53, 0x62, 0x65, 0x72, 0x50, 0x61, 0x79, 0x12, 0x20, 0x2e, 0x74, 0x72, 0x65,
0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e,
0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x74,
0x72, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d,
0x65, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
0x00, 0x12, 0x5e, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c,
0x69, 0x6e, 0x6b, 0x41, 0x6c, 0x63, 0x68, 0x65, 0x6d, 0x79, 0x12, 0x20, 0x2e, 0x74, 0x72, 0x65,
0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e,
0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x74,
0x72, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d,
0x65, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
0x00, 0x12, 0x62, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x61, 0x76, 0x65, 0x64,
0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x12, 0x2b,
0x2e, 0x74, 0x72, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74,
0x65, 0x53, 0x61, 0x76, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74,
0x68, 0x6f, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0x0d, 0x5a, 0x0b, 0x2e, 0x2f, 0x74, 0x72, 0x65, 0x61, 0x73,
0x75, 0x72, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (
file_treasurer_service_proto_rawDescOnce sync.Once file_service_proto_rawDescOnce sync.Once
file_treasurer_service_proto_rawDescData = file_treasurer_service_proto_rawDesc file_service_proto_rawDescData = file_service_proto_rawDesc
) )
func file_treasurer_service_proto_rawDescGZIP() []byte { func file_service_proto_rawDescGZIP() []byte {
file_treasurer_service_proto_rawDescOnce.Do(func() { file_service_proto_rawDescOnce.Do(func() {
file_treasurer_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_treasurer_service_proto_rawDescData) file_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_service_proto_rawDescData)
}) })
return file_treasurer_service_proto_rawDescData return file_service_proto_rawDescData
} }
var file_treasurer_service_proto_msgTypes = make([]protoimpl.MessageInfo, 4) var file_service_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
var file_treasurer_service_proto_goTypes = []interface{}{ var file_service_proto_goTypes = []interface{}{
(*GetBankCardPaymentLinkRequest)(nil), // 0: treasurer.GetBankCardPaymentLinkRequest (*GetBankCardPaymentLinkRequest)(nil), // 0: treasurer.GetBankCardPaymentLinkRequest
(*GetPaymentLinkRequest)(nil), // 1: treasurer.GetPaymentLinkRequest (*GetPaymentLinkRequest)(nil), // 1: treasurer.GetPaymentLinkRequest
(*GetB2BPaymentLinkRequest)(nil), // 2: treasurer.GetB2BPaymentLinkRequest (*GetB2BPaymentLinkRequest)(nil), // 2: treasurer.GetB2BPaymentLinkRequest
(*GetPaymentLinkResponse)(nil), // 3: treasurer.GetPaymentLinkResponse (*GetPaymentLinkResponse)(nil), // 3: treasurer.GetPaymentLinkResponse
(*MainPaymentSettings)(nil), // 4: treasurer.MainPaymentSettings (*DeleteSavedPaymentMethodsRequest)(nil), // 4: treasurer.DeleteSavedPaymentMethodsRequest
(*emptypb.Empty)(nil), // 5: google.protobuf.Empty (*MainPaymentSettings)(nil), // 5: treasurer.MainPaymentSettings
(*Customer)(nil), // 6: treasurer.Customer
(*Item)(nil), // 7: treasurer.Item
(*emptypb.Empty)(nil), // 8: google.protobuf.Empty
} }
var file_treasurer_service_proto_depIdxs = []int32{ var file_service_proto_depIdxs = []int32{
4, // 0: treasurer.GetBankCardPaymentLinkRequest.MainSettings:type_name -> treasurer.MainPaymentSettings 5, // 0: treasurer.GetBankCardPaymentLinkRequest.MainSettings:type_name -> treasurer.MainPaymentSettings
4, // 1: treasurer.GetPaymentLinkRequest.MainSettings:type_name -> treasurer.MainPaymentSettings 5, // 1: treasurer.GetPaymentLinkRequest.MainSettings:type_name -> treasurer.MainPaymentSettings
4, // 2: treasurer.GetB2BPaymentLinkRequest.MainSettings:type_name -> treasurer.MainPaymentSettings 5, // 2: treasurer.GetB2BPaymentLinkRequest.MainSettings:type_name -> treasurer.MainPaymentSettings
5, // 3: treasurer.GetB2BPaymentLinkRequest.VatData:type_name -> google.protobuf.Empty 8, // 3: treasurer.GetB2BPaymentLinkRequest.VatData:type_name -> google.protobuf.Empty
1, // 4: treasurer.TreasurerService.GetPaymentLinkBankCard:input_type -> treasurer.GetPaymentLinkRequest 6, // 4: treasurer.MainPaymentSettings.Customer:type_name -> treasurer.Customer
1, // 5: treasurer.TreasurerService.GetPaymentLinkYooMoney:input_type -> treasurer.GetPaymentLinkRequest 7, // 5: treasurer.MainPaymentSettings.Items:type_name -> treasurer.Item
1, // 6: treasurer.TreasurerService.GetPaymentLinkTinkoff:input_type -> treasurer.GetPaymentLinkRequest 1, // 6: treasurer.TreasurerService.GetPaymentLinkBankCard:input_type -> treasurer.GetPaymentLinkRequest
1, // 7: treasurer.TreasurerService.GetPaymentLinkSberbankB2B:input_type -> treasurer.GetPaymentLinkRequest 1, // 7: treasurer.TreasurerService.GetPaymentLinkYooMoney:input_type -> treasurer.GetPaymentLinkRequest
1, // 8: treasurer.TreasurerService.GetPaymentLinkSBP:input_type -> treasurer.GetPaymentLinkRequest 1, // 8: treasurer.TreasurerService.GetPaymentLinkTinkoff:input_type -> treasurer.GetPaymentLinkRequest
1, // 9: treasurer.TreasurerService.GetPaymentLinkSberPay:input_type -> treasurer.GetPaymentLinkRequest 1, // 9: treasurer.TreasurerService.GetPaymentLinkSberbankB2B:input_type -> treasurer.GetPaymentLinkRequest
3, // 10: treasurer.TreasurerService.GetPaymentLinkBankCard:output_type -> treasurer.GetPaymentLinkResponse 1, // 10: treasurer.TreasurerService.GetPaymentLinkSBP:input_type -> treasurer.GetPaymentLinkRequest
3, // 11: treasurer.TreasurerService.GetPaymentLinkYooMoney:output_type -> treasurer.GetPaymentLinkResponse 1, // 11: treasurer.TreasurerService.GetPaymentLinkSberPay:input_type -> treasurer.GetPaymentLinkRequest
3, // 12: treasurer.TreasurerService.GetPaymentLinkTinkoff:output_type -> treasurer.GetPaymentLinkResponse 1, // 12: treasurer.TreasurerService.GetPaymentLinkAlchemy:input_type -> treasurer.GetPaymentLinkRequest
3, // 13: treasurer.TreasurerService.GetPaymentLinkSberbankB2B:output_type -> treasurer.GetPaymentLinkResponse 4, // 13: treasurer.TreasurerService.DeleteSavedPaymentMethods:input_type -> treasurer.DeleteSavedPaymentMethodsRequest
3, // 14: treasurer.TreasurerService.GetPaymentLinkSBP:output_type -> treasurer.GetPaymentLinkResponse 3, // 14: treasurer.TreasurerService.GetPaymentLinkBankCard:output_type -> treasurer.GetPaymentLinkResponse
3, // 15: treasurer.TreasurerService.GetPaymentLinkSberPay:output_type -> treasurer.GetPaymentLinkResponse 3, // 15: treasurer.TreasurerService.GetPaymentLinkYooMoney:output_type -> treasurer.GetPaymentLinkResponse
10, // [10:16] is the sub-list for method output_type 3, // 16: treasurer.TreasurerService.GetPaymentLinkTinkoff:output_type -> treasurer.GetPaymentLinkResponse
4, // [4:10] is the sub-list for method input_type 3, // 17: treasurer.TreasurerService.GetPaymentLinkSberbankB2B:output_type -> treasurer.GetPaymentLinkResponse
4, // [4:4] is the sub-list for extension type_name 3, // 18: treasurer.TreasurerService.GetPaymentLinkSBP:output_type -> treasurer.GetPaymentLinkResponse
4, // [4:4] is the sub-list for extension extendee 3, // 19: treasurer.TreasurerService.GetPaymentLinkSberPay:output_type -> treasurer.GetPaymentLinkResponse
0, // [0:4] is the sub-list for field type_name 3, // 20: treasurer.TreasurerService.GetPaymentLinkAlchemy:output_type -> treasurer.GetPaymentLinkResponse
8, // 21: treasurer.TreasurerService.DeleteSavedPaymentMethods:output_type -> google.protobuf.Empty
14, // [14:22] is the sub-list for method output_type
6, // [6:14] is the sub-list for method input_type
6, // [6:6] is the sub-list for extension type_name
6, // [6:6] is the sub-list for extension extendee
0, // [0:6] is the sub-list for field type_name
} }
func init() { file_treasurer_service_proto_init() } func init() { file_service_proto_init() }
func file_treasurer_service_proto_init() { func file_service_proto_init() {
if File_treasurer_service_proto != nil { if File_service_proto != nil {
return return
} }
file_treasurer_payment_model_proto_init()
if !protoimpl.UnsafeEnabled { if !protoimpl.UnsafeEnabled {
file_treasurer_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { file_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetBankCardPaymentLinkRequest); i { switch v := v.(*GetBankCardPaymentLinkRequest); i {
case 0: case 0:
return &v.state return &v.state
@ -367,7 +774,7 @@ func file_treasurer_service_proto_init() {
return nil return nil
} }
} }
file_treasurer_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { file_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetPaymentLinkRequest); i { switch v := v.(*GetPaymentLinkRequest); i {
case 0: case 0:
return &v.state return &v.state
@ -379,7 +786,7 @@ func file_treasurer_service_proto_init() {
return nil return nil
} }
} }
file_treasurer_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { file_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetB2BPaymentLinkRequest); i { switch v := v.(*GetB2BPaymentLinkRequest); i {
case 0: case 0:
return &v.state return &v.state
@ -391,7 +798,7 @@ func file_treasurer_service_proto_init() {
return nil return nil
} }
} }
file_treasurer_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { file_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetPaymentLinkResponse); i { switch v := v.(*GetPaymentLinkResponse); i {
case 0: case 0:
return &v.state return &v.state
@ -403,23 +810,71 @@ func file_treasurer_service_proto_init() {
return nil return nil
} }
} }
file_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DeleteSavedPaymentMethodsRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MainPaymentSettings); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Customer); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Item); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
} }
type x struct{} type x struct{}
out := protoimpl.TypeBuilder{ out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{ File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_treasurer_service_proto_rawDesc, RawDescriptor: file_service_proto_rawDesc,
NumEnums: 0, NumEnums: 0,
NumMessages: 4, NumMessages: 8,
NumExtensions: 0, NumExtensions: 0,
NumServices: 1, NumServices: 1,
}, },
GoTypes: file_treasurer_service_proto_goTypes, GoTypes: file_service_proto_goTypes,
DependencyIndexes: file_treasurer_service_proto_depIdxs, DependencyIndexes: file_service_proto_depIdxs,
MessageInfos: file_treasurer_service_proto_msgTypes, MessageInfos: file_service_proto_msgTypes,
}.Build() }.Build()
File_treasurer_service_proto = out.File File_service_proto = out.File
file_treasurer_service_proto_rawDesc = nil file_service_proto_rawDesc = nil
file_treasurer_service_proto_goTypes = nil file_service_proto_goTypes = nil
file_treasurer_service_proto_depIdxs = nil file_service_proto_depIdxs = nil
} }

@ -1,8 +1,4 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT. // Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
// - protoc-gen-go-grpc v1.3.0
// - protoc (unknown)
// source: treasurer/service.proto
package treasurer package treasurer
@ -11,6 +7,7 @@ import (
grpc "google.golang.org/grpc" grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes" codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status" status "google.golang.org/grpc/status"
emptypb "google.golang.org/protobuf/types/known/emptypb"
) )
// This is a compile-time assertion to ensure that this generated file // This is a compile-time assertion to ensure that this generated file
@ -18,15 +15,6 @@ import (
// Requires gRPC-Go v1.32.0 or later. // Requires gRPC-Go v1.32.0 or later.
const _ = grpc.SupportPackageIsVersion7 const _ = grpc.SupportPackageIsVersion7
const (
TreasurerService_GetPaymentLinkBankCard_FullMethodName = "/treasurer.TreasurerService/GetPaymentLinkBankCard"
TreasurerService_GetPaymentLinkYooMoney_FullMethodName = "/treasurer.TreasurerService/GetPaymentLinkYooMoney"
TreasurerService_GetPaymentLinkTinkoff_FullMethodName = "/treasurer.TreasurerService/GetPaymentLinkTinkoff"
TreasurerService_GetPaymentLinkSberbankB2B_FullMethodName = "/treasurer.TreasurerService/GetPaymentLinkSberbankB2B"
TreasurerService_GetPaymentLinkSBP_FullMethodName = "/treasurer.TreasurerService/GetPaymentLinkSBP"
TreasurerService_GetPaymentLinkSberPay_FullMethodName = "/treasurer.TreasurerService/GetPaymentLinkSberPay"
)
// TreasurerServiceClient is the client API for TreasurerService service. // TreasurerServiceClient is the client API for TreasurerService service.
// //
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
@ -37,6 +25,8 @@ type TreasurerServiceClient interface {
GetPaymentLinkSberbankB2B(ctx context.Context, in *GetPaymentLinkRequest, opts ...grpc.CallOption) (*GetPaymentLinkResponse, error) GetPaymentLinkSberbankB2B(ctx context.Context, in *GetPaymentLinkRequest, opts ...grpc.CallOption) (*GetPaymentLinkResponse, error)
GetPaymentLinkSBP(ctx context.Context, in *GetPaymentLinkRequest, opts ...grpc.CallOption) (*GetPaymentLinkResponse, error) GetPaymentLinkSBP(ctx context.Context, in *GetPaymentLinkRequest, opts ...grpc.CallOption) (*GetPaymentLinkResponse, error)
GetPaymentLinkSberPay(ctx context.Context, in *GetPaymentLinkRequest, opts ...grpc.CallOption) (*GetPaymentLinkResponse, error) GetPaymentLinkSberPay(ctx context.Context, in *GetPaymentLinkRequest, opts ...grpc.CallOption) (*GetPaymentLinkResponse, error)
GetPaymentLinkAlchemy(ctx context.Context, in *GetPaymentLinkRequest, opts ...grpc.CallOption) (*GetPaymentLinkResponse, error)
DeleteSavedPaymentMethods(ctx context.Context, in *DeleteSavedPaymentMethodsRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
} }
type treasurerServiceClient struct { type treasurerServiceClient struct {
@ -49,7 +39,7 @@ func NewTreasurerServiceClient(cc grpc.ClientConnInterface) TreasurerServiceClie
func (c *treasurerServiceClient) GetPaymentLinkBankCard(ctx context.Context, in *GetPaymentLinkRequest, opts ...grpc.CallOption) (*GetPaymentLinkResponse, error) { func (c *treasurerServiceClient) GetPaymentLinkBankCard(ctx context.Context, in *GetPaymentLinkRequest, opts ...grpc.CallOption) (*GetPaymentLinkResponse, error) {
out := new(GetPaymentLinkResponse) out := new(GetPaymentLinkResponse)
err := c.cc.Invoke(ctx, TreasurerService_GetPaymentLinkBankCard_FullMethodName, in, out, opts...) err := c.cc.Invoke(ctx, "/treasurer.TreasurerService/GetPaymentLinkBankCard", in, out, opts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -58,7 +48,7 @@ func (c *treasurerServiceClient) GetPaymentLinkBankCard(ctx context.Context, in
func (c *treasurerServiceClient) GetPaymentLinkYooMoney(ctx context.Context, in *GetPaymentLinkRequest, opts ...grpc.CallOption) (*GetPaymentLinkResponse, error) { func (c *treasurerServiceClient) GetPaymentLinkYooMoney(ctx context.Context, in *GetPaymentLinkRequest, opts ...grpc.CallOption) (*GetPaymentLinkResponse, error) {
out := new(GetPaymentLinkResponse) out := new(GetPaymentLinkResponse)
err := c.cc.Invoke(ctx, TreasurerService_GetPaymentLinkYooMoney_FullMethodName, in, out, opts...) err := c.cc.Invoke(ctx, "/treasurer.TreasurerService/GetPaymentLinkYooMoney", in, out, opts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -67,7 +57,7 @@ func (c *treasurerServiceClient) GetPaymentLinkYooMoney(ctx context.Context, in
func (c *treasurerServiceClient) GetPaymentLinkTinkoff(ctx context.Context, in *GetPaymentLinkRequest, opts ...grpc.CallOption) (*GetPaymentLinkResponse, error) { func (c *treasurerServiceClient) GetPaymentLinkTinkoff(ctx context.Context, in *GetPaymentLinkRequest, opts ...grpc.CallOption) (*GetPaymentLinkResponse, error) {
out := new(GetPaymentLinkResponse) out := new(GetPaymentLinkResponse)
err := c.cc.Invoke(ctx, TreasurerService_GetPaymentLinkTinkoff_FullMethodName, in, out, opts...) err := c.cc.Invoke(ctx, "/treasurer.TreasurerService/GetPaymentLinkTinkoff", in, out, opts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -76,7 +66,7 @@ func (c *treasurerServiceClient) GetPaymentLinkTinkoff(ctx context.Context, in *
func (c *treasurerServiceClient) GetPaymentLinkSberbankB2B(ctx context.Context, in *GetPaymentLinkRequest, opts ...grpc.CallOption) (*GetPaymentLinkResponse, error) { func (c *treasurerServiceClient) GetPaymentLinkSberbankB2B(ctx context.Context, in *GetPaymentLinkRequest, opts ...grpc.CallOption) (*GetPaymentLinkResponse, error) {
out := new(GetPaymentLinkResponse) out := new(GetPaymentLinkResponse)
err := c.cc.Invoke(ctx, TreasurerService_GetPaymentLinkSberbankB2B_FullMethodName, in, out, opts...) err := c.cc.Invoke(ctx, "/treasurer.TreasurerService/GetPaymentLinkSberbankB2B", in, out, opts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -85,7 +75,7 @@ func (c *treasurerServiceClient) GetPaymentLinkSberbankB2B(ctx context.Context,
func (c *treasurerServiceClient) GetPaymentLinkSBP(ctx context.Context, in *GetPaymentLinkRequest, opts ...grpc.CallOption) (*GetPaymentLinkResponse, error) { func (c *treasurerServiceClient) GetPaymentLinkSBP(ctx context.Context, in *GetPaymentLinkRequest, opts ...grpc.CallOption) (*GetPaymentLinkResponse, error) {
out := new(GetPaymentLinkResponse) out := new(GetPaymentLinkResponse)
err := c.cc.Invoke(ctx, TreasurerService_GetPaymentLinkSBP_FullMethodName, in, out, opts...) err := c.cc.Invoke(ctx, "/treasurer.TreasurerService/GetPaymentLinkSBP", in, out, opts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -94,7 +84,25 @@ func (c *treasurerServiceClient) GetPaymentLinkSBP(ctx context.Context, in *GetP
func (c *treasurerServiceClient) GetPaymentLinkSberPay(ctx context.Context, in *GetPaymentLinkRequest, opts ...grpc.CallOption) (*GetPaymentLinkResponse, error) { func (c *treasurerServiceClient) GetPaymentLinkSberPay(ctx context.Context, in *GetPaymentLinkRequest, opts ...grpc.CallOption) (*GetPaymentLinkResponse, error) {
out := new(GetPaymentLinkResponse) out := new(GetPaymentLinkResponse)
err := c.cc.Invoke(ctx, TreasurerService_GetPaymentLinkSberPay_FullMethodName, in, out, opts...) err := c.cc.Invoke(ctx, "/treasurer.TreasurerService/GetPaymentLinkSberPay", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *treasurerServiceClient) GetPaymentLinkAlchemy(ctx context.Context, in *GetPaymentLinkRequest, opts ...grpc.CallOption) (*GetPaymentLinkResponse, error) {
out := new(GetPaymentLinkResponse)
err := c.cc.Invoke(ctx, "/treasurer.TreasurerService/GetPaymentLinkAlchemy", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *treasurerServiceClient) DeleteSavedPaymentMethods(ctx context.Context, in *DeleteSavedPaymentMethodsRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
out := new(emptypb.Empty)
err := c.cc.Invoke(ctx, "/treasurer.TreasurerService/DeleteSavedPaymentMethods", in, out, opts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -102,7 +110,7 @@ func (c *treasurerServiceClient) GetPaymentLinkSberPay(ctx context.Context, in *
} }
// TreasurerServiceServer is the server API for TreasurerService service. // TreasurerServiceServer is the server API for TreasurerService service.
// All implementations should embed UnimplementedTreasurerServiceServer // All implementations must embed UnimplementedTreasurerServiceServer
// for forward compatibility // for forward compatibility
type TreasurerServiceServer interface { type TreasurerServiceServer interface {
GetPaymentLinkBankCard(context.Context, *GetPaymentLinkRequest) (*GetPaymentLinkResponse, error) GetPaymentLinkBankCard(context.Context, *GetPaymentLinkRequest) (*GetPaymentLinkResponse, error)
@ -111,9 +119,12 @@ type TreasurerServiceServer interface {
GetPaymentLinkSberbankB2B(context.Context, *GetPaymentLinkRequest) (*GetPaymentLinkResponse, error) GetPaymentLinkSberbankB2B(context.Context, *GetPaymentLinkRequest) (*GetPaymentLinkResponse, error)
GetPaymentLinkSBP(context.Context, *GetPaymentLinkRequest) (*GetPaymentLinkResponse, error) GetPaymentLinkSBP(context.Context, *GetPaymentLinkRequest) (*GetPaymentLinkResponse, error)
GetPaymentLinkSberPay(context.Context, *GetPaymentLinkRequest) (*GetPaymentLinkResponse, error) GetPaymentLinkSberPay(context.Context, *GetPaymentLinkRequest) (*GetPaymentLinkResponse, error)
GetPaymentLinkAlchemy(context.Context, *GetPaymentLinkRequest) (*GetPaymentLinkResponse, error)
DeleteSavedPaymentMethods(context.Context, *DeleteSavedPaymentMethodsRequest) (*emptypb.Empty, error)
mustEmbedUnimplementedTreasurerServiceServer()
} }
// UnimplementedTreasurerServiceServer should be embedded to have forward compatible implementations. // UnimplementedTreasurerServiceServer must be embedded to have forward compatible implementations.
type UnimplementedTreasurerServiceServer struct { type UnimplementedTreasurerServiceServer struct {
} }
@ -135,6 +146,13 @@ func (UnimplementedTreasurerServiceServer) GetPaymentLinkSBP(context.Context, *G
func (UnimplementedTreasurerServiceServer) GetPaymentLinkSberPay(context.Context, *GetPaymentLinkRequest) (*GetPaymentLinkResponse, error) { func (UnimplementedTreasurerServiceServer) GetPaymentLinkSberPay(context.Context, *GetPaymentLinkRequest) (*GetPaymentLinkResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetPaymentLinkSberPay not implemented") return nil, status.Errorf(codes.Unimplemented, "method GetPaymentLinkSberPay not implemented")
} }
func (UnimplementedTreasurerServiceServer) GetPaymentLinkAlchemy(context.Context, *GetPaymentLinkRequest) (*GetPaymentLinkResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetPaymentLinkAlchemy not implemented")
}
func (UnimplementedTreasurerServiceServer) DeleteSavedPaymentMethods(context.Context, *DeleteSavedPaymentMethodsRequest) (*emptypb.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method DeleteSavedPaymentMethods not implemented")
}
func (UnimplementedTreasurerServiceServer) mustEmbedUnimplementedTreasurerServiceServer() {}
// UnsafeTreasurerServiceServer may be embedded to opt out of forward compatibility for this service. // UnsafeTreasurerServiceServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to TreasurerServiceServer will // Use of this interface is not recommended, as added methods to TreasurerServiceServer will
@ -157,7 +175,7 @@ func _TreasurerService_GetPaymentLinkBankCard_Handler(srv interface{}, ctx conte
} }
info := &grpc.UnaryServerInfo{ info := &grpc.UnaryServerInfo{
Server: srv, Server: srv,
FullMethod: TreasurerService_GetPaymentLinkBankCard_FullMethodName, FullMethod: "/treasurer.TreasurerService/GetPaymentLinkBankCard",
} }
handler := func(ctx context.Context, req interface{}) (interface{}, error) { handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(TreasurerServiceServer).GetPaymentLinkBankCard(ctx, req.(*GetPaymentLinkRequest)) return srv.(TreasurerServiceServer).GetPaymentLinkBankCard(ctx, req.(*GetPaymentLinkRequest))
@ -175,7 +193,7 @@ func _TreasurerService_GetPaymentLinkYooMoney_Handler(srv interface{}, ctx conte
} }
info := &grpc.UnaryServerInfo{ info := &grpc.UnaryServerInfo{
Server: srv, Server: srv,
FullMethod: TreasurerService_GetPaymentLinkYooMoney_FullMethodName, FullMethod: "/treasurer.TreasurerService/GetPaymentLinkYooMoney",
} }
handler := func(ctx context.Context, req interface{}) (interface{}, error) { handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(TreasurerServiceServer).GetPaymentLinkYooMoney(ctx, req.(*GetPaymentLinkRequest)) return srv.(TreasurerServiceServer).GetPaymentLinkYooMoney(ctx, req.(*GetPaymentLinkRequest))
@ -193,7 +211,7 @@ func _TreasurerService_GetPaymentLinkTinkoff_Handler(srv interface{}, ctx contex
} }
info := &grpc.UnaryServerInfo{ info := &grpc.UnaryServerInfo{
Server: srv, Server: srv,
FullMethod: TreasurerService_GetPaymentLinkTinkoff_FullMethodName, FullMethod: "/treasurer.TreasurerService/GetPaymentLinkTinkoff",
} }
handler := func(ctx context.Context, req interface{}) (interface{}, error) { handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(TreasurerServiceServer).GetPaymentLinkTinkoff(ctx, req.(*GetPaymentLinkRequest)) return srv.(TreasurerServiceServer).GetPaymentLinkTinkoff(ctx, req.(*GetPaymentLinkRequest))
@ -211,7 +229,7 @@ func _TreasurerService_GetPaymentLinkSberbankB2B_Handler(srv interface{}, ctx co
} }
info := &grpc.UnaryServerInfo{ info := &grpc.UnaryServerInfo{
Server: srv, Server: srv,
FullMethod: TreasurerService_GetPaymentLinkSberbankB2B_FullMethodName, FullMethod: "/treasurer.TreasurerService/GetPaymentLinkSberbankB2B",
} }
handler := func(ctx context.Context, req interface{}) (interface{}, error) { handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(TreasurerServiceServer).GetPaymentLinkSberbankB2B(ctx, req.(*GetPaymentLinkRequest)) return srv.(TreasurerServiceServer).GetPaymentLinkSberbankB2B(ctx, req.(*GetPaymentLinkRequest))
@ -229,7 +247,7 @@ func _TreasurerService_GetPaymentLinkSBP_Handler(srv interface{}, ctx context.Co
} }
info := &grpc.UnaryServerInfo{ info := &grpc.UnaryServerInfo{
Server: srv, Server: srv,
FullMethod: TreasurerService_GetPaymentLinkSBP_FullMethodName, FullMethod: "/treasurer.TreasurerService/GetPaymentLinkSBP",
} }
handler := func(ctx context.Context, req interface{}) (interface{}, error) { handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(TreasurerServiceServer).GetPaymentLinkSBP(ctx, req.(*GetPaymentLinkRequest)) return srv.(TreasurerServiceServer).GetPaymentLinkSBP(ctx, req.(*GetPaymentLinkRequest))
@ -247,7 +265,7 @@ func _TreasurerService_GetPaymentLinkSberPay_Handler(srv interface{}, ctx contex
} }
info := &grpc.UnaryServerInfo{ info := &grpc.UnaryServerInfo{
Server: srv, Server: srv,
FullMethod: TreasurerService_GetPaymentLinkSberPay_FullMethodName, FullMethod: "/treasurer.TreasurerService/GetPaymentLinkSberPay",
} }
handler := func(ctx context.Context, req interface{}) (interface{}, error) { handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(TreasurerServiceServer).GetPaymentLinkSberPay(ctx, req.(*GetPaymentLinkRequest)) return srv.(TreasurerServiceServer).GetPaymentLinkSberPay(ctx, req.(*GetPaymentLinkRequest))
@ -255,6 +273,42 @@ func _TreasurerService_GetPaymentLinkSberPay_Handler(srv interface{}, ctx contex
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _TreasurerService_GetPaymentLinkAlchemy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetPaymentLinkRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(TreasurerServiceServer).GetPaymentLinkAlchemy(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/treasurer.TreasurerService/GetPaymentLinkAlchemy",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(TreasurerServiceServer).GetPaymentLinkAlchemy(ctx, req.(*GetPaymentLinkRequest))
}
return interceptor(ctx, in, info, handler)
}
func _TreasurerService_DeleteSavedPaymentMethods_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(DeleteSavedPaymentMethodsRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(TreasurerServiceServer).DeleteSavedPaymentMethods(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/treasurer.TreasurerService/DeleteSavedPaymentMethods",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(TreasurerServiceServer).DeleteSavedPaymentMethods(ctx, req.(*DeleteSavedPaymentMethodsRequest))
}
return interceptor(ctx, in, info, handler)
}
// TreasurerService_ServiceDesc is the grpc.ServiceDesc for TreasurerService service. // TreasurerService_ServiceDesc is the grpc.ServiceDesc for TreasurerService service.
// It's only intended for direct use with grpc.RegisterService, // It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy) // and not to be introspected or modified (even as a copy)
@ -286,7 +340,15 @@ var TreasurerService_ServiceDesc = grpc.ServiceDesc{
MethodName: "GetPaymentLinkSberPay", MethodName: "GetPaymentLinkSberPay",
Handler: _TreasurerService_GetPaymentLinkSberPay_Handler, Handler: _TreasurerService_GetPaymentLinkSberPay_Handler,
}, },
{
MethodName: "GetPaymentLinkAlchemy",
Handler: _TreasurerService_GetPaymentLinkAlchemy_Handler,
},
{
MethodName: "DeleteSavedPaymentMethods",
Handler: _TreasurerService_DeleteSavedPaymentMethods_Handler,
},
}, },
Streams: []grpc.StreamDesc{}, Streams: []grpc.StreamDesc{},
Metadata: "treasurer/service.proto", Metadata: "service.proto",
} }

@ -31,6 +31,11 @@ var PaymentFields = struct {
DeletedAt string DeletedAt string
RawPaymentBody string RawPaymentBody string
CallbackHostGRPC string CallbackHostGRPC string
WalletAddress string // for crypto
CryptoAmount string // for crypto
ToWalletAddress string
FromWalletAddress string
}{ }{
ID: "_id", ID: "_id",
UserID: "userId", UserID: "userId",
@ -48,6 +53,11 @@ var PaymentFields = struct {
DeletedAt: "deletedAt", DeletedAt: "deletedAt",
RawPaymentBody: "rawPaymentBody", RawPaymentBody: "rawPaymentBody",
CallbackHostGRPC: "callbackHostGrpc", CallbackHostGRPC: "callbackHostGrpc",
WalletAddress: "walletAddress",
CryptoAmount: "cryptoAmount",
ToWalletAddress: "toWalletAddress",
FromWalletAddress: "fromWalletAddress",
} }
type PaymentRepositoryDeps struct { type PaymentRepositoryDeps struct {
@ -156,3 +166,34 @@ func (r *PaymentRepository) SetPaymentStatus(ctx context.Context, paymentID stri
return &payment, nil return &payment, nil
} }
func (r *PaymentRepository) FindByWalletsAndAmount(ctx context.Context, toWalletAddress, fromWalletAddress string, cryptoAmount float64) (*models.Payment, errors.Error) {
payment := models.Payment{}
filter := bson.M{
PaymentFields.ToWalletAddress: toWalletAddress,
PaymentFields.FromWalletAddress: fromWalletAddress,
PaymentFields.CryptoAmount: cryptoAmount,
PaymentFields.Status: models.PaymentStatusWaiting,
}
if err := r.collection.FindOne(ctx, filter).Decode(&payment); err != nil {
r.logger.Error("failed to find payment by wallets and amount on <FindByWalletsAndAmount> of <PaymentRepository>",
zap.Error(err),
zap.String("toWalletAddress", toWalletAddress),
zap.String("fromWalletAddress", fromWalletAddress),
zap.Float64("cryptoAmount", cryptoAmount),
)
findErr := errors.NewWithError(
fmt.Errorf("failed to find payment by wallets and amount: %w", err),
errors.ErrInternalError,
)
if err == mongo.ErrNoDocuments {
return nil, findErr.SetType(errors.ErrNotFound)
}
return nil, findErr
}
return &payment, nil
}

@ -0,0 +1,61 @@
package repository
import (
"context"
"gitea.pena/PenaSide/treasurer/internal/models/yandex"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.uber.org/zap"
)
type PaymentMethodRepositoryDeps struct {
Logger *zap.Logger
Collection *mongo.Collection
}
type PaymentMethodRepository struct {
logger *zap.Logger
collection *mongo.Collection
}
func NewPaymentMethodRepository(deps PaymentMethodRepositoryDeps) *PaymentMethodRepository {
return &PaymentMethodRepository{
logger: deps.Logger,
collection: deps.Collection,
}
}
func (r *PaymentMethodRepository) Save(ctx context.Context, method *yandex.PaymentMethod) error {
_, err := r.collection.InsertOne(ctx, method)
if err != nil {
r.logger.Error("failed to save payment method", zap.Error(err), zap.String("userId", method.UserID))
return err
}
return nil
}
func (r *PaymentMethodRepository) GetByUserID(ctx context.Context, userID string) ([]*yandex.PaymentMethod, error) {
cursor, err := r.collection.Find(ctx, bson.M{"userId": userID})
if err != nil {
r.logger.Error("failed to find payment methods", zap.Error(err), zap.String("userId", userID))
return nil, err
}
defer cursor.Close(ctx)
var methods []*yandex.PaymentMethod
if err := cursor.All(ctx, &methods); err != nil {
r.logger.Error("failed to decode payment methods", zap.Error(err), zap.String("userId", userID))
return nil, err
}
return methods, nil
}
func (r *PaymentMethodRepository) DeleteByUserID(ctx context.Context, userID string) error {
_, err := r.collection.DeleteMany(ctx, bson.M{"userId": userID})
if err != nil {
r.logger.Error("failed to delete payment methods", zap.Error(err), zap.String("userId", userID))
return err
}
return nil
}

@ -29,6 +29,21 @@ func MapToCreatePaymentYandexReceipt(data map[string]string) (*models.CreatePaym
return nil, fmt.Errorf("missing requisites field") return nil, fmt.Errorf("missing requisites field")
} }
auto := false
if val, ok := data["save_payment_method"]; ok && val != "" {
auto, err = strconv.ParseBool(val)
if err != nil {
return nil, fmt.Errorf("invalid save_payment_method field: %w", err)
}
}
recurrent := false
if val, ok := data["recurrent"]; ok && val != "" {
recurrent, err = strconv.ParseBool(val)
if err != nil {
return nil, fmt.Errorf("invalid recurrent field: %w", err)
}
}
payment := &models.CreatePayment[yandex.Receipt]{ payment := &models.CreatePayment[yandex.Receipt]{
Type: models.PaymentType(data["type"]), Type: models.PaymentType(data["type"]),
Currency: data["currency"], Currency: data["currency"],
@ -38,6 +53,8 @@ func MapToCreatePaymentYandexReceipt(data map[string]string) (*models.CreatePaym
UserID: data["user_id"], UserID: data["user_id"],
ClientIP: data["client_ip"], ClientIP: data["client_ip"],
Requisites: requisites, Requisites: requisites,
Auto: auto,
Recurrent: recurrent,
} }
return payment, nil return payment, nil

@ -1,37 +0,0 @@
package closer
import (
"context"
)
type Closer interface {
Close(ctx context.Context) error
}
type CloserFunc func(ctx context.Context) error
func (cf CloserFunc) Close(ctx context.Context) error {
return cf(ctx)
}
type CloserGroup struct {
closers []Closer
}
func NewCloserGroup() *CloserGroup {
return &CloserGroup{}
}
func (cg *CloserGroup) Add(c Closer) {
cg.closers = append(cg.closers, c)
}
func (cg *CloserGroup) Call(ctx context.Context) error {
var closeErr error
for i := len(cg.closers) - 1; i >= 0; i-- {
if err := cg.closers[i].Close(ctx); err != nil && closeErr == nil {
closeErr = err
}
}
return closeErr
}

@ -3,13 +3,14 @@ syntax = "proto3";
package payment_callback; package payment_callback;
import "google/protobuf/empty.proto"; import "google/protobuf/empty.proto";
import "google/protobuf/timestamp.proto"; //import "google/protobuf/timestamp.proto";
option go_package = "./payment_callback"; option go_package = "./payment_callback";
service PaymentCallbackService { service PaymentCallbackService {
rpc OnSuccess(Event) returns (google.protobuf.Empty) {} rpc OnSuccess(Event) returns (google.protobuf.Empty) {}
rpc OnFailure(Event) returns (google.protobuf.Empty) {} rpc OnFailure(Event) returns (google.protobuf.Empty) {}
rpc OnCartPurchase(Event) returns (google.protobuf.Empty) {}
} }
message Event { message Event {

@ -1,31 +0,0 @@
syntax = "proto3";
package treasurer;
option go_package = "./treasurer";
message MainPaymentSettings {
string Currency = 1;
int64 Amount = 2;
repeated string CallbackHostGRPC = 3;
string ReturnURL = 4;
string UserID = 5;
string ClientIP = 6;
Customer Customer = 7;
repeated Item Items = 8;
}
message Customer {
string FullName = 1;
string INN = 2;
string Email = 3;
string Phone = 4;
}
message Item {
string Description = 1;
string Measure = 2;
string Quantity = 3;
string Money = 4;
string Currency = 5;
}

@ -3,7 +3,6 @@ syntax = "proto3";
package treasurer; package treasurer;
import "google/protobuf/empty.proto"; import "google/protobuf/empty.proto";
import "treasurer/payment.model.proto";
option go_package = "./treasurer"; option go_package = "./treasurer";
@ -14,6 +13,8 @@ service TreasurerService {
rpc GetPaymentLinkSberbankB2B(GetPaymentLinkRequest) returns (GetPaymentLinkResponse) {} rpc GetPaymentLinkSberbankB2B(GetPaymentLinkRequest) returns (GetPaymentLinkResponse) {}
rpc GetPaymentLinkSBP(GetPaymentLinkRequest) returns (GetPaymentLinkResponse) {} rpc GetPaymentLinkSBP(GetPaymentLinkRequest) returns (GetPaymentLinkResponse) {}
rpc GetPaymentLinkSberPay(GetPaymentLinkRequest) returns (GetPaymentLinkResponse) {} rpc GetPaymentLinkSberPay(GetPaymentLinkRequest) returns (GetPaymentLinkResponse) {}
rpc GetPaymentLinkAlchemy(GetPaymentLinkRequest) returns (GetPaymentLinkResponse) {}
rpc DeleteSavedPaymentMethods(DeleteSavedPaymentMethodsRequest) returns (google.protobuf.Empty) {}
} }
message GetBankCardPaymentLinkRequest { message GetBankCardPaymentLinkRequest {
@ -33,3 +34,40 @@ message GetB2BPaymentLinkRequest {
message GetPaymentLinkResponse { message GetPaymentLinkResponse {
string RedirectURL = 1; string RedirectURL = 1;
} }
message DeleteSavedPaymentMethodsRequest {
string UserID = 1;
}
message MainPaymentSettings {
string Currency = 1;
int64 Amount = 2;
repeated string CallbackHostGRPC = 3;
string ReturnURL = 4;
string UserID = 5;
string ClientIP = 6;
Customer Customer = 7;
repeated Item Items = 8;
bool Auto = 9;
bool Recurrent = 10;
// Для крипто-платежей:
string from_wallet_address = 11;
string to_wallet_address = 12;
double crypto_amount = 13;
}
message Customer {
string FullName = 1;
string INN = 2;
string Email = 3;
string Phone = 4;
}
message Item {
string Description = 1;
string Measure = 2;
string Quantity = 3;
string Money = 4;
string Currency = 5;
}