ODF/app/schemas.py

133 lines
3.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""ODF 光纤配线单元管理系统 - Pydantic 请求/响应模型定义。
定义了 API 接口使用的数据验证和序列化模型。
"""
from datetime import datetime
from typing import Optional
from pydantic import BaseModel, Field
from app.models import PortType, PortStatus
# ========== 端口相关 ==========
class PortCreate(BaseModel):
"""创建端口请求模型。"""
port_number: int = Field(..., ge=1, description="端口编号")
port_type: PortType = PortType.LC
label: str = ""
class PortResponse(BaseModel):
"""端口响应模型。"""
port_id: str
unit_id: str
port_number: int
port_type: PortType
status: PortStatus
label: str
model_config = {"from_attributes": True}
# ========== 配线单元相关 ==========
class UnitCreate(BaseModel):
"""创建配线单元请求模型。"""
unit_number: int = Field(..., ge=1, description="单元编号")
unit_name: str = ""
position: str = ""
port_count: int = Field(12, ge=1, le=48, description="端口数量")
port_type: PortType = PortType.LC
class UnitResponse(BaseModel):
"""配线单元响应模型。"""
unit_id: str
rack_id: str
unit_number: int
unit_name: str
position: str
ports: list[PortResponse]
model_config = {"from_attributes": True}
# ========== 机架相关 ==========
class RackCreate(BaseModel):
"""创建机架请求模型。"""
rack_name: str = Field(..., min_length=1, max_length=64, description="机架名称/编号")
location: str = ""
class RackResponse(BaseModel):
"""机架响应模型。"""
rack_id: str
rack_name: str
location: str
units: list[UnitResponse]
model_config = {"from_attributes": True}
class RackListResponse(BaseModel):
"""机架列表响应模型(不包含嵌套单元)。"""
rack_id: str
rack_name: str
location: str
unit_count: int = 0
model_config = {"from_attributes": True}
# ========== 连接相关 ==========
class ConnectionCreate(BaseModel):
"""创建跳接连接请求模型。"""
port_a_id: str = Field(..., description="起始端口 IDA端")
port_b_id: str = Field(..., description="终止端口 IDB端")
fiber_length: float = Field(0.0, ge=0, description="光纤长度(米)")
remark: str = ""
class ConnectionResponse(BaseModel):
"""跳接连接响应模型。"""
connection_id: str
port_a_id: str
port_b_id: str
fiber_length: float
create_time: str
remark: str
model_config = {"from_attributes": True}
class PortDetail(BaseModel):
"""端口详细信息(含所属单元和机架)。"""
port_id: str
port_number: int
port_type: PortType
status: PortStatus
label: str
unit_id: str
unit_number: int
rack_id: str
rack_name: str
class FreePortResponse(BaseModel):
"""空闲端口列表响应元素。"""
port_id: str
port_number: int
port_type: PortType
label: str
unit_id: str
unit_number: int
rack_id: str
rack_name: str
model_config = {"from_attributes": True}