feat:新增演示
This commit is contained in:
+45
-3
@@ -2,17 +2,59 @@
|
||||
|
||||
from typing import Annotated, Any
|
||||
|
||||
from fastapi import APIRouter, Query
|
||||
from fastapi import APIRouter, Query, Response
|
||||
from fastapi.responses import FileResponse
|
||||
|
||||
from app.api.screens import Service
|
||||
from app.api.screens import Service, thumbnail_url
|
||||
from app.common.response import ApiResponse, success_response
|
||||
from app.config import settings
|
||||
from app.core.exceptions import BizException
|
||||
from app.schemas.saved_screen import PublicScreen
|
||||
from app.schemas.saved_screen import (
|
||||
DemoScreen,
|
||||
DemoScreenList,
|
||||
PublicScreen,
|
||||
PublishBrief,
|
||||
)
|
||||
from app.services.screens import LIVE_VARS_MAX_CHARS, public_page
|
||||
|
||||
router = APIRouter(prefix="/public", tags=["Public"])
|
||||
|
||||
# 演示数据的条数上限和浏览器缓存时长(秒)
|
||||
DEMO_LIMIT = 20
|
||||
DEMO_CACHE_SECONDS = 60
|
||||
|
||||
|
||||
@router.get("/demo/screens")
|
||||
async def list_demo_screens(
|
||||
service: Service, response: Response
|
||||
) -> ApiResponse[DemoScreenList]:
|
||||
"""未登录演示:演示账号(DEMO_OWNER_ID)下的大屏,页面去掉数据源 headers;没配账号时为空"""
|
||||
owner_id = settings.demo_owner_id
|
||||
if owner_id is None:
|
||||
return success_response(DemoScreenList(items=[]))
|
||||
records = await service.list_demo(owner_id, DEMO_LIMIT)
|
||||
response.headers["Cache-Control"] = f"public, max-age={DEMO_CACHE_SECONDS}"
|
||||
return success_response(
|
||||
DemoScreenList(
|
||||
items=[
|
||||
DemoScreen(
|
||||
screen_id=record.screen_id,
|
||||
name=record.name,
|
||||
page=public_page(record.page),
|
||||
thumbnail_url=thumbnail_url(record.thumbnail),
|
||||
revision=record.revision,
|
||||
updated_at=record.updated_at,
|
||||
publish=None
|
||||
if record.publish is None
|
||||
else PublishBrief.model_validate(
|
||||
record.publish.model_dump(exclude={"revision"})
|
||||
),
|
||||
)
|
||||
for record in records
|
||||
]
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@router.get("/screens/{share_id}")
|
||||
async def get_public_screen(
|
||||
|
||||
Reference in New Issue
Block a user