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)
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# NetObject
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
class NetObject(BaseModel):
|
||||
id: str
|
||||
name: str
|
||||
@@ -51,6 +55,32 @@ class NetObject(BaseModel):
|
||||
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):
|
||||
id: str
|
||||
address: str
|
||||
@@ -83,6 +113,10 @@ class Link(BaseModel):
|
||||
source: Literal['manual', 'snmp', 'lldp', 'arp', 'import', 'inference']
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Relation
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
class Relation(BaseModel):
|
||||
id: str
|
||||
type: RelationType
|
||||
@@ -98,6 +132,34 @@ class Relation(BaseModel):
|
||||
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):
|
||||
id: str
|
||||
name: str
|
||||
@@ -120,6 +182,10 @@ class NodeContext(BaseModel):
|
||||
relations: NodeContextRelations = Field(default_factory=NodeContextRelations)
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Jobs / Discovery
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
class Job(BaseModel):
|
||||
id: str
|
||||
type: str
|
||||
@@ -158,6 +224,10 @@ class DiscoveryRun(BaseModel):
|
||||
finished_at: Optional[datetime] = None
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Generic wrappers
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
class ListResponse(BaseModel, Generic[T]):
|
||||
count: int
|
||||
items: List[T]
|
||||
|
||||
Reference in New Issue
Block a user