fix: persist weekly brief preference and expose request failures

This commit is contained in:
2026-09-06 14:20:31 +03:00
parent 9db12a5eae
commit b2a416c908
7 changed files with 92 additions and 57 deletions
+20 -9
View File
@@ -1213,7 +1213,8 @@ const server = http.createServer(async (req, res) => {
if(k==='rakip_izleme' && (!Array.isArray(body.deger) || body.deger.some(item=>!item || typeof item.id!=='string'||!item.id||typeof item.name!=='string'||!item.name.trim()||item.name.length>1000||(item.sector!=null&&typeof item.sector!=='string')) || new Set(body.deger.map(item=>item.id)).size!==body.deger.length || new Set(body.deger.map(item=>item.name.trim().toLocaleLowerCase('tr-TR'))).size!==body.deger.length))
return json(res,400,{success:false,error:'Rakip listesi geçersiz veya yinelenen firma içeriyor.'});
if(k==='reminder')validateReminderPreferences(body.deger);
const protectedKey=['firma_profil','saved_filters','ekip','favori_kurumlar','rakip_izleme','reminder'].includes(k);
if(k==='brief'&&typeof body.deger?.kapali!=='boolean')return json(res,400,{success:false,error:'Haftalık özet seçimi geçersiz.'});
const protectedKey=['firma_profil','saved_filters','ekip','favori_kurumlar','rakip_izleme','reminder','brief'].includes(k);
if(protectedKey && (!Object.hasOwn(body,'revision') || (body.revision!==null && (typeof body.revision!=='string' || !/^[a-f0-9]{64}$/.test(body.revision)))))
return json(res,428,{success:false,kod:'VERSION_REQUIRED',error:'Güncel kayıt sürümü gerekli. Sayfayı yenileyip tekrar deneyin.'});
const revision=store.setData(user.email, k, body.deger, protectedKey ? body.revision : undefined);
@@ -1514,15 +1515,25 @@ const server = http.createServer(async (req, res) => {
const user = userFromAuthHeader(req.headers['authorization']);
if (!user) return json(res, 401, { success: false, error: 'oturum yok' });
store.ensureUser(user.email, user.name);
if (req.method === 'POST') {
const body = await readBody(req).catch(() => ({}));
store.setData(user.email, 'brief', { kapali: body.kapali === true });
return json(res, 200, { success: true, kapali: body.kapali === true });
}
const out = await tendersPayload();
const b = briefOlustur(user.email, out.tenders);
return json(res, 200, { success: true, kapali: !!(store.getData(user.email, 'brief')?.kapali), brief: b, metin: briefMetni(b) });
try {
if(req.method==='POST'){
const body=await readBody(req);
if(typeof body.kapali!=='boolean')return json(res,400,{success:false,error:'Haftalık özet seçimi geçersiz.'});
if(!Object.hasOwn(body,'revision')||(body.revision!==null&&(typeof body.revision!=='string'||!/^[a-f0-9]{64}$/.test(body.revision))))return json(res,428,{success:false,error:'Güncel özet ayarını yükleyin.'});
const revision=store.setData(user.email,'brief',{kapali:body.kapali},body.revision);
return json(res,200,{success:true,kapali:body.kapali,revision});
}
if(req.method!=='GET')return json(res,405,{success:false,error:'Desteklenmeyen metot.'});
let preview={};
if(url.searchParams.get('preview')==='1'){
const out=await tendersPayload(),b=briefOlustur(user.email,out.tenders);
preview={brief:b,metin:briefMetni(b)};
}
const snapshot=store.getDataSnapshot(user.email);
return json(res,200,{success:true,kapali:!!snapshot.veri.brief?.kapali,revision:snapshot.revisions.brief ?? null,...preview});
}catch(e){return json(res,e.kod==='VERSION_CONFLICT'?409:400,{success:false,error:e.message,kod:e.kod});}
}
if (url.pathname === '/api/admin/brief/gonder' && req.method === 'POST') {
const user = userFromAuthHeader(req.headers['authorization']);
if (!user?.isAdmin) return json(res, 403, { success: false, error: 'yetki yok' });