Coverage for src/data_api/models/calendars.py: 100%
17 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"""Shared published campus calendar models."""
3from typing import Optional
5from pydantic import BaseModel, Field, HttpUrl
8class Calendar(BaseModel):
9 id: str = Field(..., description="行事曆 id,例如 academic、library-main")
10 name: Optional[str] = Field(None, description="行事曆名稱")
11 description: Optional[str] = Field(None, description="行事曆說明")
12 timezone: Optional[str] = Field(None, description="時區")
13 category: Optional[str] = Field(None, description="行事曆分類,例如 library")
14 source: Optional[str] = Field(None, description="資料來源,例如 NTHU Library")
15 url: Optional[HttpUrl] = Field(None, description="來源行事曆網址")
18class CalendarEvent(BaseModel):
19 id: str = Field(..., description="事件 id")
20 title: str = Field(..., description="事件標題")
21 description: Optional[str] = Field(None, description="事件說明")
22 start: str = Field(
23 ..., description="開始時間;全天事件為日期 (YYYY-MM-DD),否則為 ISO 8601 當地時間"
24 )
25 end: str = Field(..., description="結束時間;結束日期或時間不包含在內 (iCal 慣例)")
26 all_day: bool = Field(..., description="是否為全天事件")