feat(drafting): add fast-path generateAngarya endpoint for routine petitions
This commit is contained in:
@@ -110,3 +110,88 @@ export const generateDraft = async (req: AuthenticatedRequest, res: Response) =>
|
||||
res.status(500).json({ error: error.message || 'Internal Server Error' });
|
||||
}
|
||||
};
|
||||
|
||||
const ANGARYA_SYSTEM_PROMPT = `
|
||||
Sen uzman bir Türk avukatısın. Sana verilen dosya bilgilerine göre, standart, resmî ve kısa bir dilekçe TASLAĞI oluşturacaksın.
|
||||
Bu işlem "hızlı angarya" işlemi olduğu için hiçbir hukuki tartışmaya girme.
|
||||
Sadece doğru mahkeme adını, esas numarasını, tarafı ve vekil adını yerleştirip netice-i talebi yaz.
|
||||
|
||||
Dilekçe Türüne Göre İstenen Metin:
|
||||
1. "Süre Tutum": Gerekçeli kararın tebliğine kadar istinaf/temyiz süresinin tutulduğuna dair standart kısa dilekçe.
|
||||
2. "Mazeret": "Mesleki mazeretim (başka bir duruşmamla çakışması) nedeniyle bugünkü duruşmaya katılamıyorum, mazeretimin kabulüne..." içerikli standart kısa dilekçe.
|
||||
3. "Vekaletname Sunma": "Ekte sunduğumuz onaylı vekaletname uyarınca dosyanıza vekil olarak kabulümüzü talep ederiz." içerikli standart kısa dilekçe.
|
||||
|
||||
ÖNEMLİ: Markdown biçimlendirmesi (**, ##, -, *) ASLA kullanma.
|
||||
Başlık/vurgu için sadece BÜYÜK HARF kullan.
|
||||
Dilekçenin başına her zaman ilgili MAHKEME ADI ve ESAS NO ekle.
|
||||
Sadece dilekçe metnini döndür, ek yorum yapma.
|
||||
`;
|
||||
|
||||
export const generateAngarya = async (req: AuthenticatedRequest, res: Response) => {
|
||||
try {
|
||||
const { case_id, type, client_role } = req.body || {};
|
||||
const userId = req.user?.id;
|
||||
|
||||
if (!case_id || !type) {
|
||||
return res.status(400).json({ error: 'case_id ve type zorunludur.' });
|
||||
}
|
||||
|
||||
const validTypes = {
|
||||
'sure-tutum': 'Süre Tutum Dilekçesi',
|
||||
'mazeret': 'Mazeret Dilekçesi',
|
||||
'vekalet': 'Vekaletname Sunma Dilekçesi'
|
||||
};
|
||||
|
||||
const petitionType = validTypes[type as keyof typeof validTypes];
|
||||
if (!petitionType) {
|
||||
return res.status(400).json({ error: 'Geçersiz angarya türü.' });
|
||||
}
|
||||
|
||||
const { data: caseRow, error: caseError } = await supabase
|
||||
.from('cases')
|
||||
.select('id, title, parties, user_id')
|
||||
.eq('id', case_id)
|
||||
.single();
|
||||
|
||||
if (caseError || !caseRow) {
|
||||
return res.status(404).json({ error: 'Dava dosyası bulunamadı.' });
|
||||
}
|
||||
if (caseRow.user_id !== userId) {
|
||||
return res.status(403).json({ error: 'Bu dosyaya erişim yetkiniz yok.' });
|
||||
}
|
||||
|
||||
const partiesText = Array.isArray(caseRow.parties) && caseRow.parties.length > 0
|
||||
? caseRow.parties.map((p: any) => `${p.adi || ''} (${p.rol || ''}${p.vekil ? `, Vekil: ${p.vekil}` : ''})`).join('; ')
|
||||
: 'Belirtilmemiş';
|
||||
|
||||
let userContent = `DOSYA BİLGİLERİ:\nDosya: ${caseRow.title}\nTaraflar: ${partiesText}\n`;
|
||||
if (client_role) {
|
||||
userContent += `Müvekkil (Bizim Tarafımız): ${client_role}\n`;
|
||||
}
|
||||
userContent += `\nİstenen Dilekçe: ${petitionType}\nLütfen sadece bu bilgileri kullanarak yukarıda tarif edilen standart ${petitionType} metnini oluştur.`;
|
||||
|
||||
// Fast generation using a lightweight model or quick params
|
||||
const { aiContent, aiModel } = await callAiModelRaw(ANGARYA_SYSTEM_PROMPT, userContent, 500);
|
||||
|
||||
const { data: draftRecord, error: draftError } = await supabase
|
||||
.from('drafts')
|
||||
.insert([{
|
||||
user_id: userId,
|
||||
case_id,
|
||||
petition_type: petitionType,
|
||||
content: aiContent,
|
||||
template_id: null,
|
||||
}])
|
||||
.select('id, created_at')
|
||||
.single();
|
||||
|
||||
if (draftError) {
|
||||
console.error('Save Draft Error:', draftError);
|
||||
}
|
||||
|
||||
res.json({ draft: aiContent, draftId: draftRecord?.id || null, model: aiModel, usedTemplate: false });
|
||||
} catch (error: any) {
|
||||
console.error('Generate Angarya Error:', error);
|
||||
res.status(500).json({ error: error.message || 'Internal Server Error' });
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import { Router } from 'express';
|
||||
import { requireAuth } from '../middleware/auth';
|
||||
import { generateDraft } from '../controllers/drafting.controller';
|
||||
import { generateDraft, generateAngarya } from '../controllers/drafting.controller';
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.post('/generate', requireAuth, generateDraft);
|
||||
router.post('/generate-angarya', requireAuth, generateAngarya);
|
||||
|
||||
export default router;
|
||||
|
||||
Reference in New Issue
Block a user