54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
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);
|
|
|
|
/**
|
|
* Return all mailboxes and folders for an user
|
|
*/
|
|
router.get("/accounts", (req, res) => {
|
|
getAccounts().then((data) => {
|
|
res.status(statusCodes.OK).json(data);
|
|
});
|
|
});
|
|
|
|
router.get("/:mailboxId/rooms", async (req, res) => {
|
|
// todo use offset limit
|
|
await rooms(req.params, res);
|
|
});
|
|
|
|
router.get("/:roomId/messages", async (req, res) => {
|
|
const { roomId } = req.params;
|
|
await messages(req.params, res);
|
|
});
|
|
|
|
router.get("/:roomId/members", async (req, res) => {
|
|
const { roomId } = req.params;
|
|
await members(req.params, res);
|
|
});
|
|
|
|
/**
|
|
* Register a new mailbox inside the app
|
|
*/
|
|
router.post("/account", async (req, res) => {
|
|
const valid = validate_account(req.body);
|
|
if (!valid) {
|
|
res.status(statusCodes.NOT_ACCEPTABLE).send({ error: validate_account.errors });
|
|
} else {
|
|
await addAccount(req.body, res);
|
|
}
|
|
});
|
|
|
|
export default router; |