Проекты
Проекты группируют задачи и управляют участниками с ролями уровня проекта.
Модель
Project
├── name, description, status
├── organizationId? (опционально)
├── teamId? (опционально)
├── members (с ролями)
└── tasks (полный жизненный цикл задач)API Endpoints
| Метод | Путь | Описание |
|---|---|---|
GET | /api/projects | Список проектов пользователя |
POST | /api/projects | Создать проект |
GET | /api/projects/:id | Детали проекта |
PATCH | /api/projects/:id | Обновить проект |
DELETE | /api/projects/:id | Удалить проект |
GET | /api/projects/:id/members | Список участников |
POST | /api/projects/:id/members | Добавить участника |
DELETE | /api/projects/:id/members/:userId | Удалить участника |
Маршруты фронтенда
| Маршрут | Представление | Описание |
|---|---|---|
/projects | ProjectsView | Список всех проектов пользователя |
/projects/:projectId | ProjectDetailView | Обзор проекта |
/projects/:projectId/tasks | ProjectTasksView | Список задач проекта |
/projects/:projectId/tasks/:taskId | ProjectTaskDetailView | Детали задачи |
/projects/:projectId/settings | ProjectSettingsView | Настройки проекта |
Store фронтенда
typescript
const store = useProjectsStore()
const { projects, currentProject } = storeToRefs(store)
await store.fetchProjects()
await store.fetchProject(projectId)
await store.createProject({ name, description, organizationId, teamId })
await store.updateProject(projectId, { name, description })
// Участники
await store.addMember(projectId, userId, role)
await store.removeMember(projectId, userId)Ключевые детали реализации
- Разрешения проекта контролируют CRUD-операции с задачами
- Роли участников на уровне проекта переопределяют роли организации/команды для действий в рамках проекта
- Задачи всегда привязаны к проекту (обязательный
projectIdс каскадным удалением)