From cbb513e737bfca3ad3dbd43ad9614968e6e207cf Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 18 Aug 2020 11:09:00 +0200 Subject: [PATCH] Add server migration for playlists --- server/initializers/constants.ts | 2 +- .../0530-playlist-multiple-video.ts | 46 +++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 server/initializers/migrations/0530-playlist-multiple-video.ts diff --git a/server/initializers/constants.ts b/server/initializers/constants.ts index 2f9a750a5..c26c3a88c 100644 --- a/server/initializers/constants.ts +++ b/server/initializers/constants.ts @@ -23,7 +23,7 @@ import { CONFIG, registerConfigChangedHandler } from './config' // --------------------------------------------------------------------------- -const LAST_MIGRATION_VERSION = 525 +const LAST_MIGRATION_VERSION = 530 // --------------------------------------------------------------------------- diff --git a/server/initializers/migrations/0530-playlist-multiple-video.ts b/server/initializers/migrations/0530-playlist-multiple-video.ts new file mode 100644 index 000000000..51a8c06b0 --- /dev/null +++ b/server/initializers/migrations/0530-playlist-multiple-video.ts @@ -0,0 +1,46 @@ +import * as Sequelize from 'sequelize' +import { WEBSERVER } from '../constants' + +async function up (utils: { + transaction: Sequelize.Transaction + queryInterface: Sequelize.QueryInterface + sequelize: Sequelize.Sequelize +}): Promise { + { + const field = { + type: Sequelize.STRING, + allowNull: true + } + await utils.queryInterface.changeColumn('videoPlaylistElement', 'url', field) + } + + { + await utils.sequelize.query('DROP INDEX IF EXISTS video_playlist_element_video_playlist_id_video_id;') + } + + { + const selectPlaylistUUID = 'SELECT "uuid" FROM "videoPlaylist" WHERE "id" = "videoPlaylistElement"."videoPlaylistId"' + const url = `'${WEBSERVER.URL}' || '/video-playlists/' || (${selectPlaylistUUID}) || '/videos/' || "videoPlaylistElement"."id"` + + const query = ` + UPDATE "videoPlaylistElement" SET "url" = ${url} WHERE id IN ( + SELECT "videoPlaylistElement"."id" FROM "videoPlaylistElement" + INNER JOIN "videoPlaylist" ON "videoPlaylist".id = "videoPlaylistElement"."videoPlaylistId" + INNER JOIN account ON account.id = "videoPlaylist"."ownerAccountId" + INNER JOIN actor ON actor.id = account."actorId" + WHERE actor."serverId" IS NULL + )` + + await utils.sequelize.query(query) + } + +} + +function down (options) { + throw new Error('Not implemented.') +} + +export { + up, + down +} -- 2.41.0