Browse Source

finished delete selected message and start pin message

unknown 1 year ago
parent
commit
bdad84ba9b
4 changed files with 104 additions and 0 deletions
  1. 84 0
      controllers/messages.js
  2. 4 0
      model/schemas/message.js
  3. 7 0
      routes/messages.js
  4. 9 0
      validation/message.js

+ 84 - 0
controllers/messages.js

@@ -63,6 +63,32 @@ const updateMessageEmoji = async (req, res, next) => {
 	}
 };
 
+const updateMessagePin = async (req, res, next) => {
+	try {
+		const id = req.params.id;
+		const userId = req.user.id;
+		const { pinned } = req.body;
+		const userMessage = await MessageModel.updateMessage(id, userId, {
+			pinned,
+		});
+		await MessageModel.findByFieldsAndUpdate(
+			userId,
+			userMessage.idTime,
+			userMessage.companionId,
+			{
+				pinned,
+			}
+		);
+		return res.status(200).json({
+			status: 'success',
+			code: 200,
+			data: {},
+		});
+	} catch (e) {
+		next(e);
+	}
+};
+
 const removeMessage = async (req, res, next) => {
 	try {
 		const id = req.params.id;
@@ -116,6 +142,62 @@ const removeMessage = async (req, res, next) => {
 	}
 };
 
+const removeSelected = async (req, res, next) => {
+	try {
+		const userId = req.user.id;
+		const { selectedArr, companionId } = req.body;
+		const totalDeleted = selectedArr.length;
+		const toDeleteMessage = async (id) => {
+			const userMessage = await MessageModel.remove(id, userId);
+			await MessageModel.removeByFields(
+				userId,
+				userMessage.idTime,
+				companionId
+			);
+			if (userMessage.type !== 'text') {
+				const params = {
+					Bucket: AWS_BUCKET_NAME,
+					Key: `${userMessage.message}`,
+				};
+				s3.deleteObject(params, async function (err, _data) {
+					if (err) throw err;
+				});
+			}
+		};
+		await selectedArr.forEach(async (id) => await toDeleteMessage(id));
+		const isChat = await ChatModel.getByField(companionId, userId);
+		const isCompanionChat = await ChatModel.getByField(userId, companionId);
+		const { total } = await MessageModel.getList(
+			{ owner: userId, companionId },
+			{}
+		);
+		const { total: Total } = await MessageModel.getList(
+			{ owner: companionId, companionId: userId },
+			{}
+		);
+		await ChatModel.update(isChat._id, userId, {
+			total: total,
+			seen: isChat.seen - totalDeleted > 0 ? isChat.seen - totalDeleted : 0,
+			watched: false,
+		});
+		await ChatModel.update(isCompanionChat._id, companionId, {
+			total: Total,
+			seen:
+				isCompanionChat.seen - totalDeleted > 0
+					? isCompanionChat.seen - totalDeleted
+					: 0,
+			watched: true,
+		});
+		return res.json({
+			status: 'success',
+			code: 200,
+			data: {},
+		});
+	} catch (e) {
+		next(e);
+	}
+};
+
 const sentMessage = async (req, res, next) => {
 	try {
 		const { id, message, caption } = req.body;
@@ -546,7 +628,9 @@ const fileMessage = async (req, res, next) => {
 module.exports = {
 	listMessages,
 	removeMessage,
+	removeSelected,
 	updateMessageEmoji,
+	updateMessagePin,
 	listMessagesById,
 	sentMessage,
 	imageMessage,

+ 4 - 0
model/schemas/message.js

@@ -62,6 +62,10 @@ const messageSchema = new Schema(
 			type: String,
 			default: null,
 		},
+		pinned: {
+			type: Boolean,
+			default: false,
+		},
 		owner: {
 			type: SchemaTypes.ObjectId,
 			ref: 'user',

+ 7 - 0
routes/messages.js

@@ -8,6 +8,12 @@ const upload = require('../helpers/upload');
 router
 	.get('/', guard, controllers.listMessages)
 	.post('/', guard, validation.sentMessage, controllers.sentMessage)
+	.patch(
+		'/selected/',
+		guard,
+		validation.removeSelected,
+		controllers.removeSelected
+	)
 	.post(
 		'/image/:companionIdAndCaption',
 		[guard, upload.uploadImage.single('image'), validation.validateUploadFile],
@@ -31,6 +37,7 @@ router
 
 router
 	.get('/:companionId', guard, controllers.listMessagesById)
+	.patch('/pin/:id', guard, controllers.updateMessagePin)
 	.patch('/:id', guard, controllers.updateMessageEmoji)
 	.delete('/:id', guard, controllers.removeMessage);
 

+ 9 - 0
validation/message.js

@@ -8,10 +8,19 @@ const schemaSentMessage = Joi.object({
 	caption: Joi.any().optional(),
 });
 
+const schemaRemoveSelected = Joi.object({
+	companionId: Joi.string().required(),
+	selectedArr: Joi.array().items(Joi.string().min(5).max(50)).required(),
+});
+
 module.exports.sentMessage = (req, _res, next) => {
 	return validate(schemaSentMessage, req.body, next);
 };
 
+module.exports.removeSelected = (req, _res, next) => {
+	return validate(schemaRemoveSelected, req.body, next);
+};
+
 module.exports.validateUploadFile = (req, res, next) => {
 	if (!req.file)
 		return res.status(400).json({