Added validation and automated short key to create unit master

This commit is contained in:
unknown 2025-11-12 12:54:09 +05:30
parent 50b2c8234c
commit e87802d3db

View File

@ -8,6 +8,88 @@ const csv = require("csv-parser");
// Create new Unit
exports.createUnit = async (req, res) => {
try {
const { uom } = req.body;
if (!uom || typeof uom !== "string" || !uom.trim()) {
return res.status(400).json({
status: "error",
message: "UOM (Unit Name) is required and must be a non-empty string.",
});
}
const cleaned = uom.replace(/[^a-zA-Z]/g, "").toUpperCase();
if (!cleaned) {
return res.status(400).json({
status: "error",
message: "UOM must contain at least one letter (A-Z).",
});
}
const existingUOM = await UnitMaster.findOne({
where: Sequelize.where(
Sequelize.fn("LOWER", Sequelize.col("uom")),
uom.toLowerCase()
),
});
if (existingUOM)
return res.status(400).json({
status: "error",
message: `Unit '${uom}' already exists with short key '${existingUOM.uom_short_name}'.`,
});
//Generate short name (same rule as CSV)
const abbreviationMap = {
METER: "MT",
METRE: "MT",
KILOGRAM: "KG",
GRAM: "GM",
LITER: "LTR",
LITRE: "LTR",
CENTIMETER: "CM",
MILLIMETER: "MM",
SECOND: "SEC",
MINUTE: "MIN",
HOUR: "HR",
DAY: "DAY",
PIECE: "PC",
BOX: "BX",
USER: "USR",
ITEM: "ITM",
UNIT: "UNT",
};
let uomShort;
if (cleaned.length <= 5) {
uomShort = cleaned;
} else {
// If >5 letters, use abbreviation or auto-generate
const baseShort = abbreviationMap[cleaned] || cleaned.substring(0, 3);
const randomLetters = () =>
Array.from({ length: 2 }, () =>
String.fromCharCode(65 + Math.floor(Math.random() * 26))
).join("");
uomShort = `${baseShort}${randomLetters()}`.substring(0, 5);
}
let exists = await UnitMaster.findOne({
where: Sequelize.where(
Sequelize.fn("LOWER", Sequelize.col("uom_short_name")),
uomShort.toLowerCase()
),
});
while (exists) {
const randomSuffix = Math.random().toString(36).substring(2, 3).toUpperCase();
uomShort = (uomShort.substring(0, 4) + randomSuffix).substring(0, 5);
exists = await UnitMaster.findOne({
where: Sequelize.where(
Sequelize.fn("LOWER", Sequelize.col("uom_short_name")),
uomShort.toLowerCase()
),
});
}
req.body.uom_short_name = uomShort;
const unit = await UnitMaster.create(req.body);
res.status(201).json({ status: "success", data: unit });
} catch (err) {