team.controller.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. // api/team.controller.js
  2. import _ from "lodash";
  3. import AccountService from "../accounts/account.service.js";
  4. import Team from "./team.model.js";
  5. import TeamSerializer from "./team.serializer.js";
  6. import TeamService from "./team.service.js";
  7. import TeamValidator from "./team.validator.js";
  8. class Controller {
  9. async index(req, res) {
  10. const teams = await TeamService.find({ accountId: req.user.accountId });
  11. return res.json(TeamSerializer.index(teams));
  12. }
  13. async byId(req, res) {
  14. const team = await TeamService.oneBy({
  15. _id: req.params.id,
  16. accountId: req.user.accountId,
  17. });
  18. if (team) res.json(TeamSerializer.show(team));
  19. else res.status(404).end();
  20. }
  21. async create(req, res) {
  22. const account = await AccountService.findById(req.user.accountId);
  23. const teams = await TeamService.find({ accountId: req.user.accountId });
  24. if (teams.length >= Team.maxTeamsPerPlan(account.planType)) {
  25. return res.status(401).json({
  26. success: false,
  27. errors:
  28. "You have reached the maximum number of teams for your plan. Upgrade it to increase the number.",
  29. });
  30. }
  31. const errors = await TeamValidator.onCreate(req.body);
  32. if (errors) {
  33. return res.status(422).json({
  34. success: false,
  35. errors: errors.details,
  36. });
  37. }
  38. const teamData = _.pick(req.body, ["name", "code"]);
  39. teamData.code = _.kebabCase(teamData.code);
  40. const team = await TeamService.create(teamData, req.user.accountId);
  41. if (team) {
  42. return res.json(TeamSerializer.show(team));
  43. } else {
  44. return res.status(422).json({
  45. message: "Failed to save the team.",
  46. });
  47. }
  48. }
  49. async update(req, res) {
  50. const errors = await TeamValidator.onUpdate(req.body);
  51. if (errors) {
  52. return res.status(422).json({
  53. success: false,
  54. errors: errors.details,
  55. });
  56. }
  57. const teamData = _.pick(req.body, ["name"]);
  58. const team = await TeamService.update(
  59. req.params.id,
  60. req.user.accountId,
  61. teamData
  62. );
  63. if (team) {
  64. return res.json(TeamSerializer.show(team.toObject()));
  65. } else {
  66. return res.status(422).json({
  67. success: false,
  68. message: "Failed to update team.",
  69. });
  70. }
  71. }
  72. async delete(req, res) {
  73. try {
  74. await TeamService.delete(req.params.id, req.user.accountId);
  75. return res.json({
  76. deleted: true,
  77. });
  78. } catch (error) {
  79. return res.status(401).json({
  80. success: false,
  81. message: "Failed to delete team.",
  82. });
  83. }
  84. }
  85. async addUser(req, res) {
  86. let obj = {
  87. id: req.params.id,
  88. accountId: req.user.accountId,
  89. userId: req.params.userId,
  90. };
  91. const errors = await TeamValidator.onAddOrRemoveUser(obj);
  92. if (errors) {
  93. return res.status(422).json({
  94. success: false,
  95. errors: errors.details,
  96. });
  97. }
  98. try {
  99. let team = await TeamService.addUser(
  100. req.params.id,
  101. req.user.accountId,
  102. req.params.userId
  103. );
  104. if (team) {
  105. return res.json(TeamSerializer.show(team));
  106. }
  107. } catch (error) {
  108. return res.status(401).json({
  109. success: false,
  110. message: error.message,
  111. });
  112. }
  113. }
  114. async removeUser(req, res) {
  115. let obj = {
  116. id: req.params.id,
  117. accountId: req.user.accountId,
  118. userId: req.params.userId,
  119. };
  120. const errors = await TeamValidator.onAddOrRemoveUser(obj);
  121. if (errors) {
  122. return res.status(422).json({
  123. success: false,
  124. errors: errors.details,
  125. });
  126. }
  127. try {
  128. let team = await TeamService.removeUser(
  129. req.params.id,
  130. req.user.accountId,
  131. req.params.userId
  132. );
  133. if (team) {
  134. return res.json(TeamSerializer.show(team));
  135. }
  136. } catch (error) {
  137. return res.status(401).json({
  138. success: false,
  139. message: error.message,
  140. });
  141. }
  142. }
  143. }
  144. export default new Controller();