|
1 | 1 | require('../bootstrap')
|
2 | 2 | const util = require('util')
|
3 | 3 | const config = require('config')
|
| 4 | +const request = require('superagent') |
4 | 5 | const _ = require('lodash')
|
5 | 6 | const logger = require('../common/logger')
|
6 | 7 | const helper = require('../common/helper')
|
@@ -63,22 +64,49 @@ async function createEntry (termsOfUseId, memberId) {
|
63 | 64 | return result
|
64 | 65 | }
|
65 | 66 |
|
| 67 | +/** |
| 68 | + * Gets all paginated results from `/terms/:id/users` |
| 69 | + * @param {String} m2mToken the m2m token |
| 70 | + */ |
| 71 | +async function getAllTermUsers (m2mToken) { |
| 72 | + let allData = [] |
| 73 | + // get search is paginated, we need to get all pages' data |
| 74 | + let page = 1 |
| 75 | + while (true) { |
| 76 | + const result = await request |
| 77 | + .get(`${config.V5_TERMS_API_URL}/${config.SYNC_V5_TERM_UUID}/users`) |
| 78 | + .query({ page, perPage: 100 }) |
| 79 | + .set('Authorization', `Bearer ${m2mToken}`) |
| 80 | + .set('Content-Type', 'application/json') |
| 81 | + .set('Accept', 'application/json') |
| 82 | + |
| 83 | + const users = _.get(result, 'body.result', []) |
| 84 | + if (users.length === 0) { |
| 85 | + break |
| 86 | + } |
| 87 | + allData = allData.concat(users) |
| 88 | + page += 1 |
| 89 | + if (result.headers['x-total-pages'] && page > Number(result.headers['x-total-pages'])) { |
| 90 | + break |
| 91 | + } |
| 92 | + } |
| 93 | + return allData |
| 94 | +} |
| 95 | + |
66 | 96 | /**
|
67 | 97 | * Application entry point
|
68 | 98 | */
|
69 | 99 | async function main () {
|
70 | 100 | try {
|
71 |
| - let res |
72 | 101 | const m2mToken = await helper.getM2MToken()
|
73 | 102 | logger.info(`Fetching details for term ${config.SYNC_V5_TERM_UUID}`)
|
74 |
| - res = await helper.getRequest(`${config.V5_TERMS_API_URL}/${config.SYNC_V5_TERM_UUID}`, m2mToken) |
| 103 | + const res = await helper.getRequest(`${config.V5_TERMS_API_URL}/${config.SYNC_V5_TERM_UUID}`, m2mToken) |
75 | 104 | const legacyTermId = _.get(res, 'body.legacyId')
|
76 | 105 | if (!legacyTermId) {
|
77 | 106 | throw new Error(`Term ${config.SYNC_V5_TERM_UUID} does not have a legacyId`)
|
78 | 107 | }
|
79 | 108 | logger.info(`Fetching users that have agreed to ${config.SYNC_V5_TERM_UUID}`)
|
80 |
| - res = await helper.getRequest(`${config.V5_TERMS_API_URL}/${config.SYNC_V5_TERM_UUID}/users`, m2mToken) |
81 |
| - const v5Entries = _.get(res, 'body.result', []) |
| 109 | + const v5Entries = await getAllTermUsers(m2mToken) |
82 | 110 | logger.debug(`Found ${v5Entries.length} users`)
|
83 | 111 |
|
84 | 112 | logger.info(`Fetching users from legacy for ID: ${legacyTermId}`)
|
|
0 commit comments