]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Add server migration for playlists
authorChocobozzz <me@florianbigard.com>
Tue, 18 Aug 2020 09:09:00 +0000 (11:09 +0200)
committerChocobozzz <chocobozzz@cpy.re>
Wed, 19 Aug 2020 09:30:21 +0000 (11:30 +0200)
server/initializers/constants.ts
server/initializers/migrations/0530-playlist-multiple-video.ts [new file with mode: 0644]

index 2f9a750a5b6323a849e079c433d8c42936473cea..c26c3a88c42651da4413807113a8e80fc4156459 100644 (file)
@@ -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 (file)
index 0000000..51a8c06
--- /dev/null
@@ -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<void> {
+  {
+    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
+}