@startuml CrowdSubscription Create Sequence actor "client" as U participant "CrowdSubscription" as CS participant "API5" as API participant "MongoDB\ncrowd_subscription" as DB U -> CS: create(email, camera_id, email_enabled=True) CS -> API: get_api_client() activate API CS -> API: User.get_id(login=email) API --> CS: user_id CS -> API: Camera({'id': camera_id}).get(projection) API --> CS: camera data deactivate API CS -> DB: find_one(проверка на существующую подписку) DB --> CS: existing_doc or None alt Подписка уже есть CS --> U: raise CrowdSubscriptionAlreadyExists else Подписки нет CS -> CS: create document note right of CS { owner_id: camera['owner_id'] created_at: time.time() subscriber_id: user_id subscriber_login: email telegram_confirmed: False camera_id: camera_id email_enabled: email_enabled } end note CS -> DB: insert_with_random_id(doc) DB --> CS: inserted_doc CS --> U: CrowdSubscription(data=doc) end @enduml