user.controller.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. // ./api/users/user.controller.js
  2. import { logData } from "../../common/loggerUtility.cjs"; // Importing logData function
  3. import _ from "lodash";
  4. import AccountSerializer from "../accounts/account.serializer.js";
  5. import AccountService from "../accounts/account.service.js";
  6. import UserSerializer from "./user.serializer.js";
  7. import UserService from "./user.service.js";
  8. import UserValidator from "./user.validator.js";
  9. class Controller {
  10. async byId(req, res) {
  11. const user = await UserService.oneBy({
  12. _id: req.params.id,
  13. accountId: req.user.accountId,
  14. });
  15. if (user) res.json(UserSerializer.show(user));
  16. else res.status(404).end();
  17. }
  18. async me(req, res) {
  19. const me = req.user;
  20. if (req.query.withAccount === "true") {
  21. const account = await AccountService.findById(me.accountId);
  22. me.account = AccountSerializer.show(account);
  23. }
  24. res.json(UserSerializer.show(me));
  25. }
  26. async updateMe(req, res) {
  27. console.log('User ID:', req.user._id); // Log user _id
  28. console.log('Request Body:', JSON.stringify(req.body)); // Log the incoming request data
  29. const errors = await UserValidator.onUpdateMe(req.body);
  30. if (errors) {
  31. console.log('Validation Errors:', JSON.stringify(errors.details)); // Log validation errors
  32. return res.status(422).json({
  33. success: false,
  34. errors: errors.details,
  35. });
  36. }
  37. console.log('Current User Object:', JSON.stringify(req.user)); // Log the user object
  38. const userData = _.pick(req.body, ["name", "surname", "language"]);
  39. console.log('User Data to Update:', JSON.stringify(userData)); // Log the data to be updated
  40. const result = await UserService.update(
  41. req.user._id, // Use _id instead of id
  42. req.user.accountId,
  43. userData
  44. );
  45. console.log('Update Result:', JSON.stringify(result)); // Log the result of the update operation
  46. if (result) {
  47. return res.json(UserSerializer.show(result));
  48. } else {
  49. console.log('Update Failed'); // Log a failure message if update fails
  50. return res.status(422).json({
  51. success: false,
  52. message: "Failed to update profile.",
  53. });
  54. }
  55. }
  56. async create(req, res) {
  57. try {
  58. console.log('Create user - Request body:', req.body);
  59. console.log('Create user - User context:', {
  60. userId: req.user?._id,
  61. accountId: req.user?.accountId
  62. });
  63. const errors = await UserValidator.onCreate(req.body);
  64. if (errors) {
  65. console.log('Create user - Validation errors:', errors.details);
  66. return res.status(422).json({
  67. success: false,
  68. errors: errors.details,
  69. });
  70. }
  71. const userData = _.pick(req.body, [
  72. "email",
  73. "password",
  74. "name",
  75. "surname",
  76. "language",
  77. "role",
  78. ]);
  79. console.log('Create user - Processed userData:', userData);
  80. userData.email = userData.email.trim();
  81. userData.accountId = req.user.accountId;
  82. console.log('Create user - Final userData:', userData);
  83. const user = await UserService.create(userData);
  84. console.log('Create user - Service response:', user);
  85. if (user) {
  86. const serializedUser = UserSerializer.show(user);
  87. console.log('Create user - Serialized response:', serializedUser);
  88. return res.json(serializedUser);
  89. } else {
  90. console.log('Create user - Failed to save user');
  91. return res.status(422).json({
  92. message: "Failed to save the user.",
  93. });
  94. }
  95. } catch (error) {
  96. console.error('Create user - Unexpected error:', {
  97. message: error.message,
  98. stack: error.stack
  99. });
  100. return res.status(500).json({
  101. message: "An unexpected error occurred while creating the user.",
  102. error: error.message
  103. });
  104. }
  105. }
  106. async index(req, res) {
  107. const users = await UserService.find({ accountId: req.user.accountId });
  108. return res.json(UserSerializer.index(users));
  109. }
  110. async update(req, res) {
  111. const errors = await UserValidator.onUpdate(req.body);
  112. if (errors) {
  113. return res.status(422).json({
  114. success: false,
  115. errors: errors.details,
  116. });
  117. }
  118. // Modified to include email in the picked fields
  119. const userData = _.pick(req.body, ["name", "surname", "role", "language", "email"]);
  120. // If email is being changed, trim it
  121. if (userData.email) {
  122. userData.email = userData.email.trim();
  123. }
  124. const result = await UserService.update(
  125. req.params.id,
  126. req.user.accountId,
  127. userData
  128. );
  129. if (result) {
  130. return res.json(UserSerializer.show(result.toObject()));
  131. } else {
  132. return res.status(422).json({
  133. success: false,
  134. message: "Failed to update user.",
  135. });
  136. }
  137. }
  138. async delete(req, res) {
  139. if (req.params.id !== req.user.id) {
  140. await UserService.delete(req.params.id, req.user.accountId);
  141. return res.json({
  142. success: true,
  143. message: "User delete successfully.",
  144. });
  145. }
  146. return res.status(401).json({
  147. success: false,
  148. message: "Failed to delete user.",
  149. });
  150. }
  151. async changeMyPassword(req, res) {
  152. const errors = await UserValidator.onResetMyPassword(req.body);
  153. if (errors) {
  154. return res.status(422).json({
  155. success: false,
  156. message: "Failed to update password",
  157. errors: errors.details,
  158. });
  159. }
  160. const data = _.pick(req.body, ["password"]);
  161. UserService.updatePassword(req.user.id, data.password.trim());
  162. return res.json({
  163. success: true,
  164. message: "Successfully changed password!",
  165. });
  166. }
  167. async generateSso(req, res) {
  168. return res.json({ sso: req.user.sso });
  169. }
  170. }
  171. export default new Controller();