feat(crud): add NetObjectCreate, NetObjectUpdate, RelationCreate, RelationUpdate schemas
CI / basic-check (push) Has been cancelled

This commit is contained in:
2026-08-06 16:08:26 +00:00
parent fd93758567
commit 45fb390cb7
+70
View File
@@ -36,6 +36,10 @@ class HealthResponse(BaseModel):
checks: Dict[str, HealthCheck] = Field(default_factory=dict) checks: Dict[str, HealthCheck] = Field(default_factory=dict)
# ---------------------------------------------------------------------------
# NetObject
# ---------------------------------------------------------------------------
class NetObject(BaseModel): class NetObject(BaseModel):
id: str id: str
name: str name: str
@@ -51,6 +55,32 @@ class NetObject(BaseModel):
updated_at: datetime updated_at: datetime
class NetObjectCreate(BaseModel):
name: str
type: ObjectType
parent_id: Optional[str] = None
status: ObjectStatus = 'active'
vendor: Optional[str] = None
model: Optional[str] = None
serial: Optional[str] = None
notes: Optional[str] = None
class NetObjectUpdate(BaseModel):
name: Optional[str] = None
type: Optional[ObjectType] = None
parent_id: Optional[str] = None
status: Optional[ObjectStatus] = None
vendor: Optional[str] = None
model: Optional[str] = None
serial: Optional[str] = None
notes: Optional[str] = None
# ---------------------------------------------------------------------------
# IPAddress / Subnet / Link (read-only for now)
# ---------------------------------------------------------------------------
class IPAddress(BaseModel): class IPAddress(BaseModel):
id: str id: str
address: str address: str
@@ -83,6 +113,10 @@ class Link(BaseModel):
source: Literal['manual', 'snmp', 'lldp', 'arp', 'import', 'inference'] source: Literal['manual', 'snmp', 'lldp', 'arp', 'import', 'inference']
# ---------------------------------------------------------------------------
# Relation
# ---------------------------------------------------------------------------
class Relation(BaseModel): class Relation(BaseModel):
id: str id: str
type: RelationType type: RelationType
@@ -98,6 +132,34 @@ class Relation(BaseModel):
updated_at: datetime updated_at: datetime
class RelationCreate(BaseModel):
type: RelationType
layer: RelationLayer
source_id: str
target_id: str
direction: RelationDirection = 'forward'
source: RelationSource = 'manual'
confidence: float = Field(ge=0, le=1, default=1.0)
status: RelationStatus = 'active'
attributes: Dict[str, Any] = Field(default_factory=dict)
class RelationUpdate(BaseModel):
type: Optional[RelationType] = None
layer: Optional[RelationLayer] = None
source_id: Optional[str] = None
target_id: Optional[str] = None
direction: Optional[RelationDirection] = None
source: Optional[RelationSource] = None
confidence: Optional[float] = Field(ge=0, le=1, default=None)
status: Optional[RelationStatus] = None
attributes: Optional[Dict[str, Any]] = None
# ---------------------------------------------------------------------------
# Tree / Context
# ---------------------------------------------------------------------------
class InventoryTreeNode(BaseModel): class InventoryTreeNode(BaseModel):
id: str id: str
name: str name: str
@@ -120,6 +182,10 @@ class NodeContext(BaseModel):
relations: NodeContextRelations = Field(default_factory=NodeContextRelations) relations: NodeContextRelations = Field(default_factory=NodeContextRelations)
# ---------------------------------------------------------------------------
# Jobs / Discovery
# ---------------------------------------------------------------------------
class Job(BaseModel): class Job(BaseModel):
id: str id: str
type: str type: str
@@ -158,6 +224,10 @@ class DiscoveryRun(BaseModel):
finished_at: Optional[datetime] = None finished_at: Optional[datetime] = None
# ---------------------------------------------------------------------------
# Generic wrappers
# ---------------------------------------------------------------------------
class ListResponse(BaseModel, Generic[T]): class ListResponse(BaseModel, Generic[T]):
count: int count: int
items: List[T] items: List[T]