lang.controller.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. /**
  2. * @file Provides the model and operation for languages.
  3. * @author Inigo Valentin
  4. * @since 4.0.0
  5. */
  6. const logger = require('pino')()
  7. const db = require("../models");
  8. const Lang = db.langs;
  9. const Op = db.Sequelize.Op;
  10. const AuthService = require("../services/auth.service.js");
  11. const authService = new AuthService(db);
  12. /**
  13. * Create and save a new language.
  14. *
  15. * @param req The received request by the server.
  16. * @param res The request to be sent by the server.
  17. */
  18. exports.create = (req, res) => {
  19. // Check authentication
  20. if (authService.validateToken(req, res).success === false){
  21. res.status(validation.code).send(validation.message);
  22. return;
  23. }
  24. // Validate request
  25. let missing = [];
  26. if (!req.body.code) missing.push("code");
  27. if (!req.body.name) missing.push("name");
  28. if (missing.length > 0){
  29. let message = "Missing required fields: [";
  30. for (let i = 0; i < missing.length; i ++){
  31. message += missing[i];
  32. if (i < missing.length - 1) message += ", ";
  33. }
  34. message += "].";
  35. res.status(400).send(message);
  36. return;
  37. }
  38. const code = req.body.code;
  39. const name = req.body.name;
  40. const priority = !isNaN(req.body.priority) ? Number(req.body.priority) : 99;
  41. const active = ((req.body.active + "").toLowerCase() === 'true') ? true : false;
  42. // TODO: Check name unique.
  43. // TODO resolve conflicting priorities.
  44. // Create a Lang
  45. const Lang = {code: code, name: name, priority: priority, active: active};
  46. // Save Lang in the database
  47. Lang.create(Lang)
  48. .then(data => {res.send(data);})
  49. .catch(err => {
  50. logger.error("Error creating language: " + err);
  51. res.status(500).send("Error creating language.");
  52. });
  53. };
  54. /**
  55. * Retrieve all languages from the database.
  56. *
  57. * @param req The received request by the server.
  58. * @param res The request to be sent by the server.
  59. */
  60. exports.findAll = (req, res) => {
  61. Lang.findAll({
  62. where: {active: true},
  63. attributes: {exclude: ['priority', 'active']},
  64. order: [['priority', 'ASC']]
  65. })
  66. .then(data => {res.send(data);})
  67. .catch(err => {
  68. logger.error("Error retrieving language: " + err);
  69. res.status(500).send("Error retrieving languages.");
  70. });
  71. };
  72. /**
  73. * Find a single language by it's code.
  74. *
  75. * @param req The received request by the server.
  76. * @param res The request to be sent by the server.
  77. */
  78. exports.findOne = (req, res) => {
  79. const code = req.params.code;
  80. Lang.findByPk(code)
  81. .then(data => {
  82. if (data) res.send(data);
  83. else res.status(404).send(`No language with code ${code}.`
  84. );
  85. })
  86. .catch(err => {
  87. logger.error("Error retrieving language with code " + code + ": " + err);
  88. res.status(500).send("Error retrieving language with code " + code + ".");
  89. });
  90. };
  91. /**
  92. * Update a single language by it's code.
  93. *
  94. * @param req The received request by the server.
  95. * @param res The request to be sent by the server.
  96. */
  97. exports.update = (req, res) => {
  98. // Check authentication
  99. if (authService.validateToken(req, res).success === false){
  100. res.status(validation.code).send(validation.message);
  101. return;
  102. }
  103. const code = req.params.code;
  104. Lang.update(req.body, {where: {code: code}})
  105. .then(num => {
  106. if (num == 1) res.send("Language updated successfully.");
  107. else res.send(`Cannot update language with code ${id}.`);
  108. })
  109. .catch(err => {
  110. logger.error("Error updating language with code " + code + ": " + err);
  111. res.status(500).send("Error updating language with code " + code + ".");
  112. });
  113. };
  114. /**
  115. * Delete a single language by it's code.
  116. *
  117. * @param req The received request by the server.
  118. * @param res The request to be sent by the server.
  119. */
  120. exports.delete = (req, res) => {
  121. // Check authentication
  122. if (authService.validateToken(req, res).success === false){
  123. res.status(validation.code).send(validation.message);
  124. return;
  125. }
  126. const code = req.params.code;
  127. Lang.destroy({where: {id: id}})
  128. .then(num => {
  129. if (num == 1) res.send("Language deleted successfully.");
  130. else res.send(`Cannot delete language with code ${id}.`);
  131. })
  132. .catch(err => {
  133. logger.error("Error deleting language with code " + code + ": " + err);
  134. res.status(500).send("Error deleting language with code " + code + ".");
  135. });
  136. };
  137. /**
  138. * Delete all languages.
  139. *
  140. * @param req The received request by the server.
  141. * @param res The request to be sent by the server.
  142. */
  143. exports.deleteAll = (req, res) => {
  144. // Check authentication
  145. if (authService.validateToken(req, res).success === false){
  146. res.status(validation.code).send(validation.message);
  147. return;
  148. }
  149. Lang.destroy({where: {}, truncate: false})
  150. .then(nums => {res.send({ message: `${nums} languages deleted successfully.`});})
  151. .catch(err => {
  152. logger.error("Error deleting languages: " + err);
  153. res.status(500).send("Error deleting languages.");
  154. });
  155. };