@startuml Entity Structures !define ENTITY class !define COLLECTION database title Структура сущностей для Crowd Reports Sources package "Cameras" { ENTITY Camera_Entity { +id: "server_id:camera_index" +server_id: string +camera_index: string +name: string +owner_id: string } COLLECTION servers_collection { _id: ObjectId (server_id) owner_id: string name: string cameras: { "0": {name: "Камера 1", active: true}, "1": {name: "Камера 2", active: true} } cam_services: { "0": {crowd: {active: true}}, "1": {crowd: {active: true}} } } } package "Folders" { ENTITY Folder_Entity { +id: ObjectId (folder_id) +name: string +owner_id: string +parents: List[string] +objects: List[object_info] } COLLECTION folders_collection { _id: ObjectId (folder_id) owner_id: string name: string parents: [] objects: [ {object_type: "camera", object_id: "server:0"}, {object_type: "camera", object_id: "server:1"} ] } } package "Detection Zones" { ENTITY Zone_Entity { +id: string (zone_id) +camera_id: "server_id:camera_index" +owner_id: string +name: string +polygon: List[coordinates] } COLLECTION zones_collection { _id: string (zone_id) owner_id: string camera_id: "server_id:camera_index" name: string polygon: [...] deleted: false } } ' Relationships Camera_Entity --> servers_collection : stored in Folder_Entity --> folders_collection : stored in Zone_Entity --> zones_collection : stored in servers_collection --> zones_collection : "camera_id links" folders_collection --> servers_collection : "contains camera references" note right of Camera_Entity ID составляется из: server_id + ":" + camera_index Пример: "507f1f77bcf86cd799439011:0" end note note right of Folder_Entity objects[] может содержать: - cameras - другие folders (вложенность) - другие типы объектов end note note right of Zone_Entity Каждая зона привязана к конкретной камере через camera_id поле end note @enduml