- SUMMARY.md with task commits, decisions, and metrics - STATE.md updated: Phase 11 complete (3/3 plans) - ROADMAP.md progress updated - Requirements SITE-03, SITE-04, SITE-05 marked complete Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
109 lines
3.9 KiB
Markdown
109 lines
3.9 KiB
Markdown
---
|
|
phase: 11-site-data-model-foundation
|
|
plan: 03
|
|
subsystem: ui, api
|
|
tags: [react, tanstack-router, tanstack-query, tailwind, lucide, pydantic, sqlalchemy]
|
|
|
|
# Dependency graph
|
|
requires:
|
|
- phase: 11-site-data-model-foundation plan 01
|
|
provides: Sites CRUD API with device assignment endpoints
|
|
- phase: 11-site-data-model-foundation plan 02
|
|
provides: sitesApi frontend client and site routes
|
|
provides:
|
|
- Site column in fleet table with clickable site name links
|
|
- Multi-select bulk assign devices to sites from fleet list
|
|
- Site selector dropdown on device detail page (assign/unassign)
|
|
- DeviceResponse includes site_id and site_name fields (backend + frontend)
|
|
affects: [14-site-dashboard]
|
|
|
|
# Tech tracking
|
|
tech-stack:
|
|
added: []
|
|
patterns:
|
|
- "Bulk assign uses dialog with site select and mutation invalidation"
|
|
- "Multi-select checkboxes with Set<string> state and select-all toggle"
|
|
|
|
key-files:
|
|
created: []
|
|
modified:
|
|
- backend/app/schemas/device.py
|
|
- backend/app/services/device.py
|
|
- frontend/src/lib/api.ts
|
|
- frontend/src/components/fleet/FleetTable.tsx
|
|
- frontend/src/routes/_authenticated/tenants/$tenantId/devices/$deviceId.tsx
|
|
|
|
key-decisions:
|
|
- "Site column placed after Model column for logical grouping of device identity fields"
|
|
- "Viewers see site name as text, operators get a Select dropdown for assignment"
|
|
|
|
patterns-established:
|
|
- "Multi-select pattern: checkbox column + Set<string> state + action bar with bulk operation"
|
|
|
|
requirements-completed: [SITE-03, SITE-04, SITE-05]
|
|
|
|
# Metrics
|
|
duration: 3min
|
|
completed: 2026-03-19
|
|
---
|
|
|
|
# Phase 11 Plan 03: Device-Site Assignment UI Summary
|
|
|
|
**Site column in fleet table with multi-select bulk assign, site selector on device detail, and DeviceResponse site fields**
|
|
|
|
## Performance
|
|
|
|
- **Duration:** 3 min
|
|
- **Started:** 2026-03-19T02:49:59Z
|
|
- **Completed:** 2026-03-19T02:53:16Z
|
|
- **Tasks:** 2
|
|
- **Files modified:** 5
|
|
|
|
## Accomplishments
|
|
- DeviceResponse now includes site_id and site_name on backend and frontend
|
|
- Fleet table has checkbox column for multi-select with bulk "Assign to site" action
|
|
- Fleet table has Site column showing clickable site name links (or "--" for unassigned)
|
|
- Device detail page has site selector dropdown for assign/change/remove site
|
|
|
|
## Task Commits
|
|
|
|
Each task was committed atomically:
|
|
|
|
1. **Task 1: Add site_id and site_name to DeviceResponse** - `ddb2b3e` (feat)
|
|
2. **Task 2: Add Site column, multi-select bulk assign, and site selector** - `98e328c` (feat)
|
|
|
|
## Files Created/Modified
|
|
- `backend/app/schemas/device.py` - Added site_id and site_name optional fields to DeviceResponse
|
|
- `backend/app/services/device.py` - Added site fields to _build_device_response, selectinload(Device.site) to eager loading
|
|
- `frontend/src/lib/api.ts` - Added site_id and site_name to DeviceResponse interface
|
|
- `frontend/src/components/fleet/FleetTable.tsx` - Checkbox column, Site column, multi-select state, bulk assign dialog
|
|
- `frontend/src/routes/_authenticated/tenants/$tenantId/devices/$deviceId.tsx` - Site selector dropdown with assign/unassign mutation
|
|
|
|
## Decisions Made
|
|
- Site column placed after Model column for logical grouping of device identity fields
|
|
- Viewers see site name as plain text; operators get a Select dropdown for changing assignment
|
|
- Bulk assign uses a Dialog component with site selector and mutation pattern
|
|
|
|
## Deviations from Plan
|
|
|
|
None - plan executed exactly as written.
|
|
|
|
## Issues Encountered
|
|
None
|
|
|
|
## User Setup Required
|
|
None - no external service configuration required.
|
|
|
|
## Next Phase Readiness
|
|
- Device-site relationship fully wired end-to-end (backend model, API, frontend views)
|
|
- Site detail page ready for Phase 14 dashboard expansion with device list
|
|
- All site management features operational: CRUD, assign, unassign, bulk assign
|
|
|
|
## Self-Check: PASSED
|
|
|
|
All 5 modified files verified on disk. Both task commits (ddb2b3e, 98e328c) verified in git log.
|
|
|
|
---
|
|
*Phase: 11-site-data-model-foundation*
|
|
*Completed: 2026-03-19*
|