From 83b4a46fa51d05cb7c2af36765caa9e1100bbe54 Mon Sep 17 00:00:00 2001 From: Muhammad Abdul Hakim Shibghatallah <70675129+abdulhakim2902@users.noreply.github.com> Date: Thu, 16 Dec 2021 22:09:02 +0700 Subject: [PATCH] fixed post filter by experience & include users in experience (#310) --- src/interceptors/experience.interceptor.ts | 11 +++++++ src/interceptors/pagination.interceptor.ts | 36 +++++++++++++++++++--- src/services/experience.service.ts | 11 ++++--- 3 files changed, 50 insertions(+), 8 deletions(-) diff --git a/src/interceptors/experience.interceptor.ts b/src/interceptors/experience.interceptor.ts index 2785a0ce0..09aaf0cca 100644 --- a/src/interceptors/experience.interceptor.ts +++ b/src/interceptors/experience.interceptor.ts @@ -176,6 +176,17 @@ export class ExperienceInterceptor implements Provider { ({userId} = await this.userExperienceRepository.findById( userExperienceId, )); + break; + } + + case MethodType.FINDBYID: { + const filter = invocationCtx.args[1] ?? {}; + + if (!filter.include) filter.include = ['users']; + else filter.include.push('users'); + + invocationCtx.args[1] = filter; + break; } } diff --git a/src/interceptors/pagination.interceptor.ts b/src/interceptors/pagination.interceptor.ts index f139f8122..bc751feae 100644 --- a/src/interceptors/pagination.interceptor.ts +++ b/src/interceptors/pagination.interceptor.ts @@ -229,6 +229,25 @@ export class PaginationInterceptor implements Provider { filter.where = Object.assign(filter.where ?? {}, {id: {inq: userIds}}); } + if ( + className === ControllerType.USEREXPERIENCE && + Object.prototype.hasOwnProperty.call(filter.where, 'userId') + ) { + const include = { + relation: 'experience', + scope: { + include: [ + { + relation: 'users', + }, + ], + }, + }; + + if (!filter.include) filter.include = [include]; + else filter.include.push(include); + } + // Get pageMetadata const {count} = await this.metricService.countData( className, @@ -504,8 +523,11 @@ export class PaginationInterceptor implements Provider { if (!friends.length && !topics.length && !personIds.length) return; - const joinTopics = topics.join('|'); - const regexTopic = new RegExp(joinTopics, 'i'); + // TODO: ignore html tag in query + const spaceTopics = topics + .map(tag => ` ${tag}"|"${tag} |"${tag}"| ${tag} `) + .join('|'); + const regexSpaceTopics = new RegExp(spaceTopics, 'i'); return { or: [ @@ -513,10 +535,16 @@ export class PaginationInterceptor implements Provider { and: [{tags: {inq: topics}}, {visibility: VisibilityType.PUBLIC}], }, { - and: [{title: regexTopic}, {visibility: VisibilityType.PUBLIC}], + and: [ + {title: regexSpaceTopics}, + {visibility: VisibilityType.PUBLIC}, + ], }, { - and: [{text: regexTopic}, {visibility: VisibilityType.PUBLIC}], + and: [ + {text: regexSpaceTopics}, + {visibility: VisibilityType.PUBLIC}, + ], }, { and: [ diff --git a/src/services/experience.service.ts b/src/services/experience.service.ts index be1479529..1bd61569e 100644 --- a/src/services/experience.service.ts +++ b/src/services/experience.service.ts @@ -73,8 +73,11 @@ export class ExperienceService { }) ).map(e => e.requesteeId); - const joinTags = tags.join('|'); - const regexTag = new RegExp(joinTags, 'i'); + // TODO: ignore html tag in query + const spaceTags = tags + .map(tag => ` ${tag}"|"${tag} |"${tag}"| ${tag} `) + .join('|'); + const regexSpaceTags = new RegExp(spaceTags, 'i'); return { or: [ @@ -88,10 +91,10 @@ export class ExperienceService { ], }, { - and: [{text: regexTag}, {visibility: VisibilityType.PUBLIC}], + and: [{text: regexSpaceTags}, {visibility: VisibilityType.PUBLIC}], }, { - and: [{title: regexTag}, {visibility: VisibilityType.PUBLIC}], + and: [{title: regexSpaceTags}, {visibility: VisibilityType.PUBLIC}], }, { and: [