Some checks failed
Build & Push Docker / build (push) Has been cancelled
- Block model: nové volitelné pole 'url' (Optional[str]) - Frontend: URL input v modálu pro přidání/editaci bloku - PDF generátor: c.linkURL() – celý blok je klikatelný odkaz - sample.json: ukázkový blok s URL - index.html: dokumentace URL pole - .github/copilot-instructions.md: přidány Copilot instrukce
49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
"""Pydantic v2 models for Scenar Creator v4."""
|
|
|
|
import uuid
|
|
from datetime import date as date_type, timedelta
|
|
from typing import List, Optional
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class Block(BaseModel):
|
|
id: str = Field(default_factory=lambda: str(uuid.uuid4()))
|
|
date: str # "YYYY-MM-DD"
|
|
start: str # "HH:MM" (can be > 24:00 for overnight continuation)
|
|
end: str # "HH:MM" (if end < start → overnight block)
|
|
title: str
|
|
type_id: str
|
|
responsible: Optional[str] = None
|
|
notes: Optional[str] = None
|
|
url: Optional[str] = None # clickable link in PDF export
|
|
series_id: Optional[str] = None # shared across blocks added via "add to all days"
|
|
|
|
|
|
class ProgramType(BaseModel):
|
|
id: str
|
|
name: str
|
|
color: str # "#RRGGBB"
|
|
|
|
|
|
class EventInfo(BaseModel):
|
|
title: str
|
|
subtitle: Optional[str] = None
|
|
# Multi-day: date_from → date_to (inclusive). Backward compat: date = date_from.
|
|
date: Optional[str] = None # legacy / backward compat
|
|
date_from: Optional[str] = None
|
|
date_to: Optional[str] = None
|
|
location: Optional[str] = None
|
|
|
|
|
|
class ScenarioDocument(BaseModel):
|
|
version: str = "1.0"
|
|
event: EventInfo
|
|
program_types: List[ProgramType]
|
|
blocks: List[Block]
|
|
|
|
def get_sorted_dates(self) -> List[str]:
|
|
"""Return sorted list of unique block dates."""
|
|
dates = sorted(set(b.date for b in self.blocks))
|
|
return dates
|