Files
vmis/backend/app/schemas/tenant.py
VMIS Developer a3d5dd2e67 fix: make prefix required in TenantCreate schema and add frontend validation
prefix was optional with empty default, allowing accounts to be created
with broken account_code (no prefix). Root fix: enforce prefix at input
level rather than patching data after the fact.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 21:45:45 +08:00

73 lines
2.0 KiB
Python

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):
prefix: Optional[str] = None
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