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:
bilalgursen
2026-10-07 23:12:15 +03:00
parent 7c48f64ff3
commit 10b3e5bd50
3 changed files with 24 additions and 0 deletions

View File

@@ -2,6 +2,8 @@ import "server-only";
import { desc, eq, sql } from "drizzle-orm";
import { appDb, schema } from "@/lib/appdb";
import { anahtarVar } from "@/lib/ai/client";
import { programOzellikleriGetir } from "@/lib/program-ozellik";
import { varyantEtiketi } from "@/lib/program-varyant";
import type { RaporSonuc } from "./types/rapor";
// 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),
});
if (satir?.result && bayatMockMu(satir.result as RaporSonuc)) return null;
if (satir?.result) varyantlariEkle(satir.result as RaporSonuc);
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.
* created_at saniye çözünürlüklü; aynı saniyedeki soru-cevap sırası rowid ile