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 { // Get payment details 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'); // Update payment status 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') { // Update user balance 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; // Notify user 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, `✅ تم إتمام عملية الدفع بنجاح!\n\n` + `تم إضافة ${amount}$ إلى رصيدك.\n` + `يمكنك الآن استخدام الخدمات المتاحة.`, { parse_mode: 'HTML' } ); } catch (error) { logger.error('Error notifying user:', error); } } }