1
import { PipelineStage } from 'mongoose'
2
import { PopulateField } from '../../util/pagination/pagination.service'
4
export const getPopulateUserEntityActionsStatsAggregationPipeline = (
5
matchCondtion?: PipelineStage.Match,
6
populateFields?: PopulateField[]
8
const pipeline: PipelineStage[] = [
11
from: 'userentityactions',
13
foreignField: 'forEntity',
19
path: '$entityActions',
20
preserveNullAndEmptyArrays: true
26
entityDetails: { $first: '$$ROOT' },
27
AVG_RATING: { $avg: '$entityActions.rating' },
30
$cond: [{ $eq: ['$entityActions.actionType', 'LIKE'] }, 1, 0]
35
$cond: [{ $eq: ['$entityActions.actionType', 'FOLLOW'] }, 1, 0]
40
$cond: [{ $eq: ['$entityActions.actionType', 'SAVE'] }, 1, 0]
45
$cond: [{ $eq: ['$entityActions.actionType', 'RATING'] }, 1, 0]
52
'entityDetails.entityActions': 0
61
AVG_RATING: '$AVG_RATING',
62
COUNT_LIKE: '$COUNT_LIKE',
63
COUNT_FOLLOW: '$COUNT_FOLLOW',
64
COUNT_SAVES: '$COUNT_SAVES',
65
COUNT_RATING: '$COUNT_RATING'
74
pipeline.unshift(matchCondtion)
77
if (populateFields && populateFields.length > 0) {
78
populateFields.forEach((populate) => {
79
pipeline.splice(1, 0, {
82
localField: populate.localField,
84
as: populate.localField