feat: prisma schema, groups API, deploy workflow
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
# Системный промпт для AI-ассистента проекта XFlow
|
||||
|
||||
## Текущая архитектура
|
||||
Проект реализован на **Nuxt 3 PWA**.
|
||||
|
||||
### Стек
|
||||
- **Frontend/Backend:** Nuxt 3 (Vue 3 + Nitro SSR)
|
||||
- **Стили:** Tailwind CSS
|
||||
- **PWA:** `@vite-pwa/nuxt` (Service Worker, манифест, оффлайн-кэш)
|
||||
- **Аутентификация:** Firebase Auth (Google Sign-In), JWT на Nitro
|
||||
- **Визуализация:** `@vue-flow/core` + `@vue-flow/background` + `@vue-flow/controls` + `@vue-flow/minimap`
|
||||
- **Markdown:** `markdown-it` (рендеринг нод)
|
||||
- **Push:** Web Push API + Notification API + вибро
|
||||
- **База данных:** In-memory (заглушка на Nitro utils/db.ts), миграция на Postgres в планах
|
||||
|
||||
### Файловая структура
|
||||
```
|
||||
app/
|
||||
app.vue # Корневой компонент
|
||||
assets/css/main.css # Tailwind + кастомные стили для Vue Flow
|
||||
components/
|
||||
CanvasViewer.vue # Основной канвас (Vue Flow)
|
||||
MarkdownNode.vue # Рендеринг markdown в нодах
|
||||
AchievementOverlay.vue # Всплывающие ачивки
|
||||
composables/
|
||||
useAuth.ts # Firebase Google Sign-In + JWT decode
|
||||
useCanvas.ts # Загрузка .canvas JSON, парсинг frontmatter
|
||||
usePush.ts # Подписка/отправка Web Push
|
||||
useAchievements.ts # Управление ачивками
|
||||
layouts/
|
||||
default.vue # Навигация + AchievementOverlay
|
||||
middleware/
|
||||
auth.ts # Проверка JWT (cookie xflow_token)
|
||||
admin.ts # Проверка role === 'admin'
|
||||
pages/
|
||||
index.vue # Дашборд (статы задач и ачивок)
|
||||
login.vue # Только Google Sign-In (Firebase)
|
||||
canvas.vue # CanvasViewer страница
|
||||
admin.vue # Панель админа (пуши, скрипты)
|
||||
settings.vue # Настройки пушей и ачивок
|
||||
plugins/
|
||||
firebase.client.ts # Инициализация Firebase SDK (только клиент)
|
||||
push-notifications.client.ts # Обработка пуш-событий
|
||||
server/
|
||||
api/auth/google.post.ts # Верификация Firebase ID token + выдача JWT
|
||||
api/auth/validate.get.ts # Проверка JWT
|
||||
api/canvas/[id].get.ts # Мок .canvas JSON
|
||||
api/nodes/[id].put.ts # Обновление статуса ноды + автовыдача ачивок
|
||||
api/nodes/index.get.ts # Список нод с RBAC (фильтр по assigned_to)
|
||||
api/achievements/index.get.ts # Список ачивок пользователя
|
||||
api/push/subscribe.post.ts # Сохранение подписки
|
||||
api/push/send.post.ts # Отправка пуша (admin only)
|
||||
utils/auth.ts # Генерация/верификация JWT (jose)
|
||||
utils/db.ts # In-memory store (users, nodes, achievements, pushSubs)
|
||||
public/
|
||||
favicon.svg
|
||||
pwa-*.svg # Иконки PWA (SVG заглушки)
|
||||
```
|
||||
|
||||
### Ключевые бизнес-правила
|
||||
1. **Авторизация:** Только Firebase Google Sign-In. Email/password удален. Cookie `xflow_token`.
|
||||
2. **RBAC:** `role: 'admin'` дает доступ к `/admin`. Обычные пользователи видят только ноды с `assigned_to == свой email`.
|
||||
3. **Canvas ноды:** Double-click переключает статус `pending -> in_progress -> completed`. При `completed` сервер автоматически выдает ачивку.
|
||||
4. **Frontmatter:** Ноды могут содержать YAML frontmatter с полями `alarm`, `script_id`, `assigned_to`.
|
||||
5. **Push:** Админ отправляет пуши через `/api/push/send`. Клиентский плагин слушает `PUSH_RECEIVED` и вибрирует.
|
||||
6. **Gamification:** Ачивки выдаются автоматически при завершении нод. Отображаются через AchievementOverlay.
|
||||
|
||||
### Конфигурация (.env)
|
||||
Обязательные переменные для Firebase:
|
||||
```
|
||||
NUXT_PUBLIC_FIREBASE_API_KEY=
|
||||
NUXT_PUBLIC_FIREBASE_AUTH_DOMAIN=
|
||||
NUXT_PUBLIC_FIREBASE_PROJECT_ID=
|
||||
NUXT_PUBLIC_FIREBASE_APP_ID=
|
||||
NUXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=
|
||||
NUXT_FIREBASE_API_KEY= # Серверная верификация (тот же ключ)
|
||||
NUXT_JWT_SECRET= # Секрет для подписи JWT
|
||||
```
|
||||
|
||||
## Критически важное правило: документация в .md
|
||||
**При ЛЮБЫХ изменениях архитектуры, API, бизнес-логики или структуры данных — обновляй соответствующие .md файлы.**
|
||||
|
||||
### Структура документации в проекте
|
||||
- `docs/architecture/` — архитектурные решения, ADR
|
||||
- `docs/api/` — контракты API, форматы данных
|
||||
- `docs/features/` — описание функционала
|
||||
- `README.md` — общее описание, setup, структура
|
||||
|
||||
### Правила обновления .md
|
||||
1. **Если добавляешь новый composable/component/API route** — создай или обнови `.md`:
|
||||
- Назначение
|
||||
- Зависимости
|
||||
- Публичный API (методы, параметры, типы)
|
||||
- Пример использования
|
||||
|
||||
2. **Если меняешь формат данных** (.canvas JSON, frontmatter схема):
|
||||
- Обнови документацию формата
|
||||
- Укажи версию схемы
|
||||
- Опиши миграцию если нужна
|
||||
|
||||
3. **Если добавляешь фичу**:
|
||||
- Создай `docs/features/feature-name.md`
|
||||
- Опиши user flow, edge cases
|
||||
|
||||
## Инструкция для сессии
|
||||
1. Перед изменениями — прочитай соответствующий `.md` файл и код
|
||||
2. После изменений — обнови `.md` или создай новый
|
||||
3. Не ломай существующие форматы данных без явного запроса
|
||||
4. При добавлении зависимостей — проверяй совместимость с Nuxt 3 / Vue 3 / TypeScript
|
||||
5. Все Dart/Flutter файлы удалены — не возвращай их
|
||||
6. Cookie называется `xflow_token`
|
||||
7. Проект называется **XFlow**
|
||||
Reference in New Issue
Block a user