|
Мультиюзерность: изоляция данных, per-user MCP-токены, claim при первом логине (ТЗ 0.34, бэкенд)
- Модели: User (профиль из SSO), McpToken (только sha256-хэш), user_id на tasks/projects/tags/documents/xp_events/coin_events/garden_items; уникальности имени проекта/тега — составные (per-user); app_settings → per-user (PK user_id+key), старая таблица → app_settings_global (источник claim) - Миграция f9a0b1c2d3e4 (Postgres): новые таблицы, user_id на 7 таблиц, составные уникальности, частичные индексы дейли/уровня per-user - Claim-on-first-login (ТЗ 1.2): первый вошедший забирает строки с user_id NULL и копирует глобальные настройки; upsert профиля в callback - Scoping всех API и сервисов: tasks/projects/tags/attachments/settings/xp/ garden + xp/garden/closing/options/recurrence/detailing; чужое — 404 - MCP (ТЗ 3.10): per-user bearer-токены вместо env MCP_TOKEN (middleware → sha256 → request.state.gntodo_user_id), 8 тулов с Context; SSE publish(uid) - API /api/mcp-tokens: список/генерация (plaintext один раз)/отзыв - Тесты: test_multiuser (изоляция двух пользователей, claim, per-user дейли/ настройки), test_mcp_tokens; 135 passed, ruff, mypy strict Co-Authored-By: Claude Code <noreply@anthropic.com> |
|---|
|
|
| .env.example |
|---|
| backend/alembic/versions/f9a0b1c2d3e4_mcp_users_multitenancy.py 0 → 100644 |
|---|
| backend/app/api/attachments.py |
|---|
| backend/app/api/garden.py |
|---|
| backend/app/api/mcp_tokens.py 0 → 100644 |
|---|
| backend/app/api/projects.py |
|---|
| backend/app/api/settings.py |
|---|
| backend/app/api/tags.py |
|---|
| backend/app/api/tasks.py |
|---|
| backend/app/api/xp.py |
|---|
| backend/app/auth/routes.py |
|---|
| backend/app/config.py |
|---|
| backend/app/dependencies.py |
|---|
| backend/app/main.py |
|---|
| backend/app/mcp_server.py |
|---|
| backend/app/models.py |
|---|
| backend/app/services/closing.py |
|---|
| backend/app/services/detailing.py |
|---|
| backend/app/services/garden.py |
|---|
| backend/app/services/options.py |
|---|
| backend/app/services/recurrence.py |
|---|
| backend/app/services/users.py 0 → 100644 |
|---|
| backend/app/services/xp.py |
|---|
| backend/tests/conftest.py |
|---|
| backend/tests/test_detailing.py |
|---|
| backend/tests/test_mcp.py |
|---|
| backend/tests/test_mcp_tokens.py 0 → 100644 |
|---|
| backend/tests/test_multiuser.py 0 → 100644 |
|---|
| backend/tests/test_predict.py |
|---|
| backend/tests/test_recurrence.py |
|---|
| docs/deploy.md |
|---|