add route room delete

This commit is contained in:
grimhilt 2023-05-17 18:14:25 +02:00
parent 7be2e84691
commit 2cae8f12a7
8 changed files with 44 additions and 12 deletions

View File

@ -106,7 +106,7 @@ export default class MessageAbl {
const room = await new Room().setRoomIdOnMessageId(messageId); const room = await new Room().setRoomIdOnMessageId(messageId);
try { try {
await message.delete(); await message.delete();
if (room.roomId && room.shouldDelete()) { if (room.roomId && await room.shouldDelete()) {
await room.delete(); await room.delete();
res.status(statusCode.OK).json({ deleteRoom: true }).send(); res.status(statusCode.OK).json({ deleteRoom: true }).send();
return; return;

View File

@ -8,6 +8,7 @@ import MailBuilder from "../mails/utils/mailBuilder";
import { getAddresses } from "../db/utils/mail"; import { getAddresses } from "../db/utils/mail";
import { getMembers, getMessages, getRooms } from "../db/api-db"; import { getMembers, getMessages, getRooms } from "../db/api-db";
import logger from "../system/Logger"; import logger from "../system/Logger";
import Room from "../mails/room/Room";
function rmUserFromAddrs(addresses: { email: string }[], user: string) { function rmUserFromAddrs(addresses: { email: string }[], user: string) {
let index = addresses.findIndex((a) => a.email == user); let index = addresses.findIndex((a) => a.email == user);
@ -27,7 +28,7 @@ export default class RoomAbl {
const mailBuilder = new MailBuilder(); const mailBuilder = new MailBuilder();
mailBuilder.from(user).to(ownerEmail).text(text).html(html); mailBuilder.from(user).to(ownerEmail).text(text).html(html);
emailManager.getSmtp(user).sendMail(mailBuilder.message); emailManager.getSmtp(user)?.sendMail(mailBuilder.message);
res.status(statusCode.OK).send(); res.status(statusCode.OK).send();
} else if (roomType === RoomType.GROUP || roomType === RoomType.THREAD) { } else if (roomType === RoomType.GROUP || roomType === RoomType.THREAD) {
const lastMsgData = (await getLastMsgData(roomId))[0]; const lastMsgData = (await getLastMsgData(roomId))[0];
@ -52,7 +53,7 @@ export default class RoomAbl {
.to(to.map((a) => a.email)) .to(to.map((a) => a.email))
.cc(cc.map((a) => a.email)); .cc(cc.map((a) => a.email));
emailManager.getSmtp(user).sendMail(mailBuilder.message); emailManager.getSmtp(user)?.sendMail(mailBuilder.message);
res.status(statusCode.OK).send(); res.status(statusCode.OK).send();
} else { } else {
res.status(statusCode.FORBIDDEN).send({ error: "Cannot add a new message in a room or a channel." }); res.status(statusCode.FORBIDDEN).send({ error: "Cannot add a new message in a room or a channel." });
@ -71,14 +72,22 @@ export default class RoomAbl {
}); });
} }
static async getMembers(body, res) { static async getMembers(body, res: Response) {
const { roomId } = body; const { roomId } = body;
getMembers(roomId).then((addresses) => { getMembers(roomId)
res.status(statusCode.OK).json(addresses); .then((addresses) => {
}).catch((err) => { res.status(statusCode.OK).json(addresses);
logger.err(err) })
res.status(statusCode.INTERNAL_SERVER_ERROR); .catch((err) => {
}); logger.err(err);
res.status(statusCode.INTERNAL_SERVER_ERROR);
});
} }
static async delete(body, res: Response) {
const { roomId } = body;
console.log("delete", roomId);
const room = new Room().setRoomId(roomId);
// todo
}
} }

View File

@ -23,6 +23,7 @@ export default class Room {
return this; return this;
} }
// check if the room have threads or messages
async shouldDelete(): Promise<boolean> { async shouldDelete(): Promise<boolean> {
if (!this._roomId) { if (!this._roomId) {
throw "shouldDelete needs to have a roomId set."; throw "shouldDelete needs to have a roomId set.";

View File

@ -21,4 +21,8 @@ router.post("/response", async (req, res) => {
await validator.validate("response", req.body, res, RoomAbl.response); await validator.validate("response", req.body, res, RoomAbl.response);
}); });
router.post("/delete", async (req, res) => {
await validator.validate("deleteRoom", req.body, res, RoomAbl.delete);
});
export default router; export default router;

View File

@ -0,0 +1,12 @@
{
"type": "object",
"properties": {
"roomId": {
"type": "number"
}
},
"required": [
"roomId"
],
"additionalProperties": false
}

View File

@ -11,6 +11,7 @@ import getMembersSchema from "./schemas/getMembers-schema.json";
import setFlagSchema from "./schemas/setFlag-schema.json"; import setFlagSchema from "./schemas/setFlag-schema.json";
import responseSchema from "./schemas/response-schema.json"; import responseSchema from "./schemas/response-schema.json";
import deleteSchema from "./schemas/delete-schema.json"; import deleteSchema from "./schemas/delete-schema.json";
import deleteRoomSchema from "./schemas/deleteRoom-schema.json";
import { Request, Response } from "express"; import { Request, Response } from "express";
import statusCodes from "../utils/statusCodes"; import statusCodes from "../utils/statusCodes";
import logger from "../system/Logger"; import logger from "../system/Logger";
@ -24,6 +25,7 @@ class Validator {
validateSetFlag: any; validateSetFlag: any;
validateResponse: any; validateResponse: any;
delete: any; delete: any;
deleteRoom: any;
constructor() { constructor() {
this.validateCreateAccount = ajv.compile(createAccountSchema); this.validateCreateAccount = ajv.compile(createAccountSchema);
@ -34,6 +36,7 @@ class Validator {
this.validateSetFlag = ajv.compile(setFlagSchema); this.validateSetFlag = ajv.compile(setFlagSchema);
this.validateResponse = ajv.compile(responseSchema); this.validateResponse = ajv.compile(responseSchema);
this.delete = ajv.compile(deleteSchema); this.delete = ajv.compile(deleteSchema);
this.deleteRoom = ajv.compile(deleteRoomSchema);
} }
_getSchema(name: string): any { _getSchema(name: string): any {
@ -55,6 +58,8 @@ class Validator {
return this.validateResponse; return this.validateResponse;
case "delete": case "delete":
return this.delete; return this.delete;
case "deleteRoom":
return this.deleteRoom;
default: default:
logger.err(`Schema ${name} not found`); logger.err(`Schema ${name} not found`);
break; break;

View File

@ -32,6 +32,6 @@ export default {
return API().post(`/message/delete`, data); return API().post(`/message/delete`, data);
}, },
deleteRoom(id: number) { deleteRoom(id: number) {
return API().post(`/room/delete`, id); return API().post(`/room/delete`, { roomId: id });
}, },
}; };

View File

@ -17,6 +17,7 @@ const roomTitle = () => {
}; };
const handleDelete = () => { const handleDelete = () => {
console.log(props.room);
if (props.room?.id) { if (props.room?.id) {
imapAPI.deleteRoom(props.room.id); imapAPI.deleteRoom(props.room.id);
} }