diff --git a/public/index.html b/public/index.html index c482729..aa355c2 100644 --- a/public/index.html +++ b/public/index.html @@ -45,6 +45,8 @@
- ${JSON.stringify(error, null, 2)} + ${JSON.stringify(error, Object.getOwnPropertyNames(error), 2)}
Please provide a preferredNamespaceURI for your Concept Scheme. See here for an example. - < br > +
Go back ${showError(error)} ` ); } else { + console.log(error.message) res .status(500) .send( diff --git a/src/publishToReconciliation/handleData.js b/src/publishToReconciliation/handleData.js index 027b399..740cecb 100644 --- a/src/publishToReconciliation/handleData.js +++ b/src/publishToReconciliation/handleData.js @@ -6,6 +6,7 @@ import { buildJSON } from "./buildJSON.js"; import { esClient } from "../elastic/connect.js"; import { writeLog } from "./writeLog.js"; import { config } from "../config.js"; +import { ReconcileData } from "../types.js"; const esIndex = config.es_index; @@ -21,22 +22,41 @@ function parseFileError(message, error) { this.name = "parseFileError"; } -export const parseFile = async (filePath, log) => { +export class IllegalCharacterError extends Error { + constructor(message) { + super(message); + this.name = "IllegalCharacterError" + } +} + +async function getTurtleString(filePath, fileUrl) { + if (filePath) { + const ttlString = await fs.readFileSync(filePath).toString(); + return ttlString + } else if (fileUrl) { + const response = await fetch(fileUrl) + const ttlString = await response.text() + console.log(ttlString) + return ttlString + } +} + +/** + * @param {ReconcileData} reconcileData + * @param {Object} log + */ +export const parseFile = async (reconcileData, log) => { var data = []; - const account = path.basename(path.dirname(filePath)); + const account = reconcileData.account; try { - console.log(`> Read and parse ${account}/${path.basename(filePath)} ...`); + console.log(`> Read and parse ${account}/${path.basename(reconcileData.filePath)} ...`); if (!/[a-zA-Z0-9]/.test(account.slice(0, 1))) { - console.log( - `> Invalid data: account must start with a letter or a number. Instead, its value is: ${account}` - ); + throw new IllegalCharacterError(`Invalid data: account must start with a letter or a number. Instead, its value is: ${account}`) } - const ttlString = await fs.readFileSync(filePath).toString(); + const ttlString = await getTurtleString(reconcileData.filePath, reconcileData.fileUrl); const j = await buildJSON(ttlString.toString(), account); if (!/[a-zA-Z0-9]/.test(j.dataset.slice(0, 1))) { - console.log( - `> Invalid data: dataset must start with a letter or a number. Instead, its value is: ${j.dataset}` - ); + throw new IllegalCharacterError(`Invalid data: dataset must start with a letter or a number. Instead, its value is: ${j.dataset}`) } log.status = "processing"; log.account = account; diff --git a/src/publishToReconciliation/index.js b/src/publishToReconciliation/index.js index da2a120..934c680 100644 --- a/src/publishToReconciliation/index.js +++ b/src/publishToReconciliation/index.js @@ -1,16 +1,20 @@ import { writeLog } from "./writeLog.js"; import { processFile } from "./processFile.js"; +import { ReconcileData } from "../types.js"; -export const publishToReconciliation = (filePath, id, language) => { +/** + * @param {ReconcileData} reconcileData + */ +export const publishToReconciliation = (reconcileData) => { const log = { - id: id, + id: reconcileData.id, status: "processing", log: [], }; writeLog(log); return new Promise((resolve, reject) => { try { - resolve(processFile(filePath, log, language)); + resolve(processFile(reconcileData, log)); } catch (error) { console.log("rejected"); reject(error); diff --git a/src/publishToReconciliation/processFile.js b/src/publishToReconciliation/processFile.js index e27cc57..e062350 100644 --- a/src/publishToReconciliation/processFile.js +++ b/src/publishToReconciliation/processFile.js @@ -1,6 +1,7 @@ import { parseFile, sendData, deleteData } from "./handleData.js"; import { writeLog } from "./writeLog.js"; import { config } from "../config.js"; +import { ReconcileData } from "../types.js"; const esIndex = config.es_index; @@ -12,9 +13,13 @@ function HandleDataError(message, error, account, dataset) { this.dataset = dataset; } -export const processFile = async (filePath, log, language) => { +/** + * @param {ReconcileData} reconcileData + * @param {Object} log + */ +export const processFile = async (reconcileData, log) => { try { - const data = await parseFile(filePath, log); + const data = await parseFile(reconcileData, log); for await (const v of data) { // delete old data const responseDeleted = await deleteData(v.account, v.dataset); @@ -46,7 +51,7 @@ export const processFile = async (filePath, log, language) => { // TODO improve this log.account = v.account; log.dataset = v.dataset; - log.language = language + log.language = reconcileData.language log.status = "success"; log.reconcile_service_url = config.reconcile_service_url; writeLog(log); diff --git a/src/types.js b/src/types.js new file mode 100644 index 0000000..bde00a1 --- /dev/null +++ b/src/types.js @@ -0,0 +1,10 @@ + +/** + * @typedef {Object} ReconcileData + * @property {string} filePath + * @property {string} fileUrl + * @property {string} account + * @property {string} id + * @property {string} language + */ +export const ReconcileData = {}