feat: Интеграция DePay для криптовалютных платежей (USDT/Polygon)
- Добавлены endpoints для DePay: callback, success, rate, history - Заменена система проверки чеков на CryptoPayment - Переименована модель Check в CryptoPayment в Prisma схеме - Обновлен billing.tsx для работы с DePay виджетом - Все секреты вынесены в .env файлы - Интеграция с CoinGecko API для курса USDT/RUB - Добавлена RSA верификация webhook от DePay
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
-- Rename Check table to CryptoPayment
|
||||
RENAME TABLE `check` TO `crypto_payment`;
|
||||
|
||||
-- Add new columns for crypto payments
|
||||
ALTER TABLE `crypto_payment`
|
||||
ADD COLUMN `transactionHash` VARCHAR(191) NULL,
|
||||
ADD COLUMN `blockchain` VARCHAR(191) DEFAULT 'polygon',
|
||||
ADD COLUMN `token` VARCHAR(191) DEFAULT 'USDT',
|
||||
ADD COLUMN `cryptoAmount` DECIMAL(20, 8) NULL,
|
||||
ADD COLUMN `exchangeRate` DECIMAL(10, 2) NULL COMMENT 'USDT to RUB rate',
|
||||
ADD COLUMN `paymentProvider` VARCHAR(191) DEFAULT 'depay',
|
||||
MODIFY COLUMN `status` VARCHAR(191) DEFAULT 'pending' COMMENT 'pending, completed, failed',
|
||||
MODIFY COLUMN `fileUrl` VARCHAR(191) NULL COMMENT 'Not used for crypto payments';
|
||||
|
||||
-- Update foreign key name if needed
|
||||
ALTER TABLE `crypto_payment`
|
||||
DROP FOREIGN KEY `check_userId_fkey`,
|
||||
ADD CONSTRAINT `crypto_payment_userId_fkey`
|
||||
FOREIGN KEY (`userId`) REFERENCES `user`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
@@ -23,7 +23,7 @@ model User {
|
||||
isAdmin Boolean @default(false)
|
||||
tickets Ticket[] @relation("UserTickets")
|
||||
responses Response[] @relation("OperatorResponses")
|
||||
checks Check[] @relation("UserChecks")
|
||||
cryptoPayments CryptoPayment[] @relation("UserCryptoPayments")
|
||||
balance Float @default(0)
|
||||
notifications Notification[]
|
||||
pushSubscriptions PushSubscription[]
|
||||
@@ -46,16 +46,22 @@ model User {
|
||||
@@map("user")
|
||||
}
|
||||
|
||||
model Check {
|
||||
id Int @id @default(autoincrement())
|
||||
userId Int
|
||||
amount Float
|
||||
status String @default("pending") // pending, approved, rejected
|
||||
fileUrl String
|
||||
createdAt DateTime @default(now())
|
||||
user User @relation("UserChecks", fields: [userId], references: [id])
|
||||
model CryptoPayment {
|
||||
id Int @id @default(autoincrement())
|
||||
userId Int
|
||||
amount Float // Amount in RUB credited to balance
|
||||
cryptoAmount Float? // Amount in USDT paid
|
||||
exchangeRate Float? // USDT to RUB exchange rate at payment time
|
||||
status String @default("pending") // pending, completed, failed
|
||||
transactionHash String? // Blockchain transaction hash
|
||||
blockchain String @default("polygon") // polygon, ethereum, bsc, etc.
|
||||
token String @default("USDT") // USDT, USDC, ETH, etc.
|
||||
paymentProvider String @default("depay") // depay
|
||||
fileUrl String? // Not used for crypto payments (legacy from Check)
|
||||
createdAt DateTime @default(now())
|
||||
user User @relation("UserCryptoPayments", fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@map("check")
|
||||
@@map("crypto_payment")
|
||||
}
|
||||
|
||||
model Service {
|
||||
|
||||
Reference in New Issue
Block a user