mail/back/routes/mail.js
2023-03-25 13:06:59 +01:00

63 lines
1.9 KiB
JavaScript

const statusCodes = require("../utils/statusCodes.js").statusCodes;
const express = require("express");
const router = express.Router();
const Ajv = require("ajv");
const addFormats = require("ajv-formats");
const ajv = new Ajv({ allErrors: true });
addFormats(ajv);
const schema_mailbox = require("../schemas/mailbox_schema.json");
const { addMailbox } = require("../controllers/addMailbox.js");
const { getMailboxes } = require("../db/api.js");
const { rooms } = require("../controllers/rooms.js");
const { messages } = require("../controllers/messages.js");
const validate_mailbox = ajv.compile(schema_mailbox);
/**
* Return all mailboxes and folders for an user
*/
router.get("/mailboxes", (req, res) => {
getMailboxes().then((data) => {
data[0].id = 1; // todo debug
res.status(statusCodes.OK).json(data)
});
});
/**
* @param {number} mailboxId the id of the mailbox (account_id) from which to fetch the messages, 0 if from all
* @param {number} offset the offset of the query
* @param {number} limit the number of message to return
* @param {string} token the token of the user
* @return {object} a list of room and their preview (subject)
*/
router.get("/:mailboxId/rooms", async (req, res) => {
const { mailboxId, offset, limit } = req.params;
// todo check token
// todo use offset
await rooms(req.params, res);
});
router.get("/:roomId/messages", async (req, res) => {
const { roomId } = req.params;
console.log("called")
// todo check token
await messages(req.params, res);
});
/**
* Register a new mailbox inside the app
*/
router.post("/mailbox", async (req, res) => {
console.log(req.body)
const valid = validate_mailbox(req.body);
if (!valid) {
res.status(statusCodes.NOT_ACCEPTABLE).send({ error: validate_mailbox.errors });
} else {
await addMailbox(req.body, res);
}
});
module.exports = router;