disclosure-bureau/web/app/api/sessions/route.ts

49 lines
1.9 KiB
TypeScript
Raw Permalink Normal View History

/**
* GET /api/sessions list current user's chat sessions
* POST /api/sessions create a new session { title?, context_doc_id?, context_page_id? }
*/
import { NextResponse } from "next/server";
import { createClient, isSupabaseConfigured } from "@/lib/supabase/server";
export async function GET() {
if (!isSupabaseConfigured()) return NextResponse.json({ sessions: [] });
const supabase = await createClient();
const { data: { user } } = await supabase.auth.getUser();
if (!user) return NextResponse.json({ error: "unauthenticated" }, { status: 401 });
const { data, error } = await supabase
.from("chat_sessions")
.select("id, title, summary, context_doc_id, context_page_id, message_count, total_cost_usd, updated_at, is_public")
.eq("archived", false)
.order("updated_at", { ascending: false })
.limit(50);
if (error) return NextResponse.json({ error: error.message }, { status: 500 });
return NextResponse.json({ sessions: data });
}
export async function POST(request: Request) {
if (!isSupabaseConfigured()) return NextResponse.json({ error: "auth_disabled" }, { status: 503 });
const supabase = await createClient();
const { data: { user } } = await supabase.auth.getUser();
if (!user) return NextResponse.json({ error: "unauthenticated" }, { status: 401 });
const body = (await request.json().catch(() => ({}))) as {
title?: string; context_doc_id?: string; context_page_id?: string;
};
const { data, error } = await supabase
.from("chat_sessions")
.insert({
user_id: user.id,
title: body.title ?? null,
context_doc_id: body.context_doc_id ?? null,
context_page_id: body.context_page_id ?? null,
})
.select("id, title, context_doc_id, context_page_id, created_at")
.single();
if (error) return NextResponse.json({ error: error.message }, { status: 500 });
return NextResponse.json({ session: data });
}