sandbox/ivideon/puml/arch/AN_user_registration.puml
2026-02-10 09:44:09 +03:00

97 lines
3.6 KiB
Text
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@startuml User Registration Flow
skinparam sequenceMessageAlign center
skinparam BoxPadding 10
title Процесс регистрации пользователя в Ivideon Cloud
actor "Клиент\n(Web/Mobile)" as Client
box "API Service (api4)" #LightBlue
participant "OpenUserRegistration\nHandler" as Handler
participant "User.open_registration()" as OpenReg
participant "register_user()" as RegisterUser
end box
database "MongoDB\n(main)" as MongoDB
database "MongoDB\n(user_registry)" as UserRegistryDB
box "User Registry Service" #LightGreen
participant "UserRegistry\nService" as URService
end box
== Регистрация пользователя ==
Client -> Handler: POST /public/registration\n{login, password, partnerId, ...}
activate Handler
Handler -> OpenReg: open_registration(login, password, ip, ...)
activate OpenReg
OpenReg -> OpenReg: Определение partner_id,\ngroup_id, currency
OpenReg -> OpenReg: Применение реферальных кодов\nи промо-акций
OpenReg -> RegisterUser: register_user(login, password, ...)
activate RegisterUser
== Проверки перед регистрацией ==
RegisterUser -> RegisterUser: Валидация логина (email)
RegisterUser -> MongoDB: Проверка существующего пользователя\nfind_one({'login': login})
MongoDB --> RegisterUser: existing_user = None
RegisterUser -> UserRegistryDB: Проверка профиля в UserRegistry\nget_profile_by_login(login)
note right
Проверяется, не зарегистрирован ли
пользователь в другом шарде
end note
UserRegistryDB --> RegisterUser: profile = None
== Создание пользователя ==
RegisterUser -> RegisterUser: Формирование объекта new_user:\n- login, password (hash)\n- partner_id, group_id\n- currency, country\n- balance = 0\n- registration info (ip, time)\n- account_type
RegisterUser -> RegisterUser: Генерация user_id
RegisterUser -> RegisterUser: Создание root_folder
RegisterUser -> MongoDB: users.insert_one(new_user)
activate MongoDB
MongoDB --> RegisterUser: OK
deactivate MongoDB
RegisterUser -> MongoDB: folders.insert_one(root_folder)
activate MongoDB
MongoDB --> RegisterUser: OK
deactivate MongoDB
note over RegisterUser, MongoDB
В MongoDB (main) записываются:
1. Запись пользователя в коллекцию "users"
2. Корневая папка в коллекцию "folders"
end note
RegisterUser -> RegisterUser: Применение дефолтных сервисов\n(для биллинга v4)
RegisterUser -> RegisterUser: Применение промо-акций\n(если валюта подтверждена)
RegisterUser --> OpenReg: {user: <full_user>, report: {...}}
deactivate RegisterUser
OpenReg -> OpenReg: Обновление статистики реферальных кодов
OpenReg -> OpenReg: Отправка уведомления о регистрации\n(если настроено)
OpenReg --> Handler: {user, report}
deactivate OpenReg
Handler --> Client: HTTP 200\n{id, login, registrator_id, ...}
deactivate Handler
== Опциональная запись в UserRegistry ==
note over URService
UserRegistry НЕ обновляется автоматически
при регистрации. Запись создается через
отдельный внутренний API endpoint:
POST /inner/user_registry/users
Это может делать другой сервис
для управления шардированием
end note
@enduml