fix: bayat dev-mock raporlar tek kapıdan (kullanicininRaporu) ayıklanıyor
All checks were successful
Deploy / deploy (push) Successful in 9m25s
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:
@@ -78,6 +78,9 @@ export type RaporKapsam = {
|
||||
export type RaporSonuc = Omit<z.infer<typeof RaporSchema>, "uyarilar"> & {
|
||||
uyarilar?: string[];
|
||||
kapsam?: RaporKapsam;
|
||||
// Dev mock üretimi işareti: gerçek AI aktifken bayat mock kayıtları
|
||||
// ayıklamak için (bkz. src/lib/rapor-kaydi.ts)
|
||||
devMock?: boolean;
|
||||
// Render için havuzdan zenginleştirilmiş program bilgisi
|
||||
// efektifSira: COALESCE(sira2025, sira2024) — eski kayıtlı raporlarda yok
|
||||
// siraGecmisi: [2021..2025] taban sıralamaları — deterministik trend oku
|
||||
@@ -284,6 +287,7 @@ function mockRapor(
|
||||
],
|
||||
programlar,
|
||||
kapsam: kapsamUret(hedef),
|
||||
devMock: true,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
import { eq } from "drizzle-orm";
|
||||
import { headers } from "next/headers";
|
||||
import { appDb, schema } from "@/lib/appdb";
|
||||
import { kullanicininRaporu } from "@/lib/rapor-kaydi";
|
||||
import { auth } from "@/lib/auth";
|
||||
import { getCurrentUser } from "@/lib/session";
|
||||
import { URUNLER } from "@/lib/credits";
|
||||
@@ -33,10 +34,7 @@ export async function devDurum(): Promise<DevDurum> {
|
||||
devKontrol();
|
||||
const user = await getCurrentUser();
|
||||
if (!user) return { girisli: false };
|
||||
const rapor = await appDb.query.reports.findFirst({
|
||||
where: eq(schema.reports.userId, user.id),
|
||||
columns: { params: true },
|
||||
});
|
||||
const rapor = await kullanicininRaporu(user.id);
|
||||
const params = rapor?.params as { sira?: number; tur?: string } | undefined;
|
||||
return {
|
||||
girisli: true,
|
||||
|
||||
34
src/lib/rapor-kaydi.ts
Normal file
34
src/lib/rapor-kaydi.ts
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user