from datetime import datetime from typing import Optional, List from pydantic import BaseModel class ScheduleResponse(BaseModel): id: int name: str cron_timer: str status: str last_run_at: Optional[datetime] = None next_run_at: Optional[datetime] = None last_status: Optional[str] = None recorded_at: datetime class Config: from_attributes = True class ScheduleUpdate(BaseModel): cron_timer: str class ScheduleLogResponse(BaseModel): id: int schedule_id: int schedule_name: str started_at: datetime ended_at: Optional[datetime] = None status: str class Config: from_attributes = True class TenantResultItem(BaseModel): tenant_id: int tenant_name: Optional[str] = None traefik_status: Optional[bool] = None sso_result: Optional[bool] = None mailbox_result: Optional[bool] = None nc_result: Optional[bool] = None office_result: Optional[bool] = None quota_usage: Optional[float] = None fail_reason: Optional[str] = None class Config: from_attributes = True class AccountResultItem(BaseModel): account_id: int sso_account: Optional[str] = None sso_result: Optional[bool] = None mailbox_result: Optional[bool] = None nc_result: Optional[bool] = None nc_mail_result: Optional[bool] = None quota_usage: Optional[float] = None fail_reason: Optional[str] = None class Config: from_attributes = True class LogResultsResponse(BaseModel): log_id: int schedule_id: int tenant_results: List[TenantResultItem] = [] account_results: List[AccountResultItem] = []