123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- import * as Sequelize from 'sequelize'
- import * as uuidv4 from 'uuid/v4'
- async function up (utils: {
- transaction: Sequelize.Transaction,
- queryInterface: Sequelize.QueryInterface,
- sequelize: Sequelize.Sequelize,
- db: any
- }): Promise<void> {
- const q = utils.queryInterface
- // Assert not friends
- // Create uuid column for author
- const dataAuthorUUID = {
- type: Sequelize.UUID,
- defaultValue: Sequelize.UUIDV4,
- allowNull: true
- }
- await q.addColumn('Authors', 'uuid', dataAuthorUUID)
- // Set UUID to previous authors
- {
- const authors = await utils.db.Author.findAll()
- for (const author of authors) {
- author.uuid = uuidv4()
- await author.save()
- }
- }
- dataAuthorUUID.allowNull = false
- await q.changeColumn('Authors', 'uuid', dataAuthorUUID)
- // Create one author per user that does not already exist
- const users = await utils.db.User.findAll()
- for (const user of users) {
- const author = await utils.db.Author.find({ where: { userId: user.id } })
- if (!author) {
- await utils.db.Author.create({
- name: user.username,
- podId: null, // It is our pod
- userId: user.id
- })
- }
- }
- // Create video channels table
- await utils.db.VideoChannel.sync()
- // For each author, create its default video channel
- const authors = await utils.db.Author.findAll()
- for (const author of authors) {
- await utils.db.VideoChannel.create({
- name: `Default ${author.name} channel`,
- remote: false,
- authorId: author.id
- })
- }
- // Create channelId column for videos
- const dataChannelId = {
- type: Sequelize.INTEGER,
- defaultValue: null,
- allowNull: true
- }
- await q.addColumn('Videos', 'channelId', dataChannelId)
- const query = 'SELECT "id", "authorId" FROM "Videos"'
- const options = {
- type: Sequelize.QueryTypes.SELECT
- }
- const rawVideos = await utils.sequelize.query(query, options)
- for (const rawVideo of rawVideos) {
- const videoChannel = await utils.db.VideoChannel.findOne({ where: { authorId: rawVideo.authorId } })
- const video = await utils.db.Video.findById(rawVideo.id)
- video.channelId = videoChannel.id
- await video.save()
- }
- dataChannelId.allowNull = false
- await q.changeColumn('Videos', 'channelId', dataChannelId)
- const constraintName = 'Videos_channelId_fkey'
- const queryForeignKey = 'ALTER TABLE "Videos" ' +
- ' ADD CONSTRAINT "' + constraintName + '"' +
- ' FOREIGN KEY ("channelId") REFERENCES "VideoChannels" ON UPDATE CASCADE ON DELETE CASCADE'
- await utils.sequelize.query(queryForeignKey)
- await q.removeColumn('Videos', 'authorId')
- }
- function down (options) {
- // update "Applications" SET "migrationVersion" = 75;
- // delete from "Authors";
- // alter table "Authors" drop column "uuid";
- // ALTER SEQUENCE "Authors_id_seq" RESTART WITH 1
- // INSERT INTO "Authors" ("name", "createdAt", "updatedAt", "userId") VALUES ('root', NOW(), NOW(), 1);
- // alter table "Videos" drop column "channelId";
- // drop table "VideoChannels";
- // alter table "Videos" add column "authorId" INTEGER DEFAULT 1;
- // alter table "Videos" ADD CONSTRAINT "coucou" FOREIGN KEY ("authorId") REFERENCES "Authors"
- throw new Error('Not implemented.')
- }
- export {
- up,
- down
- }
|