import React from 'react'; import { supabaseAdmin } from '@/lib/supabase-admin'; 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'; async function getTransactions(filters: { merchant_id?: string; q?: string; status?: string }) { let query = supabaseAdmin .from('transactions') .select('*, merchants(name)') .order('created_at', { ascending: false }); if (filters.merchant_id) { query = query.eq('merchant_id', filters.merchant_id); } if (filters.status) { query = query.eq('status', filters.status); } if (filters.q) { // First, search for merchants matching the name to get their IDs const { data: matchedMerchants } = await supabaseAdmin .from('merchants') .select('id') .ilike('name', `%${filters.q}%`); const merchantIds = matchedMerchants?.map(m => m.id) || []; // Construct OR query parts let orParts = [ `stripe_pi_id.ilike.%${filters.q}%`, `source_ref_id.ilike.%${filters.q}%`, `customer_name.ilike.%${filters.q}%` ]; if (merchantIds.length > 0) { orParts.push(`merchant_id.in.(${merchantIds.join(',')})`); } query = query.or(orParts.join(',')); } const { data, error } = await query; if (error) { console.error('Fetch error:', error); return []; } return data; } 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 (
{/* Search and Filters Header */}
{/* Full Transactions Table */}
{transactions.map((t: any) => ( ))}
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'}
{t.callback_url && ( )}
{transactions.length === 0 && (

İşlem bulunamadı

)}
); }