@xrengine/server-core
Version:
Shared components for XREngine server
52 lines (46 loc) • 1.99 kB
text/typescript
import { Hook, HookContext } from '@feathersjs/feathers'
import _ from 'lodash'
import config from '../appconfig'
import { getStorageProvider } from '../media/storageprovider/storageprovider'
import uploadThumbnailLinkHook from './upload-thumbnail-link'
export default (): Hook => {
return async (context: HookContext): Promise<HookContext> => {
const { app, data, params } = context
if (data.id) {
const currentResource = await app.service('static-resource').get(data.id)
currentResource.metadata = JSON.parse(currentResource.metadata)
if (
currentResource.metadata.thumbnailUrl !== data.metadata.thumbnailUrl &&
data.metadata.thumbnailUrl != null &&
data.metadata.thumbnailUrl.length > 0
) {
const existingThumbnails = await app.service('static-resource').find({
query: {
userId: params['identity-provider'].userId,
parentResourceId: data.id,
url: currentResource.metadata.thumbnailUrl || ''
}
})
await Promise.all(
existingThumbnails.data.map(async (item) => {
return app.service('static-resource').remove(item.id)
})
)
params.parentResourceId = data.id
const bucketName = config.aws.s3.staticResourceBucket
params.uploadPath = data.url.replace('https://s3.amazonaws.com/' + bucketName + '/', '')
params.uploadPath = params.uploadPath.replace('/manifest.mpd', '')
const storageProviderName = data.storageProviderName
delete data.storageProviderName
params.storageProvider = getStorageProvider(storageProviderName)
const contextClone = _.cloneDeep(context)
const result = await (uploadThumbnailLinkHook() as any)(contextClone)
data.metadata.thumbnailUrl = result.params.thumbnailUrl.replace(
's3.amazonaws.com/' + bucketName,
config.aws.cloudfront.domain
)
}
}
return context
}
}