erp_be/src/modules/roles/roles.validation.js

55 lines
1.6 KiB
JavaScript

const Joi = require('joi');
const { pageQuery, limitQuery } = require('../../utils/pagination.validation');
const createRoleSchema = Joi.object({
name: Joi.string().max(100).required(),
description: Joi.string().allow(null, '').optional(),
is_active: Joi.boolean().default(true),
permission_ids: Joi.array().items(Joi.number().integer().positive()).optional(),
view_modules: Joi.array().items(Joi.string().max(50)).optional(),
});
const updateRoleSchema = Joi.object({
name: Joi.string().max(100).optional(),
description: Joi.string().allow(null, '').optional(),
is_active: Joi.boolean().optional(),
}).min(1);
const assignPermissionsSchema = Joi.object({
permission_ids: Joi.array().items(Joi.number().integer().positive()).default([]),
});
const permissionMatrixSchema = Joi.object({
matrix: Joi.array()
.items(
Joi.object({
module_id: Joi.number().integer().positive().required(),
actions: Joi.object({
view: Joi.boolean().required(),
create: Joi.boolean().required(),
edit: Joi.boolean().required(),
delete: Joi.boolean().required(),
approve: Joi.boolean().required(),
export: Joi.boolean().required(),
}).required(),
})
)
.min(1)
.required(),
});
const listRolesQuerySchema = Joi.object({
page: pageQuery(),
limit: limitQuery(),
search: Joi.string().allow('').optional(),
is_active: Joi.boolean().optional(),
});
module.exports = {
createRoleSchema,
updateRoleSchema,
assignPermissionsSchema,
permissionMatrixSchema,
listRolesQuerySchema,
};