infoalloggi-monorepo/apps/db/migrations/56_storage.up.sql

191 lines
4.6 KiB
MySQL
Raw Normal View History

2026-05-19 18:42:34 +02:00
CREATE TABLE IF NOT EXISTS public.storage (
id uuid NOT NULL DEFAULT uuidv7(),
created_at timestamp without time zone NOT NULL DEFAULT now(),
filename text NOT NULL,
mime_type text NOT NULL,
file_size_bytes INT NOT NULL,
file_data BYTEA NOT NULL,
expires_at timestamp without time zone,
tag text
);
DO $$ BEGIN IF EXISTS (
SELECT
FROM information_schema.columns
WHERE table_name = 'storage'
AND column_name = 'file_data'
) THEN
ALTER TABLE public.storage
ALTER COLUMN file_data SET STORAGE EXTERNAL;
END IF;
END $$;
DO $$ BEGIN IF NOT EXISTS (
SELECT 1
FROM pg_constraint
WHERE conname = 'storage_pkey'
AND conrelid = 'public.storage'::regclass
) THEN
ALTER TABLE public.storage
ADD CONSTRAINT storage_pkey PRIMARY KEY (id);
END IF;
END $$;
--- users_storage
DO $$ BEGIN IF EXISTS (
SELECT
FROM information_schema.columns
WHERE table_name = 'users_storage'
) THEN
TRUNCATE TABLE users_storage CASCADE;
END IF;
END $$;
ALTER TABLE IF EXISTS public.users_storage
DROP COLUMN IF EXISTS "storageId";
ALTER TABLE IF EXISTS public.users_storage
ADD COLUMN IF NOT EXISTS storage_id uuid;
DO $$ BEGIN IF NOT EXISTS (
SELECT 1 FROM pg_constraint
WHERE conname = 'userstorage_storage'
AND conrelid = 'public.users_storage'::regclass
) THEN
ALTER TABLE public.users_storage
ADD CONSTRAINT userstorage_storage
FOREIGN KEY (storage_id) REFERENCES public.storage (id)
ON UPDATE CASCADE ON DELETE CASCADE;
END IF;
END $$;
ALTER TABLE users_storage
DROP CONSTRAINT IF EXISTS users_storage_user_storage_key;
DO $$ BEGIN IF NOT EXISTS (
SELECT 1 FROM pg_constraint
WHERE conname = 'users_storage_user_storage_key'
) THEN
ALTER TABLE public.users_storage
ADD CONSTRAINT users_storage_user_storage_key UNIQUE ("userId", storage_id);
END IF;
END $$;
---IMAGES
DO $$ BEGIN IF EXISTS (
SELECT
FROM information_schema.columns
WHERE table_name = 'images_refs'
) THEN
TRUNCATE TABLE images_refs;
END IF;
END $$;
DO $$ BEGIN IF EXISTS (
SELECT
FROM information_schema.columns
WHERE table_name = 'images_refs'
AND column_name = 'img'
) THEN
ALTER TABLE images_refs
ALTER COLUMN img TYPE uuid USING img::uuid;
END IF;
END $$;
DO $$ BEGIN IF NOT EXISTS (
SELECT 1 FROM pg_constraint
WHERE conname = 'images_refs_img_storage'
AND conrelid = 'public.images_refs'::regclass
) THEN
ALTER TABLE public.images_refs
ADD CONSTRAINT images_refs_img_storage
FOREIGN KEY (img) REFERENCES public.storage (id)
ON UPDATE CASCADE ON DELETE CASCADE;
END IF;
END $$;
DO $$ BEGIN IF EXISTS (
SELECT
FROM information_schema.columns
WHERE table_name = 'images_refs'
AND column_name = 'thumb'
) THEN
ALTER TABLE images_refs
ALTER COLUMN thumb TYPE uuid USING thumb::uuid;
END IF;
END $$;
DO $$ BEGIN IF NOT EXISTS (
SELECT 1 FROM pg_constraint
WHERE conname = 'images_refs_thumb_storage'
AND conrelid = 'public.images_refs'::regclass
) THEN
ALTER TABLE public.images_refs
ADD CONSTRAINT images_refs_thumb_storage
FOREIGN KEY (thumb) REFERENCES public.storage (id)
ON UPDATE CASCADE ON DELETE CASCADE;
END IF;
END $$;
--- VIDEOS
DO $$ BEGIN IF EXISTS (
SELECT
FROM information_schema.columns
WHERE table_name = 'videos_refs'
) THEN
TRUNCATE TABLE videos_refs;
END IF;
END $$;
DO $$ BEGIN IF EXISTS (
SELECT
FROM information_schema.columns
WHERE table_name = 'videos_refs'
AND column_name = 'video'
) THEN
ALTER TABLE videos_refs
ALTER COLUMN video TYPE uuid USING video::uuid;
END IF;
END $$;
DO $$ BEGIN IF NOT EXISTS (
SELECT 1 FROM pg_constraint
WHERE conname = 'videos_refs_video_storage'
AND conrelid = 'public.videos_refs'::regclass
) THEN
ALTER TABLE public.videos_refs
ADD CONSTRAINT videos_refs_video_storage
FOREIGN KEY (video) REFERENCES public.storage (id)
ON UPDATE CASCADE ON DELETE CASCADE;
END IF;
END $$;
DO $$ BEGIN IF EXISTS (
SELECT
FROM information_schema.columns
WHERE table_name = 'videos_refs'
AND column_name = 'thumb'
) THEN
ALTER TABLE videos_refs
ALTER COLUMN thumb TYPE uuid USING thumb::uuid;
END IF;
END $$;
DO $$ BEGIN IF NOT EXISTS (
SELECT 1 FROM pg_constraint
WHERE conname = 'videos_refs_thumb_storage'
AND conrelid = 'public.videos_refs'::regclass
) THEN
ALTER TABLE public.videos_refs
ADD CONSTRAINT videos_refs_thumb_storage
FOREIGN KEY (thumb) REFERENCES public.storage (id)
ON UPDATE CASCADE ON DELETE CASCADE;
END IF;
END $$;