fix: bayat dev-mock raporlar tek kapıdan (kullanicininRaporu) ayıklanıyor
All checks were successful
Deploy / deploy (push) Successful in 9m25s

Dev'de API anahtarı yokken üretilen mock rapor DB'ye kaydediliyordu;
anahtar sonradan eklenince kullanıcı başına tek rapor kuralı yüzünden o
bayat mock gerçek AI çıktısıymış gibi servis edilmeye devam ediyordu.

Rapor tablosunu okuyan her yer (sonuc/listem/yazdir/odeme-sonuc sayfaları,
liste action'ları, soru API'si, dev panel) artık src/lib/rapor-kaydi.ts
içindeki kullanicininRaporu() kapısından geçiyor: gerçek AI aktifken
mock üretimi kayıt "yok" sayılır, kullanıcı gerçek listeyi yeniden üretir.
Yeni mock kayıtlar devMock işareti taşır; eskiler metin ön ekinden tanınır.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
bilalgursen
2026-08-07 12:45:56 +03:00
parent 620e41edae
commit 7518baccfa
10 changed files with 55 additions and 37 deletions

34
src/lib/rapor-kaydi.ts Normal file
View File

@@ -0,0 +1,34 @@
import { eq } from "drizzle-orm";
import { appDb, schema } from "@/lib/appdb";
import { anahtarVar } from "@/lib/ai/client";
import type { RaporSonuc } from "@/lib/ai/rapor";
// Kullanıcının kayıtlı raporunu okuyan TEK kapı. Rapor tablosunu okuyan her
// yer (sayfalar, action'lar, soru API'si) buradan geçmeli; doğrudan
// appDb.query.reports.findFirst kullanma.
//
// Neden: dev'de API anahtarı yokken üretilen mock rapor DB'ye kaydediliyor
// (akışın tamamı anahtarsız test edilebilsin diye — bilinçli). Ama anahtar
// sonradan eklenince kullanıcı başına tek rapor kuralı yüzünden o bayat mock,
// gerçek Yapay Zeka çıktısıymış gibi servis edilmeye devam ediyordu. Gerçek AI
// aktifken mock üretimi bir rapor "yok" sayılır; kullanıcı yeni (gerçek)
// listeyi üretir ve kayıt üzerine yazılır.
function bayatMockMu(sonuc: RaporSonuc): boolean {
const mockUretimi =
sonuc.devMock === true ||
// devMock alanı eklenmeden önce kaydedilmiş mock raporlar
sonuc.genelDegerlendirme?.startsWith("(Dev mock");
if (!mockUretimi) return false;
const mockHalaAktif =
process.env.NODE_ENV !== "production" && !anahtarVar();
return !mockHalaAktif;
}
export async function kullanicininRaporu(userId: string) {
const satir = await appDb.query.reports.findFirst({
where: eq(schema.reports.userId, userId),
});
if (satir?.result && bayatMockMu(satir.result as RaporSonuc)) return null;
return satir ?? null;
}