feat: enhance sparepart database queries and sparepart number validation #46
@@ -203,6 +203,10 @@ function buildDynamicUpdate(table, data, where) {
|
||||
setParts.push(`${key} = $${index++}`);
|
||||
values.push(value);
|
||||
}
|
||||
else if (key !== undefined && key !== null) {
|
||||
setParts.push(`${key} = $${index++}`);
|
||||
values.push(value);
|
||||
}
|
||||
}
|
||||
|
||||
if (setParts.length === 0) {
|
||||
|
||||
@@ -54,9 +54,8 @@ const getAllSparepartDb = async (searchParams = {}) => {
|
||||
COALESCE(a.sparepart_code, '') + ' - ' + COALESCE(a.sparepart_name, '') AS sparepart_code_name
|
||||
FROM m_sparepart a
|
||||
WHERE a.deleted_at IS NULL
|
||||
${
|
||||
whereConditions.length > 0 ? `AND ${whereConditions.join(" AND ")}` : ""
|
||||
}
|
||||
${whereConditions.length > 0 ? `AND ${whereConditions.join(" AND ")}` : ""
|
||||
}
|
||||
${whereOrConditions ? whereOrConditions : ""}
|
||||
ORDER BY a.sparepart_id ASC
|
||||
${searchParams.limit ? `OFFSET $2 * $1 ROWS FETCH NEXT $1 ROWS ONLY` : ""}
|
||||
@@ -84,15 +83,15 @@ const getSparepartByIdDb = async (id) => {
|
||||
return result.recordset;
|
||||
};
|
||||
|
||||
const checkSparepartNameExistsDb = async (sparePartName, excludeId = null) => {
|
||||
const checkSparepartNameExistsDb = async (sparePartName, sparePartNumber, excludeId = null) => {
|
||||
let queryText = `
|
||||
SELECT sparepart_id
|
||||
FROM m_sparepart
|
||||
WHERE sparepart_name = $1 AND deleted_at IS NULL
|
||||
WHERE sparepart_name = $1 AND sparepart_number = $2 AND deleted_at IS NULL
|
||||
`;
|
||||
let values = [sparePartName];
|
||||
let values = [sparePartName, sparePartNumber];
|
||||
if (excludeId) {
|
||||
queryText += ` AND sparepart_id != $2`;
|
||||
queryText += ` AND sparepart_id != $3`;
|
||||
values.push(excludeId);
|
||||
}
|
||||
const result = await pool.query(queryText, values);
|
||||
|
||||
@@ -13,7 +13,7 @@ class SparepartService {
|
||||
static async getAllSparepart(param) {
|
||||
try {
|
||||
const results = await getAllSparepartDb(param);
|
||||
results.data.map((item) => {});
|
||||
results.data.map((item) => { });
|
||||
return results;
|
||||
} catch (error) {
|
||||
throw new ErrorHandler(error.statusCode || 500, error.message);
|
||||
@@ -39,8 +39,8 @@ class SparepartService {
|
||||
static async createSparepart(data) {
|
||||
try {
|
||||
if (!data || typeof data !== "object") data = {};
|
||||
if (data.sparepart_name) {
|
||||
const exists = await checkSparepartNameExistsDb(data.sparepart_name);
|
||||
if (data.sparepart_name && data.sparepart_number) {
|
||||
const exists = await checkSparepartNameExistsDb(data.sparepart_name, data.sparepart_number);
|
||||
if (exists)
|
||||
throw new ErrorHandler(400, "Sparepart name already exists");
|
||||
}
|
||||
@@ -63,10 +63,11 @@ class SparepartService {
|
||||
if (!existing) throw new ErrorHandler(404, "Sparepart not found");
|
||||
if (
|
||||
data.sparepart_name &&
|
||||
data.sparepart_name !== existing.sparepart_name
|
||||
data.sparepart_name !== existing.sparepart_name && data.sparepart_number && data.sparepart_number !== existing.sparepart_number
|
||||
) {
|
||||
const exists = await checkSparepartNameExistsDb(
|
||||
data.sparepart_name,
|
||||
data.sparepart_number,
|
||||
id
|
||||
);
|
||||
if (exists)
|
||||
|
||||
@@ -17,8 +17,8 @@ const insertDeviceSchema = Joi.object({
|
||||
'string.ip': 'IP address must be a valid IPv4 or IPv6 address'
|
||||
}),
|
||||
listen_channel: Joi.string().max(100).required(),
|
||||
listen_channel_reminder: Joi.string().max(100).optional(),
|
||||
reminder_at: Joi.date().iso().allow(null).optional()
|
||||
listen_channel_reminder: Joi.string().max(100).allow('', null),
|
||||
reminder_at: Joi.date().iso().allow('', null),
|
||||
});
|
||||
|
||||
const updateDeviceSchema = Joi.object({
|
||||
@@ -33,8 +33,8 @@ const updateDeviceSchema = Joi.object({
|
||||
'string.ip': 'IP address must be a valid IPv4 or IPv6 address'
|
||||
}),
|
||||
listen_channel: Joi.string().max(100),
|
||||
listen_channel_reminder: Joi.string().max(100).optional(),
|
||||
reminder_at: Joi.date().iso().allow(null).optional()
|
||||
listen_channel_reminder: Joi.string().max(100).allow('', null),
|
||||
reminder_at: Joi.date().iso().allow('', null),
|
||||
|
||||
}).min(1);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user