mirror of https://github.com/Chocobozzz/PeerTube
				
				
				
			
		
			
				
	
	
		
			89 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
| import * as Sequelize from 'sequelize'
 | |
| import { VideoPlaylistPrivacy, VideoPlaylistType } from '../../../shared/models/videos'
 | |
| import { v4 as uuidv4 } from 'uuid'
 | |
| import { WEBSERVER } from '../constants'
 | |
| 
 | |
| async function up (utils: {
 | |
|   transaction: Sequelize.Transaction
 | |
|   queryInterface: Sequelize.QueryInterface
 | |
|   sequelize: Sequelize.Sequelize
 | |
| }): Promise<void> {
 | |
|   const transaction = utils.transaction
 | |
| 
 | |
|   {
 | |
|     const query = `
 | |
| CREATE TABLE IF NOT EXISTS "videoPlaylist"
 | |
| (
 | |
|   "id"             SERIAL,
 | |
|   "name"           VARCHAR(255)             NOT NULL,
 | |
|   "description"    VARCHAR(255),
 | |
|   "privacy"        INTEGER                  NOT NULL,
 | |
|   "url"            VARCHAR(2000)            NOT NULL,
 | |
|   "uuid"           UUID                     NOT NULL,
 | |
|   "type"           INTEGER                  NOT NULL DEFAULT 1,
 | |
|   "ownerAccountId" INTEGER                  NOT NULL REFERENCES "account" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
 | |
|   "videoChannelId" INTEGER REFERENCES "videoChannel" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
 | |
|   "createdAt"      TIMESTAMP WITH TIME ZONE NOT NULL,
 | |
|   "updatedAt"      TIMESTAMP WITH TIME ZONE NOT NULL,
 | |
|   PRIMARY KEY ("id")
 | |
| );`
 | |
|     await utils.sequelize.query(query, { transaction })
 | |
|   }
 | |
| 
 | |
|   {
 | |
|     const query = `
 | |
| CREATE TABLE IF NOT EXISTS "videoPlaylistElement"
 | |
| (
 | |
|   "id"              SERIAL,
 | |
|   "url"             VARCHAR(2000)            NOT NULL,
 | |
|   "position"        INTEGER                  NOT NULL DEFAULT 1,
 | |
|   "startTimestamp"  INTEGER,
 | |
|   "stopTimestamp"   INTEGER,
 | |
|   "videoPlaylistId" INTEGER                  NOT NULL REFERENCES "videoPlaylist" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
 | |
|   "videoId"         INTEGER                  NOT NULL REFERENCES "video" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
 | |
|   "createdAt"       TIMESTAMP WITH TIME ZONE NOT NULL,
 | |
|   "updatedAt"       TIMESTAMP WITH TIME ZONE NOT NULL,
 | |
|   PRIMARY KEY ("id")
 | |
| );`
 | |
| 
 | |
|     await utils.sequelize.query(query, { transaction })
 | |
|   }
 | |
| 
 | |
|   {
 | |
|     const userQuery = 'SELECT "username" FROM "user";'
 | |
| 
 | |
|     const options = { transaction, type: Sequelize.QueryTypes.SELECT as Sequelize.QueryTypes.SELECT }
 | |
|     const userResult = await utils.sequelize.query<{ username: string }>(userQuery, options)
 | |
|     const usernames = userResult.map(r => r.username)
 | |
| 
 | |
|     for (const username of usernames) {
 | |
|       const uuid = uuidv4()
 | |
| 
 | |
|       const baseUrl = WEBSERVER.URL + '/video-playlists/' + uuid
 | |
|       const query = `
 | |
|  INSERT INTO "videoPlaylist" ("url", "uuid", "name", "privacy", "type", "ownerAccountId", "createdAt", "updatedAt")
 | |
|  SELECT '${baseUrl}' AS "url",
 | |
|          '${uuid}' AS "uuid",
 | |
|          'Watch later' AS "name",
 | |
|          ${VideoPlaylistPrivacy.PRIVATE} AS "privacy",
 | |
|          ${VideoPlaylistType.WATCH_LATER} AS "type",
 | |
|          "account"."id" AS "ownerAccountId",
 | |
|          NOW() as "createdAt",
 | |
|          NOW() as "updatedAt"
 | |
|  FROM "user" INNER JOIN "account" ON "user"."id" = "account"."userId"
 | |
|  WHERE "user"."username" = '${username}'`
 | |
| 
 | |
|       await utils.sequelize.query(query, { transaction })
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| function down (options) {
 | |
|   throw new Error('Not implemented.')
 | |
| }
 | |
| 
 | |
| export {
 | |
|   up,
 | |
|   down
 | |
| }
 |