feat(listem): kayıtlı raporun satırlarına varyant (okuma anında zenginleştirme)
kullanicininRaporu dönmeden önce programOzellikleriGetir ile 24 id tek sorguda okunur, programlar[id].varyant yazılır; eski kayıtlar da kazanır, app.db'ye yazılmaz. Rapor listesi tür çipinin yanında SATIR_CIP ile gösterir. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -41,6 +41,7 @@ import {
|
|||||||
SATIR_BUTON_HUCRE,
|
SATIR_BUTON_HUCRE,
|
||||||
SATIR_DUGME_BOYU,
|
SATIR_DUGME_BOYU,
|
||||||
SATIR_ALT_GRUP,
|
SATIR_ALT_GRUP,
|
||||||
|
SATIR_CIP,
|
||||||
SATIR_IKINCIL_LINK,
|
SATIR_IKINCIL_LINK,
|
||||||
SATIR_META,
|
SATIR_META,
|
||||||
SATIR_MOBIL_SAYI,
|
SATIR_MOBIL_SAYI,
|
||||||
@@ -267,6 +268,10 @@ export function RaporListesi({
|
|||||||
unitur={p?.unitur}
|
unitur={p?.unitur}
|
||||||
onClick={(e) => e.stopPropagation()}
|
onClick={(e) => e.stopPropagation()}
|
||||||
/>
|
/>
|
||||||
|
{/* Burs/dil/öğretim türü: aynı adlı satırları ayırt eder (§4.15 çip) */}
|
||||||
|
{p?.varyant ? (
|
||||||
|
<span className={SATIR_CIP}>{p.varyant}</span>
|
||||||
|
) : null}
|
||||||
{p?.il ? (
|
{p?.il ? (
|
||||||
<Link
|
<Link
|
||||||
href={ilSayfaHref(p.il)}
|
href={ilSayfaHref(p.il)}
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ import "server-only";
|
|||||||
import { desc, eq, sql } from "drizzle-orm";
|
import { desc, eq, sql } from "drizzle-orm";
|
||||||
import { appDb, schema } from "@/lib/appdb";
|
import { appDb, schema } from "@/lib/appdb";
|
||||||
import { anahtarVar } from "@/lib/ai/client";
|
import { anahtarVar } from "@/lib/ai/client";
|
||||||
|
import { programOzellikleriGetir } from "@/lib/program-ozellik";
|
||||||
|
import { varyantEtiketi } from "@/lib/program-varyant";
|
||||||
import type { RaporSonuc } from "./types/rapor";
|
import type { RaporSonuc } from "./types/rapor";
|
||||||
|
|
||||||
// Rapor feature'ının sorgu kapısı: kayıtlı rapor, sohbet geçmişi ve girişsiz
|
// Rapor feature'ının sorgu kapısı: kayıtlı rapor, sohbet geçmişi ve girişsiz
|
||||||
@@ -37,9 +39,23 @@ export async function kullanicininRaporu(userId: string) {
|
|||||||
where: eq(schema.reports.userId, userId),
|
where: eq(schema.reports.userId, userId),
|
||||||
});
|
});
|
||||||
if (satir?.result && bayatMockMu(satir.result as RaporSonuc)) return null;
|
if (satir?.result && bayatMockMu(satir.result as RaporSonuc)) return null;
|
||||||
|
if (satir?.result) varyantlariEkle(satir.result as RaporSonuc);
|
||||||
return satir ?? null;
|
return satir ?? null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Kayıtlı raporun program satırlarına burs/dil/öğretim türü etiketi (okuma
|
||||||
|
// anında, tek sorgu): rapor JSON'u üretim anında bunu taşımıyor, eski
|
||||||
|
// kayıtlar da bu yoldan kazanır. yokatlas.db salt okunur; app.db'ye yazılmaz.
|
||||||
|
function varyantlariEkle(sonuc: RaporSonuc): void {
|
||||||
|
const idler = Object.keys(sonuc.programlar ?? {});
|
||||||
|
if (idler.length === 0) return;
|
||||||
|
const ozellikler = programOzellikleriGetir(idler);
|
||||||
|
for (const id of idler) {
|
||||||
|
const o = ozellikler[id];
|
||||||
|
sonuc.programlar[id].varyant = o ? varyantEtiketi(o) : null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Kullanıcının danışman sohbet geçmişi: en YENİ 100 mesaj, eskiden yeniye.
|
* Kullanıcının danışman sohbet geçmişi: en YENİ 100 mesaj, eskiden yeniye.
|
||||||
* created_at saniye çözünürlüklü; aynı saniyedeki soru-cevap sırası rowid ile
|
* created_at saniye çözünürlüklü; aynı saniyedeki soru-cevap sırası rowid ile
|
||||||
|
|||||||
@@ -58,6 +58,9 @@ export type RaporSonuc = {
|
|||||||
efektifSira?: number | null;
|
efektifSira?: number | null;
|
||||||
siraGecmisi?: (number | null)[];
|
siraGecmisi?: (number | null)[];
|
||||||
ilkYil?: number;
|
ilkYil?: number;
|
||||||
|
/** Burs/dil/öğretim türü etiketi; DB'ye yazılmaz, okuma anında
|
||||||
|
* program_ozellik'ten eklenir (rapor-queries kullanicininRaporu) */
|
||||||
|
varyant?: string | null;
|
||||||
}
|
}
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user