/* eslint-disable import/first */ import 'reflect-metadata' import { loadConfig } from '../generated/graphql-server/src/config' loadConfig() import BN from 'bn.js' import { nanoid } from 'nanoid' import { SnakeNamingStrategy } from '@dzlzv/hydra-db-utils' import { createConnection, ConnectionOptions, getConnection, EntityManager } from 'typeorm' import { Video } from '../generated/graphql-server/src/modules/video/video.model' import { Channel } from '../generated/graphql-server/src/modules/channel/channel.model' import { Block, Network } from '../generated/graphql-server/src/modules/block/block.model' import { Category } from '../generated/graphql-server/src/modules/category/category.model' import { VideoMedia } from '../generated/graphql-server/src/modules/video-media/video-media.model' import { LicenseEntity } from '../generated/graphql-server/src/modules/license-entity/license-entity.model' import { JoystreamMediaLocation, KnownLicense } from '../generated/graphql-server/src/modules/variants/variants.model' import { KnownLicenseEntity } from '../generated/graphql-server/src/modules/known-license-entity/known-license-entity.model' import { VideoMediaEncoding } from '../generated/graphql-server/src/modules/video-media-encoding/video-media-encoding.model' import { MediaLocationEntity } from '../generated/graphql-server/src/modules/media-location-entity/media-location-entity.model' import { HttpMediaLocationEntity } from '../generated/graphql-server/src/modules/http-media-location-entity/http-media-location-entity.model' import { JoystreamMediaLocationEntity } from '../generated/graphql-server/src/modules/joystream-media-location-entity/joystream-media-location-entity.model' function getConnectionOptions() { const connectionConfig: ConnectionOptions = { type: 'postgres', host: process.env.WARTHOG_DB_HOST, port: parseInt(process.env.WARTHOG_DB_PORT!), username: process.env.WARTHOG_DB_USERNAME, password: process.env.WARTHOG_DB_PASSWORD, database: process.env.WARTHOG_DB_DATABASE, entities: [process.env.WARTHOG_DB_ENTITIES!], namingStrategy: new SnakeNamingStrategy(), logging: true, } return connectionConfig } export async function main(): Promise { console.log(`Initializing...`) await createConnection(getConnectionOptions()) await getConnection().transaction(async (db: EntityManager) => { const id = '0' const createdAt = new Date() const createdById = '0' const version = 0 // ///////// Block ///////////////// const happenedIn = new Block({ createdAt, createdById, version, block: 0, timestamp: new BN(Date.now()), network: Network.BABYLON, }) await db.save(happenedIn) // ///////// Block ///////////////// const commonProperties = { id, happenedIn, createdAt, createdById, version } // ///////// HttpMediaLocationEntity ///////////////// const httpMediaLocation = new HttpMediaLocationEntity({ ...commonProperties, url: '5FyzfM2YtZa75hHYCAo5evNS8bH8P4Kw8EyXqKkC5upVSDBQ', }) await db.save(httpMediaLocation) // ///////// HttpMediaLocationEntity ///////////////// // ///////// JoystreamMediaLocationEntity ///////////////// const joyMediaLocation = new JoystreamMediaLocationEntity({ ...commonProperties, dataObjectId: '5FyzfM2YtZa75hHYCAo5evNS8bH8P4Kw8EyXqKkC5upVSDBQ', }) await db.save(joyMediaLocation) // ///////// JoystreamMediaLocationEntity ///////////////// // ///////// KnownLicenseEntity ///////////////// const knownLicense = new KnownLicenseEntity({ ...commonProperties, code: 'NA' }) await db.save(knownLicense) // ///////// KnownLicenseEntity ///////////////// // ///////// License ///////////////// const k = new KnownLicense() k.code = knownLicense.code const license = new LicenseEntity({ ...commonProperties, type: k }) await db.save(license) // ///////// License ///////////////// // ///////// MediaLocationEntity ///////////////// const mediaLocEntity = new MediaLocationEntity({ ...commonProperties, joystreamMediaLocation: joyMediaLocation }) await db.save(mediaLocEntity) // ///////// MediaLocationEntity ///////////////// // ///////// Channel ///////////////// const channel = new Channel({ ...commonProperties, handle: `Channel(0) - ${nanoid()}`, description: `Channel 0`, isPublic: false, isCurated: false, }) await db.save(channel) // ///////// Channel ///////////////// // ///////// Category ///////////////// const category = new Category({ ...commonProperties, name: `Other` }) await db.save(category) // ///////// Category ///////////////// // ///////// VideoMediaEncoding ///////////////// const videoMediaEncod = new VideoMediaEncoding({ ...commonProperties, name: 'NA' }) await db.save(videoMediaEncod) // ///////// VideoMediaEncoding ///////////////// // ///////// VideoMedia ///////////////// const location = new JoystreamMediaLocation() location.dataObjectId = joyMediaLocation.dataObjectId const videoMedia = new VideoMedia({ ...commonProperties, location, locationEntity: mediaLocEntity, encoding: videoMediaEncod, pixelHeight: 0, pixelWidth: 0, }) await db.save(videoMedia) // ///////// VideoMedia ///////////////// // ///////// Video ///////////////// const v = new Video({ ...commonProperties }) v.category = category v.channel = channel v.media = videoMedia v.license = license v.title = `Video(0)` v.description = `Video(0)` v.duration = 0 v.thumbnailUrl = 'https://eu-central-1.linodeobjects.com/joystream/1.png' v.isPublic = false v.isCurated = false v.isExplicit = false v.isFeatured = false await db.save