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 (
| 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ı