Update Next.js configuration and package dependencies
All checks were successful
Deploy / deploy (push) Successful in 9m29s
All checks were successful
Deploy / deploy (push) Successful in 9m29s
- Modified redirects in next.config.ts to change the destination for "/sohbet" to "/listem". - Added new dependencies in package.json: marked, motion, react-markdown, remark-breaks, remark-gfm, shiki, and use-stick-to-bottom. - Updated pnpm-lock.yaml to reflect the new package versions and dependencies. - Removed obsolete stack files for Flutter, Nuxt, Nuxt.js, React Native, and Svelte from the UI/UX Pro Max skill data. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
73
src/lib/rapor-maske.ts
Normal file
73
src/lib/rapor-maske.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
// Paketsiz kullanıcıya giden raporun sunucu tarafı maskesi.
|
||||
// Blur yalnızca CSS olduğundan kilitli satırların gerçek içeriği client'a
|
||||
// hiç inmemeli: ilk ACIK_SATIR tercih gerçek kalır, gerisinin metinleri
|
||||
// makul görünen placeholder'larla değiştirilir. Risk rengini besleyen
|
||||
// dilim + il gerçek kalır ki blur altındaki dağılım adayı yansıtsın;
|
||||
// taban sıralaması (efektifSira) sızdırılmaz.
|
||||
|
||||
import type { RaporSonuc } from "./ai/rapor";
|
||||
|
||||
export const ACIK_SATIR = 3;
|
||||
|
||||
const SAHTE_ISIMLER = [
|
||||
"Bilgisayar Mühendisliği (İngilizce)",
|
||||
"Elektrik-Elektronik Mühendisliği",
|
||||
"Endüstri Mühendisliği",
|
||||
"Yazılım Mühendisliği (Burslu)",
|
||||
"Makine Mühendisliği",
|
||||
"İşletme (İngilizce)",
|
||||
"Psikoloji",
|
||||
"Mimarlık",
|
||||
];
|
||||
|
||||
const SAHTE_GEREKCE =
|
||||
"Sıralamana ve seçtiğin önceliklere göre dengeli bir aday; ayrıntılı gerekçe kilidin ardında.";
|
||||
const SAHTE_RISK =
|
||||
"Yerleşme ihtimali değerlendirmesi paketi aktive edince görünür.";
|
||||
const SAHTE_TREND =
|
||||
"Son 4 yılın taban sıralaması hareketi paketi aktive edince görünür.";
|
||||
|
||||
/** genelDegerlendirme'nin yalnızca ilk 1-2 cümlesini bırakır. */
|
||||
function degerlendirmeKirp(metin: string): string {
|
||||
const cumleler = metin.match(/[^.!?]+[.!?]+/g);
|
||||
if (!cumleler || cumleler.length <= 2) return metin;
|
||||
return `${cumleler.slice(0, 2).join(" ").trim()} …`;
|
||||
}
|
||||
|
||||
export function raporMaskele(rapor: RaporSonuc): RaporSonuc {
|
||||
const tercihler = rapor.tercihler.map((t, i) =>
|
||||
i < ACIK_SATIR
|
||||
? t
|
||||
: {
|
||||
...t,
|
||||
gerekce: SAHTE_GEREKCE,
|
||||
riskNotu: SAHTE_RISK,
|
||||
trendOzeti: SAHTE_TREND,
|
||||
},
|
||||
);
|
||||
|
||||
const programlar: RaporSonuc["programlar"] = {};
|
||||
rapor.tercihler.forEach((t, i) => {
|
||||
const p = rapor.programlar[t.programId];
|
||||
if (!p) return;
|
||||
programlar[t.programId] =
|
||||
i < ACIK_SATIR
|
||||
? p
|
||||
: {
|
||||
isim: SAHTE_ISIMLER[i % SAHTE_ISIMLER.length],
|
||||
universite: "•••••••• Üniversitesi",
|
||||
il: p.il,
|
||||
unitur: p.unitur,
|
||||
efektifSira: null,
|
||||
};
|
||||
});
|
||||
|
||||
return {
|
||||
tercihler,
|
||||
genelDegerlendirme: degerlendirmeKirp(rapor.genelDegerlendirme),
|
||||
// Uyarılar liste geneline dair, satır sırrı taşımaz: paketsizde de kalır.
|
||||
// Satır bazlı siraGecmisi ise kilitli satırlarda hiç kopyalanmaz (üstte).
|
||||
uyarilar: rapor.uyarilar,
|
||||
programlar,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user