49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
"use server";
|
|||
|
|
|
||
|
|
import { NextResponse } from "next/server";
|
||
|
|
import { createDefaultTableSnapshot } from "@/lib/online-table";
|
||
|
|
import { createSupabaseRouteClient } from "@/lib/supabase/server";
|
||
|
|
import type { DocumentTableSnapshot, TableSchema } from "@/types/online-table";
|
||
|
|
|
||
|
|
const fallbackSchema: TableSchema = {
|
||
|
|
columns: [],
|
||
|
|
frozenRowCount: 0,
|
||
|
|
frozenColCount: 0,
|
||
|
|
};
|
||
|
|
|
||
|
|
export async function POST(request: Request) {
|
||
|
|
const url = new URL(request.url);
|
||
|
|
const gridKey = url.searchParams.get("gridKey");
|
||
|
|
|
||
|
|
if (!gridKey) {
|
||
|
|
return NextResponse.json({ code: 400, msg: "gridKey 参数缺失" }, { status: 400 });
|
||
|
|
}
|
||
|
|
|
||
|
|
const supabase = await createSupabaseRouteClient();
|
||
|
|
const { data, error } = await supabase
|
||
|
|
.from("document_tables")
|
||
|
|
.select("schema,snapshot")
|
||
|
|
.eq("grid_key", gridKey)
|
||
|
|
.single();
|
||
|
|
|
||
|
|
if (error || !data) {
|
||
|
|
return NextResponse.json({ code: 404, msg: "未查询到相关数据" }, { status: 404 });
|
||
|
|
}
|
||
|
|
|
||
|
|
const snapshot = (data.snapshot as DocumentTableSnapshot | null) ?? null;
|
||
|
|
const schema = (data.schema as TableSchema | null) ?? fallbackSchema;
|
||
|
|
|
||
|
|
let payload: unknown[] = [];
|
||
|
|
if (snapshot?.luckysheet && Array.isArray(snapshot.luckysheet)) {
|
||
|
|
payload = snapshot.luckysheet;
|
||
|
|
} else {
|
||
|
|
const defaultSnapshot = createDefaultTableSnapshot(schema);
|
||
|
|
payload = defaultSnapshot.luckysheet ?? [];
|
||
|
|
}
|
||
|
|
|
||
|
|
const body = JSON.stringify(payload);
|
||
|
|
return new NextResponse(body, {
|
||
|
|
headers: { "Content-Type": "text/plain; charset=utf-8" },
|
||
|
|
});
|
||
|
|
}
|