in backend/src/lib/controllers/ingestapi-ctrl.ts [118:200]
async function updateDataset(req: Request, res: Response) {
const { id } = req.params;
const { metadata, data } = req.body;
if (!metadata) {
return res.status(400).send("Missing required field `metadata`");
}
if (!metadata.name) {
return res.status(400).send("Missing required field `name`");
}
if (!data) {
return res.status(400).send("Missing required field `data`");
}
if (metadata.schema === "Metrics") {
for (let datum in data) {
//symbol should be valid input or empty
if (
!["", NumberDataType.Percentage, NumberDataType.Currency].includes(
data[datum].percentage
)
) {
return res
.status(400)
.send(
"Invalid symbol type. Choose either `Currency`, `Percentage` or ``"
);
}
//currency should be valid input or empty
if (
![
"",
CurrencyDataType["Dollar $"],
CurrencyDataType["Euro €"],
CurrencyDataType["Pound £"],
].includes(data[datum].currency)
) {
return res
.status(400)
.send(
"Invalid symbol type. Choose either ``, `Dollar $`, `Euro €` or `Pound £`"
);
}
//if symbol is currency, then a currency should be indicated
if (
data[datum].percentage === NumberDataType.Currency &&
data[datum].currency === ""
) {
return res.status(400).send("Missing optional field `currency`");
}
//if currencies are indicated, then symbol should be currency
if (
data[datum].percentage !== NumberDataType.Currency &&
(data[datum].currency === CurrencyDataType["Dollar $"] ||
data[datum].currency === CurrencyDataType["Euro €"] ||
data[datum].currency === CurrencyDataType["Pound £"])
) {
return res
.status(400)
.send("Can only input currency type along with `Currency`");
}
}
}
let parsedData: DatasetContent;
try {
parsedData = DatasetService.parse(data);
} catch (err) {
logger.warn("Unable to parse dataset %s", data);
return res.status(400).send("Data is not a valid JSON array");
}
try {
await DatasetService.updateDataset(id, metadata, parsedData);
res.json();
} catch (err) {
logger.error("Failed to update dataset %o, %o", err, metadata, parsedData);
res.status(400).send("Unable to update dataset");
}
}