123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- // api/workspaces/workspace.validator.js
- import Joi from "@hapi/joi";
- class WorkspaceValidator {
- async onCreate(obj) {
- const schemaKeys = {
- name: Joi.string().required(),
- slug: Joi.string().allow('').optional(),
- description: Joi.string().allow('').optional(),
- timezone: Joi.string().allow('').optional(),
- filePath: Joi.string().allow(null).optional(),
- fileType: Joi.string().allow(null).optional(),
- fileSize: Joi.number().optional(),
- metadata: Joi.object().optional(),
- isPublic: Joi.boolean().optional(),
- teams: Joi.array().items(Joi.object({
- _id: Joi.string().hex().length(24),
- code: Joi.string(),
- name: Joi.string()
- })).optional(),
-
- // Nested structures are optional
- members: Joi.array().items(Joi.object({
- userId: Joi.string().hex().length(24).optional(),
- name: Joi.string().optional(),
- email: Joi.string().email().optional(),
- role: Joi.string().valid('admin', 'user', 'guest').optional(),
- joinedAt: Joi.date().optional()
- })).optional(),
-
- contacts: Joi.array().items(Joi.object()).optional(),
- projects: Joi.array().items(Joi.object()).optional(),
- meetings: Joi.array().items(Joi.object()).optional(),
- notes: Joi.array().items(Joi.object()).optional(),
- tasks: Joi.array().items(Joi.object()).optional(),
-
- // MySQL connection fields
- mysqlHost: Joi.string().allow(null).optional(),
- mysqlPort: Joi.number().integer().min(1).max(65535).optional(),
- mysqlUser: Joi.string().allow(null).optional(),
- mysqlPassword: Joi.string().allow(null).optional(),
- mysqlDatabase: Joi.string().allow(null).optional(),
- mysqlTable: Joi.string().allow(null).optional(),
- mysqlConnectionType: Joi.string().valid('direct', 'ssh', null).optional()
- };
-
- const schema = Joi.object().keys(schemaKeys);
- const { error } = schema.validate(obj, { abortEarly: false });
- return error;
- }
- async onUpdate(obj) {
- const schemaKeys = {
- name: Joi.string().optional(),
- slug: Joi.string().allow('').optional(),
- description: Joi.string().allow('').optional(),
- timezone: Joi.string().allow('').optional(),
- filePath: Joi.string().allow(null).optional(),
- fileType: Joi.string().allow(null).optional(),
- fileSize: Joi.number().optional(),
- metadata: Joi.object().optional(),
- isPublic: Joi.boolean().optional(),
- teams: Joi.array().items(Joi.object({
- _id: Joi.string().hex().length(24),
- code: Joi.string(),
- name: Joi.string()
- })).optional(),
- lastAccessed: Joi.date().optional(),
-
- // Nested structures are optional
- members: Joi.array().items(Joi.object({
- userId: Joi.string().hex().length(24).optional(),
- name: Joi.string().optional(),
- email: Joi.string().email().optional(),
- role: Joi.string().valid('admin', 'user', 'guest').optional(),
- joinedAt: Joi.date().optional()
- })).optional(),
-
- contacts: Joi.array().items(Joi.object()).optional(),
- projects: Joi.array().items(Joi.object()).optional(),
- meetings: Joi.array().items(Joi.object()).optional(),
- notes: Joi.array().items(Joi.object()).optional(),
- tasks: Joi.array().items(Joi.object()).optional(),
-
- // MySQL connection fields
- mysqlHost: Joi.string().allow(null).optional(),
- mysqlPort: Joi.number().integer().min(1).max(65535).optional(),
- mysqlUser: Joi.string().allow(null).optional(),
- mysqlPassword: Joi.string().allow(null).optional(),
- mysqlDatabase: Joi.string().allow(null).optional(),
- mysqlTable: Joi.string().allow(null).optional(),
- mysqlConnectionType: Joi.string().valid('direct', 'ssh', null).optional()
- };
-
- const schema = Joi.object().keys(schemaKeys);
- const { error } = schema.validate(obj, { abortEarly: false });
- return error;
- }
- }
- export default new WorkspaceValidator();
|