lang.controller.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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. .then(data => {res.send(data);})
  63. .catch(err => {
  64. logger.error("Error retrieving language: " + err);
  65. res.status(500).send("Error retrieving languages.");
  66. });
  67. };
  68. /**
  69. * Find a single language by it's code.
  70. *
  71. * @param req The received request by the server.
  72. * @param res The request to be sent by the server.
  73. */
  74. exports.findOne = (req, res) => {
  75. const code = req.params.code;
  76. Lang.findByPk(code)
  77. .then(data => {
  78. if (data) res.send(data);
  79. else res.status(404).send(`No language with code ${code}.`});
  80. })
  81. .catch(err => {
  82. logger.error("Error retrieving language with code " + code + ": " + err);
  83. res.status(500).send("Error retrieving language with code " + code + ".");
  84. });
  85. };
  86. /**
  87. * Update a single language by it's code.
  88. *
  89. * @param req The received request by the server.
  90. * @param res The request to be sent by the server.
  91. */
  92. exports.update = (req, res) => {
  93. // Check authentication
  94. if (authService.validateToken(req, res).success === false){
  95. res.status(validation.code).send(validation.message);
  96. return;
  97. }
  98. const code = req.params.code;
  99. Lang.update(req.body, {where: {code: code}})
  100. .then(num => {
  101. if (num == 1) res.send("Language updated successfully.");
  102. else res.send(`Cannot update language with code ${id}.`);
  103. })
  104. .catch(err => {
  105. logger.error("Error updating language with code " + code + ": " + err);
  106. res.status(500).send("Error updating language with code " + code + ".");
  107. });
  108. };
  109. /**
  110. * Delete a single language by it's code.
  111. *
  112. * @param req The received request by the server.
  113. * @param res The request to be sent by the server.
  114. */
  115. exports.delete = (req, res) => {
  116. // Check authentication
  117. if (authService.validateToken(req, res).success === false){
  118. res.status(validation.code).send(validation.message);
  119. return;
  120. }
  121. const code = req.params.code;
  122. Lang.destroy({where: {id: id}})
  123. .then(num => {
  124. if (num == 1) res.send("Language deleted successfully.");
  125. else res.send(`Cannot delete language with code ${id}.`);
  126. })
  127. .catch(err => {
  128. logger.error("Error deleting language with code " + code + ": " + err);
  129. res.status(500).send("Error deleting language with code " + code + ".");
  130. });
  131. };
  132. /**
  133. * Delete all languages.
  134. *
  135. * @param req The received request by the server.
  136. * @param res The request to be sent by the server.
  137. */
  138. exports.deleteAll = (req, res) => {
  139. // Check authentication
  140. if (authService.validateToken(req, res).success === false){
  141. res.status(validation.code).send(validation.message);
  142. return;
  143. }
  144. Lang.destroy({where: {}, truncate: false})
  145. .then(nums => {res.send({ message: `${nums} languages deleted successfully.`});})
  146. .catch(err => {
  147. logger.error("Error deleting languages: " + err);
  148. res.status(500).send("Error deleting languages.");
  149. });
  150. };