2023-06-13 13:22:51 +00:00
|
|
|
package models
|
|
|
|
|
|
|
|
import (
|
|
|
|
"time"
|
|
|
|
|
2024-12-16 13:47:40 +00:00
|
|
|
"gitea.pena/PenaSide/treasurer/internal/models/yandex"
|
2023-06-13 13:22:51 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type Payment struct {
|
|
|
|
ID string `json:"id" bson:"_id,omitempty"`
|
|
|
|
UserID string `json:"userId" bson:"userId"`
|
|
|
|
PaymentID string `json:"paymentId" bson:"paymentId"`
|
|
|
|
IdempotencePaymentID string `json:"idempotencePaymentId" bson:"idempotencePaymentId"`
|
|
|
|
ClientIP string `json:"clientIp" bson:"clientIp"`
|
|
|
|
Currency string `json:"currency" bson:"currency"`
|
|
|
|
Amount int64 `json:"amount" bson:"amount"`
|
|
|
|
Type PaymentType `json:"type" bson:"type"`
|
|
|
|
Status PaymentStatus `json:"status" bson:"status"`
|
|
|
|
Completed bool `json:"completed" bson:"completed"`
|
|
|
|
IsDeleted bool `json:"isDeleted" bson:"isDeleted"`
|
|
|
|
CreatedAt time.Time `json:"createdAt" bson:"createdAt"`
|
|
|
|
UpdatedAt time.Time `json:"updatedAt" bson:"updatedAt"`
|
|
|
|
DeletedAt *time.Time `json:"deletedAt,omitempty" bson:"deletedAt,omitempty"`
|
|
|
|
RawPaymentBody any `json:"rawPaymentBody,omitempty" bson:"rawPaymentBody,omitempty"`
|
|
|
|
|
|
|
|
/*
|
|
|
|
Список адресов в формате host:port, куда будет отправляться платёж при успешной операции
|
|
|
|
|
|
|
|
Запрос будет отправляться по протоколу GRPC
|
|
|
|
*/
|
|
|
|
CallbackHostGRPC []string `json:"callbackHostGrpc" bson:"callbackHostGrpc"`
|
|
|
|
}
|
|
|
|
|
|
|
|
func (receiver *Payment) Sanitize() *Payment {
|
|
|
|
now := time.Now()
|
|
|
|
|
|
|
|
receiver.ID = ""
|
|
|
|
receiver.CreatedAt = now
|
|
|
|
receiver.UpdatedAt = now
|
|
|
|
receiver.DeletedAt = nil
|
|
|
|
receiver.IsDeleted = false
|
|
|
|
receiver.Completed = false
|
|
|
|
|
|
|
|
return receiver
|
|
|
|
}
|
|
|
|
|
|
|
|
type CreatePaymentResult struct {
|
|
|
|
RedirectURL string
|
|
|
|
Payment *Payment
|
|
|
|
}
|
|
|
|
|
|
|
|
type CreatePayment[T any] struct {
|
|
|
|
Type PaymentType
|
|
|
|
Currency string
|
|
|
|
Amount int64
|
|
|
|
CallbackHostGRPC []string
|
|
|
|
ReturnURL string
|
|
|
|
UserID string
|
|
|
|
ClientIP string
|
|
|
|
Requisites T
|
|
|
|
}
|
|
|
|
|
|
|
|
type BankCard struct {
|
|
|
|
Number string
|
|
|
|
ExpiryYear string
|
|
|
|
ExpiryMonth string
|
|
|
|
CSC *string
|
|
|
|
CardHolderName *string
|
|
|
|
}
|
|
|
|
|
|
|
|
type PaymentType string
|
|
|
|
|
|
|
|
const (
|
|
|
|
PaymentTypeBankCard PaymentType = "bankCard"
|
|
|
|
PaymentTypeTinkoff PaymentType = "tinkoffBank"
|
|
|
|
PaymentTypeSberPay PaymentType = "sberbank"
|
|
|
|
PaymentTypeYoomoney PaymentType = "yoomoney"
|
|
|
|
PaymentTypeMobile PaymentType = "mobile"
|
|
|
|
PaymentTypeSBP PaymentType = "sbp"
|
|
|
|
PaymentTypeSberB2B PaymentType = "b2bSberbank"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
YandexPaymentTypeMap = map[PaymentType]yandex.PaymentType{
|
|
|
|
PaymentTypeBankCard: yandex.PaymentTypeBankCard,
|
|
|
|
PaymentTypeTinkoff: yandex.PaymentTypeTinkoff,
|
|
|
|
PaymentTypeSberPay: yandex.PaymentTypeSberPay,
|
|
|
|
PaymentTypeYoomoney: yandex.PaymentTypeYoomoney,
|
|
|
|
PaymentTypeMobile: yandex.PaymentTypeMobile,
|
|
|
|
PaymentTypeSBP: yandex.PaymentTypeSBP,
|
|
|
|
PaymentTypeSberB2B: yandex.PaymentTypeSberB2B,
|
|
|
|
}
|
|
|
|
)
|