0012_managed_assets.sql 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. BEGIN;
  2. CREATE TABLE managed_assets (
  3. id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  4. asset_public_id TEXT NOT NULL UNIQUE,
  5. asset_type TEXT NOT NULL,
  6. asset_code TEXT NOT NULL,
  7. version TEXT NOT NULL,
  8. title TEXT,
  9. source_mode TEXT NOT NULL CHECK (source_mode IN ('uploaded', 'external_link')),
  10. storage_provider TEXT NOT NULL CHECK (storage_provider IN ('oss', 'external')),
  11. object_key TEXT,
  12. public_url TEXT NOT NULL,
  13. file_name TEXT,
  14. content_type TEXT,
  15. file_size_bytes BIGINT,
  16. checksum_sha256 TEXT,
  17. status TEXT NOT NULL DEFAULT 'active' CHECK (status IN ('draft', 'active', 'disabled', 'archived')),
  18. metadata_jsonb JSONB NOT NULL DEFAULT '{}'::jsonb,
  19. created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  20. updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  21. UNIQUE (asset_type, asset_code, version)
  22. );
  23. CREATE INDEX managed_assets_asset_type_idx ON managed_assets(asset_type);
  24. CREATE INDEX managed_assets_asset_code_idx ON managed_assets(asset_code);
  25. CREATE INDEX managed_assets_status_idx ON managed_assets(status);
  26. CREATE TRIGGER managed_assets_set_updated_at
  27. BEFORE UPDATE ON managed_assets
  28. FOR EACH ROW EXECUTE FUNCTION set_updated_at();
  29. COMMIT;