97 lines
3.6 KiB
Text
97 lines
3.6 KiB
Text
@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
|