from datetime import date, datetime from typing import Optional from pydantic import BaseModel, EmailStr class TenantBase(BaseModel): code: str prefix: str = "" name: str name_eng: Optional[str] = None tax_id: Optional[str] = None domain: str address: Optional[str] = None tel: Optional[str] = None contact: Optional[str] = None contact_mobile: Optional[str] = None contact_email: Optional[str] = None keycloak_realm: Optional[str] = None plan_code: Optional[str] = None employee_limit: Optional[int] = None trial_start_date: Optional[date] = None trial_end_date: Optional[date] = None quota_per_user: int = 20 total_quota: int = 200 is_manager: bool = False is_active: bool = True status: str = "trial" note: Optional[str] = None class TenantCreate(TenantBase): pass class TenantUpdate(BaseModel): name: Optional[str] = None name_eng: Optional[str] = None tax_id: Optional[str] = None domain: Optional[str] = None address: Optional[str] = None tel: Optional[str] = None contact: Optional[str] = None contact_mobile: Optional[str] = None contact_email: Optional[str] = None plan_code: Optional[str] = None employee_limit: Optional[int] = None trial_start_date: Optional[date] = None trial_end_date: Optional[date] = None quota_per_user: Optional[int] = None total_quota: Optional[int] = None is_active: Optional[bool] = None status: Optional[str] = None note: Optional[str] = None class TenantStatusLight(BaseModel): 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 class TenantResponse(TenantBase): id: int created_at: datetime updated_at: datetime lights: Optional[TenantStatusLight] = None class Config: from_attributes = True