@@ -202,6 +202,52 @@ async function ensureAcessibilityToModifiedGroups(currentUser, data, challenge)
202
202
}
203
203
}
204
204
205
+ /**
206
+ * Search challenges by legacyId
207
+ * @param {Object } currentUser the user who perform operation
208
+ * @param {Number } legacyId the legacyId
209
+ * @param {Number } page the page
210
+ * @param {Number } perPage the perPage
211
+ * @returns {Array } the search result
212
+ */
213
+ async function searchByLegacyId ( currentUser , legacyId , page , perPage ) {
214
+ const esQuery = {
215
+ index : config . get ( "ES.ES_INDEX" ) ,
216
+ type : config . get ( "ES.ES_TYPE" ) ,
217
+ size : perPage ,
218
+ from : ( page - 1 ) * perPage ,
219
+ body : {
220
+ query : {
221
+ term : {
222
+ legacyId,
223
+ } ,
224
+ } ,
225
+ } ,
226
+ } ;
227
+
228
+ logger . debug ( `es Query ${ JSON . stringify ( esQuery ) } ` ) ;
229
+ let docs ;
230
+ try {
231
+ docs = await esClient . search ( esQuery ) ;
232
+ } catch ( e ) {
233
+ logger . error ( `Query Error from ES ${ JSON . stringify ( e ) } ` ) ;
234
+ docs = {
235
+ hits : {
236
+ hits : [ ] ,
237
+ } ,
238
+ } ;
239
+ }
240
+ const ids = _ . map ( docs . hits . hits , ( item ) => item . _source . id ) ;
241
+ const result = [ ] ;
242
+ for ( const id of ids ) {
243
+ try {
244
+ const challenge = await getChallenge ( currentUser , id ) ;
245
+ result . push ( challenge ) ;
246
+ } catch ( e ) { }
247
+ }
248
+ return result ;
249
+ }
250
+
205
251
/**
206
252
* Search challenges
207
253
* @param {Object } currentUser the user who perform operation
@@ -213,6 +259,10 @@ async function searchChallenges(currentUser, criteria) {
213
259
214
260
const page = criteria . page || 1 ;
215
261
const perPage = criteria . perPage || 20 ;
262
+ if ( ! _ . isUndefined ( criteria . legacyId ) ) {
263
+ const result = await searchByLegacyId ( currentUser , criteria . legacyId , page , perPage ) ;
264
+ return { total : result . length , page, perPage, result } ;
265
+ }
216
266
const boolQuery = [ ] ;
217
267
let sortByScore = false ;
218
268
const matchPhraseKeys = [
@@ -1387,13 +1437,22 @@ async function getChallenge(currentUser, id, checkIfExists) {
1387
1437
// delete challenge.typeId
1388
1438
1389
1439
// Remove privateDescription for unregistered users
1390
- let memberChallengeIds ;
1391
1440
if ( currentUser ) {
1392
- if ( ! currentUser . isMachine && ! hasAdminRole ( currentUser ) ) {
1441
+ if ( ! currentUser . isMachine && ! helper . hasAdminRole ( currentUser ) ) {
1393
1442
_ . unset ( challenge , "billing" ) ;
1394
- memberChallengeIds = await helper . listChallengesByMember ( currentUser . userId ) ;
1395
- if ( ! _ . includes ( memberChallengeIds , challenge . id ) ) {
1443
+ if ( _ . isEmpty ( challenge . privateDescription ) ) {
1396
1444
_ . unset ( challenge , "privateDescription" ) ;
1445
+ } else if (
1446
+ ! _ . get ( challenge , "task.isTask" , false ) ||
1447
+ ! _ . get ( challenge , "task.isAssigned" , false )
1448
+ ) {
1449
+ const memberResources = await helper . listResourcesByMemberAndChallenge (
1450
+ currentUser . userId ,
1451
+ challenge . id
1452
+ ) ;
1453
+ if ( _ . isEmpty ( memberResources ) ) {
1454
+ _ . unset ( challenge , "privateDescription" ) ;
1455
+ }
1397
1456
}
1398
1457
}
1399
1458
} else {
0 commit comments