aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/initializers/migrations/0685-multiple-actor-images.ts
blob: c656f7e28170458f9b0c821db8406b4bb2a5365a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import * as Sequelize from 'sequelize'

async function up (utils: {
  transaction: Sequelize.Transaction
  queryInterface: Sequelize.QueryInterface
  sequelize: Sequelize.Sequelize
  db: any
}): Promise<void> {
  {
    await utils.queryInterface.addColumn('actorImage', 'actorId', {
      type: Sequelize.INTEGER,
      defaultValue: null,
      allowNull: true,
      references: {
        model: 'actor',
        key: 'id'
      },
      onDelete: 'CASCADE'
    }, { transaction: utils.transaction })

    // Avatars
    {
      const query = `UPDATE "actorImage" SET "actorId" = (SELECT "id" FROM "actor" WHERE "actor"."avatarId" = "actorImage"."id") ` +
                    `WHERE "type" = 1`
      await utils.sequelize.query(query, { type: Sequelize.QueryTypes.UPDATE, transaction: utils.transaction })
    }

    // Banners
    {
      const query = `UPDATE "actorImage" SET "actorId" = (SELECT "id" FROM "actor" WHERE "actor"."bannerId" = "actorImage"."id") ` +
                    `WHERE "type" = 2`
      await utils.sequelize.query(query, { type: Sequelize.QueryTypes.UPDATE, transaction: utils.transaction })
    }

    // Remove orphans
    {
      const query = `DELETE FROM "actorImage" WHERE id NOT IN (` +
        `SELECT "bannerId" FROM actor WHERE "bannerId" IS NOT NULL ` +
        `UNION select "avatarId" FROM actor WHERE "avatarId" IS NOT NULL` +
      `);`

      await utils.sequelize.query(query, { type: Sequelize.QueryTypes.DELETE, transaction: utils.transaction })
    }

    await utils.queryInterface.changeColumn('actorImage', 'actorId', {
      type: Sequelize.INTEGER,
      allowNull: false
    }, { transaction: utils.transaction })

    await utils.queryInterface.removeColumn('actor', 'avatarId', { transaction: utils.transaction })
    await utils.queryInterface.removeColumn('actor', 'bannerId', { transaction: utils.transaction })
  }
}

function down () {
  throw new Error('Not implemented.')
}

export {
  up,
  down
}