masquitos

Untitled

Aug 6th, 2020
2,494
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const express = require("express");
  2. const _ = require("lodash");
  3. const requester = require("../../helper/requester");
  4. const socket = require("../../socket.js");
  5. const events = require("../../model/events");
  6. const errorCodes = require("../../helper/errorcodes");
  7. const dbHelper = require("../../db/db_helper");
  8. const USER_TYPES = require("../../model/roles");
  9. const parser = require("../../helper/parser");
  10. const myErrors = require("../../helper/errorcodes");
  11. const myConstants = require("../../helper/connstants");
  12. const dbWorker = require("../../db-worker");
  13.  
  14. const router = express.Router();
  15.  
  16. router
  17.   .route("/")
  18.   .post(billing, createTask)
  19.   .get(getMyTasks);
  20.  
  21. router.route("/:id/read").patch(setTaskIsRead);
  22.  
  23. router.route("/:id/close").patch(closeTask);
  24.  
  25. router.route("/edit/:id").post(editTask);
  26.  
  27. router.route("/find").post(findTask);
  28.  
  29. router.route("/open/:id").get(openTask);
  30.  
  31. async function billing(req, res, next) {
  32.   if (req.user.role === USER_TYPES.GUEST) {
  33.     try {
  34.       let tasks = await dbHelper.getMyTasks(req.user.id);
  35.       if (tasks.length >= myConstants.MAX_CREATE_ENTITY_COUNT) {
  36.         return res.json(requester.createError(errorCodes.BILLING_ERROR));
  37.       }
  38.     } catch (e) {
  39.       console.error(e);
  40.       return res.json(requester.createError());
  41.     }
  42.   }
  43.   return next();
  44. }
  45.  
  46. //  Создать заявку
  47. async function createTask(req, res, next) {
  48.   const task = req.body;
  49.   const userId = req.user.id;
  50.   const userName = req.user.name;
  51.  
  52.   let body;
  53.   try {
  54.     const badWords = await dbHelper.checkBadWords(task.body);
  55.     if (!badWords) {
  56.       const dbNewTask = await dbHelper.createTask(userId, task);
  57.       const avatar = await dbHelper.getAvatar(userId);
  58.       const uuid = avatar ? avatar.uuid : null;
  59.       dbNewTask.name = userName;
  60.       dbNewTask.uuid = uuid;
  61.       const newTask = parser.parseTask(dbNewTask);
  62.  
  63.       const dbSubscribers = await dbHelper.getSubscribers(userId, newTask.id);
  64.       if (dbSubscribers.length > 0) {
  65.         const dbFoundTask = _.cloneDeep(dbNewTask);
  66.         dbFoundTask.is_read = false;
  67.         const FoundTask = parser.parseFoundTask(dbFoundTask);
  68.         const ids = parser.parseSubIdsFromSubscribers(dbSubscribers);
  69.         await dbHelper.addSubscribedTask(FoundTask.id, ids);
  70.  
  71.         //  Отправляем заявку подписчикам
  72.         for (el of dbSubscribers) {
  73.           console.log(
  74.             "Пересылаем заявку",
  75.             FoundTask.id,
  76.             " пользователю ",
  77.             el.user_id
  78.           );
  79.           socket.sendData(userId, el.user_id, events.TASK, {
  80.             data: FoundTask,
  81.             subscriptions: el.subscriptions
  82.           });
  83.         }
  84.       }
  85.       body = requester.createBody({ id: newTask.id });
  86.     } else {
  87.       console.log("Найдены плохие слова", badWords);
  88.       body = requester.createError(errorCodes.BAD_WORDS, badWords);
  89.     }
  90.   } catch (error) {
  91.     console.error(error);
  92.     body = requester.createError(error);
  93.   }
  94.   res.json(body);
  95. }
  96.  
  97. //Закрыть заявку
  98. async function closeTask(req, res, next) {
  99.   const taskId = parseInt(req.path.split("/")[1], 10);
  100.   const userId = req.user.id;
  101.  
  102.   let body;
  103.   try {
  104.     await dbHelper.closeTask(userId, taskId);
  105.     const dbTask = await dbHelper.getTaskById(taskId);
  106.     const task = parser.parseTask(dbTask);
  107.     await dbWorker.closeFoundTasks([task]);
  108.     body = requester.createBody();
  109.   } catch (error) {
  110.     console.error(error);
  111.     body = requester.createError(error);
  112.   }
  113.   res.json(body);
  114. }
  115.  
  116. // Открыть заявку
  117. async function openTask(req, res, next) {
  118.   const taskId = req.params.id;
  119.   const userId = req.user.id;
  120.  
  121.   let body;
  122.   try {
  123.     await dbHelper.openTask(userId, taskId);
  124.     body = requester.createBody();
  125.   } catch (error) {
  126.     console.error(error);
  127.     body = requester.createError(error);
  128.   }
  129.   res.json(body);
  130. }
  131.  
  132. //  Поиск всех моих заявок
  133. async function getMyTasks(req, res, next) {
  134.   const userId = req.user.id;
  135.   let body;
  136.   try {
  137.     const dbTasks = await dbHelper.getMyTasks(userId);
  138.     const myTasks = dbTasks.map(el => parser.parseTask(el));
  139.     body = requester.createBody(myTasks);
  140.   } catch (error) {
  141.     console.error(error);
  142.     body = requester.createError(error);
  143.   }
  144.   res.json(body);
  145. }
  146.  
  147. //  Поиск заявок в радиусе
  148. async function findTask(req, res, next) {
  149.   const userId = req.user.id;
  150.   const position = req.body.position;
  151.   const coordinates = position.coordinates;
  152.   const radius = position.radius;
  153.   const tags = req.body.tags;
  154.   let body;
  155.   try {
  156.     console.log("Ищем заявки ", userId);
  157.  
  158.     const badWords = await dbHelper.checkBadWords(tags.join(","));
  159.     if (!badWords) {
  160.       const dbTasks = await dbHelper.findTasks(
  161.         userId,
  162.         coordinates,
  163.         radius,
  164.         tags
  165.       );
  166.       const foundTasks = dbTasks.map(el => parser.parseFoundTask(el));
  167.       body = requester.createBody(foundTasks);
  168.     } else {
  169.       console.log("Найдены плохие слова", badWords);
  170.       body = requester.createError(errorCodes.BAD_WORDS, badWords);
  171.     }
  172.   } catch (error) {
  173.     console.error(error);
  174.     body = requester.createError(error);
  175.   }
  176.   res.json(body);
  177. }
  178.  
  179. // Редактировать заявку
  180. async function editTask(req, res, next) {
  181.   console.log("editTask", req.body.id);
  182.   const userId = req.user.id;
  183.   const task = req.body;
  184.   let body;
  185.   try {
  186.     const badWords = await dbHelper.checkBadWords(task.body);
  187.     if (!badWords) {
  188.       await dbHelper.editTask(userId, task);
  189.       body = requester.createBody();
  190.     } else {
  191.       console.log("Найдены плохие слова", badWords);
  192.       body = requester.createError(errorCodes.BAD_WORDS, badWords);
  193.     }
  194.   } catch (error) {
  195.     console.error(error);
  196.     body = requester.createError(error);
  197.   }
  198.   res.json(body);
  199. }
  200.  
  201. // Просмотрели заявку
  202. async function setTaskIsRead(req, res) {
  203.   const taskId = req.params.id;
  204.   const userId = req.user.id;
  205.   let body;
  206.   try {
  207.     await dbHelper.setTaskIsRead(userId, taskId);
  208.     body = requester.createBody();
  209.   } catch (error) {
  210.     console.error("setTaskIsRead", userId, taskId, error);
  211.     body = requester.createError(myErrors.SET_TASK_IS_READ);
  212.   }
  213.   res.json(body);
  214. }
  215.  
  216. module.exports = router;
  217.  
Advertisement
Add Comment
Please, Sign In to add comment