|
@@ -1,4 +1,4 @@
|
|
|
-import Debug from 'debug'
|
|
|
+import assert from 'assert'
|
|
|
|
|
|
import { DB } from '../../../generated/indexer'
|
|
|
import { Channel } from '../../../generated/graphql-server/src/modules/channel/channel.model'
|
|
@@ -17,127 +17,95 @@ import { FeaturedVideo } from '../../../generated/graphql-server/src/modules/fea
|
|
|
|
|
|
import { IWhereCond } from '../../types'
|
|
|
|
|
|
-const debug = Debug('mappings:remove-entity')
|
|
|
+function assertKeyViolation(entityName: string, entityId: string) {
|
|
|
+ assert(false, `Can not remove ${entityName}(${entityId})! There are references to this entity`)
|
|
|
+}
|
|
|
|
|
|
async function removeChannel(db: DB, where: IWhereCond): Promise<void> {
|
|
|
const record = await db.get(Channel, where)
|
|
|
- if (record === undefined) throw Error(`Channel not found`)
|
|
|
- if (record.videos) record.videos.map(async (v) => await removeVideo(db, { where: { id: v.id } }))
|
|
|
+ if (!record) throw Error(`Channel(${where.where.id}) not found`)
|
|
|
+ if (record.videos && record.videos.length) assertKeyViolation(`Channel`, record.id)
|
|
|
await db.remove<Channel>(record)
|
|
|
}
|
|
|
|
|
|
async function removeCategory(db: DB, where: IWhereCond): Promise<void> {
|
|
|
const record = await db.get(Category, where)
|
|
|
- if (record === undefined) throw Error(`Category not found`)
|
|
|
- if (record.videos) record.videos.map(async (v) => await removeVideo(db, { where: { id: v.id } }))
|
|
|
+ if (!record) throw Error(`Category(${where.where.id}) not found`)
|
|
|
+ if (record.videos && record.videos.length) assertKeyViolation(`Category`, record.id)
|
|
|
await db.remove<Category>(record)
|
|
|
}
|
|
|
async function removeVideoMedia(db: DB, where: IWhereCond): Promise<void> {
|
|
|
const record = await db.get(VideoMedia, where)
|
|
|
- if (record === undefined) throw Error(`VideoMedia not found`)
|
|
|
- if (record.video) await db.remove<Video>(record.video)
|
|
|
+ if (!record) throw Error(`VideoMedia(${where.where.id}) not found`)
|
|
|
+ if (record.video) assertKeyViolation(`VideoMedia`, record.id)
|
|
|
await db.remove<VideoMedia>(record)
|
|
|
}
|
|
|
async function removeVideo(db: DB, where: IWhereCond): Promise<void> {
|
|
|
const record = await db.get(Video, where)
|
|
|
- if (record === undefined) throw Error(`Video not found`)
|
|
|
+ if (!record) throw Error(`Video(${where.where.id}) not found`)
|
|
|
await db.remove<Video>(record)
|
|
|
}
|
|
|
|
|
|
async function removeLicense(db: DB, where: IWhereCond): Promise<void> {
|
|
|
const record = await db.get(LicenseEntity, where)
|
|
|
- if (record === undefined) throw Error(`License not found`)
|
|
|
-
|
|
|
- const { knownLicense, userdefinedLicense } = record
|
|
|
- let videos: Video[] = []
|
|
|
-
|
|
|
- if (knownLicense) {
|
|
|
- videos = await db.getMany(Video, {
|
|
|
- where: {
|
|
|
- license: {
|
|
|
- isTypeOf: 'KnownLicense',
|
|
|
- code: knownLicense.code,
|
|
|
- description: knownLicense.description,
|
|
|
- name: knownLicense.name,
|
|
|
- url: knownLicense.url,
|
|
|
- },
|
|
|
- },
|
|
|
- })
|
|
|
- }
|
|
|
- if (userdefinedLicense) {
|
|
|
- videos = await db.getMany(Video, {
|
|
|
- where: { license: { isTypeOf: 'UserDefinedLicense', content: userdefinedLicense.content } },
|
|
|
- })
|
|
|
- }
|
|
|
- // Remove all the videos under this license
|
|
|
- videos.map(async (v) => await removeVideo(db, { where: { id: v.id } }))
|
|
|
+ if (!record) throw Error(`License(${where.where.id}) not found`)
|
|
|
+ if (record.videolicense && record.videolicense.length) assertKeyViolation(`License`, record.id)
|
|
|
await db.remove<LicenseEntity>(record)
|
|
|
}
|
|
|
+
|
|
|
async function removeUserDefinedLicense(db: DB, where: IWhereCond): Promise<void> {
|
|
|
const record = await db.get(UserDefinedLicenseEntity, where)
|
|
|
- if (record === undefined) throw Error(`UserDefinedLicense not found`)
|
|
|
- if (record.licenseentityuserdefinedLicense)
|
|
|
- record.licenseentityuserdefinedLicense.map(async (l) => await removeLicense(db, { where: { id: l.id } }))
|
|
|
+ if (!record) throw Error(`UserDefinedLicense(${where.where.id}) not found`)
|
|
|
await db.remove<UserDefinedLicenseEntity>(record)
|
|
|
}
|
|
|
+
|
|
|
async function removeKnownLicense(db: DB, where: IWhereCond): Promise<void> {
|
|
|
const record = await db.get(KnownLicenseEntity, where)
|
|
|
- if (record === undefined) throw Error(`KnownLicense not found`)
|
|
|
- if (record.licenseentityknownLicense)
|
|
|
- record.licenseentityknownLicense.map(async (k) => await removeLicense(db, { where: { id: k.id } }))
|
|
|
+ if (!record) throw Error(`KnownLicense(${where.where.id}) not found`)
|
|
|
await db.remove<KnownLicenseEntity>(record)
|
|
|
}
|
|
|
async function removeMediaLocation(db: DB, where: IWhereCond): Promise<void> {
|
|
|
const record = await db.get(MediaLocationEntity, where)
|
|
|
- if (record === undefined) throw Error(`MediaLocation not found`)
|
|
|
- if (record.videoMedia) await removeVideo(db, { where: { id: record.videoMedia.id } })
|
|
|
-
|
|
|
- const { httpMediaLocation, joystreamMediaLocation } = record
|
|
|
-
|
|
|
- let videoMedia: VideoMedia | undefined
|
|
|
- if (httpMediaLocation) {
|
|
|
- videoMedia = await db.get(VideoMedia, {
|
|
|
- where: { location: { isTypeOf: 'HttpMediaLocation', url: httpMediaLocation.url, port: httpMediaLocation.port } },
|
|
|
- })
|
|
|
- }
|
|
|
- if (joystreamMediaLocation) {
|
|
|
- videoMedia = await db.get(VideoMedia, {
|
|
|
- where: { location: { isTypeOf: 'JoystreamMediaLocation', dataObjectId: joystreamMediaLocation.dataObjectId } },
|
|
|
- })
|
|
|
- }
|
|
|
- if (videoMedia) await db.remove<VideoMedia>(videoMedia)
|
|
|
+ if (!record) throw Error(`MediaLocation(${where.where.id}) not found`)
|
|
|
+ if (record.videoMedia) assertKeyViolation('MediaLocation', record.id)
|
|
|
await db.remove<MediaLocationEntity>(record)
|
|
|
}
|
|
|
+
|
|
|
async function removeHttpMediaLocation(db: DB, where: IWhereCond): Promise<void> {
|
|
|
const record = await db.get(HttpMediaLocationEntity, where)
|
|
|
- if (record === undefined) throw Error(`HttpMediaLocation not found`)
|
|
|
- if (record.medialocationentityhttpMediaLocation)
|
|
|
- record.medialocationentityhttpMediaLocation.map(async (v) => await removeMediaLocation(db, { where: { id: v.id } }))
|
|
|
+ if (!record) throw Error(`HttpMediaLocation(${where.where.id}) not found`)
|
|
|
+ if (record.medialocationentityhttpMediaLocation && record.medialocationentityhttpMediaLocation.length) {
|
|
|
+ assertKeyViolation('HttpMediaLocation', record.id)
|
|
|
+ }
|
|
|
await db.remove<HttpMediaLocationEntity>(record)
|
|
|
}
|
|
|
+
|
|
|
async function removeJoystreamMediaLocation(db: DB, where: IWhereCond): Promise<void> {
|
|
|
const record = await db.get(JoystreamMediaLocationEntity, where)
|
|
|
- if (record === undefined) throw Error(`JoystreamMediaLocation not found`)
|
|
|
- if (record.medialocationentityjoystreamMediaLocation)
|
|
|
- record.medialocationentityjoystreamMediaLocation.map(async (v) => await removeVideo(db, { where: { id: v.id } }))
|
|
|
+ if (!record) throw Error(`JoystreamMediaLocation(${where.where.id}) not found`)
|
|
|
+ if (record.medialocationentityjoystreamMediaLocation && record.medialocationentityjoystreamMediaLocation.length) {
|
|
|
+ assertKeyViolation('JoystreamMediaLocation', record.id)
|
|
|
+ }
|
|
|
await db.remove<JoystreamMediaLocationEntity>(record)
|
|
|
}
|
|
|
+
|
|
|
async function removeLanguage(db: DB, where: IWhereCond): Promise<void> {
|
|
|
const record = await db.get(Language, where)
|
|
|
- if (record === undefined) throw Error(`Language not found`)
|
|
|
- if (record.channellanguage) record.channellanguage.map(async (c) => await removeChannel(db, { where: { id: c.id } }))
|
|
|
- if (record.videolanguage) record.videolanguage.map(async (v) => await removeVideo(db, { where: { id: v.id } }))
|
|
|
+ if (!record) throw Error(`Language(${where.where.id}) not found`)
|
|
|
+ if (record.channellanguage && record.channellanguage.length) assertKeyViolation('Language', record.id)
|
|
|
+ if (record.videolanguage && record.videolanguage.length) assertKeyViolation('Language', record.id)
|
|
|
await db.remove<Language>(record)
|
|
|
}
|
|
|
+
|
|
|
async function removeVideoMediaEncoding(db: DB, where: IWhereCond): Promise<void> {
|
|
|
const record = await db.get(VideoMediaEncoding, where)
|
|
|
- if (record === undefined) throw Error(`Language not found`)
|
|
|
+ if (!record) throw Error(`VideoMediaEncoding(${where.where.id}) not found`)
|
|
|
await db.remove<VideoMediaEncoding>(record)
|
|
|
}
|
|
|
|
|
|
async function removeFeaturedVideo(db: DB, where: IWhereCond): Promise<void> {
|
|
|
const record = await db.get(FeaturedVideo, { ...where, relations: ['video'] })
|
|
|
- if (!record) throw Error(`FeaturedVideo not found. id: ${where.where.id}`)
|
|
|
+ if (!record) throw Error(`FeaturedVideo(${where.where.id}) not found`)
|
|
|
|
|
|
record.video.isFeatured = false
|
|
|
record.video.featured = undefined
|