async function updateDataset()

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");
  }
}