lang.controller.js 4.9 KB

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