From 0a324caefd5ee91cda22a5ec6dddaaccb6d72d6b Mon Sep 17 00:00:00 2001 From: Sudeep Ratnaparkhe Date: Thu, 17 Oct 2024 20:04:13 +0530 Subject: [PATCH] content randomly gets if content is low --- src/services/content.service.ts | 102 ++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) diff --git a/src/services/content.service.ts b/src/services/content.service.ts index 4cdd5fc..a213512 100644 --- a/src/services/content.service.ts +++ b/src/services/content.service.ts @@ -773,6 +773,56 @@ export class contentService { }); } + // remove all criteria and get random content with content type + if (contentData.length <= limit) { + let randomContentQuery = { + contentSourceData: { + $elemMatch: { + }, + }, + contentType: contentType + }; + + randomContentQuery.contentSourceData.$elemMatch['language'] = language; + + await this.content + .aggregate([ + { + $addFields: { + contentSourceData: { + $map: { + input: '$contentSourceData', + as: 'elem', + in: { + $mergeObjects: [ + '$$elem', + { + syllableCountArray: { + $objectToArray: '$$elem.syllableCountMap', + }, + }, + ], + }, + }, + }, + }, + }, + { + $match: randomContentQuery, + }, + { $sample: { size: limit - contentData.length } }, + ]) + .exec() + .then((doc) => { + for (const docEle of doc) { + if (contentData.length == 0 || !contentDataSet.has(docEle.contentId)) { + contentDataSet.add(docEle.contentId); + contentData.push(docEle); + } + } + }); + } + for (let contentDataEle of contentData) { const regexMatchBegin = new RegExp( @@ -1200,6 +1250,58 @@ export class contentService { }); } + + + // remove all criteria and get random content with content type + if (contentData.length <= limit) { + let randomContentQuery = { + contentSourceData: { + $elemMatch: { + }, + }, + contentType: contentType + }; + + randomContentQuery.contentSourceData.$elemMatch['language'] = en_config.language_code; + + await this.content + .aggregate([ + { + $addFields: { + contentSourceData: { + $map: { + input: '$contentSourceData', + as: 'elem', + in: { + $mergeObjects: [ + '$$elem', + { + syllableCountArray: { + $objectToArray: '$$elem.syllableCountMap', + }, + }, + ], + }, + }, + }, + }, + }, + { + $match: randomContentQuery, + }, + { $sample: { size: limit - contentData.length } }, + ]) + .exec() + .then((doc) => { + for (const docEle of doc) { + if (contentData.length == 0 || !contentDataSet.has(docEle.contentId)) { + contentDataSet.add(docEle.contentId); + contentData.push(docEle); + } + } + }); + } + // Remove content level // if (contentData.length <= limit) { // delete query.contentSourceData.$elemMatch['$and'];