From 2af3863ac59c480a5b861c63141431313573e3cd Mon Sep 17 00:00:00 2001 From: urwithat Date: Mon, 9 Nov 2020 10:57:43 +0530 Subject: [PATCH 1/2] Swagger update for autocomplete --- docs/swagger.yaml | 86 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/docs/swagger.yaml b/docs/swagger.yaml index c979201..f4c383a 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -570,6 +570,82 @@ paths: description: Internal server error schema: $ref: '#/definitions/ErrorModel' + "/members/autocomplete": + get: + tags: + - Search + description: + Search members by term, the term is mactehd with handle. Based on which userId, handle, firstName, lastName of members profile are provided. + + This services is best used for autocomplete features, where response payload is light and fast in searching through members. + + The service does a like macth and sorts based on string coming before, or after, or is the same as the given string in sort order. + parameters: + - name: term + in: query + required: false + type: string + description: filter by term. term is mactehd with member handle. + - name: fields + in: query + required: false + type: string + description: > + fields=fieldName1,fieldName2,...,fieldN + + + parameter for choosing which fields of members profile that will be included in response. + + + userId - Select the field userId + + + handle - Select the field handle + + + firstName - Select the field firstName + + + lastName - Select the field lastName + - $ref: '#/parameters/page' + - $ref: '#/parameters/perPage' + responses: + '200': + description: OK + schema: + type: array + items: + $ref: '#/definitions/MemberSearchAutocompleteDataItem' + headers: + X-Next-Page: + type: integer + description: The index of the next page + X-Page: + type: integer + description: The index of the current page (starting at 1) + X-Per-Page: + type: integer + description: The number of items to list per page + X-Prev-Page: + type: integer + description: The index of the previous page + X-Total: + type: integer + description: The total number of items + X-Total-Pages: + type: integer + description: The total number of pages + Link: + type: string + description: Pagination link header. + '400': + description: Bad request data + schema: + $ref: '#/definitions/ErrorModel' + '403': + description: No permission to access the API + schema: + $ref: '#/definitions/ErrorModel' + '500': + description: Internal server error + schema: + $ref: '#/definitions/ErrorModel' '/members/{handle}/traits': get: tags: @@ -1283,6 +1359,16 @@ definitions: $ref: '#/definitions/MemberAggregatedSkills' stats: $ref: '#/definitions/MemberStats' + MemberSearchAutocompleteDataItem: + properties: + handle: + type: string + userId: + type: number + firstName: + type: string + lastName: + type: string MemberProfileTrait: properties: traitId: From 3474f96ff21e1c36a3964b5ba11acc93554fe9db Mon Sep 17 00:00:00 2001 From: urwithat Date: Tue, 24 Nov 2020 23:21:39 +0530 Subject: [PATCH 2/2] Member traits data has null check --- src/services/MemberTraitService.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/services/MemberTraitService.js b/src/services/MemberTraitService.js index f09e546..d39ed6f 100644 --- a/src/services/MemberTraitService.js +++ b/src/services/MemberTraitService.js @@ -58,16 +58,24 @@ async function getTraits (currentUser, handle, query) { // convert date time for traits data _.filter(result, (item) => _.forEach(item.traits.data, function(value) { if (value.hasOwnProperty('birthDate')) { - value.birthDate = moment(value.birthDate).toDate().toISOString() + if (value.birthDate) { + value.birthDate = moment(value.birthDate).toDate().toISOString() + } } if (value.hasOwnProperty('memberSince')) { - value.memberSince = moment(value.memberSince).toDate().toISOString() + if (value.memberSince) { + value.memberSince = moment(value.memberSince).toDate().toISOString() + } } if (value.hasOwnProperty('timePeriodFrom')) { - value.timePeriodFrom = moment(value.timePeriodFrom).toDate().toISOString() + if (value.timePeriodFrom) { + value.timePeriodFrom = moment(value.timePeriodFrom).toDate().toISOString() + } } if (value.hasOwnProperty('timePeriodTo')) { - value.timePeriodTo = moment(value.timePeriodTo).toDate().toISOString() + if (value.timePeriodTo) { + value.timePeriodTo = moment(value.timePeriodTo).toDate().toISOString() + } } })) // return only selected fields