Spaces:
Sleeping
Sleeping
| import { query } from "@/lib/db/client"; | |
| import { NextResponse } from "next/server"; | |
| import { verifyApiToken } from "@/lib/auth"; | |
| export async function GET(req: Request) { | |
| const authError = verifyApiToken(req); | |
| if (authError) { | |
| return authError; | |
| } | |
| try { | |
| const users = await query("SELECT * FROM users ORDER BY id"); | |
| const modelPrices = await query("SELECT * FROM model_prices ORDER BY id"); | |
| const records = await query("SELECT * FROM user_usage_records ORDER BY id"); | |
| const exportData = { | |
| version: "1.0", | |
| timestamp: new Date().toISOString(), | |
| data: { | |
| users: users.rows, | |
| model_prices: modelPrices.rows, | |
| user_usage_records: records.rows, | |
| }, | |
| }; | |
| const headers = new Headers(); | |
| headers.set("Content-Type", "application/json"); | |
| headers.set( | |
| "Content-Disposition", | |
| `attachment; filename=openwebui_monitor_backup_${ | |
| new Date().toISOString().split("T")[0] | |
| }.json` | |
| ); | |
| return new Response(JSON.stringify(exportData, null, 2), { | |
| headers, | |
| }); | |
| } catch (error) { | |
| console.error("Fail to export database:", error); | |
| return NextResponse.json( | |
| { error: "Fail to export database" }, | |
| { status: 500 } | |
| ); | |
| } | |
| } | |