jrnGet.js 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /**
  2. * ВЫДАЧА ДАННЫХ В ИНТЕРФЕЙС УЧАЩЕГОСЯ И РОДИТЕЛЯ
  3. * Copyright © 2021, А.М.Гольдин. Modified BSD License
  4. */
  5. "use strict";
  6. // В аргументах приходит массив, состоящий из одного элемента - логина клиента
  7. // (логин с фронтенда не передается, подписывается скриптом index.js).
  8. // Возвращает none или объект (ВСЕ темы уроков, независимо от отметок)
  9. // {
  10. // "8Б-мальч_s410_ivanov": {
  11. // d601: ["Африка", "Учить реки", 8, "нн5"],
  12. // ...
  13. // }
  14. // ...
  15. // }
  16. // Если код предмета равен "s000" (внеурочная деятельность), в соответствующем
  17. // ключе вместо "s000" будет имя группы типа "23Б"
  18. module.exports = async (argArr) => {
  19. let resp = {};
  20. try {
  21. // Логин учащегося
  22. if (argArr.length != 1) return "none";
  23. let lg = argArr[0].substr(0, 20).trim();
  24. if (!/^[a-z0-9]+$/.test(lg)) return "none";
  25. // Получаем массив, состоящий из его класса и его подгрупп, где он член,
  26. // а также из групп внеурочной деятельности, где он член
  27. let res = await dbFind("pupils", {Ulogin: lg});
  28. if (!res.length) return "none";
  29. let pup = res[0];
  30. let pupGroups = [pup.Uclass];
  31. if (pup.groups) pupGroups = [...pupGroups, ...pup.groups];
  32. if (pup.facult) pupGroups = [...pupGroups, ...pup.facult];
  33. // Из коллекции topics получаем все темы, дз и веса
  34. // для этих классов и подгрупп и пишем это все в объект resp
  35. // (см. описание выше) пока без отметок
  36. for (let gr of pupGroups) {
  37. res = await dbFind("topics", {g: gr});
  38. if (!res.length) continue;
  39. for (let t of res) {
  40. let subjCod = (t.s == "s000") ? t.g : t.s;
  41. let k = `${gr}_${subjCod}_${t.l}`;
  42. if (!resp[k]) resp[k] = {};
  43. resp[k][t.d] = [t.t, t.h, t.w];
  44. }
  45. }
  46. // Из коллекции grades получаем все отметки этого ребенка (в том числе
  47. // итоговые) и подписываем их в объект resp
  48. res = await dbFind("grades", {p: lg});
  49. for (let otm of res) {
  50. let subjCod = (otm.s == "s000") ? otm.c : otm.s;
  51. let k = `${otm.c}_${subjCod}_${otm.t}`;
  52. if (!resp[k]) resp[k] = {};
  53. if (resp[k][otm.d]) resp[k][otm.d].push(otm.g);
  54. else resp[k][otm.d] = ['', '', 0, otm.g]; // итоговые отметки
  55. }
  56. return JSON.stringify(resp);
  57. }
  58. catch(e) {return "none";}
  59. };