61 lines
1.5 KiB
TypeScript
61 lines
1.5 KiB
TypeScript
import { sql } from '@/platforms/postgres';
|
|
|
|
interface Migration {
|
|
label: string
|
|
fields: string[]
|
|
run: () => ReturnType<typeof sql>
|
|
}
|
|
|
|
export const MIGRATIONS: Migration[] = [{
|
|
label: '01: AI Text Generation',
|
|
fields: ['caption', 'semantic_description'],
|
|
run: () => sql`
|
|
ALTER TABLE photos
|
|
ADD COLUMN IF NOT EXISTS caption TEXT,
|
|
ADD COLUMN IF NOT EXISTS semantic_description TEXT
|
|
`,
|
|
}, {
|
|
label: '02: Lens Metadata',
|
|
fields: ['lens_make', 'lens_model'],
|
|
run: () => sql`
|
|
ALTER TABLE photos
|
|
ADD COLUMN IF NOT EXISTS lens_make VARCHAR(255),
|
|
ADD COLUMN IF NOT EXISTS lens_model VARCHAR(255)
|
|
`,
|
|
}, {
|
|
label: '03: Fujifilm Recipe: Data',
|
|
fields: ['recipe_data'],
|
|
run: () => sql`
|
|
DO $$
|
|
BEGIN
|
|
IF EXISTS(
|
|
SELECT 1
|
|
FROM information_schema.columns
|
|
WHERE table_name='photos'
|
|
AND column_name='fujifilm_recipe'
|
|
)
|
|
THEN
|
|
ALTER TABLE photos
|
|
RENAME COLUMN fujifilm_recipe TO recipe_data;
|
|
ELSE
|
|
ALTER TABLE photos
|
|
ADD COLUMN IF NOT EXISTS recipe_data JSONB;
|
|
END IF;
|
|
END $$;
|
|
`,
|
|
}, {
|
|
label: '04: Fujifilm Recipe: Title',
|
|
fields: ['recipe_title'],
|
|
run: () => sql`
|
|
ALTER TABLE photos
|
|
ADD COLUMN IF NOT EXISTS recipe_title VARCHAR(255)
|
|
`,
|
|
}];
|
|
|
|
export const migrationForError = (e: any) =>
|
|
MIGRATIONS.find(migration =>
|
|
migration.fields.some(field =>
|
|
new RegExp(`column "${field}" of relation "photos" does not exist`, 'i')
|
|
.test(e.message),
|
|
),
|
|
); |