from typing import List, Optional from uuid import UUID from datetime import date from pydantic import BaseModel class TagBase(BaseModel): name: str class TagCreate(TagBase): pass class TagOut(TagBase): id: UUID class Config: orm_mode = True class TagIdPayload(BaseModel): tag_id: UUID class ItemBase(BaseModel): name: str class ItemCreate(ItemBase): tag_ids: List[UUID] = [] class ItemOut(ItemBase): id: UUID tags: List[TagOut] = [] class Config: orm_mode = True class TripBase(BaseModel): name: Optional[str] = None start_date: Optional[date] = None end_date: Optional[date] = None class TripCreate(TripBase): selected_tag_ids: List[UUID] = [] marked_tag_ids: List[UUID] = [] class TripUpdate(BaseModel): name: Optional[str] = None start_date: Optional[date] = None end_date: Optional[date] = None selected_tag_ids: Optional[List[UUID]] = None marked_tag_ids: Optional[List[UUID]] = None class TripOut(TripBase): id: UUID selected_tags: List[TagOut] marked_tags: List[TagOut] class Config: orm_mode = True class TripItemOut(BaseModel): id: UUID trip_id: UUID item_id: UUID name_calculated: str checked: bool tag: Optional[TagOut] = None item: Optional[ItemOut] = None class Config: orm_mode = True class TripRegenerationResult(BaseModel): trip_id: UUID deleted_checked_trip_item_ids: List[UUID] = [] created_trip_item_ids: List[UUID] = []