user.controller (1).js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  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. const errors = await UserValidator.onCreate(req.body);
  58. if (errors) {
  59. return res.status(422).json({
  60. success: false,
  61. errors: errors.details,
  62. });
  63. }
  64. const userData = _.pick(req.body, [
  65. "email",
  66. "password",
  67. "name",
  68. "surname",
  69. "language",
  70. "role",
  71. ]);
  72. userData.email = userData.email.trim();
  73. userData.accountId = req.user.accountId;
  74. const user = await UserService.create(userData);
  75. if (user) {
  76. return res.json(UserSerializer.show(user));
  77. } else {
  78. return res.status(422).json({
  79. message: "Failed to save the user.",
  80. });
  81. }
  82. }*/
  83. // Backend controller (in user.controller.js)
  84. async create(req, res) {
  85. try {
  86. console.log('Create user - Request body:', req.body);
  87. console.log('Create user - User context:', {
  88. userId: req.user?._id,
  89. accountId: req.user?.accountId
  90. });
  91. const errors = await UserValidator.onCreate(req.body);
  92. if (errors) {
  93. console.log('Create user - Validation errors:', errors.details);
  94. return res.status(422).json({
  95. success: false,
  96. errors: errors.details,
  97. });
  98. }
  99. const userData = _.pick(req.body, [
  100. "email",
  101. "password",
  102. "name",
  103. "surname",
  104. "language",
  105. "role",
  106. ]);
  107. console.log('Create user - Processed userData:', userData);
  108. userData.email = userData.email.trim();
  109. userData.accountId = req.user.accountId;
  110. console.log('Create user - Final userData:', userData);
  111. const user = await UserService.create(userData);
  112. console.log('Create user - Service response:', user);
  113. if (user) {
  114. const serializedUser = UserSerializer.show(user);
  115. console.log('Create user - Serialized response:', serializedUser);
  116. return res.json(serializedUser);
  117. } else {
  118. console.log('Create user - Failed to save user');
  119. return res.status(422).json({
  120. message: "Failed to save the user.",
  121. });
  122. }
  123. } catch (error) {
  124. console.error('Create user - Unexpected error:', {
  125. message: error.message,
  126. stack: error.stack
  127. });
  128. return res.status(500).json({
  129. message: "An unexpected error occurred while creating the user.",
  130. error: error.message
  131. });
  132. }
  133. }
  134. async index(req, res) {
  135. const users = await UserService.find({ accountId: req.user.accountId });
  136. return res.json(UserSerializer.index(users));
  137. }
  138. async update(req, res) {
  139. const errors = await UserValidator.onUpdate(req.body);
  140. if (errors) {
  141. return res.status(422).json({
  142. success: false,
  143. errors: errors.details,
  144. });
  145. }
  146. const userData = _.pick(req.body, ["name", "surname", "role", "language"]);
  147. const result = await UserService.update(
  148. req.params.id,
  149. req.user.accountId,
  150. userData
  151. );
  152. if (result) {
  153. return res.json(UserSerializer.show(result.toObject()));
  154. } else {
  155. return res.status(422).json({
  156. success: false,
  157. message: "Failed to update user.",
  158. });
  159. }
  160. }
  161. async delete(req, res) {
  162. if (req.params.id !== req.user.id) {
  163. await UserService.delete(req.params.id, req.user.accountId);
  164. return res.json({
  165. success: true,
  166. message: "User delete successfully.",
  167. });
  168. }
  169. return res.status(401).json({
  170. success: false,
  171. message: "Failed to delete user.",
  172. });
  173. }
  174. async changeMyPassword(req, res) {
  175. const errors = await UserValidator.onResetMyPassword(req.body);
  176. if (errors) {
  177. return res.status(422).json({
  178. success: false,
  179. message: "Failed to update password",
  180. errors: errors.details,
  181. });
  182. }
  183. const data = _.pick(req.body, ["password"]);
  184. UserService.updatePassword(req.user.id, data.password.trim());
  185. return res.json({
  186. success: true,
  187. message: "Successfully changed password!",
  188. });
  189. }
  190. async generateSso(req, res) {
  191. // const userData = { sso: uuidv4() }
  192. // const result = await UserService.update(req.user.id, userData)
  193. // if (result) {
  194. // return res.json({ sso: result.sso })
  195. // } else {
  196. // return res.status(422).json({
  197. // success: false,
  198. // message: 'Failed to update profile.'
  199. // })
  200. // }
  201. return res.json({ sso: req.user.sso });
  202. }
  203. }
  204. export default new Controller();