|
|
import { createLogger } from '../../utils/logger'; |
|
|
import { supabase } from '../../db/supabase'; |
|
|
import { AuthService } from './auth'; |
|
|
import { Telegraf } from 'telegraf'; |
|
|
|
|
|
const logger = createLogger('PaymentVerificationService'); |
|
|
|
|
|
export class PaymentVerificationService { |
|
|
private static instance: PaymentVerificationService; |
|
|
private bot: Telegraf; |
|
|
|
|
|
private constructor() {} |
|
|
|
|
|
public static getInstance(): PaymentVerificationService { |
|
|
if (!PaymentVerificationService.instance) { |
|
|
PaymentVerificationService.instance = new PaymentVerificationService(); |
|
|
} |
|
|
return PaymentVerificationService.instance; |
|
|
} |
|
|
|
|
|
public setBot(bot: Telegraf) { |
|
|
this.bot = bot; |
|
|
} |
|
|
|
|
|
async verifyAndUpdatePayment(paymentId: string, status: 'COMPLETED' | 'FAILED') { |
|
|
try { |
|
|
|
|
|
const { data: payment, error: paymentError } = await supabase |
|
|
.from('payments') |
|
|
.select('*, users_bot_telegram!inner(telegram_id, balance)') |
|
|
.eq('id', paymentId) |
|
|
.single(); |
|
|
|
|
|
if (paymentError) throw paymentError; |
|
|
if (!payment) throw new Error('Payment not found'); |
|
|
|
|
|
|
|
|
const { error: updateError } = await supabase |
|
|
.from('payments') |
|
|
.update({ |
|
|
status: status, |
|
|
completed_at: status === 'COMPLETED' ? new Date().toISOString() : null |
|
|
}) |
|
|
.eq('id', paymentId); |
|
|
|
|
|
if (updateError) throw updateError; |
|
|
|
|
|
if (status === 'COMPLETED') { |
|
|
|
|
|
const { error: balanceError } = await supabase |
|
|
.from('users_bot_telegram') |
|
|
.update({ |
|
|
balance: payment.users_bot_telegram.balance + payment.amount |
|
|
}) |
|
|
.eq('id', payment.user_id); |
|
|
|
|
|
if (balanceError) throw balanceError; |
|
|
|
|
|
|
|
|
await this.notifyUser(payment.users_bot_telegram.telegram_id, payment.amount); |
|
|
} |
|
|
|
|
|
return true; |
|
|
} catch (error) { |
|
|
logger.error('Error verifying payment:', error); |
|
|
throw error; |
|
|
} |
|
|
} |
|
|
|
|
|
private async notifyUser(telegramId: number, amount: number) { |
|
|
try { |
|
|
await this.bot.telegram.sendMessage( |
|
|
telegramId, |
|
|
`✅ <b>تم إتمام عملية الدفع بنجاح!</b>\n\n` + |
|
|
`تم إضافة ${amount}$ إلى رصيدك.\n` + |
|
|
`يمكنك الآن استخدام الخدمات المتاحة.`, |
|
|
{ parse_mode: 'HTML' } |
|
|
); |
|
|
} catch (error) { |
|
|
logger.error('Error notifying user:', error); |
|
|
} |
|
|
} |
|
|
} |