import React from 'react'; import { db } from '@/lib/db'; import { Search, Filter, Download, ExternalLink, MoreVertical } from 'lucide-react'; import { format } from 'date-fns'; import { tr } from 'date-fns/locale'; import TransactionSearch from '@/components/admin/TransactionSearch'; import TransactionStatusFilter from '@/components/admin/TransactionStatusFilter'; import SyncPaymentsButton from '@/components/admin/SyncPaymentsButton'; async function getTransactions(filters: { merchant_id?: string; q?: string; status?: string }) { let sql = ` SELECT t.*, m.name as merchant_name FROM transactions t LEFT JOIN merchants m ON t.merchant_id = m.id WHERE 1=1 `; let params: any[] = []; let paramIndex = 1; if (filters.merchant_id) { sql += ` AND t.merchant_id = $${paramIndex++}`; params.push(filters.merchant_id); } if (filters.status) { sql += ` AND t.status = $${paramIndex++}`; params.push(filters.status); } if (filters.q) { sql += ` AND ( t.stripe_pi_id ILIKE $${paramIndex} OR t.source_ref_id ILIKE $${paramIndex} OR t.customer_name ILIKE $${paramIndex} OR m.name ILIKE $${paramIndex} )`; params.push(`%${filters.q}%`); paramIndex++; } sql += ` ORDER BY t.created_at DESC`; try { const { rows } = await db.query(sql, params); return rows.map(r => ({ ...r, merchants: r.merchant_name ? { name: r.merchant_name } : null })); } catch (error) { console.error('Fetch error:', error); return []; } } export default async function TransactionsPage(props: { searchParams: Promise<{ merchant_id?: string; q?: string; status?: string }>; }) { const searchParams = await props.searchParams; const transactions = await getTransactions({ merchant_id: searchParams.merchant_id, q: searchParams.q, status: searchParams.status }); return (
| Firma | İşlem ID | Referans / Kaynak | Tarih & Saat | Tutar | Durum | İşlemler |
|---|---|---|---|---|---|---|
|
{t.merchants?.name || 'Doğrudan'}
|
#{t.stripe_pi_id?.slice(-12).toUpperCase() || 'MOCK'} |
{t.customer_name || t.source_ref_id || 'Doğrudan Ödeme'}
{t.customer_phone ? (
{t.customer_phone}
) : (
{t.callback_url || 'Geri dönüş yok'}
)}
|
{format(new Date(t.created_at), 'dd MMM yyyy, HH:mm', { locale: tr })} | {Number(t.amount).toLocaleString('tr-TR', { minimumFractionDigits: 2 })} {t.currency.toUpperCase() === 'TRY' ? '₺' : t.currency.toUpperCase()} |
{t.status === 'succeeded' ? 'Başarılı' :
t.status === 'failed' ? 'Hatalı' : 'Bekliyor'}
|
İşlem bulunamadı