import { prisma } from "@streamclipper/db"; export const dynamic = "force-dynamic"; const STATUS_BADGE: Record = { PENDING: "muted", PROCESSED: "ok", DISCARDED: "err", PENDING_STT: "warn", TRANSCRIBED: "ok", FAILED: "err", }; function transcriptPreview(transcriptJson: unknown): string | null { if (!transcriptJson || typeof transcriptJson !== "object") return null; const text = (transcriptJson as { text?: string }).text; return text ? text.slice(0, 240) : null; } export default async function SegmentsPage() { const segments = await prisma.rawSegment.findMany({ orderBy: { createdAt: "desc" }, take: 50, include: { candidates: { orderBy: { createdAt: "desc" } } }, }); return ( <>

Segment & Aday Klip Kütüphanesi

{segments.length === 0 ? (

Henüz işlenmiş segment yok.

) : ( segments.map((segment) => (
{segment.filePath} {segment.status}
{segment.duration}sn · {new Date(segment.startedAt).toLocaleString("tr-TR")}
{segment.candidates.length === 0 ? (

Bu segmentte aday klip bulunamadı.

) : ( segment.candidates.map((c) => (
{c.startSec}s – {c.endSec}s {c.audioPeakScore != null && ` · peak ${c.audioPeakScore.toFixed(1)}dB`} {c.chatVelocityScore != null && " · chat spike"} {c.status}
{transcriptPreview(c.transcriptJson) && (

{transcriptPreview(c.transcriptJson)}

)}
)) )}
)) )} ); }