feat: add theme preset system with admin CRUD, public listing, and user theme settings
- Add ChromaticColor (17 Tailwind colors) and NeutralColor (5 grays) enums - Add ThemePreset table with flat color columns and unique name constraint - Add admin theme endpoints (CRUD + set default) at /api/v1/admin/theme - Add public theme listing at /api/v1/site/themes - Add user theme settings (PATCH /theme) with color snapshot on User model - User.color_* columns store per-user overrides; fallback to default preset then builtin - Initialize default theme preset in migration - Remove legacy defaultTheme/themes settings Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,10 @@
|
||||
from fastapi import APIRouter
|
||||
|
||||
from middleware.dependencies import SessionDep
|
||||
from sqlmodels import ResponseBase, Setting, SettingsType, SiteConfigResponse
|
||||
from sqlmodels import (
|
||||
ResponseBase, Setting, SettingsType, SiteConfigResponse,
|
||||
ThemePreset, ThemePresetResponse, ThemePresetListResponse,
|
||||
)
|
||||
from sqlmodels.setting import CaptchaType
|
||||
from utils import http_exceptions
|
||||
|
||||
@@ -41,6 +44,22 @@ def router_site_captcha():
|
||||
"""
|
||||
http_exceptions.raise_not_implemented()
|
||||
|
||||
@site_router.get(
|
||||
path='/themes',
|
||||
summary='获取主题预设列表',
|
||||
)
|
||||
async def router_site_themes(session: SessionDep) -> ThemePresetListResponse:
|
||||
"""
|
||||
获取所有主题预设列表
|
||||
|
||||
无需认证,前端初始化时调用。
|
||||
"""
|
||||
presets: list[ThemePreset] = await ThemePreset.get(session, fetch_mode="all")
|
||||
return ThemePresetListResponse(
|
||||
themes=[ThemePresetResponse.from_preset(p) for p in presets]
|
||||
)
|
||||
|
||||
|
||||
@site_router.get(
|
||||
path='/config',
|
||||
summary='站点全局配置',
|
||||
|
||||
Reference in New Issue
Block a user