from __future__ import annotations from datetime import datetime from typing import Any, Optional from pydantic import BaseModel, ConfigDict, Field class FavoriteGroupCreate(BaseModel): name: str = Field(..., min_length=1, max_length=100) sort_order: int = Field(0, ge=0) color: Optional[str] = Field(None, max_length=20) icon_key: Optional[str] = Field(None, max_length=100) class FavoriteGroupUpdate(BaseModel): name: Optional[str] = Field(None, min_length=1, max_length=100) sort_order: Optional[int] = Field(None, ge=0) color: Optional[str] = Field(None, max_length=20) icon_key: Optional[str] = Field(None, max_length=100) class FavoriteGroupOut(BaseModel): id: int name: str sort_order: int color: Optional[str] = None icon_key: Optional[str] = None created_at: datetime updated_at: datetime model_config = ConfigDict(from_attributes=True) class FavoriteDockerContainerOut(BaseModel): host_id: str host_name: str host_ip: str host_docker_status: Optional[str] = None container_id: str name: str image: Optional[str] = None state: str status: Optional[str] = None health: Optional[str] = None ports: Optional[dict[str, Any]] = None compose_project: Optional[str] = None class FavoriteContainerCreate(BaseModel): host_id: str container_id: str group_id: Optional[int] = None class FavoriteContainerOut(BaseModel): id: int group_id: Optional[int] = None created_at: datetime docker_container: FavoriteDockerContainerOut class FavoriteContainersListResponse(BaseModel): containers: list[FavoriteContainerOut] class FavoriteGroupsListResponse(BaseModel): groups: list[FavoriteGroupOut]