change validator api
This commit is contained in:
parent
4e79ab12dc
commit
e43ab6cfe1
@ -1,4 +1,3 @@
|
|||||||
import statusCodes from "../utils/statusCodes";
|
|
||||||
import express from "express";
|
import express from "express";
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
@ -6,27 +5,14 @@ import { rooms } from "../abl/rooms";
|
|||||||
import Message from "../abl/Messages-abl";
|
import Message from "../abl/Messages-abl";
|
||||||
import { messages } from "../abl/messages";
|
import { messages } from "../abl/messages";
|
||||||
import { members } from "../abl/members";
|
import { members } from "../abl/members";
|
||||||
import {
|
|
||||||
validateCreateAccount,
|
|
||||||
validateGetAccounts,
|
|
||||||
validateGetMembers,
|
|
||||||
validateGetMessages,
|
|
||||||
validateGetRooms,
|
|
||||||
validateAddFlag,
|
|
||||||
validateRemoveFlag,
|
|
||||||
} from "../validator/validator";
|
|
||||||
import Account from "../abl/Account-abl";
|
import Account from "../abl/Account-abl";
|
||||||
|
import validator from "../validator/validator";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return all mailboxes and folders for an user
|
* Return all mailboxes and folders for an user
|
||||||
*/
|
*/
|
||||||
router.get("/accounts", async (req, res) => {
|
router.get("/accounts", async (req, res) => {
|
||||||
const valid = validateGetAccounts(req.params);
|
await validator.validate("getAccounts", req.params, res, Account.getAll);
|
||||||
if (!valid) {
|
|
||||||
res.status(statusCodes.NOT_ACCEPTABLE).send({ error: validateGetAccounts.errors });
|
|
||||||
} else {
|
|
||||||
await Account.getAll(req.params, res);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -34,66 +20,36 @@ router.get("/accounts", async (req, res) => {
|
|||||||
*/
|
*/
|
||||||
router.get("/:mailboxId/rooms", async (req, res) => {
|
router.get("/:mailboxId/rooms", async (req, res) => {
|
||||||
// todo offet limit
|
// todo offet limit
|
||||||
const valid = validateGetRooms(req.params);
|
await validator.validate("getRooms", req.params, res, rooms);
|
||||||
if (!valid) {
|
|
||||||
res.status(statusCodes.NOT_ACCEPTABLE).send({ error: validateGetRooms.errors });
|
|
||||||
} else {
|
|
||||||
await rooms(req.params, res);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return all messages from a room
|
* Return all messages from a room
|
||||||
*/
|
*/
|
||||||
router.get("/:roomId/messages", async (req, res) => {
|
router.get("/:roomId/messages", async (req, res) => {
|
||||||
const valid = validateGetMessages(req.params);
|
await validator.validate("getMessages", req.params, res, messages);
|
||||||
if (!valid) {
|
|
||||||
res.status(statusCodes.NOT_ACCEPTABLE).send({ error: validateGetMessages.errors });
|
|
||||||
} else {
|
|
||||||
await messages(req.params, res);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return all members from a room
|
* Return all members from a room
|
||||||
*/
|
*/
|
||||||
router.get("/:roomId/members", async (req, res) => {
|
router.get("/:roomId/members", async (req, res) => {
|
||||||
const valid = validateGetMembers(req.params);
|
await validator.validate("getMembers", req.params, res, members);
|
||||||
if (!valid) {
|
|
||||||
res.status(statusCodes.NOT_ACCEPTABLE).send({ error: validateGetMembers.errors });
|
|
||||||
} else {
|
|
||||||
await members(req.params, res);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register a new mailbox inside the app
|
* Register a new mailbox inside the app
|
||||||
*/
|
*/
|
||||||
router.post("/account", async (req, res) => {
|
router.post("/account", async (req, res) => {
|
||||||
const valid = validateCreateAccount(req.body);
|
await validator.validate("createAccount", req.body, res, Account.register);
|
||||||
if (!valid) {
|
|
||||||
res.status(statusCodes.NOT_ACCEPTABLE).send({ error: validateCreateAccount.errors });
|
|
||||||
} else {
|
|
||||||
await Account.register(req.body, res);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
router.post("/addFlag", async (req, res) => {
|
router.post("/addFlag", async (req, res) => {
|
||||||
const valid = validateAddFlag(req.body);
|
await validator.validate("addFlag", req.body, res, Message.addFlag);
|
||||||
if (!valid) {
|
|
||||||
res.status(statusCodes.NOT_ACCEPTABLE).send({ error: validateAddFlag.errors });
|
|
||||||
} else {
|
|
||||||
await Message.addFlag(req.body, res);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
router.post("/removeFlag", async (req, res) => {
|
router.post("/removeFlag", async (req, res) => {
|
||||||
const valid = validateRemoveFlag(req.body);
|
await validator.validate("removeFlag", req.body, res, Message.removeFlag);
|
||||||
if (!valid) {
|
|
||||||
res.status(statusCodes.NOT_ACCEPTABLE).send({ error: validateRemoveFlag.errors });
|
|
||||||
} else {
|
|
||||||
await Message.removeFlag(req.body, res);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
export default router;
|
export default router;
|
||||||
|
@ -9,11 +9,54 @@ import getRoomSchema from "./schemas/getRooms-schema.json";
|
|||||||
import getMessagesSchema from "./schemas/getMessages-schema.json";
|
import getMessagesSchema from "./schemas/getMessages-schema.json";
|
||||||
import getMembersSchema from "./schemas/getMembers-schema.json";
|
import getMembersSchema from "./schemas/getMembers-schema.json";
|
||||||
import setFlagSchema from "./schemas/setFlag-schema.json";
|
import setFlagSchema from "./schemas/setFlag-schema.json";
|
||||||
|
import { Request, Response } from "express";
|
||||||
|
import statusCodes from "../utils/statusCodes";
|
||||||
|
import logger from "../system/Logger";
|
||||||
|
|
||||||
export const validateCreateAccount = ajv.compile(createAccountSchema);
|
export const validateCreateAccount = ajv.compile(createAccountSchema);
|
||||||
export const validateGetAccounts = ajv.compile(getAccountSchema);
|
export const validateGetAccounts = ajv.compile(getAccountSchema);
|
||||||
export const validateGetRooms = ajv.compile(getRoomSchema);
|
export const validateGetRooms = ajv.compile(getRoomSchema);
|
||||||
export const validateGetMessages = ajv.compile(getMessagesSchema);
|
export const validateGetMessages = ajv.compile(getMessagesSchema);
|
||||||
export const validateGetMembers = ajv.compile(getMembersSchema);
|
export const validateGetMembers = ajv.compile(getMembersSchema);
|
||||||
export const validateAddFlag = ajv.compile(setFlagSchema);
|
export const validateSetFlag = ajv.compile(setFlagSchema);
|
||||||
export const validateRemoveFlag = ajv.compile(setFlagSchema);
|
|
||||||
|
class Validator {
|
||||||
|
_getSchema(name: string): any {
|
||||||
|
switch (name) {
|
||||||
|
case "createAccount":
|
||||||
|
return validateCreateAccount;
|
||||||
|
case "getAccounts":
|
||||||
|
return validateGetAccounts;
|
||||||
|
case "getRooms":
|
||||||
|
return validateGetRooms;
|
||||||
|
case "getMessages":
|
||||||
|
return validateGetMessages;
|
||||||
|
case "getMembers":
|
||||||
|
return validateGetMembers;
|
||||||
|
case "addFlag":
|
||||||
|
case "removeFlag":
|
||||||
|
return validateSetFlag;
|
||||||
|
default:
|
||||||
|
logger.err(`Schema ${name} not found`);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async validate(
|
||||||
|
schemaName: string,
|
||||||
|
args: any,
|
||||||
|
res: Response,
|
||||||
|
callback: (body: any, res: Response) => Promise<void>,
|
||||||
|
): Promise<void> {
|
||||||
|
const validator = this._getSchema(schemaName);
|
||||||
|
const valid = validator(args);
|
||||||
|
if (!valid) {
|
||||||
|
res.status(statusCodes.NOT_ACCEPTABLE).send({ error: validator.errors });
|
||||||
|
} else {
|
||||||
|
await callback(args, res);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const validator = new Validator();
|
||||||
|
export default validator;
|
@ -112,6 +112,7 @@ const store = createStore<State>({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
addFlag(state, payload) {
|
addFlag(state, payload) {
|
||||||
|
// todo if seen notif
|
||||||
const msg = roomOnId(state, payload.roomId)?.messages.find((msg) => msg.id == payload.messageId);
|
const msg = roomOnId(state, payload.roomId)?.messages.find((msg) => msg.id == payload.messageId);
|
||||||
if (msg) {
|
if (msg) {
|
||||||
msg.flags.push(payload.flag);
|
msg.flags.push(payload.flag);
|
||||||
|
Loading…
Reference in New Issue
Block a user