diff --git a/__tests__/requests/sge.spec.js b/__tests__/requests/sge.spec.js index a19c6ddff6ac3127d588c5a6e35e206e6109a1de..6d5f1e6f9364ffd8a3cee5dcfb73398a4d2918aa 100644 --- a/__tests__/requests/sge.spec.js +++ b/__tests__/requests/sge.spec.js @@ -99,10 +99,6 @@ describe('Sge routes', () => { valueProcessors: [parseValue], explicitArray: false, }) - console.log( - '🚀 ~ file: sge.spec.js ~ line 19 ~ it ~ parsedReply', - parsedReply.Envelope.Body.consulterDonneesTechniquesContractuelles - ) const data = parsedReply.Envelope.Body.consulterDonneesTechniquesContractuelles expect(Object.keys(data).length).toEqual(3) diff --git a/src/core/contractActivation.js b/src/core/contractActivation.js index 30d65658f435fb2f2d51716e331334c6177d01d4..d12a855c4cbd2c1f33b514bb18390739fc56bb3f 100644 --- a/src/core/contractActivation.js +++ b/src/core/contractActivation.js @@ -1,7 +1,7 @@ // @ts-check const { log, errors } = require('cozy-konnector-libs') const soapRequest = require('easy-soap-request') -const { parseTags, parseValue } = require('../helpers/parsing') +const { parseTags, parseValue, parseServiceId } = require('../helpers/parsing') const { commanderCollectePublicationMesures } = require('../requests/sge') const xml2js = require('xml2js') @@ -43,7 +43,7 @@ async function activateContract( endDate ), }).catch(err => { - log('error', 'rechercherPointResponse') + log('error', 'commanderCollectePublicationMesures') log('error', err) throw errors.LOGIN_FAILED }) @@ -55,13 +55,7 @@ async function activateContract( }) try { - // return parseUserPdl(parsedReply) - //TODO: Parse reply - console.log( - '🚀 ~ file: contractActivation.js ~ line 56 ~ parsedReply', - parsedReply - ) - return 1 + return parseServiceId(parsedReply) } catch (error) { log('error', 'Error while parsing user PDL: ' + error) throw errors.LOGIN_FAILED diff --git a/src/helpers/parsing.js b/src/helpers/parsing.js index ebda5c2964b8eaa76f430ac6978b6dab4322dcdb..ee1d5f1dcd5663e036f7dc4faccf48b2aa66943d 100644 --- a/src/helpers/parsing.js +++ b/src/helpers/parsing.js @@ -43,6 +43,19 @@ function parseContracts(result) { ]['servicesSouscritsMesures']['serviceSouscritMesures'] } +/** + * Return User contract start date + * @param {string} result + * @returns {number} + */ +function parseServiceId(result) { + log('info', 'Parsing serviceId') + const json = JSON.stringify(result) + return JSON.parse(json)['Envelope']['Body'][ + 'commanderCollectePublicationMesuresResponse' + ]['serviceSouscritId'] +} + /** * Parsing SGE xml reply to get only mesure data * @param {string} result @@ -110,4 +123,5 @@ module.exports = { parseUserPdl, parseContracts, parseContractStartDate, + parseServiceId, } diff --git a/src/index.js b/src/index.js index f348441da2aa098c789d86088e5588b3d76c5e8e..5a6023603a5fc626cb41fce8762c585d254685ac 100644 --- a/src/index.js +++ b/src/index.js @@ -33,7 +33,7 @@ const { verifyUserIdentity } = require('./core/verifyUserIdentity') const { activateContract } = require('./core/contractActivation') const { verifyContract } = require('./core/contractVerification') const { terminateContract } = require('./core/contractTermination') -const { saveAccountData } = require('./requests/cozy') +const { getAccount, saveAccountData } = require('./requests/cozy') moment.locale('fr') // set the language moment.tz.setDefault('Europe/Paris') // set the timezone @@ -48,6 +48,7 @@ let startDailyDateString = startDailyDate.format('YYYY-MM-DD') const startLoadDate = moment().subtract(7, 'day') const endDate = moment() const endDateString = endDate.format('YYYY-MM-DD') +const ACCOUNT_ID = 'default_account_id' module.exports = new BaseKonnector(start) module.exports = { getContractStartDate } @@ -88,7 +89,7 @@ async function start(fields, cozyParameters) { */ log('info', 'User Logging...') - if (await isFirstStart(this.getAccountData())) { + if (await isFirstStart(await getAccount('default_account_id'))) { const user = await verifyUserIdentity(fields, baseUrl, apiAuthKey, sgeLogin) let consent = await createBoConsent( @@ -127,15 +128,18 @@ async function start(fields, cozyParameters) { } consent = await updateBoConsent(consent, serviceId) // Save bo id into account - const accountData = await this.getAccountData() - await saveAccountData(this.accountId, { ...accountData, boId: consent.id }) + const accountData = await getAccount(ACCOUNT_ID) + await saveAccountData(this.accountId, { + ...accountData.data, + consentId: consent.id, + }) } else { // AlternateStart - //TODO: getboid from account ? - const accountData = await this.getAccountData() - const userConsent = await getBoConsent(accountData.data.boId) + const accountData = await getAccount(ACCOUNT_ID) + const userConsent = await getBoConsent(accountData.data.consentId) const user = await verifyUserIdentity(fields, baseUrl, apiAuthKey, sgeLogin) if (user.name !== userConsent.name || !user) { + log('error', `Invalid or not found consent for user`) await deleteBoConsent() if (userConsent.serviceId) { await terminateContract( @@ -481,8 +485,17 @@ async function agregateMonthAndYearData(data) { /** * @returns {boolean} */ -async function isFirstStart(account) { - if (account.data && account.data.boId) { +function isFirstStart(account) { + console.log( + '🚀 ~ file: index.js ~ line 490 ~ isFirstStart ~ account.data', + account.data + ) + console.log( + '🚀 ~ file: index.js ~ line 490 ~ isFirstStart ~ account.data', + account.data.consentId + ) + + if (account.data && account.data.consentId) { log('info', 'Konnector not first start') return false } diff --git a/src/requests/bo.js b/src/requests/bo.js index 55c02101c3b01e86774da0921c3895eb4a701f9e..88fb3fc98cd4fb7ae8e44646677eaabac52c57e0 100644 --- a/src/requests/bo.js +++ b/src/requests/bo.js @@ -13,6 +13,7 @@ function createBoConsent(pointId, name, address, postalCode, inseeCode) { //TODO: Implement log('info', `Query createBoConsent`) return { + id: 1, pointId, name, address, diff --git a/src/requests/cozy.js b/src/requests/cozy.js index a02ebcbc5cf708c137cb5b26d88865edd78909b0..511a7ab92a7614ca278605e1c8957e3f2bb23607 100644 --- a/src/requests/cozy.js +++ b/src/requests/cozy.js @@ -3,15 +3,21 @@ const cozyClient = require('cozy-konnector-libs/dist/libs/cozyclient') async function saveAccountData(accountId, accountData) { log('info', `saveAccountData: ${accountId}`) - const accounts = await cozyClient.data.findAll('io.cozy.accounts') - //TODO: refactor with usageof cozy-libs. Not working during implementation - const account = accounts.filter(account => account._id === accountId) + let account = await getAccount(accountId) - return updateOrCreate( - [{ ...account[0], data: accountData }], + account = await updateOrCreate( + [{ ...account, data: accountData }], 'io.cozy.accounts' ) + return account +} + +async function getAccount(accountId) { + log('info', `getAccount: ${accountId}`) + //TODO: refactor with usageof cozy-libs. Not working during implementation + const accounts = await cozyClient.data.findAll('io.cozy.accounts') + return accounts.filter(account => account._id === accountId)[0] } -module.exports = { saveAccountData } +module.exports = { getAccount, saveAccountData } diff --git a/src/requests/sge.js b/src/requests/sge.js index 22669bdcb1f4fe6dc9b1b083da64cb6f8b213fbe..30b2b87634661f5ca83f47f31bd23b8416e98fcf 100644 --- a/src/requests/sge.js +++ b/src/requests/sge.js @@ -133,7 +133,6 @@ function rechercherPoint(appLogin, name, postalCode, inseeCode, address) { 'info', `Query rechercherPoint - postal code / insee code: ${postalCode} / ${inseeCode}` ) - //TODO: handle address return `<?xml version='1.0' encoding='utf-8'?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v2="http://www.enedis.fr/sge/b2b/services/rechercherpoint/v2.0" @@ -246,7 +245,7 @@ function commanderCollectePublicationMesures( * @param {string} appLogin * @param {string} contractId * @param {string} pointId - * @param {string} serviceSouscritId + * @param {number} serviceSouscritId * @returns {*} */ function commanderArretServiceSouscritMesures(