Skip to content

Commit

Permalink
refactor dynamicModuleUpdate
Browse files Browse the repository at this point in the history
  • Loading branch information
Behzad-rabiei committed Apr 16, 2024
1 parent bf30cef commit 3863a7f
Showing 1 changed file with 108 additions and 47 deletions.
155 changes: 108 additions & 47 deletions src/validations/module.validation.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import Joi from 'joi';
import Joi, { ObjectSchema } from 'joi';
import { objectId } from './custom.validation';
import { Types } from 'mongoose';
import { Request } from 'express';
Expand Down Expand Up @@ -26,58 +26,119 @@ const getModule = {
}),
};

const dynamicModuleUpdate = (req: Request) => {
const module = req.module;
if (module?.name === 'hivemind') {
return {
params: Joi.object().keys({
moduleId: Joi.required().custom(objectId),
}),
body: Joi.object()
.required()
.keys({
options: Joi.object()
.required()
.keys({
platforms: Joi.array().items(
Joi.object().keys({
name: Joi.string().required().valid('discord'),
platform: Joi.string().custom(objectId).required(),
metadata: Joi.object()
.required()
.when('name', {
switch: [
{
is: 'discord',
then: Joi.object().keys({
answering: Joi.object().keys({
selectedChannels: Joi.array().items(Joi.string()).required(),
}),
learning: Joi.object().keys({
selectedChannels: Joi.array().items(Joi.string()).required(),
fromDate: Joi.date().required(),
}),
}),
},
],
otherwise: Joi.any().forbidden(),
}),
}),
),
}),
}),
};
} else {
req.allowInput = false;
return {};
}
};
// const dynamicModuleUpdate = (req: Request) => {
// const module = req.module;
// if (module?.name === 'hivemind') {
// return {
// params: Joi.object().keys({
// moduleId: Joi.required().custom(objectId),
// }),
// body: Joi.object()
// .required()
// .keys({
// options: Joi.object()
// .required()
// .keys({
// platforms: Joi.array().items(
// Joi.object().keys({
// name: Joi.string().required().valid('discord'),
// platform: Joi.string().custom(objectId).required(),
// metadata: Joi.object()
// .required()
// .when('name', {
// switch: [
// {
// is: 'discord',
// then: Joi.object().keys({
// answering: Joi.object().keys({
// selectedChannels: Joi.array().items(Joi.string()).required(),
// }),
// learning: Joi.object().keys({
// selectedChannels: Joi.array().items(Joi.string()).required(),
// fromDate: Joi.date().required(),
// }),
// }),
// },
// ],
// otherwise: Joi.any().forbidden(),
// }),
// }),
// ),
// }),
// }),
// };
// } else {
// req.allowInput = false;
// return {};
// }
// };

const deleteModule = {
params: Joi.object().keys({
moduleId: Joi.string().custom(objectId).required(),
}),
};

const hivemindDiscordMetadata = () => {
return Joi.object().keys({
answering: Joi.object().keys({
selectedChannels: Joi.array().items(Joi.string()).required(),
}),
learning: Joi.object().keys({
selectedChannels: Joi.array().items(Joi.string()).required(),
fromDate: Joi.date().required(),
}),
});
};

const hivemindOptions = () => {
return Joi.object().keys({
platforms: Joi.array().items(
Joi.object().keys({
name: Joi.string().required().valid('discord'),
platform: Joi.string().custom(objectId).required(),
metadata: Joi.when('name', {
switch: [
{
is: 'discord',
then: hivemindDiscordMetadata(),
},
],
otherwise: Joi.any().forbidden(),
}).required(),
}),
),
});
};

const dynamicModuleUpdate = (req: any) => {
const moduleName = req.module?.name;
const paramsOption = {
params: Joi.object().keys({
moduleId: Joi.string().custom(objectId).required(),
}),
};
let bodyOption = {};

switch (moduleName) {
case 'hivemind':
bodyOption = {
body: Joi.object().required().keys({
options: hivemindOptions(),
}),
};
break;
default:
req.allowInput = false;
return {};
}

return {
...paramsOption,
...bodyOption,
};
};

export default {
createModule,
getModules,
Expand Down

0 comments on commit 3863a7f

Please sign in to comment.