Coverage for src/data_api/api/routers/newsletters.py: 100%
17 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-11-13 19:28 +0000
« prev ^ index » next coverage.py v7.16.2, created at 2026-11-13 19:28 +0000
1"""Newsletters router."""
3from fastapi import APIRouter, Query, Response
5from data_api.api.schemas import newsletters as schemas
6from data_api.api.schemas.responses import SNAPSHOT_RESPONSES
7from data_api.runtime import get_runtime
9router = APIRouter(responses=SNAPSHOT_RESPONSES)
12@router.get("", response_model=list[schemas.NewsletterInfo], operation_id="getAllNewsletters")
13async def get_all_newsletters(
14 response: Response,
15 name: str = Query(None, description="電子報名稱。請透過 `/newsletters/sources` 取得來源列表。"),
16 title: str = Query(None, description="電子報文章標題關鍵字"),
17 fuzzy: bool = Query(True, description="是否進行模糊搜尋,若不啟用則名稱必須完全符合"),
18):
19 """
20 取得所有的電子報。
21 資料來源:[國立清華大學電子報系統](https://newsletter.cc.nthu.edu.tw/nthu-list/index.php/zh/)
22 """
23 commit_hash, data = await get_runtime().newsletters.get_newsletters(
24 name=name, title=title, fuzzy=fuzzy
25 )
26 if commit_hash is not None:
27 response.headers["X-Data-Commit-Hash"] = commit_hash
28 return data
31@router.get(
32 "/sources",
33 response_model=list[schemas.NewsletterSource],
34 operation_id="getNewsletterSources",
35)
36async def get_newsletter_sources(
37 response: Response,
38 name: str = Query(None, description="電子報名稱(完全符合)"),
39):
40 """
41 取得電子報來源列表(不包含文章)。
42 資料來源:[國立清華大學電子報系統](https://newsletter.cc.nthu.edu.tw/nthu-list/index.php/zh/)
43 """
44 commit_hash, data = await get_runtime().newsletters.get_newsletter_sources(name=name)
45 if commit_hash is not None:
46 response.headers["X-Data-Commit-Hash"] = commit_hash
47 return data