From 05341e1171b2f2cc7296aec4908df7837a4ff3a5 Mon Sep 17 00:00:00 2001 From: mstfyldz Date: Tue, 11 Aug 2026 23:19:53 +0300 Subject: [PATCH] feat(calendar): extract dates into case_events --- src/controllers/document.controller.ts | 44 ++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/controllers/document.controller.ts b/src/controllers/document.controller.ts index e46bdee..6cb4bbd 100644 --- a/src/controllers/document.controller.ts +++ b/src/controllers/document.controller.ts @@ -16,6 +16,7 @@ const ANALYSIS_SYSTEM_PROMPT = ` - "tarihler": (string) Belgedeki kritik tarihler (Dava tarihi, tebliğ vb.) - "hukukiDayanak": (string) Belgedeki ilgili kanun maddeleri ve hukuki temeller - "ilkDegerlendirme": (string) Dosyaya dair ilk stratejik ve hukuki değerlendirmen + - "events": (array) Varsa bir sonraki duruşma tarihi, kesin süre gibi ileriye dönük önemli tarihlerin listesi. Format: [{"date": "YYYY-MM-DD", "title": "Açıklama (Örn: 2. Celse Duruşması, Cevap Dilekçesi Süresi)", "type": "hearing" veya "deadline" veya "other"}] (Eğer tarih yoksa boş dizi [] döndür). "date" mutlaka ISO formatında (YYYY-MM-DD) olmalıdır. Eğer saat de belliyse (YYYY-MM-DDTHH:mm:00Z) şeklinde verebilirsin. Sadece ve sadece JSON döndür, başka hiçbir açıklama ekleme. `; @@ -250,6 +251,28 @@ export const registerLocalDocument = async (req: AuthenticatedRequest, res: Resp .single(); if (analysisError) throw analysisError; analysisRecord = analysis; + + // 5. Takvim (Case Events) kayıtlarını oluştur + if (summaryJson.events && Array.isArray(summaryJson.events)) { + const eventsToInsert = summaryJson.events + .filter((e: any) => e.date && e.title) + .map((e: any) => { + // Basit bir tarih doğrulaması (YYYY-MM-DD veya ISO date bekliyoruz) + const d = new Date(e.date); + return { + case_id: caseId, + document_id: documentRecord.id, + event_date: isNaN(d.getTime()) ? new Date().toISOString() : d.toISOString(), + title: e.title, + event_type: e.type && ['hearing', 'deadline', 'other'].includes(e.type) ? e.type : 'other' + }; + }); + + if (eventsToInsert.length > 0) { + const { error: eventsError } = await supabase.from('case_events').insert(eventsToInsert); + if (eventsError) console.error('Error inserting case events:', eventsError); + } + } } catch (analysisErr) { // Analiz başarısız olsa da belge zaten kaydedildi — sohbet daha sonra // extracted_text'i yine de kullanabilir. @@ -392,6 +415,27 @@ export const uploadDocument = async (req: AuthenticatedRequest, res: Response) = if (analysisError) throw analysisError; + // 5. Takvim (Case Events) kayıtlarını oluştur + if (summaryJson.events && Array.isArray(summaryJson.events)) { + const eventsToInsert = summaryJson.events + .filter((e: any) => e.date && e.title) + .map((e: any) => { + const d = new Date(e.date); + return { + case_id, + document_id: documentRecord.id, + event_date: isNaN(d.getTime()) ? new Date().toISOString() : d.toISOString(), + title: e.title, + event_type: e.type && ['hearing', 'deadline', 'other'].includes(e.type) ? e.type : 'other' + }; + }); + + if (eventsToInsert.length > 0) { + const { error: eventsError } = await supabase.from('case_events').insert(eventsToInsert); + if (eventsError) console.error('Error inserting case events:', eventsError); + } + } + // Başarıyla frontend'e döndür res.json({ message: 'Document processed successfully',