| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- import { Hono } from "hono";
- import debug from "debug";
- import type {
- ThemeSettings,
- } from "../client/share/types.ts";
- import {
- ThemeMode,
- FontSize,
- CompactMode,
- } from "../client/share/types.ts";
- import type { Variables, WithAuth } from "./middlewares.ts";
- const log = {
- api: debug("api:sys"),
- };
- // 创建主题设置路由
- export function createThemeRoutes(withAuth: WithAuth) {
- const themeRoutes = new Hono<{ Variables: Variables }>();
- // 获取当前主题设置
- themeRoutes.get("/", withAuth, async (c) => {
- try {
- const apiClient = c.get('apiClient');
- const user = c.get('user');
- if (!user) {
- return c.json({ error: "未授权访问" }, 401);
- }
- // 获取用户的主题设置
- let themeSettings = await apiClient.database
- .table("theme_settings")
- .where("user_id", user.id)
- .first();
- // 如果用户没有主题设置,则创建默认设置
- if (!themeSettings) {
- const defaultSettings = {
- theme_mode: ThemeMode.LIGHT,
- primary_color: '#1890ff',
- font_size: FontSize.MEDIUM,
- is_compact: CompactMode.NORMAL
- };
- const [id] = await apiClient.database.table("theme_settings").insert({
- user_id: user.id,
- settings: defaultSettings,
- created_at: apiClient.database.fn.now(),
- updated_at: apiClient.database.fn.now(),
- });
- themeSettings = await apiClient.database
- .table("theme_settings")
- .where("id", id)
- .first();
- }
- return c.json({
- message: "获取主题设置成功",
- data: themeSettings?.settings,
- });
- } catch (error) {
- log.api("获取主题设置失败:", error);
- return c.json({ error: "获取主题设置失败" }, 500);
- }
- });
- // 更新主题设置
- themeRoutes.put("/", withAuth, async (c) => {
- try {
- const user = c.get('user');
- const apiClient = c.get('apiClient');
- if (!user) {
- return c.json({ error: "未授权访问" }, 401);
- }
- const themeData = (await c.req.json()) as Partial<ThemeSettings>;
- // 检查用户是否已有主题设置
- const existingTheme = await apiClient.database
- .table("theme_settings")
- .where("user_id", user.id)
- .first();
- if (existingTheme) {
- // 更新现有设置
- const currentSettings = existingTheme.settings || {};
- const updatedSettings = {
- ...currentSettings,
- ...themeData
- };
- await apiClient.database
- .table("theme_settings")
- .where("user_id", user.id)
- .update({
- settings: JSON.stringify(updatedSettings),
- updated_at: apiClient.database.fn.now(),
- });
- } else {
- // 创建新设置
- const defaultSettings = {
- theme_mode: ThemeMode.LIGHT,
- primary_color: '#1890ff',
- font_size: FontSize.MEDIUM,
- is_compact: CompactMode.NORMAL
- };
- const updatedSettings = {
- ...defaultSettings,
- ...themeData
- };
- await apiClient.database.table("theme_settings").insert({
- user_id: user.id,
- settings: updatedSettings,
- created_at: apiClient.database.fn.now(),
- updated_at: apiClient.database.fn.now(),
- });
- }
- // 获取更新后的主题设置
- const updatedTheme = await apiClient.database
- .table("theme_settings")
- .where("user_id", user.id)
- .first();
- return c.json({
- message: "主题设置更新成功",
- data: updatedTheme,
- });
- } catch (error) {
- log.api("更新主题设置失败:", error);
- return c.json({ error: "更新主题设置失败" }, 500);
- }
- });
- // 重置主题设置为默认值
- themeRoutes.post("/reset", withAuth, async (c) => {
- try {
- const user = c.get('user');
- const apiClient = c.get('apiClient');
- if (!user) {
- return c.json({ error: "未授权访问" }, 401);
- }
- // 默认主题设置
- const defaultSettings = {
- theme_mode: ThemeMode.LIGHT,
- primary_color: '#1890ff',
- font_size: FontSize.MEDIUM,
- is_compact: CompactMode.NORMAL
- };
- // 更新用户的主题设置
- await apiClient.database
- .table("theme_settings")
- .where("user_id", user.id)
- .update({
- settings: JSON.stringify(defaultSettings),
- updated_at: apiClient.database.fn.now(),
- });
- // 获取更新后的主题设置
- const updatedTheme = await apiClient.database
- .table("theme_settings")
- .where("user_id", user.id)
- .first();
- return c.json({
- message: "主题设置已重置为默认值",
- data: updatedTheme,
- });
- } catch (error) {
- log.api("重置主题设置失败:", error);
- return c.json({ error: "重置主题设置失败" }, 500);
- }
- });
- return themeRoutes;
- }
|