Skip to content
Snippets Groups Projects
Commit 21404c8e authored by Hugo SUBTIL's avatar Hugo SUBTIL
Browse files

feat: implement BO

parent cb7c4bb2
No related branches found
No related tags found
1 merge request!12Feat/donnes tech debut contrat
...@@ -37,7 +37,7 @@ async function verifyContract(url, apiAuthKey, appLogin, contractId, pointId) { ...@@ -37,7 +37,7 @@ async function verifyContract(url, apiAuthKey, appLogin, contractId, pointId) {
}) })
try { try {
const currentContracts = parseContracts(parsedReply)[0] const currentContracts = parseContracts(parsedReply)
let currentContract = null let currentContract = null
if (Array.isArray(currentContracts)) { if (Array.isArray(currentContracts)) {
currentContract = parseContracts(parsedReply)[0] currentContract = parseContracts(parsedReply)[0]
...@@ -45,7 +45,8 @@ async function verifyContract(url, apiAuthKey, appLogin, contractId, pointId) { ...@@ -45,7 +45,8 @@ async function verifyContract(url, apiAuthKey, appLogin, contractId, pointId) {
currentContract = parseContracts(parsedReply) currentContract = parseContracts(parsedReply)
} }
if ( if (
currentContract.etatCode === contractState.ACTIF && (currentContract.etatCode === contractState.ACTIF ||
currentContract.etatCode === contractState.DEMANDE) &&
currentContract.serviceSouscritLibelle === contractLibelle.ACTIF currentContract.serviceSouscritLibelle === contractLibelle.ACTIF
) )
return currentContract.serviceSouscritId return currentContract.serviceSouscritId
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
const contractState = { const contractState = {
TERMINE: 'TERMINE', TERMINE: 'TERMINE',
ACTIF: 'ACTIF', ACTIF: 'ACTIF',
DEMANDE: 'DEMANDE',
} }
/** /**
......
...@@ -24,19 +24,21 @@ ...@@ -24,19 +24,21 @@
* @property {string} contractId * @property {string} contractId
* @property {number} pointId * @property {number} pointId
* @property {string} lastname * @property {string} lastname
* @property {string} boBaseUrl
* @property {string} boToken
*/ */
/** /**
* Consent definition * Consent definition
* @typedef {object} Consent * @typedef {object} Consent
* @property {number} pointId * @property {number} pointID
* @property {string} lastname * @property {string} lastname
* @property {string} firstname * @property {string} firstname
* @property {string} address * @property {string} address
* @property {string} postalCode * @property {string} postalCode
* @property {string} inseeCode * @property {string} inseeCode
* @property {number} [serviceId] * @property {number} [serviceId]
* @property {number} [id] * @property {number} [ID]
*/ */
/** /**
......
...@@ -99,6 +99,8 @@ async function start(fields, cozyParameters) { ...@@ -99,6 +99,8 @@ async function start(fields, cozyParameters) {
const user = await verifyUserIdentity(fields, baseUrl, apiAuthKey, sgeLogin) const user = await verifyUserIdentity(fields, baseUrl, apiAuthKey, sgeLogin)
let consent = await createBoConsent( let consent = await createBoConsent(
fields.boBaseUrl,
fields.boToken,
pointId, pointId,
user.lastname, user.lastname,
user.firstname, user.firstname,
...@@ -141,18 +143,27 @@ async function start(fields, cozyParameters) { ...@@ -141,18 +143,27 @@ async function start(fields, cozyParameters) {
contractEndDate contractEndDate
) )
} }
consent = await updateBoConsent(consent, serviceId) consent = await updateBoConsent(
fields.boBaseUrl,
fields.boToken,
consent,
serviceId.toString()
)
// Save bo id into account // Save bo id into account
const accountData = await getAccount(ACCOUNT_ID) const accountData = await getAccount(ACCOUNT_ID)
await saveAccountData(this.accountId, { await saveAccountData(this.accountId, {
...accountData.data, ...accountData.data,
consentId: consent.id, consentId: consent.ID,
}) })
} else { } else {
// AlternateStart // AlternateStart
const accountData = await getAccount(ACCOUNT_ID) const accountData = await getAccount(ACCOUNT_ID)
const userConsent = await getBoConsent(accountData.data.consentId) const userConsent = await getBoConsent(
fields.boBaseUrl,
fields.boToken,
accountData.data.consentId
)
const user = await verifyUserIdentity(fields, baseUrl, apiAuthKey, sgeLogin) const user = await verifyUserIdentity(fields, baseUrl, apiAuthKey, sgeLogin)
if ( if (
...@@ -170,7 +181,11 @@ async function start(fields, cozyParameters) { ...@@ -170,7 +181,11 @@ async function start(fields, cozyParameters) {
fields.pointId, fields.pointId,
userConsent.serviceId userConsent.serviceId
) )
await deleteBoConsent() await deleteBoConsent(
fields.boBaseUrl,
fields.boToken,
userConsent.ID ? userConsent.ID : 0
)
} else { } else {
log('error', `No service id retrieved from BO`) log('error', `No service id retrieved from BO`)
throw errors.VENDOR_DOWN throw errors.VENDOR_DOWN
......
// @ts-check // @ts-check
const { log } = require('cozy-konnector-libs') const { log, errors } = require('cozy-konnector-libs')
const { default: axios } = require('axios')
/** /**
* @param {number} pointId * @param {number} pointID
* @param {string} lastname * @param {string} lastname
* @param {string} firstname * @param {string} firstname
* @param {string} address * @param {string} address
* @param {string} postalCode * @param {string} postalCode
* @param {string} inseeCode * @param {string} inseeCode
* @returns {Consent} * @returns {Promise<Consent>}
*/ */
function createBoConsent( async function createBoConsent(
pointId, url,
token,
pointID,
lastname, lastname,
firstname, firstname,
address, address,
postalCode, postalCode,
inseeCode inseeCode
) { ) {
//TODO: Implement
log('info', `Query createBoConsent`) log('info', `Query createBoConsent`)
return { const headers = {
id: 1, headers: {
pointId, Authorization: `Bearer ${token}`,
lastname, },
firstname, }
address, try {
postalCode, const { data } = await axios.post(
inseeCode, `${url}/consent`,
{
pointID,
lastname,
firstname,
address,
postalCode,
inseeCode,
},
headers
)
return data
} catch (e) {
log('error', `BO replied with ${e}`)
throw errors.MAINTENANCE
} }
} }
/** /**
* @param {string} url
* @param {string} token
* @param {Consent} consent * @param {Consent} consent
* @param {number} serviceId * @param {string} serviceId
* @returns {Consent} * @returns {Promise<Consent>}
*/ */
function updateBoConsent(consent, serviceId) { async function updateBoConsent(url, token, consent, serviceId) {
//TODO: Implement
log('info', `Query updateBoConsent`) log('info', `Query updateBoConsent`)
return { const headers = {
...consent, headers: {
serviceId: serviceId, Authorization: `Bearer ${token}`,
},
}
try {
const { data } = await axios.put(
`${url}/consent/${consent.ID?.toString()}`,
{
...consent,
serviceId: parseInt(serviceId),
},
headers
)
return data
} catch (e) {
console.log(e)
log('error', `BO replied with ${e}`)
throw errors.MAINTENANCE
} }
} }
/** /**
* @param {number} boId * @param {number} boId
* @returns {Consent} * @returns {Promise<Consent>}
*/ */
function getBoConsent(boId) { async function getBoConsent(url, token, boId) {
//TODO: Implement //TODO: Implement
log('info', `Query getBoConsent ${boId}`) log('info', `Query getBoConsent ${boId}`)
return { const headers = {
pointId: 1234, headers: {
lastname: 'SUBTIL', Authorization: `Bearer ${token}`,
firstname: 'hugo', },
address: 'mad', }
postalCode: '69007', try {
inseeCode: '69383', const { data } = await axios.get(`${url}/consent/${boId}`, headers)
serviceId: 1234, return data
} catch (e) {
log('error', `BO replied with ${e}`)
throw errors.MAINTENANCE
} }
// throw errors.VENDOR_DOWN
} }
/** /**
* * Delete BO consent
* @param {string} url
* @param {string} token
* @param {number} boId
* @returns
*/ */
function deleteBoConsent() { async function deleteBoConsent(url, token, boId) {
//TODO: deleteBoConsent log('info', `Query deleteBoConsent ${boId}`)
log('info', `Query deleteBoConsent`) const headers = {
throw new Error('Function not implemented.') headers: {
Authorization: `Bearer ${token}`,
},
}
try {
const { data } = await axios.delete(`${url}/consent/${boId}`, headers)
return data
} catch (e) {
log('error', `BO replied with ${e}`)
throw errors.MAINTENANCE
}
} }
module.exports = { module.exports = {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment