change archi and use schema routes

This commit is contained in:
grimhilt
2023-04-08 00:00:24 +02:00
parent 65db4d8b7e
commit 5b6995d6a6
14 changed files with 137 additions and 46 deletions

View File

@@ -2,53 +2,77 @@ import statusCodes from "../utils/statusCodes";
import express from "express";
const router = express.Router();
import Ajv from "ajv";
import addFormats from "ajv-formats";
const ajv = new Ajv({ allErrors: true });
addFormats(ajv);
import schema_account from "../schemas/account_schema.json";
import { addAccount } from "../controllers/addAccount";
import { getAccounts } from "../db/api";
import { rooms } from "../controllers/rooms";
import { messages } from "../controllers/messages";
import { members } from "../controllers/members";
const validate_account = ajv.compile(schema_account);
import { rooms } from "../abl/rooms";
import { messages } from "../abl/messages";
import { members } from "../abl/members";
import {
validateCreateAccount,
validateGetAccounts,
validateGetMembers,
validateGetMessages,
validateGetRooms,
} from "../validator/validator";
import Account from "../abl/Account-abl";
/**
* Return all mailboxes and folders for an user
*/
router.get("/accounts", (req, res) => {
getAccounts().then((data) => {
res.status(statusCodes.OK).json(data);
});
router.get("/accounts", async (req, res) => {
const valid = validateGetAccounts(req.params);
if (!valid) {
res.status(statusCodes.NOT_ACCEPTABLE).send({ error: validateGetAccounts.errors });
} else {
await Account.getAll(req.params, res);
}
});
/**
* Return all rooms from a mailbox
*/
router.get("/:mailboxId/rooms", async (req, res) => {
// todo use offset limit
await rooms(req.params, res);
// todo offet limit
const valid = validateGetRooms(req.params);
if (!valid) {
res.status(statusCodes.NOT_ACCEPTABLE).send({ error: validateGetRooms.errors });
} else {
await rooms(req.params, res);
}
});
/**
* Return all messages from a room
*/
router.get("/:roomId/messages", async (req, res) => {
const { roomId } = req.params;
await messages(req.params, res);
const valid = validateGetMessages(req.params);
if (!valid) {
res.status(statusCodes.NOT_ACCEPTABLE).send({ error: validateGetMessages.errors });
} else {
await messages(req.params, res);
}
});
/**
* Return all members from a room
*/
router.get("/:roomId/members", async (req, res) => {
const { roomId } = req.params;
await members(req.params, res);
const valid = validateGetMembers(req.params);
if (!valid) {
res.status(statusCodes.NOT_ACCEPTABLE).send({ error: validateGetMembers.errors });
} else {
await members(req.params, res);
}
});
/**
* Register a new mailbox inside the app
*/
router.post("/account", async (req, res) => {
const valid = validate_account(req.body);
const valid = validateCreateAccount(req.body);
if (!valid) {
res.status(statusCodes.NOT_ACCEPTABLE).send({ error: validate_account.errors });
res.status(statusCodes.NOT_ACCEPTABLE).send({ error: validateCreateAccount.errors });
} else {
await addAccount(req.body, res);
await Account.register(req.body, res);
}
});
export default router;
export default router;