feat: Document feature enhancements - vehicle associations, editing, and insurance multi-vehicle support #31
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Enhance the documents feature to improve vehicle associations, enable full document editing, fix delete behavior, and support insurance documents covering multiple vehicles.
Current Issues
Requirements
1. Vehicle Display on Document Cards
2. Vehicle Cards - Document Association
3. Document Edit Functionality
When editing an existing document, all fields should be editable:
4. Delete Behavior from Vehicles Page
Implement context-aware delete logic:
5. Insurance Document Multi-Vehicle Support
Acceptance Criteria
Plan: Document Feature Enhancements
Phase: Planning | Agent: Planner | Status: AWAITING_REVIEW
Summary
This plan addresses all requirements from issue #31:
Architectural Decision
After decision-critic analysis, Option C (Hybrid Approach) is recommended over junction table or full array replacement:
vehicle_idas primary vehicle (backward compatible)shared_vehicle_ids UUID[]array column for insurance multi-vehicleMilestones
Milestone 1: Schema Migration and Backend Types
Scope: Database, Types, Repository
Files to modify:
backend/src/features/documents/migrations/004_add_shared_vehicle_ids.sql(NEW)backend/src/features/documents/domain/documents.types.tsbackend/src/features/documents/data/documents.repository.tsTasks:
shared_vehicle_ids UUID[] DEFAULT '{}'columnDocumentRecordtype withsharedVehicleIds: string[]mapDocumentRecord()to mapshared_vehicle_idsaddSharedVehicle(docId, userId, vehicleId)removeSharedVehicle(docId, userId, vehicleId)listByVehicle(userId, vehicleId)- includes both primary and sharedAcceptance: Types compile, migration runs, repository tests pass
Milestone 2: Backend Service and API Updates
Scope: Service layer, API routes, validation
Files to modify:
backend/src/features/documents/domain/documents.service.tsbackend/src/features/documents/api/documents.controller.tsbackend/src/features/documents/api/documents.routes.tsbackend/src/features/documents/api/documents.validation.tsTasks:
createDocumentto acceptsharedVehicleIdsfor insurance typeupdateDocumentto allow modifyingsharedVehicleIdsvehicleIdis primary AND no shared vehicles -> soft delete documentvehicleIdis insharedVehicleIds-> remove from array onlyPUT /documents/:id/vehiclesfor managing shared vehiclesAcceptance: API tests pass, delete behavior verified for all scenarios
Milestone 3: Frontend Types and API Client
Scope: Frontend types, API hooks
Files to modify:
frontend/src/features/documents/types/documents.types.tsfrontend/src/features/documents/api/documents.api.tsfrontend/src/features/documents/hooks/useDocuments.tsTasks:
DocumentRecordtype withsharedVehicleIds: string[]vehicleobject to document type for included vehicle dataAcceptance: Types compile, hooks work with updated API
Milestone 4: Vehicle Display Enhancement
Scope: Document list/detail pages, mobile screen
Files to modify:
frontend/src/features/documents/pages/DocumentsPage.tsxfrontend/src/features/documents/pages/DocumentDetailPage.tsxfrontend/src/features/documents/mobile/DocumentsMobileScreen.tsxTasks:
doc.vehicleIdwith vehicle name usingvehicleLabel()pattern from DocumentForm/garage/vehicles/:idAcceptance: Vehicle names display correctly on desktop and mobile
Milestone 5: Document Edit Functionality
Scope: Edit dialog, form modifications
Files to create/modify:
frontend/src/features/documents/components/EditDocumentDialog.tsx(NEW)frontend/src/features/documents/components/DocumentForm.tsx(refactor for edit mode)frontend/src/features/documents/pages/DocumentDetailPage.tsxTasks:
EditDocumentDialogcomponent with form pre-populated from existing documentDocumentFormto acceptmode: 'create' | 'edit'andinitialValuespropsDocumentDetailPagethat opens dialoguseUpdateDocumenthook to form submissionAcceptance: All document fields editable, changes persist correctly
Milestone 6: Context-Aware Delete from Vehicle Screen
Scope: Vehicle detail page, delete confirmation
Files to modify:
frontend/src/features/vehicles/pages/VehicleDetailPage.tsxfrontend/src/features/documents/components/DeleteDocumentDialog.tsx(NEW if needed)Tasks:
Acceptance: Delete behavior differs correctly based on document type and associations
Milestone 7: Testing and Quality Assurance
Scope: Unit tests, integration tests, manual verification
Tasks:
Acceptance: All tests pass, RULE 0/1/2 compliance verified
Risk Assessment
Dependencies
Verdict: AWAITING_REVIEW | Next: Plan review cycle (QR completeness -> TW scrub -> QR code -> QR docs)
QR Review: Plan Completeness
Phase: Plan-Review | Agent: Quality Reviewer | Status: PASS
Checklist
Acceptance Criteria Mapping
Findings
None. Plan structure is complete.
Considered But Not Flagged
Verdict: PASS | Next: TW plan-scrub
TW Review: Plan Scrub
Phase: Plan-Review | Agent: Technical Writer | Status: PASS
Documentation Quality Checklist
Terminology Consistency
shared_vehicle_idssharedVehicleIdsClarity Review
Suggestions (Non-Blocking)
gin_opsvsarray_ops)No Changes Required
Plan documentation meets quality standards.
Verdict: PASS | Next: QR plan-code
QR Review: Plan Code (RULE 0/1/2)
Phase: Plan-Review | Agent: Quality Reviewer | Status: PASS_WITH_CONCERNS
RULE 0: Production Reliability
RULE 1: Project Conformance
RULE 2: Structural Quality
Findings
[RULE 0] [SHOULD_FIX]: Concurrent Shared Vehicle Updates
addSharedVehicle/removeSharedVehicleshared_vehicle_idsarray could cause lost updates if two requests modify the array simultaneouslyarray_append()/array_remove()in UPDATE statement rather than read-modify-write patternSeverity: SHOULD_FIX (not CRITICAL - single-user app reduces concurrency risk)
Considered But Not Flagged
Verdict: PASS_WITH_CONCERNS | Next: QR plan-docs
Action Required: Implementer should use atomic array operations in M1/M2 repository methods.
QR Review: Plan Documentation
Phase: Plan-Review | Agent: Quality Reviewer | Status: PASS
Documentation Completeness
Post-TW Quality
Cross-Reference Validation
backend/src/features/documents/documents.repository.tsDocumentDetailPage.tsxdocuments.types.ts(both FE/BE)VehicleDetailPage.tsxFindings
None. Documentation is complete and accurate.
Considered But Not Flagged
Plan Review Cycle Summary
Verdict: APPROVED | Next: Implementation (create branch, execute milestones)
Plan Status: Ready for execution. Noted concern about atomic array operations should be addressed during M1/M2 implementation.
Milestone 1: Complete
Phase: Execution | Agent: Feature Agent | Status: COMPLETE
Deliverables
documents/migrations/004_add_shared_vehicle_ids.sqlshared_vehicle_ids UUID[]column with GIN indexdocuments/domain/documents.types.tssharedVehicleIdsto typesdocuments/data/documents.repository.tsNew Repository Methods
Commit
Verification
Verdict: PASS | Next: Milestone 2 - Backend Service and API Updates
Milestone 2: Complete
Phase: Execution | Agent: Feature Agent | Status: COMPLETE
Deliverables
documents/domain/documents.service.tsdocuments/api/documents.controller.tsdocuments/api/documents.routes.tsdocuments/api/documents.validation.tsNew API Endpoints
/documents/by-vehicle/:vehicleId/documents/:id/vehicles/:vehicleId/documents/:id/vehicles/:vehicleIdContext-Aware Delete Logic
Commit
Verification
Verdict: PASS | Next: Milestone 3 - Frontend Types and API Client
Milestone 3: Complete
Phase: Execution | Agent: Frontend Agent | Status: COMPLETE
Deliverables
documents/types/documents.types.tssharedVehicleIdsto all interfacesdocuments/api/documents.api.tsdocuments/hooks/useDocuments.tsdocuments/components/DocumentPreview.test.tsxdocuments/mobile/DocumentsMobileScreen.test.tsxNew API Methods
New Hooks
Commit
Verification
Verdict: PASS | Next: Milestone 4 - Vehicle Display Enhancement
Milestone 4: Complete
Phase: Execution | Agent: Frontend Agent | Status: COMPLETE
Deliverables
documents/utils/vehicleLabel.tsdocuments/pages/DocumentsPage.tsxdocuments/pages/DocumentDetailPage.tsxdocuments/mobile/DocumentsMobileScreen.tsxFeatures Implemented
Vehicle Display Logic
Commit
Verification
Verdict: PASS | Next: Milestone 5 - Document Edit Functionality
Milestone 5: Complete
Phase: Execution | Agent: Frontend Agent | Status: COMPLETE
Deliverables
documents/components/EditDocumentDialog.tsxdocuments/components/DocumentForm.tsxdocuments/pages/DocumentDetailPage.tsxEdit Form Features
Multi-Vehicle Sharing UI (Insurance Only)
Mobile Responsiveness
Commit
Verification
Verdict: PASS | Next: Milestone 6 - Context-Aware Delete from Vehicle Screen
Milestone 6: Complete
Phase: Execution | Agent: Frontend Agent | Status: COMPLETE
Deliverables
documents/components/DeleteDocumentConfirmDialog.tsxvehicles/pages/VehicleDetailPage.tsxContext-Aware Delete Logic (Frontend)
Vehicle Detail Page Updates
useDocumentsByVehicle(vehicleId)Mobile Responsiveness
Commit
Verification
Verdict: PASS | Next: Milestone 7 - Testing and Quality Assurance
Milestone 7: Complete
Phase: Execution | Agent: Quality Agent | Status: COMPLETE
Quality Checks
Quality Agent Review
Verdict: PASS_WITH_CONCERNS
Findings Addressed
console.logstatements from VehicleDetailPage (354ce47)Findings Deferred (Non-Blocking)
Passed Checks
Final Commit
Verdict: PASS_WITH_CONCERNS | Next: Open PR for review
Execution Complete
Phase: Review | Status: PR OPENED
Pull Request
PR #32: feat: Document feature enhancements (#31)
Implementation Summary
57debe45dbc17ee558fdf8968cadb71e2cfbdb329f354ce47Files Changed
Backend (7 files):
004_add_shared_vehicle_ids.sqldocuments.types.tsdocuments.repository.tsdocuments.service.tsdocuments.controller.tsdocuments.routes.tsdocuments.validation.tsFrontend (12 files):
EditDocumentDialog.tsx,DeleteDocumentConfirmDialog.tsx,vehicleLabel.tsDocumentsPage.tsx,DocumentDetailPage.tsx,DocumentsMobileScreen.tsx,DocumentForm.tsx,VehicleDetailPage.tsxQuality Status
Issue moved to
status/review. Awaiting PR merge.