Compare commits

...

3 Commits

4 changed files with 35 additions and 2 deletions

View File

@@ -14,6 +14,7 @@ const getAllSparepartDb = async (searchParams = {}) => {
const { whereOrConditions, whereParamOr } = pool.buildStringOrIlike( const { whereOrConditions, whereParamOr } = pool.buildStringOrIlike(
[ [
"a.sparepart_name", "a.sparepart_name",
"a.sparepart_number",
"a.sparepart_code", "a.sparepart_code",
"a.sparepart_model", "a.sparepart_model",
"a.updated_at", "a.updated_at",
@@ -28,6 +29,7 @@ const getAllSparepartDb = async (searchParams = {}) => {
const { whereConditions, whereParamAnd } = pool.buildFilterQuery( const { whereConditions, whereParamAnd } = pool.buildFilterQuery(
[ [
{ column: "a.sparepart_name", param: searchParams.code, type: "string" }, { column: "a.sparepart_name", param: searchParams.code, type: "string" },
{ column: "a.sparepart_number", param: searchParams.code, type: "string" },
{ {
column: "a.sparepart_code", column: "a.sparepart_code",
param: searchParams.location, param: searchParams.location,
@@ -156,6 +158,7 @@ const getSparepartsByIdsDb = async (sparepartIds) => {
SELECT SELECT
sparepart_id, sparepart_id,
sparepart_name, sparepart_name,
sparepart_number,
sparepart_code, sparepart_code,
sparepart_description, sparepart_description,
sparepart_model, sparepart_model,
@@ -165,6 +168,7 @@ const getSparepartsByIdsDb = async (sparepartIds) => {
sparepart_unit, sparepart_unit,
sparepart_merk, sparepart_merk,
sparepart_stok, sparepart_stok,
sparepart_yearly,
created_at, created_at,
updated_at updated_at
FROM m_sparepart FROM m_sparepart

View File

@@ -28,6 +28,8 @@ class SparepartService {
throw new ErrorHandler(404, "Sparepart not found"); throw new ErrorHandler(404, "Sparepart not found");
} }
sparepart[0].sparepart_yearly = JSON.parse(sparepart[0].sparepart_yearly);
return sparepart[0]; return sparepart[0];
} catch (error) { } catch (error) {
throw new ErrorHandler(error.statusCode || 500, error.message); throw new ErrorHandler(error.statusCode || 500, error.message);
@@ -42,6 +44,11 @@ class SparepartService {
if (exists) if (exists)
throw new ErrorHandler(400, "Sparepart name already exists"); throw new ErrorHandler(400, "Sparepart name already exists");
} }
if (data.sparepart_yearly) {
data.sparepart_yearly = JSON.stringify(data.sparepart_yearly);
}
const created = await createSparepartDb(data); const created = await createSparepartDb(data);
if (!created) throw new ErrorHandler(500, "Failed to create Sparepart"); if (!created) throw new ErrorHandler(500, "Failed to create Sparepart");
return created; return created;
@@ -65,6 +72,11 @@ class SparepartService {
if (exists) if (exists)
throw new ErrorHandler(400, "Sparepart name already exists"); throw new ErrorHandler(400, "Sparepart name already exists");
} }
if (data.sparepart_yearly) {
data.sparepart_yearly = JSON.stringify(data.sparepart_yearly);
}
const updated = await updateSparepartDb(id, data); const updated = await updateSparepartDb(id, data);
if (!updated) throw new ErrorHandler(500, "Failed to update Sparepart"); if (!updated) throw new ErrorHandler(500, "Failed to update Sparepart");
return await this.getSparepartById(id); return await this.getSparepartById(id);

View File

@@ -16,7 +16,9 @@ const insertDeviceSchema = Joi.object({
.messages({ .messages({
'string.ip': 'IP address must be a valid IPv4 or IPv6 address' 'string.ip': 'IP address must be a valid IPv4 or IPv6 address'
}), }),
listen_channel: Joi.string().max(100).required() listen_channel: Joi.string().max(100).required(),
listen_channel_reminder: Joi.string().max(100).optional(),
reminder_at: Joi.date().iso().allow(null).optional()
}); });
const updateDeviceSchema = Joi.object({ const updateDeviceSchema = Joi.object({
@@ -30,7 +32,10 @@ const updateDeviceSchema = Joi.object({
.messages({ .messages({
'string.ip': 'IP address must be a valid IPv4 or IPv6 address' 'string.ip': 'IP address must be a valid IPv4 or IPv6 address'
}), }),
listen_channel: Joi.string().max(100) listen_channel: Joi.string().max(100),
listen_channel_reminder: Joi.string().max(100).optional(),
reminder_at: Joi.date().iso().allow(null).optional()
}).min(1); }).min(1);

View File

@@ -4,6 +4,7 @@ const Joi = require("joi");
// ======================== // ========================
const insertSparepartSchema = Joi.object({ const insertSparepartSchema = Joi.object({
sparepart_name: Joi.string().max(255).required(), sparepart_name: Joi.string().max(255).required(),
sparepart_number: Joi.string().max(255).optional(),
sparepart_description: Joi.string().max(255).optional(), sparepart_description: Joi.string().max(255).optional(),
sparepart_model: Joi.string().max(255).optional(), sparepart_model: Joi.string().max(255).optional(),
sparepart_foto: Joi.string().max(255).optional().allow(""), sparepart_foto: Joi.string().max(255).optional().allow(""),
@@ -12,11 +13,17 @@ const insertSparepartSchema = Joi.object({
sparepart_unit: Joi.string().max(255).optional(), sparepart_unit: Joi.string().max(255).optional(),
sparepart_merk: Joi.string().max(255).optional(), sparepart_merk: Joi.string().max(255).optional(),
sparepart_stok: Joi.string().max(255).optional(), sparepart_stok: Joi.string().max(255).optional(),
sparepart_yearly: Joi.array()
.items(Joi.number().integer())
.min(0)
.allow(null)
.optional()
}); });
// Update Validation // Update Validation
const updateSparepartSchema = Joi.object({ const updateSparepartSchema = Joi.object({
sparepart_name: Joi.string().max(255).optional(), sparepart_name: Joi.string().max(255).optional(),
sparepart_number: Joi.string().max(255).optional(),
sparepart_description: Joi.string().max(255).optional(), sparepart_description: Joi.string().max(255).optional(),
sparepart_model: Joi.string().max(255).optional(), sparepart_model: Joi.string().max(255).optional(),
sparepart_foto: Joi.string().max(255).optional().allow(''), sparepart_foto: Joi.string().max(255).optional().allow(''),
@@ -25,6 +32,11 @@ const updateSparepartSchema = Joi.object({
sparepart_unit: Joi.string().max(255).optional(), sparepart_unit: Joi.string().max(255).optional(),
sparepart_merk: Joi.string().max(255).optional(), sparepart_merk: Joi.string().max(255).optional(),
sparepart_stok: Joi.string().max(255).optional(), sparepart_stok: Joi.string().max(255).optional(),
sparepart_yearly: Joi.array()
.items(Joi.number().integer())
.min(0)
.allow(null)
.optional()
}); });
module.exports = { module.exports = {
insertSparepartSchema, insertSparepartSchema,