feat(crud): add NetObjectCreate, NetObjectUpdate, RelationCreate, RelationUpdate schemas
CI / basic-check (push) Has been cancelled
CI / basic-check (push) Has been cancelled
This commit is contained in:
@@ -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]
|
||||||
|
|||||||
Reference in New Issue
Block a user