Coverage for src/data_api/models/dining.py: 100%

15 statements  

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

1""" 

2Shared dining models. 

3 

4Pydantic models for dining request/response validation. 

5""" 

6 

7from typing import Annotated, Optional 

8 

9from pydantic import BaseModel, BeforeValidator, Field, HttpUrl 

10 

11from data_api.domain.dining.enums import DiningBuildingName, DiningScheduleName 

12from data_api.utils.schema import url_corrector 

13 

14__all__ = [ 

15 "DiningBuildingName", 

16 "DiningScheduleName", 

17 "DiningRestaurant", 

18 "DiningBuilding", 

19] 

20 

21 

22class DiningRestaurant(BaseModel): 

23 """Restaurant information.""" 

24 

25 area: str = Field(..., description="餐廳所在建築") 

26 image: Optional[Annotated[HttpUrl, BeforeValidator(url_corrector)]] = Field( 

27 None, description="餐廳圖片" 

28 ) 

29 name: str = Field(..., description="餐廳名稱") 

30 note: str = Field(..., description="餐廳備註") 

31 phone: str = Field(..., description="餐廳電話") 

32 schedule: dict = Field(..., description="餐廳營業時間") 

33 

34 

35class DiningBuilding(BaseModel): 

36 """Building with restaurants.""" 

37 

38 building: str = Field(..., description="建築名稱") 

39 restaurants: list[DiningRestaurant] = Field(..., description="餐廳資料")