34 lines
1.1 KiB
PL/PgSQL
34 lines
1.1 KiB
PL/PgSQL
BEGIN;
|
|
|
|
CREATE TABLE managed_assets (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
asset_public_id TEXT NOT NULL UNIQUE,
|
|
asset_type TEXT NOT NULL,
|
|
asset_code TEXT NOT NULL,
|
|
version TEXT NOT NULL,
|
|
title TEXT,
|
|
source_mode TEXT NOT NULL CHECK (source_mode IN ('uploaded', 'external_link')),
|
|
storage_provider TEXT NOT NULL CHECK (storage_provider IN ('oss', 'external')),
|
|
object_key TEXT,
|
|
public_url TEXT NOT NULL,
|
|
file_name TEXT,
|
|
content_type TEXT,
|
|
file_size_bytes BIGINT,
|
|
checksum_sha256 TEXT,
|
|
status TEXT NOT NULL DEFAULT 'active' CHECK (status IN ('draft', 'active', 'disabled', 'archived')),
|
|
metadata_jsonb JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
UNIQUE (asset_type, asset_code, version)
|
|
);
|
|
|
|
CREATE INDEX managed_assets_asset_type_idx ON managed_assets(asset_type);
|
|
CREATE INDEX managed_assets_asset_code_idx ON managed_assets(asset_code);
|
|
CREATE INDEX managed_assets_status_idx ON managed_assets(status);
|
|
|
|
CREATE TRIGGER managed_assets_set_updated_at
|
|
BEFORE UPDATE ON managed_assets
|
|
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
|
|
|
|
COMMIT;
|