Команды
Команды объединяют участников внутри организаций или вне их. Команды могут быть самостоятельными или привязанными к организации.
Модель
Team
├── name, slug, description
├── organizationId? (опционально — null для самостоятельных команд)
├── members (с ролями: OWNER, ADMIN, MANAGER, MEMBER)
└── tasks (удобный эндпоинт в рамках команды)API Endpoints
| Метод | Путь | Описание |
|---|---|---|
GET | /api/teams | Список команд пользователя |
POST | /api/teams | Создать команду |
GET | /api/teams/by-org/:slug | Список команд организации |
GET | /api/teams/by-slug/:teamSlug | Детали команды |
PATCH | /api/teams/by-slug/:teamSlug | Обновить команду |
DELETE | /api/teams/by-slug/:teamSlug | Удалить команду |
GET | /api/teams/by-slug/:teamSlug/members | Список участников |
POST | /api/teams/by-slug/:teamSlug/members | Добавить участника |
DELETE | /api/teams/by-slug/:teamSlug/members/:userId | Удалить участника |
GET | /api/teams/by-slug/:teamSlug/tasks | Доска задач команды |
Маршруты фронтенда
| Маршрут | Представление | Описание |
|---|---|---|
/teams | TeamListView | Список всех команд пользователя |
/organizations/:orgId/teams | OrgTeamListView | Команды организации |
/teams/:teamId | TeamDetailView | Обзор команды |
/teams/:teamId/tasks | TeamTasksView | Доска задач команды |
/teams/:teamId/settings | TeamSettingsView | Настройки команды |
Store фронтенда
typescript
const store = useTeamsStore()
const { teams, currentTeam } = storeToRefs(store)
await store.fetchTeams()
await store.fetchTeam(teamId)
await store.createTeam({ name, slug, description, organizationId })
await store.updateTeam(teamId, { name, description })
// Участники
await store.addMember(teamId, email, role)
await store.removeMember(teamId, userId)Ключевые детали реализации
- Команды, привязанные к организации, наследуют ограничения разрешений уровня организации
- Самостоятельные команды работают независимо со своей областью разрешений
- Эндпоинт
/teams/by-slug/:teamSlug/tasksпредоставляет удобное представление доски задач - Настройки команды управляют именем, описанием и участниками