fix: persist weekly brief preference and expose request failures
This commit is contained in:
+20
-9
@@ -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' });
|
||||
|
||||
@@ -184,7 +184,7 @@ export function findByStripe({ customerId, subId }) {
|
||||
// --- Kullanıcı verisi (localStorage yerine) --------------------------------
|
||||
|
||||
const IZINLI_ANAHTARLAR = new Set([
|
||||
'favori_kurumlar', 'ekip', 'saved_filters', 'reminder',
|
||||
'favori_kurumlar', 'ekip', 'saved_filters', 'reminder', 'brief',
|
||||
'rakip_izleme', 'ciro_hedefi', 'ai_model_config', 'kanban',
|
||||
'iptal_geri_bildirim',
|
||||
'firma_profil', // yetkinlikler + uyum eşiği
|
||||
|
||||
Reference in New Issue
Block a user