This repository has been archived by the owner on Mar 6, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
23 changed files
with
641 additions
and
109 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
54 changes: 54 additions & 0 deletions
54
packages/api/src/routes/hasura-actions/enquete-import/actionsEnqueteImporter.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
const enqueteExcelParser = require("./enqueteExcelParser"); | ||
const logger = require("../../../utils/logger"); | ||
|
||
const actionsEnqueteImporter = { | ||
importEnqueteFile | ||
}; | ||
|
||
async function importEnqueteFile({ | ||
file: { base64str }, | ||
importContext: { | ||
enqueteId, | ||
// mandataireUserId & serviceId are mutually exclusive | ||
mandataireUserId, | ||
serviceId | ||
} | ||
}) { | ||
const start = Date.now(); | ||
logger.info(`[IMPORT ENQUETE] START ${enqueteId}`); | ||
|
||
const enqueteToImport = enqueteExcelParser.parse({ | ||
base64str | ||
}); | ||
|
||
logger.info(`[IMPORT ENQUETE] enqueteToImport: ${enqueteToImport.length}`); | ||
|
||
const importSummary = { | ||
errors: [], | ||
mandataireUserId, | ||
serviceId | ||
}; | ||
|
||
const durationInSeconds = Math.ceil((Date.now() - start) / 1000); | ||
|
||
const errors = importSummary.errors; | ||
if (errors.length) { | ||
logger.info( | ||
`[IMPORT ENQUETE] ERROR (duration: ${durationInSeconds}s, errors: ${errors.length}, to create: ${importSummary.create.length}, to update: ${importSummary.update.length})` | ||
); | ||
} else { | ||
logger.info( | ||
`[IMPORT ENQUETE] SUCCESS (duration: ${durationInSeconds}s, created: ${importSummary.create.length}, updated: ${importSummary.update.length})` | ||
); | ||
} | ||
|
||
return { | ||
errors: importSummary.errors, | ||
creationNumber: importSummary.create.length, | ||
updateNumber: importSummary.update.length, | ||
invalidAntenneNames: | ||
importSummary.errors.length === 0 ? importSummary.invalidAntenneNames : [] | ||
}; | ||
} | ||
|
||
module.exports = actionsEnqueteImporter; |
59 changes: 59 additions & 0 deletions
59
packages/api/src/routes/hasura-actions/enquete-import/checkImportEnqueteParameters.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
const HttpError = require("../../../utils/error/HttpError"); | ||
// const { Service } = require("../../../models/Service"); | ||
|
||
async function checkImportEnqueteParameters(req) { | ||
const { role, userId } = req.user; | ||
|
||
const inputParameters = req.body.input; | ||
|
||
const { base64str, enqueteId, serviceId, mandataireUserId } = inputParameters; | ||
|
||
if (!serviceId && !mandataireUserId) { | ||
throw new HttpError( | ||
422, | ||
"Invalid parameters: serviceId or mandataireUserId is required" | ||
); | ||
} | ||
|
||
let importContext; | ||
if (role === "admin") { | ||
// ADMIN | ||
throw new HttpError(400, "Not supported yet (admin)"); | ||
// importContext = serviceId ? { enqueteId, serviceId } : { enqueteId, mandataireUserId }; | ||
} else if (role === "service") { | ||
// SERVICE | ||
throw new HttpError(400, "Not supported yet (service)"); | ||
// if (!serviceId) { | ||
// throw new HttpError(422, "Invalid parameters: serviceId is required"); | ||
// } | ||
// const service = await Service.query().findById(serviceId); | ||
// if (!service || service.id !== serviceId) { | ||
// throw new HttpError(403, "Access denied: invalid serviceId"); | ||
// } | ||
// importContext = { enqueteId, serviceId }; | ||
} else if (role === "individuel") { | ||
// MANDATAIRE INDIVIDUEL | ||
if (!mandataireUserId) { | ||
throw new HttpError( | ||
422, | ||
"Invalid parameters: mandataireUserId is required" | ||
); | ||
} | ||
if (userId !== mandataireUserId) { | ||
throw new HttpError(403, "Access denied: invalid mandataireUserId"); | ||
} | ||
importContext = { enqueteId, mandataireUserId }; | ||
} else { | ||
throw new HttpError(403, "Unexpected user"); | ||
} | ||
|
||
const importEnqueteParameters = { | ||
file: { | ||
base64str | ||
}, | ||
importContext | ||
}; | ||
return importEnqueteParameters; | ||
} | ||
|
||
module.exports = checkImportEnqueteParameters; |
25 changes: 25 additions & 0 deletions
25
packages/api/src/routes/hasura-actions/enquete-import/enqueteExcelParser.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
var XLSX = require("xlsx"); | ||
|
||
const parse = ({ base64str }) => { | ||
const workbook = XLSX.read(base64str, { | ||
cellDates: true, | ||
dateNF: "dd/mm/yyyy", | ||
locale: "fr-FR", | ||
type: "base64", | ||
raw: false | ||
}); | ||
|
||
const worksheet = workbook.Sheets["info mandataire-exerc. activité"]; | ||
if (worksheet) { | ||
console.log("test"); | ||
console.log("test:", worksheet["A2"]); | ||
} | ||
|
||
return []; | ||
}; | ||
|
||
const enqueteExcelParser = { | ||
parse | ||
}; | ||
|
||
module.exports = enqueteExcelParser; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
65 changes: 65 additions & 0 deletions
65
packages/api/src/routes/hasura-actions/mesures-import/checkImportMesuresParameters.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
const HttpError = require("../../../utils/error/HttpError"); | ||
const { Service } = require("../../../models/Service"); | ||
|
||
async function checkImportMesuresParameters(req) { | ||
const { role, userId } = req.user; | ||
|
||
const inputParameters = req.body.input; | ||
|
||
const { | ||
name, | ||
base64str, | ||
serviceId, | ||
mandataireUserId, | ||
antennesMap | ||
} = inputParameters; | ||
|
||
if (!serviceId && !mandataireUserId) { | ||
throw new HttpError( | ||
422, | ||
"Invalid parameters: serviceId or mandataireUserId is required" | ||
); | ||
} | ||
|
||
let importContext; | ||
if (role === "admin") { | ||
// ADMIN | ||
importContext = serviceId ? { serviceId } : { mandataireUserId }; | ||
} else if (role === "service") { | ||
// SERVICE | ||
if (!serviceId) { | ||
throw new HttpError(422, "Invalid parameters: serviceId is required"); | ||
} | ||
const service = await Service.query().findById(serviceId); | ||
if (!service || service.id !== serviceId) { | ||
throw new HttpError(403, "Access denied: invalid serviceId"); | ||
} | ||
importContext = { serviceId }; | ||
} else if (role === "individuel") { | ||
// MANDATAIRE INDIVIDUEL | ||
if (!mandataireUserId) { | ||
throw new HttpError( | ||
422, | ||
"Invalid parameters: mandataireUserId is required" | ||
); | ||
} | ||
if (userId !== mandataireUserId) { | ||
throw new HttpError(403, "Access denied: invalid mandataireUserId"); | ||
} | ||
importContext = { mandataireUserId }; | ||
} else { | ||
throw new HttpError(403, "Unexpected user"); | ||
} | ||
|
||
const importMesuresParameters = { | ||
file: { | ||
base64str, | ||
type: name.endsWith(".xls") || name.endsWith(".xlsx") ? "xls" : "csv" | ||
}, | ||
importContext, | ||
antennesMap: antennesMap ? JSON.parse(antennesMap) : undefined | ||
}; | ||
return importMesuresParameters; | ||
} | ||
|
||
module.exports = checkImportMesuresParameters; |
Oops, something went wrong.