Как реализовать алгоритм сопоставления между пользователями?

#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. В качестве общего замечания, похоже, что вы объединяете свой код контроллера со своей бизнес-логикой. Это может затруднить тестирование. В идеале ваши инструкции маршрутизатора должны содержать очень короткое замыкание, и этот код должен просто декодировать входы / выходы запроса / ответа и передавать его в / из сервисной функции / класса. Это также позволит вам разделить вашу логику на отдельные файлы.