feat(projects): finish PMS-51 story (projects, phases, tasks, deps) #27

Closed
David wants to merge 0 commits from feat/projects-story-pms-51 into main
Owner

Implements YouTrack story PMS-51 (projects + tasks). Targets main directly.

Sub-tasks (all in one commit, see commit body for State Done trailers)

  • PMS-52 scaffold + router wire
  • PMS-53 projects CRUD (/projects)
  • PMS-54 project phases CRUD (/projects/:id/phases, /phases/:phase_id)
  • PMS-55 task statuses CRUD (/task-statuses, admin writes)
  • PMS-56 tasks CRUD (/projects/:id/tasks, /tasks/:id)
  • PMS-57 task dependencies with recursive-CTE cycle detection (/tasks/:id/depends-on/:other)

Test plan

  • cargo check --bin mokosh-server clean.
  • POST /api/v1/projects -> follow-up GET returns it.
  • POST /api/v1/tasks/A/depends-on/B then POST /api/v1/tasks/B/depends-on/A -> second is 409.

Closes #PMS-51

Implements YouTrack story PMS-51 (projects + tasks). Targets `main` directly. ## Sub-tasks (all in one commit, see commit body for `State Done` trailers) - PMS-52 scaffold + router wire - PMS-53 projects CRUD (`/projects`) - PMS-54 project phases CRUD (`/projects/:id/phases`, `/phases/:phase_id`) - PMS-55 task statuses CRUD (`/task-statuses`, admin writes) - PMS-56 tasks CRUD (`/projects/:id/tasks`, `/tasks/:id`) - PMS-57 task dependencies with recursive-CTE cycle detection (`/tasks/:id/depends-on/:other`) ## Test plan - [ ] `cargo check --bin mokosh-server` clean. - [ ] `POST /api/v1/projects` -> follow-up `GET` returns it. - [ ] `POST /api/v1/tasks/A/depends-on/B` then `POST /api/v1/tasks/B/depends-on/A` -> second is 409. Closes #PMS-51
feat(projects): scaffold + projects, phases, task statuses, tasks, dependencies
All checks were successful
Create release / Create release from merged PR (pull_request) Has been skipped
96ce98b365
All seven PMS-51 sub-tasks land in one commit because they share `service.rs` / `routes.rs` and per-task splitting would be arbitrary diff churn. Each sub-task gets a `State Done` trailer below so YouTrack closes them all when this PR merges.

- PMS-52 scaffold + router wire (replaces the `/projects` and `/tasks` stubs).
- PMS-53 projects CRUD with company / status / project_manager filters.
- PMS-54 project phases CRUD: `GET / POST /api/v1/projects/:id/phases`, `PUT / DELETE /api/v1/phases/:id`.
- PMS-55 task statuses CRUD: `GET /api/v1/task-statuses`, admin-only writes.
- PMS-56 tasks CRUD: `GET / POST /api/v1/projects/:id/tasks`, `GET / PUT / DELETE /api/v1/tasks/:id`. `completed_at` stamps when status_id transitions to a status whose `is_completed = TRUE`, clears otherwise.
- PMS-57 task dependencies: `POST / DELETE /api/v1/tasks/:id/depends-on/:other`. Cycle detection via recursive CTE - the add is rejected if a path `depends_on -> ... -> task_id` already exists.

#PMS-52 State Done
#PMS-53 State Done
#PMS-54 State Done
#PMS-55 State Done
#PMS-56 State Done
#PMS-57 State Done
vas2000-work closed this pull request 2026-05-21 02:42:55 +02:00
Some checks are pending
Create release / Create release from merged PR (pull_request) Has been skipped
Check / * (pull_request)
Required
E2E / * (pull_request)
Required

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
psa-systems/mokosh-server!27
No description provided.