Import docs: adoption playbook + superseded-mappers note + loader status
Some checks failed
CI / backend (push) Successful in 1m39s
CI / naming (push) Successful in 2s
CI / frontend (push) Successful in 8s
CI / migrations-mysql (push) Failing after 8s

Follow-up to the mapper retirement (the new docs missed the prior commit's
staging). Adds docs/IMPORT-ADOPTION.md (two-layer import story + stage/crosswalk
guidance), scripts/migration/README.md (dir superseded, points at the API +
loader), and updates the WJ loader README to complete status.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
cproudlock
2026-07-13 12:18:56 -04:00
parent 474f245ae7
commit 009ac9f9ef
3 changed files with 107 additions and 9 deletions

View File

@@ -0,0 +1,24 @@
# scripts/migration (superseded)
The direct-SQL migrators that used to live here (`migrate_assets.py`,
`migrate_communications.py`, `migrate_notifications.py`, `migrate_usb.py`,
`run_migration.py`, `verify_migration.py`) and `scripts/import_from_mysql.py`
were **removed** - they had drifted badly out of sync with the current schema
(they targeted a nonexistent `equipment` table, the retired `Machine` model, and
columns that no longer exist) and were actively misleading.
## Use the import API + a site loader instead
Legacy data is imported through the maintained, schema-agnostic contract in
[`docs/IMPORT-API.md`](../../docs/IMPORT-API.md) (create through real endpoints
with an admin PAT + `X-Import-Mode`). Each adopting site writes a thin loader
that reads its own source database and drives that API.
- Reference implementation: [`scripts/site_imports/wjf/`](../site_imports/wjf/)
(West Jefferson classic-ASP -> flask).
- Adoption playbook: [`docs/IMPORT-ADOPTION.md`](../../docs/IMPORT-ADOPTION.md).
## What's kept here
- `fix_legacy_schema.sql` - one-time SQL fixups against a legacy source DB.
- `one-offs/` - individual one-shot SQL snippets (see its README).

View File

@@ -33,13 +33,16 @@ resolved decisions, and remaining stages.
## Status
- **Implemented + verified idempotent:** `reference` (vendors, businessunits,
operatingsystems), `employees` (directory bulk upsert; photos deferred).
- **TODO stages:** `models`, `applications`, `assets` (the hub - fan machines
out by type, persist the machineid->assetid crosswalk), `dependents`
(installs, warranties, notifications, KB), `network` (+ subnets/VLANs), `usb`
(cmmc device + checkinout pairing), `verify`.
Complete - all 15 stages built and verified end-to-end against a fresh scratch
target (zero endpoint errors): `reference`, `employees`, `catalog`, `assets`
(the hub + machineid->assetid crosswalk), `locations`, `printers`,
`communications`, `applications` (+ installs), `warranties`, `notifications`,
`knowledgebase`, `relationships`, `subnets`, `usb`, `verify`.
The harness (PAT auth, import-mode, id-map persistence, endpoint error capture)
is proven; the remaining stages are additional `stage_*` functions in `run.py`
following the same shape.
Last full run: 983 assets (computer 663, machine 76, network 58, measuring-tool
136, printer 50), 24 locations, 415 employees, 850 installs, 461 primary IPs,
464 warranties, 261 notifications, 341 KB, 93 relationships, 37 subnets, 18 USB
devices + 232 events. UI spot-check passed (computer list + shop-floor map).
Known follow-ups: general asset `locationid` is null (no source column outside
printers); the ~146 duplicate machinenumbers are first-wins-skipped by decision.