Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | 7x 3x 3x 3x 3x 3x 3x 3x 3x 1x 3x 3x 2x 2x 1x 1x 1x 1x 1x | import mongoose from "mongoose"; import roomModel from "../models/room_model"; import { CustomRequest } from "types/customRequest"; import { Response } from "express"; export const getRoomByUserIds = async (req: CustomRequest, res: Response): Promise<void> => { const receiverUserId = req.params.receiverUserId as string; const initiatorUserId = req.user.id as string; try { let roomDocuments: any[] = await roomModel.aggregate( [ { $match: { userIds: { $in: [new mongoose.Types.ObjectId(receiverUserId)] } } }, { $match: { userIds: { $in: [new mongoose.Types.ObjectId(initiatorUserId)] } } }, { $lookup: { from: 'messages', localField: '_id', foreignField: 'roomId', as: 'messages' } } ] ); // Handle that a user could send to himself let room = null; for (let i = 0; i < roomDocuments.length; i++) { room = roomDocuments[i]; if (room.userIds[0].toString() == room.userIds[1].toString()) { break; } } Iif (room && room.userIds[0].toString() != room.userIds[1].toString() && receiverUserId.toString() == initiatorUserId.toString()) { room = null; } if (room) { res.status(200).send(room); return; } // Room not found, create one. const newRoom = await roomModel.create({ userIds: [ new mongoose.Types.ObjectId(receiverUserId), new mongoose.Types.ObjectId(initiatorUserId) ] }); room = newRoom.toObject(); (room as any).messages = []; res.status(201).send(room); return; } catch(error){ res.status(400).send("Bad Request"); } }; |