feat:新增大屏存取发布接口

This commit is contained in:
2026-10-11 08:27:30 -07:00
parent dadd797391
commit afc07ba695
23 changed files with 2672 additions and 36 deletions
+54
View File
@@ -0,0 +1,54 @@
"""匿名接口,统一放在 /api/public 下,一眼能看出哪些不鉴权"""
from typing import Any
from fastapi import APIRouter
from fastapi.responses import FileResponse
from app.api.screens import Service
from app.common.response import ApiResponse, success_response
from app.core.exceptions import BizException
from app.schemas.saved_screen import PublicScreen
from app.services.screens import public_page
router = APIRouter(prefix="/public", tags=["Public"])
@router.get("/screens/{share_id}")
async def get_public_screen(
share_id: str, service: Service
) -> ApiResponse[PublicScreen]:
"""线上版本:返回发布快照,不是草稿;已下线、已删除、不存在都是 404"""
summary, snapshot = await service.get_live(share_id)
return success_response(
PublicScreen(
name=summary.name,
page=public_page(snapshot.page),
version=snapshot.version,
published_at=snapshot.published_at,
)
)
@router.get("/screens/{share_id}/datasources/{datasource_id}")
async def fetch_public_datasource(
share_id: str, datasource_id: str, service: Service
) -> ApiResponse[dict[str, Any] | list[Any]]:
"""线上取数:地址取自已发布快照里的数据源配置,前端只传 ID"""
return success_response(
await service.fetch_live_datasource(share_id, datasource_id)
)
@router.get("/thumbnails/{thumbnail_id}")
async def get_thumbnail(thumbnail_id: str, service: Service) -> FileResponse:
opened = service.open_thumbnail(thumbnail_id)
if opened is None:
raise BizException(404, "封面不存在")
path, media_type = opened
# 每次上传都换新 ID,内容永远不变,可以放心长期缓存
return FileResponse(
path,
media_type=media_type,
headers={"Cache-Control": "public, max-age=31536000, immutable"},
)