Юрий Белк – Full stack Developer (страница 24)
Вопрос продукта: может ли быть один пользователь в нескольких workspace?
Да, иначе сервис слишком ограничен. Это типичная модель “команд”.
6.2.2. Workspace
Workspace – рабочее пространство (команда/организация/группа).
Поля:
– id
– name
– owner_user_id (логический владелец)
– created_at, updated_at
Связи:
– Workspace содержит проекты.
– Workspace содержит участников (membership).
Почему Workspace нужен:
– отделяем проекты разных команд,
– вводим роли и права,
– создаём границы для поиска/доступа.
6.2.3. Роли и права (owner/admin/member)
Роли в рамках workspace:
– owner – главный, может всё, включая удаление workspace и управление правами.
– admin – почти всё, но не «уничтожить мир» (например, не сменить owner).
– member – обычный участник, работает с задачами и проектами по правилам.
Мы должны ответить на вопросы:
– кто может создавать проекты?
– кто может удалять проекты?
– кто может приглашать/удалять участников?
Для учебного проекта фиксируем разумное:
– owner/admin: управление участниками и проектами
– member: CRUD задач и комментариев (в пределах workspace)
– удаление workspace – только owner
> Да, роли всегда вызывают споры. Это нормально. Суть не в идеале, а в ясных правилах.
6.2.4. Project
Project – контейнер задач внутри workspace.
Поля:
– id
– workspace_id
– name
– description (опционально)
– status (например: active/archived)
– created_at, updated_at
Зачем статус:
– “архивировать проект” проще, чем “удалить навсегда”.
– архив не должен мешать поиску по умолчанию (но должен быть доступен через фильтр).
6.2.5. Task
Task – основная единица работы.
Поля (ядро):
– id
– workspace_id (или через project, но удобно иметь прямую привязку)
– project_id
– title
– description (опционально)
– status (todo/in_progress/done/canceled – минимально)
– priority (low/medium/high – опционально)
– assignee_user_id (опционально)
– reporter_user_id (кто создал)
– due_date (опционально)
– created_at, updated_at
Связи:
– Task имеет много комментариев.
– Task имеет много меток (many-to-many).
Сразу оговорим поведение:
– задача всегда принадлежит проекту;
– пользователь должен иметь доступ к workspace проекта, чтобы видеть задачу;
– менять статус может member/admin/owner (если есть доступ).
6.2.6. Comment
Comment – обсуждение задачи.