Commit 54b317a
007 delete rides (#25)
* SPEC-PLAN: Feature 007 - Allow deletion of rides (plan complete via speckit.plan)
- plan.md: Implementation architecture, constitution checks pass
- research.md: 7 key technical decisions (event sourcing, idempotency, UX, projections, auth, state, errors)
- data-model.md: RideDeleted event, Ride aggregate transitions, read projections, API schema
- quickstart.md: Testing workflow, validation commands, acceptance criteria, debugging guide
- contracts/ride-delete-api.yaml: OpenAPI 3.0 DELETE endpoint spec
- contracts/ride-deleted-event.schema.json: Event schema
Next: speckit.tasks to generate actionable task list
* TASKS: Feature 007 - Tasks.md generated via speckit.tasks (Phase 2 complete)
120 actionable tasks organized by phase and user story:
- Phase 1: Environment verification (1 task)
- Phase 2: Contracts & Infrastructure review (4 tasks, [P] parallel)
- Phase 3: F# Domain layer (11 tasks, TDD red-green cycles)
- Phase 4: C# API layer (21 tasks, authorization + idempotency)
- Phase 5: React Frontend (22 tasks, dialog + integration)
- Phase 6: E2E Integration tests (5 tasks, [P] parallel)
- Phase 7: Polish & Verification (10 tasks, verification checklist)
Format compliance:
✓ Strict checkbox format: [ ] T### [P] [US#] Description + file path
✓ 17 [P] markers for parallel-safe tasks (60% time savings potential)
✓ 41 [US#] labels mapping to user stories
✓ TDD gated: Red tests before implementation on all major features
✓ Dependencies matrix with critical path and parallel opportunities
Ready for implementation execution.
* IMPL-PHASE3: TDD RED-GREEN cycles for delete handler (T010-T013)
T010-T011 (Event Payload): ✓ GREEN (4 tests)
- RideDeletedEventPayload.cs implemented
- Tests verify EventType, Source constants, Create method
T012-T013 (Delete Handler): ✓ GREEN (5 tests)
- DeleteRideHandler.cs implemented with:
* Non-existent ride detection
* Ownership verification (authorization)
* Idempotent deletion
* Outbox event creation
* Logging
All 9 domain/handler tests passing. Ready for API layer (Phase 4).
* IMPL-PHASE4: TDD GREEN cycle for delete endpoint (T040-T044)
* package lock
* IMPL-PHASE5-7: Resume after reconnect; complete delete UI, E2E, and validation
- Add RideDeleteDialog component + styles + tests
- Integrate delete action into HistoryPage and table row controls
- Add delete API client in ridesService with tests
- Add E2E delete history suite including cross-user forbidden scenario
- Update backend delete service for idempotent re-delete and immediate read-model removal
- Verify: frontend unit tests (66), backend tests (76), delete E2E (4), frontend build pass, lint pass
- Mark completed tasks in specs/007-delete-rides/tasks.md
* IMPL-PHASE7-FINAL: Complete polish and verification (T115-T119)
- Mark all phases 1-6 tasks complete in tasks.md
- T115: Verify DELETE endpoint responding (401 on unauthenticated request)
- T116: Smoke test via E2E - all 4 delete scenarios pass (30.4s)
- Basic delete flow with UI interaction
- Cancel dialog flow
- Idempotent delete with isIdempotent flag
- Cross-user authorization (403 NOT_RIDE_OWNER)
- T117: Document 8 edge cases and known behaviors
- Empty history, rapid deletes, offline handling, precision
- Create docs/007-delete-rides-edge-cases.md
- T118: Verify all 9 acceptance criteria pass
- Dialog confirmation, totals refresh, filtered ranges
- T119: Code review checklist complete
- F# domain pure functions verified
- C# API minimal style confirmed
- React hooks with explicit types (no 'any')
- TypeScript service with full error handling
- TDD discipline followed throughout
- Contracts and documentation in place
Implementation Status: ✅ COMPLETE
- 142 automated tests passing (66 frontend + 76 backend)
- 4/4 E2E scenarios verified
- All acceptance criteria met
- Code quality gates passed (eslint, stylelint, csharpier)
- Ready for PR review and merge
* fix: update typescript-eslint to 8.58.0 to fix Aspire frontend-installer
typescript-eslint@8.57.x requires typescript >=4.8.4 <6.0.0 but the
project uses typescript@6.0.2. Version 8.58.0 extends the peer range
to <6.1.0, allowing clean npm install without --legacy-peer-deps.
* fix npm ts 6
* trigger PR build
* fix ci.yaml, v7
---------
Co-authored-by: aligneddev <aligneddev@github.com>1 parent f60ef1d commit 54b317a
32 files changed
Lines changed: 4393 additions & 722 deletions
File tree
- .github/workflows
- docs
- specs/007-delete-rides
- checklists
- contracts
- src
- BikeTracking.Api.Tests
- Application/Rides
- Endpoints/Rides
- BikeTracking.Api
- Application
- Events
- Rides
- Contracts
- Endpoints
- BikeTracking.Frontend
- playwright-report
- src
- components/RideDeleteDialog
- pages
- services
- tests/e2e
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
74 | 74 | | |
75 | 75 | | |
76 | 76 | | |
77 | | - | |
| 77 | + | |
78 | 78 | | |
79 | 79 | | |
80 | 80 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
0 commit comments