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

1"""Newsletters router.""" 

2 

3from fastapi import APIRouter, Query, Response 

4 

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 

8 

9router = APIRouter(responses=SNAPSHOT_RESPONSES) 

10 

11 

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 

29 

30 

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