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
« prev ^ index » next coverage.py v7.16.2, created at 2026-11-13 19:28 +0000
1"""
2Shared dining models.
4Pydantic models for dining request/response validation.
5"""
7from typing import Annotated, Optional
9from pydantic import BaseModel, BeforeValidator, Field, HttpUrl
11from data_api.domain.dining.enums import DiningBuildingName, DiningScheduleName
12from data_api.utils.schema import url_corrector
14__all__ = [
15 "DiningBuildingName",
16 "DiningScheduleName",
17 "DiningRestaurant",
18 "DiningBuilding",
19]
22class DiningRestaurant(BaseModel):
23 """Restaurant information."""
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="餐廳營業時間")
35class DiningBuilding(BaseModel):
36 """Building with restaurants."""
38 building: str = Field(..., description="建築名稱")
39 restaurants: list[DiningRestaurant] = Field(..., description="餐廳資料")