adpa-enterprise-framework-automation
Version:
Modular, standards-compliant Node.js/TypeScript automation framework for enterprise requirements, project, and data management. Provides CLI and API for BABOK v3, PMBOK 7th Edition, and DMBOK 2.0 (in progress). Production-ready Express.js API with TypeSpe
100 lines • 4.19 kB
JavaScript
import { createRequire } from 'module';
import { uuidSchema, paginationSchema } from './documentSchemas.js';
const require = createRequire(import.meta.url);
const Joi = require('joi');
// Template creation and update schemas
export const templateCreateSchema = {
body: Joi.object({
name: Joi.string().min(1).max(100).required(),
description: Joi.string().max(500).optional(),
category: Joi.string().max(50).optional(),
tags: Joi.array().items(Joi.string().max(30)).max(10).optional(),
templateData: Joi.object({
content: Joi.string().required(),
variables: Joi.array().items(Joi.object({
name: Joi.string().required(),
type: Joi.string().valid('text', 'number', 'date', 'boolean', 'array', 'object').required(),
required: Joi.boolean().default(false),
description: Joi.string().optional(),
defaultValue: Joi.any().optional()
})).optional(),
layout: Joi.object({
pageSize: Joi.string().valid('A4', 'Letter', 'Legal').default('A4'),
orientation: Joi.string().valid('portrait', 'landscape').default('portrait'),
margins: Joi.object({
top: Joi.number().min(0).default(20),
bottom: Joi.number().min(0).default(20),
left: Joi.number().min(0).default(20),
right: Joi.number().min(0).default(20)
}).optional()
}).optional()
}).required(),
isActive: Joi.boolean().default(true)
})
};
export const templateUpdateSchema = {
body: Joi.object({
name: Joi.string().min(1).max(100).optional(),
description: Joi.string().max(500).optional(),
category: Joi.string().max(50).optional(),
tags: Joi.array().items(Joi.string().max(30)).max(10).optional(),
templateData: Joi.object({
content: Joi.string().optional(),
variables: Joi.array().items(Joi.object({
name: Joi.string().required(),
type: Joi.string().valid('text', 'number', 'date', 'boolean', 'array', 'object').required(),
required: Joi.boolean().default(false),
description: Joi.string().optional(),
defaultValue: Joi.any().optional()
})).optional(),
layout: Joi.object({
pageSize: Joi.string().valid('A4', 'Letter', 'Legal').optional(),
orientation: Joi.string().valid('portrait', 'landscape').optional(),
margins: Joi.object({
top: Joi.number().min(0).optional(),
bottom: Joi.number().min(0).optional(),
left: Joi.number().min(0).optional(),
right: Joi.number().min(0).optional()
}).optional()
}).optional()
}).optional(),
isActive: Joi.boolean().optional()
}),
params: Joi.object({
templateId: uuidSchema
})
};
export const templateGetSchema = {
params: Joi.object({
templateId: uuidSchema
})
};
export const templateDeleteSchema = {
params: Joi.object({
templateId: uuidSchema
})
};
export const templateListSchema = {
query: paginationSchema.keys({
category: Joi.string().optional(),
tag: Joi.string().optional(),
search: Joi.string().max(100).optional(),
isActive: Joi.boolean().optional()
})
};
export const templateValidateSchema = {
body: Joi.object({
templateData: Joi.object({
content: Joi.string().required(),
variables: Joi.array().items(Joi.object({
name: Joi.string().required(),
type: Joi.string().valid('text', 'number', 'date', 'boolean', 'array', 'object').required(),
required: Joi.boolean().default(false),
description: Joi.string().optional(),
defaultValue: Joi.any().optional()
})).optional()
}).required(),
testData: Joi.object().optional()
})
};
//# sourceMappingURL=templateSchemas.js.map