Мультиюзерность: изоляция данных, 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>
1 parent 400e69a commit 6b8ada0f83f7728a61a5fed7c72f594c69df8604
@root root authored 1 day ago
Showing 31 changed files
View
.env.example
View
backend/alembic/versions/f9a0b1c2d3e4_mcp_users_multitenancy.py 0 → 100644
View
backend/app/api/attachments.py
View
backend/app/api/garden.py
View
backend/app/api/mcp_tokens.py 0 → 100644
View
backend/app/api/projects.py
View
backend/app/api/settings.py
View
backend/app/api/tags.py
View
backend/app/api/tasks.py
View
backend/app/api/xp.py
View
backend/app/auth/routes.py
View
backend/app/config.py
View
backend/app/dependencies.py
View
backend/app/main.py
View
backend/app/mcp_server.py
View
backend/app/models.py
View
backend/app/services/closing.py
View
backend/app/services/detailing.py
View
backend/app/services/garden.py
View
backend/app/services/options.py
View
backend/app/services/recurrence.py
View
backend/app/services/users.py 0 → 100644
View
backend/app/services/xp.py
View
backend/tests/conftest.py
View
backend/tests/test_detailing.py
View
backend/tests/test_mcp.py
View
backend/tests/test_mcp_tokens.py 0 → 100644
View
backend/tests/test_multiuser.py 0 → 100644
View
backend/tests/test_predict.py
View
backend/tests/test_recurrence.py
View
docs/deploy.md