repair brand device: add brand sparepart in 2 step

This commit is contained in:
2025-11-17 16:01:29 +07:00
parent ff4176f8f9
commit 8176eb2bdd
8 changed files with 327 additions and 624 deletions

View File

@@ -4,81 +4,120 @@ const Joi = require("joi");
// Brand Validation
// ========================
const insertBrandSchema = Joi.object({
brand_name: Joi.string().max(100).required(),
brand_type: Joi.string().max(50).optional().allow(''),
brand_manufacture: Joi.string().max(100).required(),
brand_model: Joi.string().max(100).optional().allow(''),
is_active: Joi.boolean().required(),
description: Joi.string().max(255).optional().allow(''),
error_code: Joi.array().items(
Joi.object({
error_code: Joi.string().max(100).required(),
error_code_name: Joi.string().max(100).required(),
error_code_description: Joi.string().optional().allow(''),
error_code_color: Joi.string().optional().allow(''),
path_icon: Joi.string().optional().allow(''),
is_active: Joi.boolean().required(),
what_action_to_take: Joi.string().optional().allow(''),
solution: Joi.array().items(
Joi.object({
solution_name: Joi.string().max(100).required(),
type_solution: Joi.string().valid('text', 'pdf', 'image', 'video', 'link').required(),
text_solution: Joi.when('type_solution', {
is: 'text',
then: Joi.string().required(),
otherwise: Joi.string().optional().allow('')
}),
path_solution: Joi.when('type_solution', {
is: 'text',
then: Joi.string().optional().allow(''),
otherwise: Joi.string().required()
}),
is_active: Joi.boolean().required()
})
).min(1).required()
})
).min(1).required()
brand_name: Joi.string().max(100).required(),
brand_type: Joi.string().max(50).optional().allow(""),
brand_manufacture: Joi.string().max(100).required(),
brand_model: Joi.string().max(100).optional().allow(""),
is_active: Joi.boolean().required(),
description: Joi.string().max(255).optional().allow(""),
error_code: Joi.array()
.items(
Joi.object({
error_code: Joi.string().max(100).required(),
error_code_name: Joi.string().max(100).required(),
error_code_description: Joi.string().optional().allow(""),
error_code_color: Joi.string().optional().allow(""),
path_icon: Joi.string().optional().allow(""),
is_active: Joi.boolean().required(),
what_action_to_take: Joi.string().optional().allow(""),
solution: Joi.array()
.items(
Joi.object({
solution_name: Joi.string().max(100).required(),
type_solution: Joi.string()
.valid("text", "pdf", "image", "video", "link")
.required(),
text_solution: Joi.when("type_solution", {
is: "text",
then: Joi.string().required(),
otherwise: Joi.string().optional().allow(""),
}),
path_solution: Joi.when("type_solution", {
is: "text",
then: Joi.string().optional().allow(""),
otherwise: Joi.string().required(),
}),
is_active: Joi.boolean().required(),
})
)
.min(1)
.required(),
sparepart: Joi.array()
.items(
Joi.object({
sparepart_name: Joi.string().max(100).optional(),
brand_sparepart_description: Joi.string()
.max(255)
.optional(),
path_foto: Joi.string().optional().allow(""),
is_active: Joi.boolean().required(),
})
)
.optional(),
})
)
.min(1)
.required(),
});
// Update Brand Validation
const updateBrandSchema = Joi.object({
brand_name: Joi.string().max(100).required(),
brand_type: Joi.string().max(50).optional().allow(''),
brand_manufacture: Joi.string().max(100).required(),
brand_model: Joi.string().max(100).optional().allow(''),
is_active: Joi.boolean().required(),
description: Joi.string().max(255).optional().allow(''),
error_code: Joi.array().items(
Joi.object({
error_code: Joi.string().max(100).required(),
error_code_name: Joi.string().max(100).required(),
error_code_description: Joi.string().optional().allow(''),
error_code_color: Joi.string().optional().allow(''),
path_icon: Joi.string().optional().allow(''),
is_active: Joi.boolean().required(),
what_action_to_take: Joi.string().optional().allow(''),
solution: Joi.array().items(
Joi.object({
solution_name: Joi.string().max(100).required(),
type_solution: Joi.string().valid('text', 'pdf', 'image', 'video', 'link').required(),
text_solution: Joi.when('type_solution', {
is: 'text',
then: Joi.string().required(),
otherwise: Joi.string().optional().allow('')
}),
path_solution: Joi.when('type_solution', {
is: 'text',
then: Joi.string().optional().allow(''),
otherwise: Joi.string().required()
}),
is_active: Joi.boolean().optional()
})
).min(1).required()
})
).optional()
brand_name: Joi.string().max(100).required(),
brand_type: Joi.string().max(50).optional().allow(""),
brand_manufacture: Joi.string().max(100).required(),
brand_model: Joi.string().max(100).optional().allow(""),
is_active: Joi.boolean().required(),
description: Joi.string().max(255).optional().allow(""),
error_code: Joi.array()
.items(
Joi.object({
error_code: Joi.string().max(100).required(),
error_code_name: Joi.string().max(100).required(),
error_code_description: Joi.string().optional().allow(""),
error_code_color: Joi.string().optional().allow(""),
path_icon: Joi.string().optional().allow(""),
is_active: Joi.boolean().required(),
what_action_to_take: Joi.string().optional().allow(""),
solution: Joi.array()
.items(
Joi.object({
solution_name: Joi.string().max(100).required(),
type_solution: Joi.string()
.valid("text", "pdf", "image", "video", "link")
.required(),
text_solution: Joi.when("type_solution", {
is: "text",
then: Joi.string().required(),
otherwise: Joi.string().optional().allow(""),
}),
path_solution: Joi.when("type_solution", {
is: "text",
then: Joi.string().optional().allow(""),
otherwise: Joi.string().required(),
}),
is_active: Joi.boolean().optional(),
})
)
.min(1)
.required(),
sparepart: Joi.array()
.items(
Joi.object({
sparepart_name: Joi.string().max(100).optional(),
brand_sparepart_description: Joi.string()
.max(255)
.optional(),
path_foto: Joi.string().optional().allow(""),
is_active: Joi.boolean().required(),
})
)
.optional(),
})
)
.optional(),
}).min(1);
module.exports = {
insertBrandSchema,
updateBrandSchema
};
insertBrandSchema,
updateBrandSchema,
};

View File

@@ -1,32 +0,0 @@
const Joi = require("joi");
// ========================
// Brand Validation
// ========================
const insertBrandSparepartSchema = Joi.object({
sparepart_name: Joi.string().max(255).required(),
brand_sparepart_description: Joi.string().max(255).required(),
is_active: Joi.boolean().required(),
error_code_id: Joi.number().required().messages({
"any.required": "error_code_id is required",
"number.base": "error_code_id must be a number",
}),
path_foto: Joi.string().max(255).optional().allow(''),
});
// Update Brand Validation
const updateBrandSparepartSchema = Joi.object({
sparepart_name: Joi.string().max(255).required(),
brand_sparepart_description: Joi.string().max(255).required(),
is_active: Joi.boolean().optional(),
error_code_id: Joi.number().required().messages({
"any.required": "error_code_id is required",
"number.base": "error_code_id must be a number",
}),
path_foto: Joi.string().max(255).optional().allow(''),
});
module.exports = {
insertBrandSparepartSchema,
updateBrandSparepartSchema,
};