from datetime import datetime from typing import Optional from pydantic import BaseModel from app.schemas.tag import TagRead class ObjectCreate(BaseModel): name: str description: Optional[str] = None server_ip: Optional[str] = None # Object DB sync settings db_host: Optional[str] = None db_port: int = 5432 db_name: Optional[str] = None db_user: Optional[str] = None db_password: Optional[str] = None # plaintext, encrypted on write db_table: Optional[str] = None db_col_ip: Optional[str] = None db_col_type: Optional[str] = None db_via_tunnel: bool = False # SSH defaults ssh_user: Optional[str] = None ssh_password: Optional[str] = None # plaintext, encrypted on write ssh_port: int = 22 notes: Optional[str] = None is_active: bool = True tag_ids: list[int] = [] class ObjectUpdate(BaseModel): name: Optional[str] = None description: Optional[str] = None server_ip: Optional[str] = None db_host: Optional[str] = None db_port: Optional[int] = None db_name: Optional[str] = None db_user: Optional[str] = None db_password: Optional[str] = None db_table: Optional[str] = None db_col_ip: Optional[str] = None db_col_type: Optional[str] = None db_via_tunnel: Optional[bool] = None ssh_user: Optional[str] = None ssh_password: Optional[str] = None ssh_port: Optional[int] = None notes: Optional[str] = None is_active: Optional[bool] = None tag_ids: Optional[list[int]] = None class ObjectRead(BaseModel): id: int name: str description: Optional[str] = None server_ip: Optional[str] = None db_host: Optional[str] = None db_port: int db_name: Optional[str] = None db_user: Optional[str] = None db_table: Optional[str] = None db_col_ip: Optional[str] = None db_col_type: Optional[str] = None db_via_tunnel: bool ssh_user: Optional[str] = None ssh_port: int notes: Optional[str] = None is_active: bool created_at: datetime updated_at: datetime tags: list[TagRead] = [] model_config = {"from_attributes": True} class SyncResult(BaseModel): created: int updated: int skipped: int errors: list[str] = []