#node.js #mongodb #express
#node.js #mongodb #выразить
Вопрос:
Я реализую алгоритм сопоставления в своем приложении, и я хочу убедиться, что если один человек сопоставлен с другим человеком, который уже существует в списке, человек А увидит сведения о человеке Б.
А также пользователь B одновременно увидит информацию о человеке. Как мне это сделать? Мой код приведен ниже. Как я могу изменить свой маршрут запроса post?
const { WaitingList } = require("../models/waitingList");
const auth = require("../middleware/auth");
const admin = require("../middleware/admin");
const validateObjectId = require("../middleware/validateObjectId");
const moment = require("moment");
const { User } = require("../models/user");
const mongoose = require("mongoose");
const express = require("express");
const router = express.Router();
router.post("/", async (req, res) => {
let userId = req.body.userId;
//---------find the first user on the waiting list
let __lastWaitLister = await WaitingList.findOne(
{ completed: false, "from.2": { $exists: false } },
{},
{ sort: { createdAt: 1 } }
);
if (__lastWaitLister) {
//---------add the new user to the first users list
let __updates = {
$push: {
from: {
user: userId,
status: "pending",
},
},
};
//---------check if this is the second person and take the first user off
if (__lastWaitLister.from amp;amp; __lastWaitLister.from.length === 1) {
__updates["$set"] = {
completed: true,
};
}
//---------update the list
await __lastWaitLister.updateOne(__updates);
}
//---------add the new user to the waiting list
let new_waitList = new WaitingList({
user: userId,
from: [],
completed: false,
receipientInfor: [],
});
await new_waitList.save();
});
router.get("/:id", async (req, res) => {
const waitingList = await WaitingList.findById(req.params.id)
.populate({ path: "user", select: "name momoNumber" })
.populate("from")
.populate("from.user", "name momoNumber")
.select(" completed createdAt");
res.send(waitingList);
});
router.delete("/:id", async (req, res) => {
let __paidWaitList = await WaitingList.findOneAndDelete({
"from.status": "paid",
});
if (!__paidWaitList) res.status(404).send("no record found"); //----------check if all users have made
// )
res.send(__paidWaitList);
});
module.exports = router;
Комментарии:
1. Похоже, вы хотели бы, чтобы читатель реализовал функцию для вас. Я сомневаюсь, что кто-то это сделает, поскольку это большая работа, и в любом случае неясно, что вы считаете правильной реализацией. Можете ли вы сузить круг вопросов, на которых вы лично застряли?
2. В качестве общего замечания, похоже, что вы объединяете свой код контроллера со своей бизнес-логикой. Это может затруднить тестирование. В идеале ваши инструкции маршрутизатора должны содержать очень короткое замыкание, и этот код должен просто декодировать входы / выходы запроса / ответа и передавать его в / из сервисной функции / класса. Это также позволит вам разделить вашу логику на отдельные файлы.