File size: 1,253 Bytes
a572854
4c2a557
a572854
4c2a557
a572854
 
 
 
 
4c2a557
 
a572854
 
 
4c2a557
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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 }
    );
  }
}