2.9 KiB
2.9 KiB
Context
Project management is defined in specs but not yet fully implemented across backend and frontend. The codebase now includes auth-oauth and frontend-foundation, so this change should connect authenticated users to project CRUD workflows and enforce ownership/security rules consistently.
Goals / Non-Goals
Goals:
- Provide authenticated CRUD endpoints for projects with owner-only updates/deletes.
- Expose project listing payloads that include associated repositories and default SSH key metadata.
- Add frontend project pages for listing, creating, editing, and deleting projects.
- Support setting/changing a default SSH key per project with ownership validation.
- Verify cascade behavior and authorization through tests.
Non-Goals:
- Advanced collaboration features (shared project ownership, invites, roles).
- Bulk project operations.
- Full analytics/activity stream implementation beyond simple listing metadata.
Decisions
-
Keep project logic in dedicated service layer with thin route handlers
- Rationale: consistent with auth service separation and easier unit testing.
- Alternative: embed logic directly in route handlers. Rejected for maintainability.
-
Use authenticated user identity from internal JWT for ownership checks
- Rationale: single trust path and no client-provided owner fields.
- Alternative: allow owner IDs in request body. Rejected for security risk.
-
Return normalized project DTOs with nested repository summaries
- Rationale: reduces frontend round-trips and supports immediate dashboard/project page rendering.
- Alternative: fetch repositories separately per project. Rejected due to extra request overhead.
-
Implement optimistic-friendly frontend forms with explicit server error display
- Rationale: better UX while preserving clear failure feedback.
- Alternative: full page reload after each action. Rejected due to poor interaction quality.
Risks / Trade-offs
- [Ownership bypass bugs] -> enforce auth checks at service boundary and test unauthorized scenarios.
- [Cascade deletion surprises] -> add integration tests that assert repository/association cleanup behavior.
- [Stale frontend lists after mutation] -> centralize refresh calls after create/update/delete.
- [Default SSH key mismatch] -> validate key belongs to user/project context before assignment.
Migration Plan
- Add/adjust backend project API routes and services.
- Add backend tests for CRUD, ownership, default-key, and cascade behavior.
- Implement frontend project pages and API integration.
- Add frontend tests for protected interactions and mutation flows.
- Run quality gates for backend and frontend.
Rollback:
- Revert project API and frontend pages; keep existing schema unchanged unless explicit migration is added.
Open Questions
- Whether project descriptions should support markdown formatting (deferred; plain text for now).