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
« prev ^ index » next coverage.py v7.16.2, created at 2026-11-13 19:28 +0000
1"""Directory router."""
3from typing import Annotated
5from fastapi import APIRouter, Query, Response
7from data_api.api.schemas.departments import Department
8from data_api.api.schemas.responses import SNAPSHOT_RESPONSES
9from data_api.runtime import get_runtime
11router = APIRouter(responses=SNAPSHOT_RESPONSES)
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