mirror of
https://github.com/azaion/autopilot.git
synced 2026-06-21 14:21:10 +00:00
bc40ea7300
Greenfield Steps 1-6 baseline for the autopilot rewrite from legacy Qt/C++ to a Rust workspace. - Remove legacy Qt/C++ tree (ai_controller, drone_controller, misc/camera, python_scaffold, root Dockerfile, autopilot.pro, legacy main.py / requirements.txt). - Add _docs/00_problem (problem, restrictions, acceptance criteria, security approach, input data + fixtures). - Add _docs/01_solution/solution_draft01. - Add _docs/02_document (architecture, system-flows, data_model, glossary, decision-rationale, deployment, 13 component descriptions, tests/ specs, FINAL_report, module-layout). - Add _docs/02_tasks/todo with 47 task specs (AZ-640..AZ-686, one bootstrap + 46 component tasks) and _dependencies_table.md. - Add .cursor/rules/artifact-srp.mdc (single-responsibility rule for canonical _docs artifacts). - Track autodev state in _docs/_autodev_state.md (Step 6 completed, ready for Step 7 Implement). Jira: bootstrap AZ-626; component epics AZ-627..AZ-639; tasks AZ-640..AZ-686. Total complexity 173 points across 12 epics. Co-authored-by: Cursor <cursoragent@cursor.com>
105 lines
3.6 KiB
SQL
105 lines
3.6 KiB
SQL
-- Suite e2e database seed.
|
|
--
|
|
-- Loaded by the `db-seed` service in docker-compose.suite-e2e.yml after
|
|
-- annotations has run its own DatabaseMigrator (which creates the schema +
|
|
-- inserts the canonical detection_classes 0..18). This file therefore only
|
|
-- adds rows that the e2e scenario depends on but the production runtime does
|
|
-- NOT seed automatically.
|
|
--
|
|
-- Idempotency: every statement uses ON CONFLICT / IF NOT EXISTS so re-running
|
|
-- the seed (e.g. on a `down -v` followed by `up`) lands the same final state.
|
|
--
|
|
-- Schema reference: annotations/src/Database/DatabaseMigrator.cs.
|
|
|
|
\set ON_ERROR_STOP on
|
|
|
|
-- Wait until annotations has populated its schema. The db-seed container starts
|
|
-- only after postgres-local is healthy, but annotations may still be spinning
|
|
-- up its tables. A bounded poll keeps the seed deterministic.
|
|
DO $$
|
|
DECLARE
|
|
attempt int := 0;
|
|
BEGIN
|
|
WHILE attempt < 60 LOOP
|
|
PERFORM 1
|
|
FROM information_schema.tables
|
|
WHERE table_schema = 'public' AND table_name = 'detection_classes';
|
|
IF FOUND THEN
|
|
EXIT;
|
|
END IF;
|
|
PERFORM pg_sleep(1);
|
|
attempt := attempt + 1;
|
|
END LOOP;
|
|
|
|
IF attempt >= 60 THEN
|
|
RAISE EXCEPTION 'detection_classes table not found after 60s — annotations migration did not complete';
|
|
END IF;
|
|
END $$;
|
|
|
|
-- Default system_settings row. Annotations starts without one, but several
|
|
-- spec assertions rely on `silent_detection = false` and known thumbnail dims
|
|
-- so overlay rendering is reproducible.
|
|
INSERT INTO system_settings (
|
|
id, name, military_unit,
|
|
default_camera_width, default_camera_fov,
|
|
thumbnail_width, thumbnail_height, thumbnail_border,
|
|
generate_annotated_image, silent_detection
|
|
) VALUES (
|
|
'00000000-0000-0000-0000-00000000aaaa',
|
|
'azaion-suite-e2e',
|
|
'e2e-unit',
|
|
3840, 70,
|
|
240, 135, 10,
|
|
true, false
|
|
) ON CONFLICT (id) DO NOTHING;
|
|
|
|
-- Default directory_settings row. Annotations writes media files under the
|
|
-- paths defined here; the e2e-runner doesn't read these directly but the
|
|
-- service requires the row to exist on first hit.
|
|
INSERT INTO directory_settings (
|
|
id, videos_dir, images_dir, labels_dir, results_dir,
|
|
thumbnails_dir, gps_sat_dir, gps_route_dir
|
|
) VALUES (
|
|
'00000000-0000-0000-0000-00000000bbbb',
|
|
'/data/videos', '/data/images', '/data/labels', '/data/results',
|
|
'/data/thumbnails', '/data/gps_sat', '/data/gps_route'
|
|
) ON CONFLICT (id) DO NOTHING;
|
|
|
|
-- Default camera_settings row used by detections to size bbox-to-meters.
|
|
INSERT INTO camera_settings (
|
|
id, altitude, focal_length, sensor_width
|
|
) VALUES (
|
|
'00000000-0000-0000-0000-00000000cccc',
|
|
100, 50, 36
|
|
) ON CONFLICT (id) DO NOTHING;
|
|
|
|
-- Stable e2e user. The UUID is referenced by the spec when asserting
|
|
-- annotation rows. Annotations does not own a `users` table — user identity
|
|
-- is carried in JWTs minted with JWT_SECRET; the user_id here just needs to
|
|
-- be deterministic and stable across runs.
|
|
-- Stored in user_settings so the spec can `SELECT user_id` to confirm the
|
|
-- seed ran.
|
|
INSERT INTO user_settings (
|
|
id, user_id,
|
|
annotations_left_panel_width, annotations_right_panel_width,
|
|
dataset_left_panel_width, dataset_right_panel_width
|
|
) VALUES (
|
|
'00000000-0000-0000-0000-00000000dddd',
|
|
'00000000-0000-0000-0000-0000e2e2e2e2',
|
|
300, 400, 320, 320
|
|
) ON CONFLICT (id) DO NOTHING;
|
|
|
|
-- Sanity check — fail loudly if the canonical detection_classes are missing.
|
|
-- annotations/src/Database/DatabaseMigrator.cs inserts ids 0..18 unconditionally.
|
|
DO $$
|
|
DECLARE
|
|
cnt int;
|
|
BEGIN
|
|
SELECT COUNT(*) INTO cnt FROM detection_classes WHERE id BETWEEN 0 AND 18;
|
|
IF cnt < 19 THEN
|
|
RAISE EXCEPTION 'expected canonical detection_classes 0..18 (count=19), got %', cnt;
|
|
END IF;
|
|
END $$;
|
|
|
|
\echo 'suite-e2e seed complete'
|