ваше сообщение коммита
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
Система идентификации пользователей построена на следующих таблицах:
|
||||
|
||||
1. **users** - Основная таблица пользователей
|
||||
|
||||
- `id SERIAL PRIMARY KEY` - Основной идентификатор пользователя
|
||||
- `status` - Статус пользователя (active, blocked)
|
||||
- `role` - Роль пользователя (user, admin)
|
||||
@@ -14,6 +15,7 @@
|
||||
- Поля `username`, `email` и `address` являются устаревшими и должны быть NULL
|
||||
|
||||
2. **user_identities** - Таблица идентификаторов пользователей
|
||||
|
||||
- `id SERIAL PRIMARY KEY` - Идентификатор записи
|
||||
- `user_id INTEGER REFERENCES users(id)` - Ссылка на пользователя
|
||||
- `provider VARCHAR(50)` - Тип идентификатора (email, wallet, telegram, username)
|
||||
@@ -22,6 +24,7 @@
|
||||
- Ограничение `CHECK (provider IN ('email', 'wallet', 'telegram', 'username'))` - запрещает тип 'guest'
|
||||
|
||||
3. **guest_user_mapping** - Таблица связи гостевых идентификаторов с пользователями
|
||||
|
||||
- `id SERIAL PRIMARY KEY` - Идентификатор записи
|
||||
- `user_id INTEGER REFERENCES users(id)` - Ссылка на пользователя
|
||||
- `guest_id VARCHAR(255)` - Гостевой идентификатор
|
||||
@@ -29,6 +32,7 @@
|
||||
- Уникальный ключ `guest_id`
|
||||
|
||||
4. **messages** - Таблица сообщений
|
||||
|
||||
- `id SERIAL PRIMARY KEY` - Идентификатор сообщения
|
||||
- `conversation_id INTEGER REFERENCES conversations(id)` - Ссылка на диалог
|
||||
- `user_id INTEGER REFERENCES users(id)` - Прямая ссылка на пользователя
|
||||
@@ -56,7 +60,6 @@
|
||||
- Создается запись в таблице `users`
|
||||
- Создается запись в таблице `user_identities` с соответствующим провайдером
|
||||
- Гостевой ID сохраняется в таблице `guest_user_mapping` (не в user_identities)
|
||||
|
||||
2. После аутентификации система автоматически обрабатывает гостевые сообщения:
|
||||
- Вызывается метод `linkGuestMessages`
|
||||
- Создается новый диалог для гостевых сообщений
|
||||
@@ -69,7 +72,7 @@
|
||||
Если пользователь аутентифицируется разными способами, система может объединить его данные:
|
||||
|
||||
1. Система проверяет связанных пользователей через `user_identities`
|
||||
2. Если находятся связанные пользователи, вызывается метод `migrateUserData`
|
||||
2. Если находятся связанные пользователи, вызывается метод `migrateUserData`
|
||||
3. Данные от вторичных аккаунтов мигрируют к основному:
|
||||
- Идентификаторы в таблице `user_identities`
|
||||
- Гостевые связи в таблице `guest_user_mapping`
|
||||
@@ -89,6 +92,7 @@
|
||||
## Обработка ошибок
|
||||
|
||||
1. Если возникает ошибка при обработке гостевых сообщений, система:
|
||||
|
||||
- Логирует ошибку
|
||||
- Продолжает попытки обработки при следующих авторизациях
|
||||
- Не удаляет гостевые сообщения до успешной обработки
|
||||
@@ -98,6 +102,7 @@
|
||||
## Оптимизации
|
||||
|
||||
1. Индексы созданы для всех полей, используемых в запросах:
|
||||
|
||||
- `user_identities(user_id)`
|
||||
- `user_identities(provider, provider_id)`
|
||||
- `guest_user_mapping(guest_id)`
|
||||
@@ -106,6 +111,7 @@
|
||||
- `messages(conversation_id)`
|
||||
|
||||
2. Триггеры автоматически поддерживают целостность данных:
|
||||
|
||||
- Автоматическое заполнение `user_id` в таблице `messages`
|
||||
- Очистка неиспользуемых полей в таблице `users`
|
||||
|
||||
@@ -117,6 +123,7 @@
|
||||
## Функции для диагностики
|
||||
|
||||
1. **verify_migration_017()** - проверяет состояние гостевых идентификаторов
|
||||
|
||||
- `guest_identities_count` - количество гостевых идентификаторов в таблице user_identities
|
||||
- `guest_mapping_count` - количество записей в таблице guest_user_mapping
|
||||
- `missing_mappings` - количество гостевых ID, которые отсутствуют в guest_user_mapping
|
||||
@@ -127,4 +134,4 @@
|
||||
- `wallet_identities` - количество идентификаторов wallet
|
||||
- `email_identities` - количество идентификаторов email
|
||||
- `telegram_identities` - количество идентификаторов telegram
|
||||
- `duplicate_provider_ids` - количество дублирующихся идентификаторов
|
||||
- `duplicate_provider_ids` - количество дублирующихся идентификаторов
|
||||
|
||||
Reference in New Issue
Block a user