Coverage for src/data_api/api/routers/directory.py: 100%

12 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-11-13 19:28 +0000

1"""Directory router.""" 

2 

3from typing import Annotated 

4 

5from fastapi import APIRouter, Query, Response 

6 

7from data_api.api.schemas.departments import Department 

8from data_api.api.schemas.responses import SNAPSHOT_RESPONSES 

9from data_api.runtime import get_runtime 

10 

11router = APIRouter(responses=SNAPSHOT_RESPONSES) 

12 

13 

14@router.get("", response_model=list[Department], operation_id="getDirectory") 

15async def get_directory( 

16 response: Response, 

17 query: Annotated[ 

18 str | None, Query(description="搜尋部門名稱、人員姓名或職稱;未提供或為空時回傳全部") 

19 ] = None, 

20 fuzzy: Annotated[bool, Query(description="是否進行模糊搜尋,若不啟用則必須完全符合")] = True, 

21): 

22 """ 

23 查詢清華通訊錄。預設模糊搜尋,fuzzy=false 時須完全符合。 

24 部門名稱符合時回傳完整部門資料; 

25 僅人員姓名或職稱符合時,保留部門資料並只回傳符合的人員。 

26 無結果時回傳空陣列。 

27 資料來源:[清華通訊錄](https://tel.net.nthu.edu.tw/nthusearch/) 

28 """ 

29 commit_hash, data = await get_runtime().departments.get_directory(query=query, fuzzy=fuzzy) 

30 if commit_hash is not None: 

31 response.headers["X-Data-Commit-Hash"] = commit_hash 

32 return data