0005_config_pipeline.sql 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. BEGIN;
  2. CREATE TABLE event_config_sources (
  3. id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  4. event_id UUID NOT NULL REFERENCES events(id) ON DELETE CASCADE,
  5. source_version_no INTEGER NOT NULL,
  6. source_kind TEXT NOT NULL DEFAULT 'event_bundle' CHECK (source_kind IN ('event_bundle', 'manifest_only', 'preset')),
  7. schema_id TEXT NOT NULL DEFAULT 'event-source',
  8. schema_version TEXT NOT NULL DEFAULT '1',
  9. status TEXT NOT NULL DEFAULT 'draft' CHECK (status IN ('draft', 'active', 'archived')),
  10. source_jsonb JSONB NOT NULL DEFAULT '{}'::jsonb,
  11. notes TEXT,
  12. created_by_user_id UUID REFERENCES users(id) ON DELETE SET NULL,
  13. created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  14. UNIQUE (event_id, source_version_no)
  15. );
  16. CREATE INDEX event_config_sources_event_id_idx ON event_config_sources(event_id);
  17. CREATE INDEX event_config_sources_status_idx ON event_config_sources(status);
  18. CREATE TABLE event_config_builds (
  19. id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  20. event_id UUID NOT NULL REFERENCES events(id) ON DELETE CASCADE,
  21. source_id UUID NOT NULL REFERENCES event_config_sources(id) ON DELETE CASCADE,
  22. build_no INTEGER NOT NULL,
  23. build_status TEXT NOT NULL DEFAULT 'success' CHECK (build_status IN ('pending', 'running', 'success', 'failed', 'cancelled')),
  24. build_log TEXT,
  25. manifest_jsonb JSONB NOT NULL DEFAULT '{}'::jsonb,
  26. asset_index_jsonb JSONB NOT NULL DEFAULT '[]'::jsonb,
  27. created_by_user_id UUID REFERENCES users(id) ON DELETE SET NULL,
  28. created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  29. UNIQUE (event_id, build_no)
  30. );
  31. CREATE INDEX event_config_builds_event_id_idx ON event_config_builds(event_id);
  32. CREATE INDEX event_config_builds_source_id_idx ON event_config_builds(source_id);
  33. CREATE INDEX event_config_builds_status_idx ON event_config_builds(build_status);
  34. ALTER TABLE event_releases
  35. ADD COLUMN build_id UUID REFERENCES event_config_builds(id) ON DELETE SET NULL;
  36. CREATE INDEX event_releases_build_id_idx ON event_releases(build_id);
  37. CREATE TABLE event_release_assets (
  38. id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  39. event_release_id UUID NOT NULL REFERENCES event_releases(id) ON DELETE CASCADE,
  40. asset_type TEXT NOT NULL CHECK (asset_type IN ('manifest', 'mapmeta', 'tiles', 'playfield', 'content_html', 'media', 'other')),
  41. asset_key TEXT NOT NULL,
  42. asset_path TEXT,
  43. asset_url TEXT NOT NULL,
  44. checksum TEXT,
  45. size_bytes BIGINT,
  46. meta_jsonb JSONB NOT NULL DEFAULT '{}'::jsonb,
  47. created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  48. UNIQUE (event_release_id, asset_key)
  49. );
  50. CREATE INDEX event_release_assets_release_id_idx ON event_release_assets(event_release_id);
  51. CREATE INDEX event_release_assets_asset_type_idx ON event_release_assets(asset_type);
  52. COMMIT;