cms.c2sgmbh/src/migrations_backup/20251130_143000_media_optimization.ts
Martin Porwoll d18e58de40 chore: add jobs, backups, and migration history
Jobs:
- Add consentRetentionJob.ts for GDPR consent cleanup
- Add scheduler.ts for background job scheduling

Backups:
- Add database backup files for recovery

Migration backups:
- Archive old migration files for reference

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 08:24:26 +00:00

177 lines
10 KiB
TypeScript

import { MigrateUpArgs, MigrateDownArgs, sql } from '@payloadcms/db-postgres'
export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {
await db.execute(sql`
-- Neue Felder für Media Collection
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "caption" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "credit" varchar;
-- Image Size Spalten für optimierte Bildvarianten
-- WebP Varianten
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_thumbnail_url" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_thumbnail_width" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_thumbnail_height" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_thumbnail_mime_type" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_thumbnail_filesize" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_thumbnail_filename" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_small_url" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_small_width" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_small_height" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_small_mime_type" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_small_filesize" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_small_filename" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_medium_url" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_medium_width" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_medium_height" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_medium_mime_type" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_medium_filesize" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_medium_filename" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_large_url" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_large_width" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_large_height" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_large_mime_type" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_large_filesize" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_large_filename" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_xlarge_url" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_xlarge_width" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_xlarge_height" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_xlarge_mime_type" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_xlarge_filesize" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_xlarge_filename" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_2k_url" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_2k_width" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_2k_height" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_2k_mime_type" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_2k_filesize" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_2k_filename" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_og_url" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_og_width" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_og_height" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_og_mime_type" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_og_filesize" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_og_filename" varchar;
-- AVIF Varianten
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_medium_avif_url" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_medium_avif_width" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_medium_avif_height" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_medium_avif_mime_type" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_medium_avif_filesize" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_medium_avif_filename" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_large_avif_url" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_large_avif_width" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_large_avif_height" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_large_avif_mime_type" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_large_avif_filesize" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_large_avif_filename" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_xlarge_avif_url" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_xlarge_avif_width" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_xlarge_avif_height" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_xlarge_avif_mime_type" varchar;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_xlarge_avif_filesize" numeric;
ALTER TABLE "media" ADD COLUMN IF NOT EXISTS "sizes_xlarge_avif_filename" varchar;
-- Tags Tabelle (hasMany text)
CREATE TABLE IF NOT EXISTS "media_tags" (
"order" integer NOT NULL,
"parent_id" integer NOT NULL,
"value" varchar,
"id" serial PRIMARY KEY NOT NULL
);
CREATE INDEX IF NOT EXISTS "media_tags_order_idx" ON "media_tags" USING btree ("order");
CREATE INDEX IF NOT EXISTS "media_tags_parent_idx" ON "media_tags" USING btree ("parent_id");
ALTER TABLE "media_tags" DROP CONSTRAINT IF EXISTS "media_tags_parent_id_fk";
ALTER TABLE "media_tags" ADD CONSTRAINT "media_tags_parent_id_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."media"("id") ON DELETE cascade ON UPDATE no action;
`)
}
export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {
await db.execute(sql`
ALTER TABLE "media" DROP COLUMN IF EXISTS "caption";
ALTER TABLE "media" DROP COLUMN IF EXISTS "credit";
-- WebP Sizes
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_thumbnail_url";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_thumbnail_width";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_thumbnail_height";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_thumbnail_mime_type";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_thumbnail_filesize";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_thumbnail_filename";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_small_url";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_small_width";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_small_height";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_small_mime_type";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_small_filesize";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_small_filename";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_medium_url";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_medium_width";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_medium_height";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_medium_mime_type";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_medium_filesize";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_medium_filename";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_large_url";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_large_width";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_large_height";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_large_mime_type";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_large_filesize";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_large_filename";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_xlarge_url";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_xlarge_width";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_xlarge_height";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_xlarge_mime_type";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_xlarge_filesize";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_xlarge_filename";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_2k_url";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_2k_width";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_2k_height";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_2k_mime_type";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_2k_filesize";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_2k_filename";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_og_url";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_og_width";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_og_height";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_og_mime_type";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_og_filesize";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_og_filename";
-- AVIF Sizes
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_medium_avif_url";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_medium_avif_width";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_medium_avif_height";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_medium_avif_mime_type";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_medium_avif_filesize";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_medium_avif_filename";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_large_avif_url";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_large_avif_width";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_large_avif_height";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_large_avif_mime_type";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_large_avif_filesize";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_large_avif_filename";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_xlarge_avif_url";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_xlarge_avif_width";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_xlarge_avif_height";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_xlarge_avif_mime_type";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_xlarge_avif_filesize";
ALTER TABLE "media" DROP COLUMN IF EXISTS "sizes_xlarge_avif_filename";
DROP TABLE IF EXISTS "media_tags" CASCADE;
`)
}