usFind.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /**
  2. * ПОИСК ЮЗЕРОВ
  3. * Copyright © 2019, А.М.Гольдин. Modified BSD License
  4. */
  5. "use strict";
  6. // Запрос имеет вид [Статус, Класс, ФИО] (статус - это Учащийся/Учитель,
  7. // класс типа 8Б, ФИО это фрагмент для поиска по подстроке)
  8. // Возвращает none или массив найденных юзеров, где каждый юзер - это объект
  9. // {
  10. // login: "vasya", famil: "Пупкин", name: "Василий", name2: "Иванович",
  11. // unit: "8Б", admin: false, block: false
  12. // }
  13. module.exports = async req => {
  14. let dbResult = [], res = [];
  15. try {
  16. // Разбираемся с тем, что пришло в запросе
  17. let status = req[0], unit = req[1], fio = req[2];
  18. if (!status) return "none";
  19. // Производим запрос к соответстсвующей коллекции базы данных
  20. if (status == "Учащийся")
  21. if (unit != '0')
  22. dbResult = await dbFind("pupils", {$or: [
  23. {Uclass: unit, Ufamil: RegExp(fio, 'i')},
  24. {Uclass: unit, Uname: RegExp(fio, 'i')}
  25. ]});
  26. else
  27. dbResult = await dbFind("pupils", {$or: [
  28. {Ufamil: RegExp(fio, 'i')}, {Uname: RegExp(fio, 'i')}
  29. ]});
  30. else
  31. dbResult = await dbFind("staff", {$or: [
  32. {Ufamil: RegExp(fio, 'i')},
  33. {Uname: RegExp(fio, 'i')},
  34. {Uotch: RegExp(fio, 'i')}
  35. ]});
  36. // Если ответ непуст, формируем и возвращаем результат
  37. if (dbResult.length) {
  38. for (let currUser of dbResult) {
  39. let respClass = currUser.Uclass || '',
  40. respOtch = currUser.Uotch || '',
  41. respAdmin = currUser.admin || '',
  42. respBlock = currUser.block || '';
  43. res.push({
  44. login: currUser.Ulogin,
  45. famil: currUser.Ufamil,
  46. name: currUser.Uname,
  47. name2: respOtch,
  48. unit: respClass,
  49. admin: respAdmin,
  50. block: respBlock
  51. });
  52. }
  53. return JSON.stringify(res);
  54. }
  55. else return "none";
  56. }
  57. catch(e) {return "none";}
  58. };