import * as Sequelize from 'sequelize' async function up (utils: { transaction: Sequelize.Transaction queryInterface: Sequelize.QueryInterface sequelize: Sequelize.Sequelize db: any }): Promise { for (const column of [ 'filename', 'fileUrl', 'torrentFilename', 'torrentUrl' ]) { const data = { type: Sequelize.STRING, allowNull: true, defaultValue: null } await utils.queryInterface.addColumn('videoFile', column, data) } // Generate filenames for webtorrent files { const webtorrentQuery = `SELECT "videoFile".id, "video".uuid, "videoFile".resolution, "videoFile".extname ` + `FROM video INNER JOIN "videoFile" ON "videoFile"."videoId" = video.id` const query = `UPDATE "videoFile" ` + `SET filename = t.uuid || '-' || t.resolution || t.extname, ` + `"torrentFilename" = t.uuid || '-' || t.resolution || '.torrent' ` + `FROM (${webtorrentQuery}) AS t WHERE t.id = "videoFile"."id"` await utils.sequelize.query(query) } // Generate filenames for HLS files { const hlsQuery = `SELECT "videoFile".id, "video".uuid, "videoFile".resolution, "videoFile".extname ` + `FROM video ` + `INNER JOIN "videoStreamingPlaylist" ON "videoStreamingPlaylist"."videoId" = video.id ` + `INNER JOIN "videoFile" ON "videoFile"."videoStreamingPlaylistId" = "videoStreamingPlaylist".id` const query = `UPDATE "videoFile" ` + `SET filename = t.uuid || '-' || t.resolution || '-fragmented' || t.extname, ` + `"torrentFilename" = t.uuid || '-' || t.resolution || '-hls.torrent' ` + `FROM (${hlsQuery}) AS t WHERE t.id = "videoFile"."id"` await utils.sequelize.query(query) } } function down (options) { throw new Error('Not implemented.') } export { up, down }