diff --git a/worker-toolkit-potion-polyglot/repos/potion-voice/voice-cloning-job-handler/index.js b/worker-toolkit-potion-polyglot/repos/potion-voice/voice-cloning-job-handler/index.js index 0995e23..d3552ca 100644 --- a/worker-toolkit-potion-polyglot/repos/potion-voice/voice-cloning-job-handler/index.js +++ b/worker-toolkit-potion-polyglot/repos/potion-voice/voice-cloning-job-handler/index.js @@ -10,6 +10,7 @@ const sqs = require('../app/services/sqs') const s3 = require('../app/services/s3') const voiceCloningService = require('./voice_cloning') const userAudioProfileService = require('./user_audio_profile') +const { requireUserId, requireDocumentId } = require('../worker-tenant') AWS.config.update({ region: 'us-west-2' }) const sqsQueueUrl = process.env.SQS_URL @@ -101,14 +102,15 @@ const processQueue = () => { const receiptHandle = response.Messages[0].ReceiptHandle console.log('job===', job) - const { metadata, input, _id, userAudioProfileId } = job._doc + const { _id, userAudioProfileId, userId } = job._doc + requireUserId(userId) + requireDocumentId(_id) + requireDocumentId(userAudioProfileId) console.log('userAudioProfileId', userAudioProfileId) console.log('_id', _id) const { env } = job console.log('env', env) - console.log('metadata------', metadata) - console.log('input', input) const DB_URI = env === 'production' ? mongoUriProd @@ -126,9 +128,26 @@ const processQueue = () => { ? cloudFrontUrlStaging : cloudFrontUrlDev + let authorized = false try { await sqs.deleteMessageFromSQS(sqsQueueUrl, receiptHandle) + const cloningJob = await voiceCloningService.read({ + _id, + userId, + userAudioProfileId, + }) + const audioProfile = await userAudioProfileService.read({ + _id: userAudioProfileId, + userId, + }) + if (!cloningJob || !audioProfile) { + throw new Error('Cloning job or audio profile does not belong to user') + } + authorized = true + + const { metadata, input } = cloningJob + const { directoryName } = metadata console.log('directoryName', directoryName) const logPath = `/mnt/efs/potion-voice/${env}/${directoryName}` @@ -136,9 +155,10 @@ const processQueue = () => { fs.mkdirSync(logPath, { recursive: true }) } // update the db model to processing - await voiceCloningService.update({ _id, status: 'processing' }) + await voiceCloningService.update({ _id, userId, status: 'processing' }) await userAudioProfileService.update({ _id: userAudioProfileId, + userId, status: 'processing', }) @@ -240,7 +260,7 @@ const processQueue = () => { console.timeEnd(VOICE_MINIMIZE_LABEL) // Add the code to update location of generated model and status into DB - await voiceCloningService.update({ _id, status: 'completed' }) + await voiceCloningService.update({ _id, userId, status: 'completed' }) const training_model_path = { voice_model_path: `${resultsPath}/${generatedDirectoryName}/checkpoint_365200.pth`, @@ -252,6 +272,7 @@ const processQueue = () => { await userAudioProfileService.update({ _id: userAudioProfileId, + userId, status: 'completed', training_model_path, }) @@ -273,6 +294,7 @@ const processQueue = () => { // add S3 path to user audio profile model await userAudioProfileService.update({ _id: userAudioProfileId, + userId, training_model_s3_path, }) } catch (error) { @@ -285,11 +307,14 @@ const processQueue = () => { Bugsnag.notify(error) // update the db to set status as error - await voiceCloningService.update({ _id, status: 'error' }) - await userAudioProfileService.update({ - _id: userAudioProfileId, - status: 'error', - }) + if (authorized) { + await voiceCloningService.update({ _id, userId, status: 'error' }) + await userAudioProfileService.update({ + _id: userAudioProfileId, + userId, + status: 'error', + }) + } resolve() // to continue working on new jobs } diff --git a/worker-toolkit-potion-polyglot/repos/potion-voice/voice-cloning-job-handler/user_audio_profile/user_audio_profile_service.js b/worker-toolkit-potion-polyglot/repos/potion-voice/voice-cloning-job-handler/user_audio_profile/user_audio_profile_service.js index e76643d..f35ecd6 100644 --- a/worker-toolkit-potion-polyglot/repos/potion-voice/voice-cloning-job-handler/user_audio_profile/user_audio_profile_service.js +++ b/worker-toolkit-potion-polyglot/repos/potion-voice/voice-cloning-job-handler/user_audio_profile/user_audio_profile_service.js @@ -1,8 +1,9 @@ +const { requireUserId } = require('../../worker-tenant') const StringifyUtils = require('../../app/services/utils/logService') const create = (UserAudioProfileModel) => async (data) => { try { - const newModel = new UserAudioProfileModel({ ...data }) + const newModel = new UserAudioProfileModel({ ...data, userId: requireUserId(data.userId) }) const savedModel = await newModel.save() return savedModel } catch (error) { @@ -17,7 +18,9 @@ const create = (UserAudioProfileModel) => async (data) => { const insertMany = (UserAudioProfileModel) => async (data) => { try { - const inserted = await UserAudioProfileModel.insertMany(data) + const inserted = await UserAudioProfileModel.insertMany( + data.map((item) => ({ ...item, userId: requireUserId(item.userId) })) + ) return inserted } catch (error) { const details = { data } @@ -33,6 +36,7 @@ const read = (UserAudioProfileModel) => async (filter) => { try { const foundModel = await UserAudioProfileModel.findOne({ ...filter, + userId: requireUserId(filter.userId), deleted: false, }) return foundModel @@ -50,6 +54,7 @@ const find = (UserAudioProfileModel) => async (filter) => { try { const foundModels = await UserAudioProfileModel.find({ ...filter, + userId: requireUserId(filter.userId), deleted: false, }) return foundModels @@ -65,12 +70,11 @@ const find = (UserAudioProfileModel) => async (filter) => { const update = (UserAudioProfileModel) => async (data) => { try { + const { _id, userId, ...changes } = data const updatedModel = await UserAudioProfileModel.findOneAndUpdate( - { _id: data._id }, - data, - { - new: true, - } + { _id, userId: requireUserId(userId), deleted: false }, + { $set: changes }, + { new: true } ) return updatedModel } catch (error) { @@ -86,7 +90,7 @@ const update = (UserAudioProfileModel) => async (data) => { const remove = (UserAudioProfileModel) => async (filter) => { try { const updatedModel = await UserAudioProfileModel.findOneAndUpdate( - { ...filter }, + { ...filter, userId: requireUserId(filter.userId) }, { $set: { deleted: true, @@ -108,7 +112,7 @@ const remove = (UserAudioProfileModel) => async (filter) => { const removeMany = (UserAudioProfileModel) => async (filter) => { try { const updatedModel = await UserAudioProfileModel.updateMany( - { ...filter }, + { ...filter, userId: requireUserId(filter.userId) }, { $set: { deleted: true, diff --git a/worker-toolkit-potion-polyglot/repos/potion-voice/voice-cloning-job-handler/voice_cloning/voice_cloning_service.js b/worker-toolkit-potion-polyglot/repos/potion-voice/voice-cloning-job-handler/voice_cloning/voice_cloning_service.js index 329638e..cef601b 100644 --- a/worker-toolkit-potion-polyglot/repos/potion-voice/voice-cloning-job-handler/voice_cloning/voice_cloning_service.js +++ b/worker-toolkit-potion-polyglot/repos/potion-voice/voice-cloning-job-handler/voice_cloning/voice_cloning_service.js @@ -1,8 +1,9 @@ +const { requireUserId } = require('../../worker-tenant') const StringifyUtils = require('../../app/services/utils/logService') const create = (VoiceCloningModel) => async (data) => { try { - const newModel = new VoiceCloningModel({ ...data }) + const newModel = new VoiceCloningModel({ ...data, userId: requireUserId(data.userId) }) const savedModel = await newModel.save() return savedModel } catch (error) { @@ -17,7 +18,9 @@ const create = (VoiceCloningModel) => async (data) => { const insertMany = (VoiceCloningModel) => async (data) => { try { - const inserted = await VoiceCloningModel.insertMany(data) + const inserted = await VoiceCloningModel.insertMany( + data.map((item) => ({ ...item, userId: requireUserId(item.userId) })) + ) return inserted } catch (error) { const details = { data } @@ -33,6 +36,7 @@ const read = (VoiceCloningModel) => async (filter) => { try { const foundModel = await VoiceCloningModel.findOne({ ...filter, + userId: requireUserId(filter.userId), deleted: false, }) return foundModel @@ -50,6 +54,7 @@ const find = (VoiceCloningModel) => async (filter) => { try { const foundModels = await VoiceCloningModel.find({ ...filter, + userId: requireUserId(filter.userId), deleted: false, }) return foundModels @@ -65,12 +70,11 @@ const find = (VoiceCloningModel) => async (filter) => { const update = (VoiceCloningModel) => async (data) => { try { + const { _id, userId, ...changes } = data const updatedModel = await VoiceCloningModel.findOneAndUpdate( - { _id: data._id }, - data, - { - new: true, - } + { _id, userId: requireUserId(userId), deleted: false }, + { $set: changes }, + { new: true } ) return updatedModel @@ -87,7 +91,7 @@ const update = (VoiceCloningModel) => async (data) => { const remove = (VoiceCloningModel) => async (filter) => { try { const updatedModel = await VoiceCloningModel.findOneAndUpdate( - { ...filter }, + { ...filter, userId: requireUserId(filter.userId) }, { $set: { deleted: true, @@ -109,7 +113,7 @@ const remove = (VoiceCloningModel) => async (filter) => { const removeMany = (VoiceCloningModel) => async (filter) => { try { const updatedModel = await VoiceCloningModel.updateMany( - { ...filter }, + { ...filter, userId: requireUserId(filter.userId) }, { $set: { deleted: true, diff --git a/worker-toolkit-potion-polyglot/repos/potion-voice/voice-synthsizer-job-handler/index.js b/worker-toolkit-potion-polyglot/repos/potion-voice/voice-synthsizer-job-handler/index.js index 862300f..7269ea7 100644 --- a/worker-toolkit-potion-polyglot/repos/potion-voice/voice-synthsizer-job-handler/index.js +++ b/worker-toolkit-potion-polyglot/repos/potion-voice/voice-synthsizer-job-handler/index.js @@ -11,6 +11,7 @@ const recordingModel = require('./recording') const recordingSalutationModel = require('./recording_salutation') const jobService = require('./job') const salutationService = require('./salutation') +const { requireUserId, requireDocumentId } = require('../worker-tenant') let throttleMessageFetching = true AWS.config.update({ region: 'us-west-2' }) const sqsQueueUrl = process.env.SQS_URL @@ -79,8 +80,14 @@ const processQueue = () => { recordingId, baseUrlForPotionAi, env, + userId, } = job + requireUserId(userId) + requireDocumentId(userAudioProfileId) + requireDocumentId(salutationId) + requireDocumentId(recordingId) + const DB_URI = env === 'production' ? mongoUriProd @@ -95,10 +102,24 @@ const processQueue = () => { const userAudioProfile = await userAudioProfileService.find({ _id: userAudioProfileId, + userId, status: 'completed', }) - if (userAudioProfile) { - const { training_model_path, userId } = userAudioProfile[0] + if (userAudioProfile.length) { + const { training_model_path } = userAudioProfile[0] + const salutationToUpdate = await recordingSalutationModel.findOne({ + _id: salutationId, + userId, + deleted: false, + }) + const recordingToUpdate = await recordingModel.findOne({ + _id: recordingId, + userId, + deleted: false, + }) + if (!salutationToUpdate || !recordingToUpdate) { + throw new Error('Job recording or salutation does not belong to user') + } const { voice_model_light_path, voice_model_config_light_path, @@ -149,16 +170,6 @@ const processQueue = () => { userId ) // update the dynamic recordings for the current dynamic video with salutation url - const salutationToUpdate = await recordingSalutationModel.findOne({ - _id: salutationId, - deleted: false, - }) - - const recordingToUpdate = await recordingModel.findOne({ - _id: recordingId, - deleted: false, - }) - if ( salutationToUpdate && salutationToUpdate.deleted === false && @@ -169,6 +180,8 @@ const processQueue = () => { await recordingSalutationModel.findOneAndUpdate( { _id: salutationId, + userId, + deleted: false, }, { $set: { @@ -200,7 +213,7 @@ const processQueue = () => { jobsToInsert.push({ firstName, recordingId: recordingToUpdate._id, - userId: recordingToUpdate.userId, + userId, salutationId: salutationToUpdate._id, metadata: jobData, }) diff --git a/worker-toolkit-potion-polyglot/repos/potion-voice/voice-synthsizer-job-handler/job/job_service.js b/worker-toolkit-potion-polyglot/repos/potion-voice/voice-synthsizer-job-handler/job/job_service.js index 44189af..290b1c4 100644 --- a/worker-toolkit-potion-polyglot/repos/potion-voice/voice-synthsizer-job-handler/job/job_service.js +++ b/worker-toolkit-potion-polyglot/repos/potion-voice/voice-synthsizer-job-handler/job/job_service.js @@ -1,8 +1,9 @@ +const { requireUserId } = require('../../worker-tenant') const StringifyUtils = require('../../app/services/utils/logService') const create = (Job) => async (jobData) => { try { - const newJob = new Job({ ...jobData }) + const newJob = new Job({ ...jobData, userId: requireUserId(jobData.userId) }) const savedJob = await newJob.save() return savedJob } catch (error) { @@ -17,7 +18,9 @@ const create = (Job) => async (jobData) => { const insertMany = (Job) => async (jobData) => { try { - const inserted = await Job.insertMany(jobData) + const inserted = await Job.insertMany( + jobData.map((item) => ({ ...item, userId: requireUserId(item.userId) })) + ) return inserted } catch (error) { const details = { jobData } @@ -33,6 +36,7 @@ const read = (Job) => async (filter) => { try { const foundJob = await Job.findOne({ ...filter, + userId: requireUserId(filter.userId), deleted: false, }) return foundJob @@ -50,6 +54,7 @@ const find = (Job) => async (filter) => { try { const foundJobs = await Job.find({ ...filter, + userId: requireUserId(filter.userId), deleted: false, }) return foundJobs @@ -65,9 +70,12 @@ const find = (Job) => async (filter) => { const update = (Job) => async (job) => { try { - const updatedJob = await Job.findOneAndUpdate({ _id: job._id }, job, { - new: true, - }) + const { _id, userId, ...changes } = job + const updatedJob = await Job.findOneAndUpdate( + { _id, userId: requireUserId(userId), deleted: false }, + { $set: changes }, + { new: true } + ) return updatedJob } catch (error) { const details = { job } @@ -82,7 +90,7 @@ const update = (Job) => async (job) => { const remove = (Job) => async (filter) => { try { const updatedJob = await Job.findOneAndUpdate( - { ...filter }, + { ...filter, userId: requireUserId(filter.userId) }, { $set: { deleted: true, @@ -104,7 +112,7 @@ const remove = (Job) => async (filter) => { const removeMany = (Job) => async (filter) => { try { const updatedJob = await Job.updateMany( - { ...filter }, + { ...filter, userId: requireUserId(filter.userId) }, { $set: { deleted: true, diff --git a/worker-toolkit-potion-polyglot/repos/potion-voice/voice-synthsizer-job-handler/salutation/salutation_service.js b/worker-toolkit-potion-polyglot/repos/potion-voice/voice-synthsizer-job-handler/salutation/salutation_service.js index 2d84f78..29dfc65 100644 --- a/worker-toolkit-potion-polyglot/repos/potion-voice/voice-synthsizer-job-handler/salutation/salutation_service.js +++ b/worker-toolkit-potion-polyglot/repos/potion-voice/voice-synthsizer-job-handler/salutation/salutation_service.js @@ -1,5 +1,7 @@ +const { requireUserId } = require('../../worker-tenant') + const create = (Salutation) => async (salutationData, userId) => { - const newSalutation = new Salutation({ ...salutationData, userId }) + const newSalutation = new Salutation({ ...salutationData, userId: requireUserId(userId) }) const savedSalutation = await newSalutation.save() return savedSalutation } @@ -7,6 +9,7 @@ const create = (Salutation) => async (salutationData, userId) => { const read = (Salutation) => async (filter) => { const foundSalutation = await Salutation.findOne({ ...filter, + userId: requireUserId(filter.userId), deleted: false, }) return foundSalutation @@ -15,28 +18,34 @@ const read = (Salutation) => async (filter) => { const find = (Salutation) => async (filter) => { const foundSalutations = await Salutation.find({ ...filter, + userId: requireUserId(filter.userId), deleted: false, }) return foundSalutations } const update = (Salutation) => async (salutation, userId) => { + const { _id, ...changes } = salutation + delete changes.userId const updatedSalutation = await Salutation.findOneAndUpdate( - { _id: salutation._id, userId }, - salutation, + { _id, userId: requireUserId(userId), deleted: false }, + { $set: changes }, { new: true } ) return updatedSalutation } -const modify = (Salutation) => async (salutation) => { +const modify = (Salutation) => async (salutation, userId) => { const findQuery = salutation._id ? { _id: salutation._id } : { transcriptId: salutation.transcriptId } + const changes = { ...salutation } + delete changes._id + delete changes.userId const updatedSalutation = await Salutation.findOneAndUpdate( - findQuery, - salutation, + { ...findQuery, userId: requireUserId(userId), deleted: false }, + { $set: changes }, { new: true } ) return updatedSalutation @@ -51,8 +60,10 @@ const updateOrCreate = userId, }) if (salutation) { - salutation.salutationVideo = salutationVideo - return await update(Salutation)(salutation, userId) + return await update(Salutation)( + { _id: salutation._id, salutationVideo }, + userId + ) } else { return await create(Salutation)( { firstName, salutationVideo, userAudioProfileId }, @@ -63,7 +74,7 @@ const updateOrCreate = const remove = (Salutation) => async (filter, userId) => { const updatedSalutation = await Salutation.findOneAndUpdate( - { ...filter, userId }, + { ...filter, userId: requireUserId(userId) }, { $set: { deleted: true, diff --git a/worker-toolkit-potion-polyglot/repos/potion-voice/voice-synthsizer-job-handler/user_audio_profile/user_audio_profile_service.js b/worker-toolkit-potion-polyglot/repos/potion-voice/voice-synthsizer-job-handler/user_audio_profile/user_audio_profile_service.js index 18416d7..a432cfc 100644 --- a/worker-toolkit-potion-polyglot/repos/potion-voice/voice-synthsizer-job-handler/user_audio_profile/user_audio_profile_service.js +++ b/worker-toolkit-potion-polyglot/repos/potion-voice/voice-synthsizer-job-handler/user_audio_profile/user_audio_profile_service.js @@ -1,8 +1,9 @@ +const { requireUserId } = require('../../worker-tenant') const StringifyUtils = require('../../app/services/utils/logService') const create = (UserAudioProfileModel) => async (data) => { try { - const newModel = new UserAudioProfileModel({ ...data }) + const newModel = new UserAudioProfileModel({ ...data, userId: requireUserId(data.userId) }) const savedModel = await newModel.save() return savedModel } catch (error) { @@ -17,7 +18,9 @@ const create = (UserAudioProfileModel) => async (data) => { const insertMany = (UserAudioProfileModel) => async (data) => { try { - const inserted = await UserAudioProfileModel.insertMany(data) + const inserted = await UserAudioProfileModel.insertMany( + data.map((item) => ({ ...item, userId: requireUserId(item.userId) })) + ) return inserted } catch (error) { const details = { data } @@ -33,6 +36,7 @@ const read = (UserAudioProfileModel) => async (filter) => { try { const foundModel = await UserAudioProfileModel.findOne({ ...filter, + userId: requireUserId(filter.userId), deleted: false }) return foundModel @@ -50,6 +54,7 @@ const find = (UserAudioProfileModel) => async (filter) => { try { const foundModels = await UserAudioProfileModel.find({ ...filter, + userId: requireUserId(filter.userId), deleted: false }) return foundModels @@ -66,12 +71,11 @@ const find = (UserAudioProfileModel) => async (filter) => { const update = (UserAudioProfileModel) => async (data) => { console.log('ua data', data) try { + const { _id, userId, ...changes } = data const updatedModel = await UserAudioProfileModel.findOneAndUpdate( - { _id: data._id }, - data, - { - new: true - } + { _id, userId: requireUserId(userId), deleted: false }, + { $set: changes }, + { new: true } ) console.log('ua updatedModel', updatedModel) return updatedModel @@ -88,7 +92,7 @@ const update = (UserAudioProfileModel) => async (data) => { const remove = (UserAudioProfileModel) => async (filter) => { try { const updatedModel = await UserAudioProfileModel.findOneAndUpdate( - { ...filter }, + { ...filter, userId: requireUserId(filter.userId) }, { $set: { deleted: true @@ -110,7 +114,7 @@ const remove = (UserAudioProfileModel) => async (filter) => { const removeMany = (UserAudioProfileModel) => async (filter) => { try { const updatedModel = await UserAudioProfileModel.updateMany( - { ...filter }, + { ...filter, userId: requireUserId(filter.userId) }, { $set: { deleted: true