31 lines
1.1 KiB
JavaScript
31 lines
1.1 KiB
JavaScript
exports.up = (pgm) => {
|
|
pgm.createTable('slides', {
|
|
id: 'id',
|
|
video_id: {
|
|
type: 'integer',
|
|
notNull: true,
|
|
references: 'videos',
|
|
onDelete: 'CASCADE',
|
|
},
|
|
gnommo_slide_id: { type: 'varchar(20)', notNull: true },
|
|
slide_order: { type: 'integer', notNull: true },
|
|
image_filename: { type: 'varchar(500)' },
|
|
display_mode: { type: 'varchar(50)' },
|
|
component_key: { type: 'varchar(100)' },
|
|
props: { type: 'jsonb' },
|
|
presenter_notes: { type: 'text' },
|
|
start_time_sec: { type: 'numeric' },
|
|
end_time_sec: { type: 'numeric' },
|
|
created_at: { type: 'timestamptz', notNull: true, default: pgm.func('NOW()') },
|
|
updated_at: { type: 'timestamptz', notNull: true, default: pgm.func('NOW()') },
|
|
});
|
|
|
|
pgm.addConstraint('slides', 'slides_video_id_gnommo_slide_id_unique', 'UNIQUE (video_id, gnommo_slide_id)');
|
|
pgm.createIndex('slides', 'video_id', { name: 'idx_slides_video_id' });
|
|
pgm.createIndex('slides', ['video_id', 'slide_order'], { name: 'idx_slides_video_order' });
|
|
};
|
|
|
|
exports.down = (pgm) => {
|
|
pgm.dropTable('slides');
|
|
};
|