From 1191f16916da47dd44b0bce5d49bed61369d34ea Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Mon, 5 Oct 2026 01:04:42 +0300 Subject: [PATCH] =?UTF-8?q?fix(danisman):=20M2=20(6)=20=E2=80=94=20100=20m?= =?UTF-8?q?esaj=C4=B1=20a=C5=9Fan=20ge=C3=A7mi=C5=9Fte=20en=20yeni=20100?= =?UTF-8?q?=20d=C3=B6ns=C3=BCn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sohbetGecmisiGetir yeniden eskiye sıralayıp 100 alır, sonra çevirir; aynı saniyedeki soru-cevap sırası rowid ile korunur. GET /api/soru da aynı sorguyu kullanır (iki kopya vardı). Co-Authored-By: Claude Fable 5.1 --- src/app/api/soru/route.ts | 15 +++------------ src/features/rapor/rapor-queries.ts | 15 ++++++++++----- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/app/api/soru/route.ts b/src/app/api/soru/route.ts index 1492b97..592dc61 100644 --- a/src/app/api/soru/route.ts +++ b/src/app/api/soru/route.ts @@ -1,4 +1,4 @@ -import { eq, desc, asc } from "drizzle-orm"; +import { eq, desc } from "drizzle-orm"; import type { NextRequest } from "next/server"; import { getSession } from "@/lib/session"; import { appDb, schema } from "@/lib/appdb"; @@ -10,7 +10,7 @@ import { } from "@/lib/credits"; import { createUIMessageStream, createUIMessageStreamResponse } from "ai"; import { anahtarVar, SORUMLULUK_REDDI } from "@/lib/ai/client"; -import { kullanicininRaporu } from "@/features/rapor/rapor-queries"; +import { kullanicininRaporu, sohbetGecmisiGetir } from "@/features/rapor/rapor-queries"; import type { AracBaglami } from "@/lib/ai/araclar"; import { danismanAkisi } from "@/lib/ai/sohbet-akisi"; import { sistemPromptu } from "@/lib/ai/danisman-prompt"; @@ -52,16 +52,7 @@ export async function GET() { return Response.json({ error: "Oturum gerekli." }, { status: 401 }); } const [mesajlar, kullanici] = await Promise.all([ - appDb - .select({ - id: schema.chatMessages.id, - role: schema.chatMessages.role, - content: schema.chatMessages.content, - }) - .from(schema.chatMessages) - .where(eq(schema.chatMessages.userId, session.user.id)) - .orderBy(asc(schema.chatMessages.createdAt)) - .limit(100), + sohbetGecmisiGetir(session.user.id), appDb.query.user.findFirst({ where: eq(schema.user.id, session.user.id), columns: { creditBalance: true }, diff --git a/src/features/rapor/rapor-queries.ts b/src/features/rapor/rapor-queries.ts index fec8e7b..e839076 100644 --- a/src/features/rapor/rapor-queries.ts +++ b/src/features/rapor/rapor-queries.ts @@ -1,5 +1,5 @@ import "server-only"; -import { asc, eq } from "drizzle-orm"; +import { desc, eq, sql } from "drizzle-orm"; import { appDb, schema } from "@/lib/appdb"; import { anahtarVar } from "@/lib/ai/client"; import type { RaporSonuc } from "./types/rapor"; @@ -40,9 +40,13 @@ export async function kullanicininRaporu(userId: string) { return satir ?? null; } -/** Kullanıcının danışman sohbet geçmişi, eskiden yeniye (en fazla 100 mesaj). */ -export function sohbetGecmisiGetir(userId: string) { - return appDb +/** + * 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 + * korunur. + */ +export async function sohbetGecmisiGetir(userId: string) { + const satirlar = await appDb .select({ id: schema.chatMessages.id, role: schema.chatMessages.role, @@ -50,6 +54,7 @@ export function sohbetGecmisiGetir(userId: string) { }) .from(schema.chatMessages) .where(eq(schema.chatMessages.userId, userId)) - .orderBy(asc(schema.chatMessages.createdAt)) + .orderBy(desc(schema.chatMessages.createdAt), sql`rowid DESC`) .limit(100); + return satirlar.reverse(); }