@intlayer/backend 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (464) hide show
  1. package/LICENSE +202 -0
  2. package/dist/cjs/controllers/dictionary.controller.cjs +356 -0
  3. package/dist/cjs/controllers/dictionary.controller.cjs.map +1 -0
  4. package/dist/cjs/controllers/oAuth2.controller.cjs +46 -0
  5. package/dist/cjs/controllers/oAuth2.controller.cjs.map +1 -0
  6. package/dist/cjs/controllers/organization.controller.cjs +354 -0
  7. package/dist/cjs/controllers/organization.controller.cjs.map +1 -0
  8. package/dist/cjs/controllers/project.controller.cjs +298 -0
  9. package/dist/cjs/controllers/project.controller.cjs.map +1 -0
  10. package/dist/cjs/controllers/projectAccessKey.controller.cjs +134 -0
  11. package/dist/cjs/controllers/projectAccessKey.controller.cjs.map +1 -0
  12. package/dist/cjs/controllers/sessionAuth.controller.cjs +616 -0
  13. package/dist/cjs/controllers/sessionAuth.controller.cjs.map +1 -0
  14. package/dist/cjs/controllers/user.controller.cjs +197 -0
  15. package/dist/cjs/controllers/user.controller.cjs.map +1 -0
  16. package/dist/cjs/emails/InviteUserEmail.cjs +297 -0
  17. package/dist/cjs/emails/InviteUserEmail.cjs.map +1 -0
  18. package/dist/cjs/emails/PasswordChangeConfirmation.cjs +148 -0
  19. package/dist/cjs/emails/PasswordChangeConfirmation.cjs.map +1 -0
  20. package/dist/cjs/emails/ResetUserPassword.cjs +209 -0
  21. package/dist/cjs/emails/ResetUserPassword.cjs.map +1 -0
  22. package/dist/cjs/emails/ValidateUserEmail.cjs +230 -0
  23. package/dist/cjs/emails/ValidateUserEmail.cjs.map +1 -0
  24. package/dist/cjs/emails/Welcome.cjs +185 -0
  25. package/dist/cjs/emails/Welcome.cjs.map +1 -0
  26. package/dist/cjs/emails/index.cjs +31 -0
  27. package/dist/cjs/emails/index.cjs.map +1 -0
  28. package/dist/cjs/export.cjs +46 -0
  29. package/dist/cjs/export.cjs.map +1 -0
  30. package/dist/cjs/index.cjs +122 -0
  31. package/dist/cjs/index.cjs.map +1 -0
  32. package/dist/cjs/logger/index.cjs +53 -0
  33. package/dist/cjs/logger/index.cjs.map +1 -0
  34. package/dist/cjs/middlewares/admin.middleware.cjs +44 -0
  35. package/dist/cjs/middlewares/admin.middleware.cjs.map +1 -0
  36. package/dist/cjs/middlewares/oAuth2.middleware.cjs +89 -0
  37. package/dist/cjs/middlewares/oAuth2.middleware.cjs.map +1 -0
  38. package/dist/cjs/middlewares/request.middleware.cjs +41 -0
  39. package/dist/cjs/middlewares/request.middleware.cjs.map +1 -0
  40. package/dist/cjs/middlewares/sessionAuth.middleware.cjs +130 -0
  41. package/dist/cjs/middlewares/sessionAuth.middleware.cjs.map +1 -0
  42. package/dist/cjs/models/dictionary.model.cjs +34 -0
  43. package/dist/cjs/models/dictionary.model.cjs.map +1 -0
  44. package/dist/cjs/models/oAuth2.model.cjs +31 -0
  45. package/dist/cjs/models/oAuth2.model.cjs.map +1 -0
  46. package/dist/cjs/models/organization.model.cjs +34 -0
  47. package/dist/cjs/models/organization.model.cjs.map +1 -0
  48. package/dist/cjs/models/project.model.cjs +31 -0
  49. package/dist/cjs/models/project.model.cjs.map +1 -0
  50. package/dist/cjs/models/user.model.cjs +31 -0
  51. package/dist/cjs/models/user.model.cjs.map +1 -0
  52. package/dist/cjs/routes/dictionary.routes.cjs +156 -0
  53. package/dist/cjs/routes/dictionary.routes.cjs.map +1 -0
  54. package/dist/cjs/routes/organization.routes.cjs +132 -0
  55. package/dist/cjs/routes/organization.routes.cjs.map +1 -0
  56. package/dist/cjs/routes/project.routes.cjs +175 -0
  57. package/dist/cjs/routes/project.routes.cjs.map +1 -0
  58. package/dist/cjs/routes/sessionAuth.routes.cjs +147 -0
  59. package/dist/cjs/routes/sessionAuth.routes.cjs.map +1 -0
  60. package/dist/cjs/routes/user.routes.cjs +96 -0
  61. package/dist/cjs/routes/user.routes.cjs.map +1 -0
  62. package/dist/cjs/schemas/dictionary.schema.cjs +69 -0
  63. package/dist/cjs/schemas/dictionary.schema.cjs.map +1 -0
  64. package/dist/cjs/schemas/oAuth2.schema.cjs +55 -0
  65. package/dist/cjs/schemas/oAuth2.schema.cjs.map +1 -0
  66. package/dist/cjs/schemas/organization.schema.cjs +60 -0
  67. package/dist/cjs/schemas/organization.schema.cjs.map +1 -0
  68. package/dist/cjs/schemas/project.schema.cjs +79 -0
  69. package/dist/cjs/schemas/project.schema.cjs.map +1 -0
  70. package/dist/cjs/schemas/user.schema.cjs +112 -0
  71. package/dist/cjs/schemas/user.schema.cjs.map +1 -0
  72. package/dist/cjs/services/dictionary.service.cjs +166 -0
  73. package/dist/cjs/services/dictionary.service.cjs.map +1 -0
  74. package/dist/cjs/services/email.service.cjs +118 -0
  75. package/dist/cjs/services/email.service.cjs.map +1 -0
  76. package/dist/cjs/services/oAuth2.service.cjs +182 -0
  77. package/dist/cjs/services/oAuth2.service.cjs.map +1 -0
  78. package/dist/cjs/services/organization.service.cjs +95 -0
  79. package/dist/cjs/services/organization.service.cjs.map +1 -0
  80. package/dist/cjs/services/project.service.cjs +87 -0
  81. package/dist/cjs/services/project.service.cjs.map +1 -0
  82. package/dist/cjs/services/projectAccessKey.service.cjs +139 -0
  83. package/dist/cjs/services/projectAccessKey.service.cjs.map +1 -0
  84. package/dist/cjs/services/sessionAuth.service.cjs +386 -0
  85. package/dist/cjs/services/sessionAuth.service.cjs.map +1 -0
  86. package/dist/cjs/services/user.service.cjs +155 -0
  87. package/dist/cjs/services/user.service.cjs.map +1 -0
  88. package/dist/cjs/types/Routes.cjs +17 -0
  89. package/dist/cjs/types/Routes.cjs.map +1 -0
  90. package/dist/cjs/types/dictionary.types.cjs +17 -0
  91. package/dist/cjs/types/dictionary.types.cjs.map +1 -0
  92. package/dist/cjs/types/organization.types.cjs +17 -0
  93. package/dist/cjs/types/organization.types.cjs.map +1 -0
  94. package/dist/cjs/types/project.types.cjs +17 -0
  95. package/dist/cjs/types/project.types.cjs.map +1 -0
  96. package/dist/cjs/types/session.types.cjs +17 -0
  97. package/dist/cjs/types/session.types.cjs.map +1 -0
  98. package/dist/cjs/types/user.types.cjs +17 -0
  99. package/dist/cjs/types/user.types.cjs.map +1 -0
  100. package/dist/cjs/utils/CSRF.cjs +47 -0
  101. package/dist/cjs/utils/CSRF.cjs.map +1 -0
  102. package/dist/cjs/utils/accessControl.cjs +121 -0
  103. package/dist/cjs/utils/accessControl.cjs.map +1 -0
  104. package/dist/cjs/utils/cookies.cjs +59 -0
  105. package/dist/cjs/utils/cookies.cjs.map +1 -0
  106. package/dist/cjs/utils/errors/ErrorHandler.cjs +103 -0
  107. package/dist/cjs/utils/errors/ErrorHandler.cjs.map +1 -0
  108. package/dist/cjs/utils/errors/ErrorsClass.cjs +65 -0
  109. package/dist/cjs/utils/errors/ErrorsClass.cjs.map +1 -0
  110. package/dist/cjs/utils/errors/errorCodes.cjs +837 -0
  111. package/dist/cjs/utils/errors/errorCodes.cjs.map +1 -0
  112. package/dist/cjs/utils/errors/index.cjs +37 -0
  113. package/dist/cjs/utils/errors/index.cjs.map +1 -0
  114. package/dist/cjs/utils/filtersAndPagination/getDictionaryFiltersAndPagination.cjs +55 -0
  115. package/dist/cjs/utils/filtersAndPagination/getDictionaryFiltersAndPagination.cjs.map +1 -0
  116. package/dist/cjs/utils/filtersAndPagination/getFiltersAndPaginationFromBody.cjs +65 -0
  117. package/dist/cjs/utils/filtersAndPagination/getFiltersAndPaginationFromBody.cjs.map +1 -0
  118. package/dist/cjs/utils/filtersAndPagination/getOrganizationFiltersAndPagination.cjs +55 -0
  119. package/dist/cjs/utils/filtersAndPagination/getOrganizationFiltersAndPagination.cjs.map +1 -0
  120. package/dist/cjs/utils/filtersAndPagination/getProjectFiltersAndPagination.cjs +58 -0
  121. package/dist/cjs/utils/filtersAndPagination/getProjectFiltersAndPagination.cjs.map +1 -0
  122. package/dist/cjs/utils/filtersAndPagination/getUserFiltersAndPagination.cjs +52 -0
  123. package/dist/cjs/utils/filtersAndPagination/getUserFiltersAndPagination.cjs.map +1 -0
  124. package/dist/cjs/utils/httpStatusCodes.cjs +93 -0
  125. package/dist/cjs/utils/httpStatusCodes.cjs.map +1 -0
  126. package/dist/cjs/utils/mapper/dictionary.cjs +40 -0
  127. package/dist/cjs/utils/mapper/dictionary.cjs.map +1 -0
  128. package/dist/cjs/utils/mapper/organization.cjs +39 -0
  129. package/dist/cjs/utils/mapper/organization.cjs.map +1 -0
  130. package/dist/cjs/utils/mapper/project.cjs +39 -0
  131. package/dist/cjs/utils/mapper/project.cjs.map +1 -0
  132. package/dist/cjs/utils/mapper/user.cjs +39 -0
  133. package/dist/cjs/utils/mapper/user.cjs.map +1 -0
  134. package/dist/cjs/utils/mongoDB/connectDB.cjs +53 -0
  135. package/dist/cjs/utils/mongoDB/connectDB.cjs.map +1 -0
  136. package/dist/cjs/utils/oAuth2.cjs +50 -0
  137. package/dist/cjs/utils/oAuth2.cjs.map +1 -0
  138. package/dist/cjs/utils/responseData.cjs +66 -0
  139. package/dist/cjs/utils/responseData.cjs.map +1 -0
  140. package/dist/cjs/utils/validation/validateArray.cjs +57 -0
  141. package/dist/cjs/utils/validation/validateArray.cjs.map +1 -0
  142. package/dist/cjs/utils/validation/validateDictionary.cjs +66 -0
  143. package/dist/cjs/utils/validation/validateDictionary.cjs.map +1 -0
  144. package/dist/cjs/utils/validation/validateEmail.cjs +37 -0
  145. package/dist/cjs/utils/validation/validateEmail.cjs.map +1 -0
  146. package/dist/cjs/utils/validation/validateOrganization.cjs +79 -0
  147. package/dist/cjs/utils/validation/validateOrganization.cjs.map +1 -0
  148. package/dist/cjs/utils/validation/validatePhone.cjs +37 -0
  149. package/dist/cjs/utils/validation/validatePhone.cjs.map +1 -0
  150. package/dist/cjs/utils/validation/validateProject.cjs +97 -0
  151. package/dist/cjs/utils/validation/validateProject.cjs.map +1 -0
  152. package/dist/cjs/utils/validation/validateString.cjs +39 -0
  153. package/dist/cjs/utils/validation/validateString.cjs.map +1 -0
  154. package/dist/cjs/utils/validation/validateUser.cjs +73 -0
  155. package/dist/cjs/utils/validation/validateUser.cjs.map +1 -0
  156. package/dist/esm/controllers/dictionary.controller.mjs +321 -0
  157. package/dist/esm/controllers/dictionary.controller.mjs.map +1 -0
  158. package/dist/esm/controllers/oAuth2.controller.mjs +25 -0
  159. package/dist/esm/controllers/oAuth2.controller.mjs.map +1 -0
  160. package/dist/esm/controllers/organization.controller.mjs +317 -0
  161. package/dist/esm/controllers/organization.controller.mjs.map +1 -0
  162. package/dist/esm/controllers/project.controller.mjs +263 -0
  163. package/dist/esm/controllers/project.controller.mjs.map +1 -0
  164. package/dist/esm/controllers/projectAccessKey.controller.mjs +98 -0
  165. package/dist/esm/controllers/projectAccessKey.controller.mjs.map +1 -0
  166. package/dist/esm/controllers/sessionAuth.controller.mjs +570 -0
  167. package/dist/esm/controllers/sessionAuth.controller.mjs.map +1 -0
  168. package/dist/esm/controllers/user.controller.mjs +160 -0
  169. package/dist/esm/controllers/user.controller.mjs.map +1 -0
  170. package/dist/esm/emails/InviteUserEmail.mjs +285 -0
  171. package/dist/esm/emails/InviteUserEmail.mjs.map +1 -0
  172. package/dist/esm/emails/PasswordChangeConfirmation.mjs +134 -0
  173. package/dist/esm/emails/PasswordChangeConfirmation.mjs.map +1 -0
  174. package/dist/esm/emails/ResetUserPassword.mjs +197 -0
  175. package/dist/esm/emails/ResetUserPassword.mjs.map +1 -0
  176. package/dist/esm/emails/ValidateUserEmail.mjs +218 -0
  177. package/dist/esm/emails/ValidateUserEmail.mjs.map +1 -0
  178. package/dist/esm/emails/Welcome.mjs +173 -0
  179. package/dist/esm/emails/Welcome.mjs.map +1 -0
  180. package/dist/esm/emails/index.mjs +6 -0
  181. package/dist/esm/emails/index.mjs.map +1 -0
  182. package/dist/esm/export.mjs +15 -0
  183. package/dist/esm/export.mjs.map +1 -0
  184. package/dist/esm/index.mjs +102 -0
  185. package/dist/esm/index.mjs.map +1 -0
  186. package/dist/esm/logger/index.mjs +29 -0
  187. package/dist/esm/logger/index.mjs.map +1 -0
  188. package/dist/esm/middlewares/admin.middleware.mjs +20 -0
  189. package/dist/esm/middlewares/admin.middleware.mjs.map +1 -0
  190. package/dist/esm/middlewares/oAuth2.middleware.mjs +57 -0
  191. package/dist/esm/middlewares/oAuth2.middleware.mjs.map +1 -0
  192. package/dist/esm/middlewares/request.middleware.mjs +17 -0
  193. package/dist/esm/middlewares/request.middleware.mjs.map +1 -0
  194. package/dist/esm/middlewares/sessionAuth.middleware.mjs +96 -0
  195. package/dist/esm/middlewares/sessionAuth.middleware.mjs.map +1 -0
  196. package/dist/esm/models/dictionary.model.mjs +10 -0
  197. package/dist/esm/models/dictionary.model.mjs.map +1 -0
  198. package/dist/esm/models/oAuth2.model.mjs +7 -0
  199. package/dist/esm/models/oAuth2.model.mjs.map +1 -0
  200. package/dist/esm/models/organization.model.mjs +10 -0
  201. package/dist/esm/models/organization.model.mjs.map +1 -0
  202. package/dist/esm/models/project.model.mjs +7 -0
  203. package/dist/esm/models/project.model.mjs.map +1 -0
  204. package/dist/esm/models/user.model.mjs +7 -0
  205. package/dist/esm/models/user.model.mjs.map +1 -0
  206. package/dist/esm/routes/dictionary.routes.mjs +139 -0
  207. package/dist/esm/routes/dictionary.routes.mjs.map +1 -0
  208. package/dist/esm/routes/organization.routes.mjs +116 -0
  209. package/dist/esm/routes/organization.routes.mjs.map +1 -0
  210. package/dist/esm/routes/project.routes.mjs +162 -0
  211. package/dist/esm/routes/project.routes.mjs.map +1 -0
  212. package/dist/esm/routes/sessionAuth.routes.mjs +134 -0
  213. package/dist/esm/routes/sessionAuth.routes.mjs.map +1 -0
  214. package/dist/esm/routes/user.routes.mjs +78 -0
  215. package/dist/esm/routes/user.routes.mjs.map +1 -0
  216. package/dist/esm/schemas/dictionary.schema.mjs +45 -0
  217. package/dist/esm/schemas/dictionary.schema.mjs.map +1 -0
  218. package/dist/esm/schemas/oAuth2.schema.mjs +31 -0
  219. package/dist/esm/schemas/oAuth2.schema.mjs.map +1 -0
  220. package/dist/esm/schemas/organization.schema.mjs +40 -0
  221. package/dist/esm/schemas/organization.schema.mjs.map +1 -0
  222. package/dist/esm/schemas/project.schema.mjs +59 -0
  223. package/dist/esm/schemas/project.schema.mjs.map +1 -0
  224. package/dist/esm/schemas/user.schema.mjs +81 -0
  225. package/dist/esm/schemas/user.schema.mjs.map +1 -0
  226. package/dist/esm/services/dictionary.service.mjs +134 -0
  227. package/dist/esm/services/dictionary.service.mjs.map +1 -0
  228. package/dist/esm/services/email.service.mjs +114 -0
  229. package/dist/esm/services/email.service.mjs.map +1 -0
  230. package/dist/esm/services/oAuth2.service.mjs +150 -0
  231. package/dist/esm/services/oAuth2.service.mjs.map +1 -0
  232. package/dist/esm/services/organization.service.mjs +68 -0
  233. package/dist/esm/services/organization.service.mjs.map +1 -0
  234. package/dist/esm/services/project.service.mjs +60 -0
  235. package/dist/esm/services/project.service.mjs.map +1 -0
  236. package/dist/esm/services/projectAccessKey.service.mjs +113 -0
  237. package/dist/esm/services/projectAccessKey.service.mjs.map +1 -0
  238. package/dist/esm/services/sessionAuth.service.mjs +337 -0
  239. package/dist/esm/services/sessionAuth.service.mjs.map +1 -0
  240. package/dist/esm/services/user.service.mjs +122 -0
  241. package/dist/esm/services/user.service.mjs.map +1 -0
  242. package/dist/esm/types/Routes.mjs +1 -0
  243. package/dist/esm/types/Routes.mjs.map +1 -0
  244. package/dist/esm/types/dictionary.types.mjs +1 -0
  245. package/dist/esm/types/dictionary.types.mjs.map +1 -0
  246. package/dist/esm/types/organization.types.mjs +1 -0
  247. package/dist/esm/types/organization.types.mjs.map +1 -0
  248. package/dist/esm/types/project.types.mjs +1 -0
  249. package/dist/esm/types/project.types.mjs.map +1 -0
  250. package/dist/esm/types/session.types.mjs +1 -0
  251. package/dist/esm/types/session.types.mjs.map +1 -0
  252. package/dist/esm/types/user.types.mjs +1 -0
  253. package/dist/esm/types/user.types.mjs.map +1 -0
  254. package/dist/esm/utils/CSRF.mjs +21 -0
  255. package/dist/esm/utils/CSRF.mjs.map +1 -0
  256. package/dist/esm/utils/accessControl.mjs +95 -0
  257. package/dist/esm/utils/accessControl.mjs.map +1 -0
  258. package/dist/esm/utils/cookies.mjs +32 -0
  259. package/dist/esm/utils/cookies.mjs.map +1 -0
  260. package/dist/esm/utils/errors/ErrorHandler.mjs +79 -0
  261. package/dist/esm/utils/errors/ErrorHandler.mjs.map +1 -0
  262. package/dist/esm/utils/errors/ErrorsClass.mjs +40 -0
  263. package/dist/esm/utils/errors/ErrorsClass.mjs.map +1 -0
  264. package/dist/esm/utils/errors/errorCodes.mjs +813 -0
  265. package/dist/esm/utils/errors/errorCodes.mjs.map +1 -0
  266. package/dist/esm/utils/errors/index.mjs +10 -0
  267. package/dist/esm/utils/errors/index.mjs.map +1 -0
  268. package/dist/esm/utils/filtersAndPagination/getDictionaryFiltersAndPagination.mjs +33 -0
  269. package/dist/esm/utils/filtersAndPagination/getDictionaryFiltersAndPagination.mjs.map +1 -0
  270. package/dist/esm/utils/filtersAndPagination/getFiltersAndPaginationFromBody.mjs +41 -0
  271. package/dist/esm/utils/filtersAndPagination/getFiltersAndPaginationFromBody.mjs.map +1 -0
  272. package/dist/esm/utils/filtersAndPagination/getOrganizationFiltersAndPagination.mjs +33 -0
  273. package/dist/esm/utils/filtersAndPagination/getOrganizationFiltersAndPagination.mjs.map +1 -0
  274. package/dist/esm/utils/filtersAndPagination/getProjectFiltersAndPagination.mjs +36 -0
  275. package/dist/esm/utils/filtersAndPagination/getProjectFiltersAndPagination.mjs.map +1 -0
  276. package/dist/esm/utils/filtersAndPagination/getUserFiltersAndPagination.mjs +30 -0
  277. package/dist/esm/utils/filtersAndPagination/getUserFiltersAndPagination.mjs.map +1 -0
  278. package/dist/esm/utils/httpStatusCodes.mjs +69 -0
  279. package/dist/esm/utils/httpStatusCodes.mjs.map +1 -0
  280. package/dist/esm/utils/mapper/dictionary.mjs +16 -0
  281. package/dist/esm/utils/mapper/dictionary.mjs.map +1 -0
  282. package/dist/esm/utils/mapper/organization.mjs +15 -0
  283. package/dist/esm/utils/mapper/organization.mjs.map +1 -0
  284. package/dist/esm/utils/mapper/project.mjs +15 -0
  285. package/dist/esm/utils/mapper/project.mjs.map +1 -0
  286. package/dist/esm/utils/mapper/user.mjs +14 -0
  287. package/dist/esm/utils/mapper/user.mjs.map +1 -0
  288. package/dist/esm/utils/mongoDB/connectDB.mjs +19 -0
  289. package/dist/esm/utils/mongoDB/connectDB.mjs.map +1 -0
  290. package/dist/esm/utils/oAuth2.mjs +29 -0
  291. package/dist/esm/utils/oAuth2.mjs.map +1 -0
  292. package/dist/esm/utils/responseData.mjs +41 -0
  293. package/dist/esm/utils/responseData.mjs.map +1 -0
  294. package/dist/esm/utils/validation/validateArray.mjs +33 -0
  295. package/dist/esm/utils/validation/validateArray.mjs.map +1 -0
  296. package/dist/esm/utils/validation/validateDictionary.mjs +42 -0
  297. package/dist/esm/utils/validation/validateDictionary.mjs.map +1 -0
  298. package/dist/esm/utils/validation/validateEmail.mjs +13 -0
  299. package/dist/esm/utils/validation/validateEmail.mjs.map +1 -0
  300. package/dist/esm/utils/validation/validateOrganization.mjs +52 -0
  301. package/dist/esm/utils/validation/validateOrganization.mjs.map +1 -0
  302. package/dist/esm/utils/validation/validatePhone.mjs +13 -0
  303. package/dist/esm/utils/validation/validatePhone.mjs.map +1 -0
  304. package/dist/esm/utils/validation/validateProject.mjs +70 -0
  305. package/dist/esm/utils/validation/validateProject.mjs.map +1 -0
  306. package/dist/esm/utils/validation/validateString.mjs +15 -0
  307. package/dist/esm/utils/validation/validateString.mjs.map +1 -0
  308. package/dist/esm/utils/validation/validateUser.mjs +47 -0
  309. package/dist/esm/utils/validation/validateUser.mjs.map +1 -0
  310. package/dist/types/controllers/dictionary.controller.d.ts +70 -0
  311. package/dist/types/controllers/dictionary.controller.d.ts.map +1 -0
  312. package/dist/types/controllers/oAuth2.controller.d.ts +14 -0
  313. package/dist/types/controllers/oAuth2.controller.d.ts.map +1 -0
  314. package/dist/types/controllers/organization.controller.d.ts +72 -0
  315. package/dist/types/controllers/organization.controller.d.ts.map +1 -0
  316. package/dist/types/controllers/project.controller.d.ts +59 -0
  317. package/dist/types/controllers/project.controller.d.ts.map +1 -0
  318. package/dist/types/controllers/projectAccessKey.controller.d.ts +27 -0
  319. package/dist/types/controllers/projectAccessKey.controller.d.ts.map +1 -0
  320. package/dist/types/controllers/sessionAuth.controller.d.ts +120 -0
  321. package/dist/types/controllers/sessionAuth.controller.d.ts.map +1 -0
  322. package/dist/types/controllers/user.controller.d.ts +56 -0
  323. package/dist/types/controllers/user.controller.d.ts.map +1 -0
  324. package/dist/types/emails/InviteUserEmail.d.ts +22 -0
  325. package/dist/types/emails/InviteUserEmail.d.ts.map +1 -0
  326. package/dist/types/emails/PasswordChangeConfirmation.d.ts +16 -0
  327. package/dist/types/emails/PasswordChangeConfirmation.d.ts.map +1 -0
  328. package/dist/types/emails/ResetUserPassword.d.ts +17 -0
  329. package/dist/types/emails/ResetUserPassword.d.ts.map +1 -0
  330. package/dist/types/emails/ValidateUserEmail.d.ts +17 -0
  331. package/dist/types/emails/ValidateUserEmail.d.ts.map +1 -0
  332. package/dist/types/emails/Welcome.d.ts +17 -0
  333. package/dist/types/emails/Welcome.d.ts.map +1 -0
  334. package/dist/types/emails/index.d.ts +6 -0
  335. package/dist/types/emails/index.d.ts.map +1 -0
  336. package/dist/types/export.d.ts +19 -0
  337. package/dist/types/export.d.ts.map +1 -0
  338. package/dist/types/index.d.ts +4 -0
  339. package/dist/types/index.d.ts.map +1 -0
  340. package/dist/types/logger/index.d.ts +2 -0
  341. package/dist/types/logger/index.d.ts.map +1 -0
  342. package/dist/types/middlewares/admin.middleware.d.ts +10 -0
  343. package/dist/types/middlewares/admin.middleware.d.ts.map +1 -0
  344. package/dist/types/middlewares/oAuth2.middleware.d.ts +9 -0
  345. package/dist/types/middlewares/oAuth2.middleware.d.ts.map +1 -0
  346. package/dist/types/middlewares/request.middleware.d.ts +4 -0
  347. package/dist/types/middlewares/request.middleware.d.ts.map +1 -0
  348. package/dist/types/middlewares/sessionAuth.middleware.d.ts +20 -0
  349. package/dist/types/middlewares/sessionAuth.middleware.d.ts.map +1 -0
  350. package/dist/types/models/dictionary.model.d.ts +11 -0
  351. package/dist/types/models/dictionary.model.d.ts.map +1 -0
  352. package/dist/types/models/oAuth2.model.d.ts +10 -0
  353. package/dist/types/models/oAuth2.model.d.ts.map +1 -0
  354. package/dist/types/models/organization.model.d.ts +12 -0
  355. package/dist/types/models/organization.model.d.ts.map +1 -0
  356. package/dist/types/models/project.model.d.ts +12 -0
  357. package/dist/types/models/project.model.d.ts.map +1 -0
  358. package/dist/types/models/user.model.d.ts +3 -0
  359. package/dist/types/models/user.model.d.ts.map +1 -0
  360. package/dist/types/routes/dictionary.routes.d.ts +42 -0
  361. package/dist/types/routes/dictionary.routes.d.ts.map +1 -0
  362. package/dist/types/routes/organization.routes.d.ts +47 -0
  363. package/dist/types/routes/organization.routes.d.ts.map +1 -0
  364. package/dist/types/routes/project.routes.d.ts +57 -0
  365. package/dist/types/routes/project.routes.d.ts.map +1 -0
  366. package/dist/types/routes/sessionAuth.routes.d.ts +66 -0
  367. package/dist/types/routes/sessionAuth.routes.d.ts.map +1 -0
  368. package/dist/types/routes/user.routes.d.ts +42 -0
  369. package/dist/types/routes/user.routes.d.ts.map +1 -0
  370. package/dist/types/schemas/dictionary.schema.d.ts +16 -0
  371. package/dist/types/schemas/dictionary.schema.d.ts.map +1 -0
  372. package/dist/types/schemas/oAuth2.schema.d.ts +19 -0
  373. package/dist/types/schemas/oAuth2.schema.d.ts.map +1 -0
  374. package/dist/types/schemas/organization.schema.d.ts +17 -0
  375. package/dist/types/schemas/organization.schema.d.ts.map +1 -0
  376. package/dist/types/schemas/project.schema.d.ts +17 -0
  377. package/dist/types/schemas/project.schema.d.ts.map +1 -0
  378. package/dist/types/schemas/user.schema.d.ts +12 -0
  379. package/dist/types/schemas/user.schema.d.ts.map +1 -0
  380. package/dist/types/services/dictionary.service.d.ts +70 -0
  381. package/dist/types/services/dictionary.service.d.ts.map +1 -0
  382. package/dist/types/services/email.service.d.ts +18 -0
  383. package/dist/types/services/email.service.d.ts.map +1 -0
  384. package/dist/types/services/oAuth2.service.d.ts +85 -0
  385. package/dist/types/services/oAuth2.service.d.ts.map +1 -0
  386. package/dist/types/services/organization.service.d.ts +43 -0
  387. package/dist/types/services/organization.service.d.ts.map +1 -0
  388. package/dist/types/services/project.service.d.ts +43 -0
  389. package/dist/types/services/project.service.d.ts.map +1 -0
  390. package/dist/types/services/projectAccessKey.service.d.ts +16 -0
  391. package/dist/types/services/projectAccessKey.service.d.ts.map +1 -0
  392. package/dist/types/services/sessionAuth.service.d.ts +148 -0
  393. package/dist/types/services/sessionAuth.service.d.ts.map +1 -0
  394. package/dist/types/services/user.service.d.ts +89 -0
  395. package/dist/types/services/user.service.d.ts.map +1 -0
  396. package/dist/types/types/Routes.d.ts +7 -0
  397. package/dist/types/types/Routes.d.ts.map +1 -0
  398. package/dist/types/types/dictionary.types.d.ts +35 -0
  399. package/dist/types/types/dictionary.types.d.ts.map +1 -0
  400. package/dist/types/types/organization.types.d.ts +21 -0
  401. package/dist/types/types/organization.types.d.ts.map +1 -0
  402. package/dist/types/types/project.types.d.ts +40 -0
  403. package/dist/types/types/project.types.d.ts.map +1 -0
  404. package/dist/types/types/session.types.d.ts +22 -0
  405. package/dist/types/types/session.types.d.ts.map +1 -0
  406. package/dist/types/types/user.types.d.ts +28 -0
  407. package/dist/types/types/user.types.d.ts.map +1 -0
  408. package/dist/types/utils/CSRF.d.ts +3 -0
  409. package/dist/types/utils/CSRF.d.ts.map +1 -0
  410. package/dist/types/utils/accessControl.d.ts +58 -0
  411. package/dist/types/utils/accessControl.d.ts.map +1 -0
  412. package/dist/types/utils/cookies.d.ts +12 -0
  413. package/dist/types/utils/cookies.d.ts.map +1 -0
  414. package/dist/types/utils/errors/ErrorHandler.d.ts +32 -0
  415. package/dist/types/utils/errors/ErrorHandler.d.ts.map +1 -0
  416. package/dist/types/utils/errors/ErrorsClass.d.ts +26 -0
  417. package/dist/types/utils/errors/ErrorsClass.d.ts.map +1 -0
  418. package/dist/types/utils/errors/errorCodes.d.ts +811 -0
  419. package/dist/types/utils/errors/errorCodes.d.ts.map +1 -0
  420. package/dist/types/utils/errors/index.d.ts +4 -0
  421. package/dist/types/utils/errors/index.d.ts.map +1 -0
  422. package/dist/types/utils/filtersAndPagination/getDictionaryFiltersAndPagination.d.ts +23 -0
  423. package/dist/types/utils/filtersAndPagination/getDictionaryFiltersAndPagination.d.ts.map +1 -0
  424. package/dist/types/utils/filtersAndPagination/getFiltersAndPaginationFromBody.d.ts +22 -0
  425. package/dist/types/utils/filtersAndPagination/getFiltersAndPaginationFromBody.d.ts.map +1 -0
  426. package/dist/types/utils/filtersAndPagination/getOrganizationFiltersAndPagination.d.ts +31 -0
  427. package/dist/types/utils/filtersAndPagination/getOrganizationFiltersAndPagination.d.ts.map +1 -0
  428. package/dist/types/utils/filtersAndPagination/getProjectFiltersAndPagination.d.ts +24 -0
  429. package/dist/types/utils/filtersAndPagination/getProjectFiltersAndPagination.d.ts.map +1 -0
  430. package/dist/types/utils/filtersAndPagination/getUserFiltersAndPagination.d.ts +22 -0
  431. package/dist/types/utils/filtersAndPagination/getUserFiltersAndPagination.d.ts.map +1 -0
  432. package/dist/types/utils/httpStatusCodes.d.ts +395 -0
  433. package/dist/types/utils/httpStatusCodes.d.ts.map +1 -0
  434. package/dist/types/utils/mapper/dictionary.d.ts +12 -0
  435. package/dist/types/utils/mapper/dictionary.d.ts.map +1 -0
  436. package/dist/types/utils/mapper/organization.d.ts +9 -0
  437. package/dist/types/utils/mapper/organization.d.ts.map +1 -0
  438. package/dist/types/utils/mapper/project.d.ts +9 -0
  439. package/dist/types/utils/mapper/project.d.ts.map +1 -0
  440. package/dist/types/utils/mapper/user.d.ts +14 -0
  441. package/dist/types/utils/mapper/user.d.ts.map +1 -0
  442. package/dist/types/utils/mongoDB/connectDB.d.ts +3 -0
  443. package/dist/types/utils/mongoDB/connectDB.d.ts.map +1 -0
  444. package/dist/types/utils/oAuth2.d.ts +6 -0
  445. package/dist/types/utils/oAuth2.d.ts.map +1 -0
  446. package/dist/types/utils/responseData.d.ts +53 -0
  447. package/dist/types/utils/responseData.d.ts.map +1 -0
  448. package/dist/types/utils/validation/validateArray.d.ts +13 -0
  449. package/dist/types/utils/validation/validateArray.d.ts.map +1 -0
  450. package/dist/types/utils/validation/validateDictionary.d.ts +12 -0
  451. package/dist/types/utils/validation/validateDictionary.d.ts.map +1 -0
  452. package/dist/types/utils/validation/validateEmail.d.ts +10 -0
  453. package/dist/types/utils/validation/validateEmail.d.ts.map +1 -0
  454. package/dist/types/utils/validation/validateOrganization.d.ts +15 -0
  455. package/dist/types/utils/validation/validateOrganization.d.ts.map +1 -0
  456. package/dist/types/utils/validation/validatePhone.d.ts +10 -0
  457. package/dist/types/utils/validation/validatePhone.d.ts.map +1 -0
  458. package/dist/types/utils/validation/validateProject.d.ts +15 -0
  459. package/dist/types/utils/validation/validateProject.d.ts.map +1 -0
  460. package/dist/types/utils/validation/validateString.d.ts +10 -0
  461. package/dist/types/utils/validation/validateString.d.ts.map +1 -0
  462. package/dist/types/utils/validation/validateUser.d.ts +15 -0
  463. package/dist/types/utils/validation/validateUser.d.ts.map +1 -0
  464. package/package.json +115 -0
@@ -0,0 +1,354 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var organization_controller_exports = {};
30
+ __export(organization_controller_exports, {
31
+ addOrganization: () => addOrganization,
32
+ addOrganizationMember: () => addOrganizationMember,
33
+ deleteOrganization: () => deleteOrganization,
34
+ getOrganization: () => getOrganization,
35
+ getOrganizations: () => getOrganizations,
36
+ selectOrganization: () => selectOrganization,
37
+ unselectOrganization: () => unselectOrganization,
38
+ updateOrganization: () => updateOrganization,
39
+ updateOrganizationMembers: () => updateOrganizationMembers
40
+ });
41
+ module.exports = __toCommonJS(organization_controller_exports);
42
+ var import_logger = require('./../logger/index.cjs');
43
+ var import_sessionAuth = require('./../routes/sessionAuth.routes.cjs');
44
+ var import_email = require('./../services/email.service.cjs');
45
+ var sessionAuthService = __toESM(require('./../services/sessionAuth.service.cjs'), 1);
46
+ var userService = __toESM(require('./../services/user.service.cjs'), 1);
47
+ var import_errors = require('./../utils/errors/index.cjs');
48
+ var import_getOrganizationFiltersAndPagination = require('./../utils/filtersAndPagination/getOrganizationFiltersAndPagination.cjs');
49
+ var import_responseData = require('./../utils/responseData.cjs');
50
+ var organizationService = __toESM(require('./../services/organization.service.cjs'), 1);
51
+ const getOrganizations = async (req, res, _next) => {
52
+ const { user } = res.locals;
53
+ const { filters, pageSize, skip, page, getNumberOfPages } = (0, import_getOrganizationFiltersAndPagination.getOrganizationFiltersAndPagination)(req);
54
+ if (!user) {
55
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_FOUND");
56
+ return;
57
+ }
58
+ const restrictedFilter = {
59
+ ...filters,
60
+ membersIds: { $in: [...filters.membersIds ?? [], String(user._id)] }
61
+ };
62
+ try {
63
+ const organizations = await organizationService.findOrganizations(
64
+ restrictedFilter,
65
+ skip,
66
+ pageSize
67
+ );
68
+ const totalItems = await organizationService.countOrganizations(filters);
69
+ const responseData = (0, import_responseData.formatPaginatedResponse)({
70
+ data: organizations,
71
+ page,
72
+ pageSize,
73
+ totalPages: getNumberOfPages(totalItems),
74
+ totalItems
75
+ });
76
+ res.status(200).json(responseData);
77
+ return;
78
+ } catch (error) {
79
+ import_errors.ErrorHandler.handleAppErrorResponse(res, error);
80
+ return;
81
+ }
82
+ };
83
+ const getOrganization = async (req, res, _next) => {
84
+ const { organizationId } = req.params;
85
+ if (!organizationId) {
86
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "ORGANIZATION_ID_NOT_FOUND");
87
+ return;
88
+ }
89
+ try {
90
+ const organization = await organizationService.getOrganizationById(organizationId);
91
+ const responseData = (0, import_responseData.formatResponse)({ data: organization });
92
+ res.json(responseData);
93
+ return;
94
+ } catch (error) {
95
+ import_errors.ErrorHandler.handleAppErrorResponse(res, error);
96
+ return;
97
+ }
98
+ };
99
+ const addOrganization = async (req, res, _next) => {
100
+ const { user } = res.locals;
101
+ const organization = req.body;
102
+ if (!organization) {
103
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "ORGANIZATION_DATA_NOT_FOUND");
104
+ }
105
+ if (!user) {
106
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_FOUND");
107
+ return;
108
+ }
109
+ try {
110
+ const newOrganization = await organizationService.createOrganization(
111
+ organization,
112
+ user._id
113
+ );
114
+ const responseData = (0, import_responseData.formatResponse)({
115
+ data: newOrganization
116
+ });
117
+ res.json(responseData);
118
+ return;
119
+ } catch (error) {
120
+ import_errors.ErrorHandler.handleAppErrorResponse(res, error);
121
+ return;
122
+ }
123
+ };
124
+ const updateOrganization = async (req, res, _next) => {
125
+ const { isOrganizationAdmin, organization } = res.locals;
126
+ const organizationFields = req.body;
127
+ if (!organizationFields) {
128
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "ORGANIZATION_DATA_NOT_FOUND");
129
+ return;
130
+ }
131
+ if (!organization) {
132
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "ORGANIZATION_NOT_FOUND");
133
+ return;
134
+ }
135
+ if (!isOrganizationAdmin) {
136
+ import_errors.ErrorHandler.handleGenericErrorResponse(
137
+ res,
138
+ "USER_IS_NOT_ADMIN_OF_ORGANIZATION"
139
+ );
140
+ return;
141
+ }
142
+ try {
143
+ const updatedOrganization = await organizationService.updateOrganizationById(
144
+ organization._id,
145
+ organizationFields
146
+ );
147
+ const responseData = (0, import_responseData.formatResponse)({
148
+ data: updatedOrganization
149
+ });
150
+ res.json(responseData);
151
+ return;
152
+ } catch (error) {
153
+ import_errors.ErrorHandler.handleAppErrorResponse(res, error);
154
+ return;
155
+ }
156
+ };
157
+ const addOrganizationMember = async (req, res, _next) => {
158
+ const { organization, isOrganizationAdmin, user } = res.locals;
159
+ const { userEmail } = req.body;
160
+ if (!organization) {
161
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "ORGANIZATION_NOT_FOUND");
162
+ return;
163
+ }
164
+ if (!user) {
165
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_FOUND");
166
+ return;
167
+ }
168
+ if (!isOrganizationAdmin) {
169
+ import_errors.ErrorHandler.handleGenericErrorResponse(
170
+ res,
171
+ "USER_IS_NOT_ADMIN_OF_ORGANIZATION"
172
+ );
173
+ return;
174
+ }
175
+ try {
176
+ let newMember = await userService.getUserByEmail(userEmail);
177
+ if (!newMember) {
178
+ const newUser = await userService.createUser({ email: userEmail });
179
+ if (!newUser) {
180
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "USER_CREATION_FAILED", {
181
+ email: userEmail
182
+ });
183
+ return;
184
+ }
185
+ newMember = newUser;
186
+ }
187
+ await (0, import_email.sendEmail)({
188
+ type: "invite",
189
+ to: userEmail,
190
+ username: newMember.email.slice(0, newMember.email.indexOf("@")),
191
+ invitedByUsername: user.name,
192
+ invitedByEmail: user.email,
193
+ organizationName: organization.name,
194
+ inviteLink: import_sessionAuth.sessionAuthRoutes.loginEmailPassword.url,
195
+ inviteFromIp: req.ip ?? "",
196
+ inviteFromLocation: req.hostname
197
+ });
198
+ const updatedOrganization = await organizationService.updateOrganizationById(organization._id, {
199
+ ...organization,
200
+ membersIds: [...organization.membersIds, newMember._id]
201
+ });
202
+ const responseData = (0, import_responseData.formatResponse)({
203
+ data: updatedOrganization
204
+ });
205
+ res.json(responseData);
206
+ return;
207
+ } catch (error) {
208
+ import_errors.ErrorHandler.handleAppErrorResponse(res, error);
209
+ return;
210
+ }
211
+ };
212
+ const updateOrganizationMembers = async (req, res, _next) => {
213
+ const { organization, isOrganizationAdmin } = res.locals;
214
+ const { membersIds } = req.body;
215
+ if (!organization) {
216
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "ORGANIZATION_NOT_FOUND");
217
+ return;
218
+ }
219
+ if (!isOrganizationAdmin) {
220
+ import_errors.ErrorHandler.handleGenericErrorResponse(
221
+ res,
222
+ "USER_IS_NOT_ADMIN_OF_ORGANIZATION"
223
+ );
224
+ return;
225
+ }
226
+ if (membersIds?.length === 0) {
227
+ import_errors.ErrorHandler.handleGenericErrorResponse(
228
+ res,
229
+ "ORGANIZATION_MUST_HAVE_MEMBER"
230
+ );
231
+ return;
232
+ }
233
+ if (membersIds?.map((el) => el.isAdmin)?.length === 0) {
234
+ import_errors.ErrorHandler.handleGenericErrorResponse(
235
+ res,
236
+ "ORGANIZATION_MUST_HAVE_ADMIN"
237
+ );
238
+ return;
239
+ }
240
+ try {
241
+ let existingUsers = [];
242
+ if (membersIds) {
243
+ const userIdList = membersIds?.map((member) => member.userId);
244
+ const users = await userService.getUsersByIds(userIdList);
245
+ if (users) {
246
+ const userMap = users.map((user) => {
247
+ const isAdmin = membersIds.find(
248
+ (member) => String(member.userId) === String(user._id)
249
+ )?.isAdmin ?? false;
250
+ return {
251
+ user,
252
+ isAdmin
253
+ };
254
+ });
255
+ existingUsers = userMap;
256
+ }
257
+ }
258
+ const formattedMembers = existingUsers.map(
259
+ (user) => user.user._id
260
+ );
261
+ const formattedAdmin = existingUsers.filter((el) => el.isAdmin).map((user) => user.user._id);
262
+ const updatedOrganization = await organizationService.updateOrganizationById(organization._id, {
263
+ ...organization,
264
+ membersIds: formattedMembers,
265
+ adminsIds: formattedAdmin
266
+ });
267
+ const responseData = (0, import_responseData.formatResponse)({
268
+ data: updatedOrganization
269
+ });
270
+ res.json(responseData);
271
+ return;
272
+ } catch (error) {
273
+ import_errors.ErrorHandler.handleAppErrorResponse(res, error);
274
+ return;
275
+ }
276
+ };
277
+ const deleteOrganization = async (_req, res, _next) => {
278
+ const { isOrganizationAdmin, organization } = res.locals;
279
+ if (!organization) {
280
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "ORGANIZATION_NOT_FOUND");
281
+ return;
282
+ }
283
+ if (!isOrganizationAdmin) {
284
+ import_errors.ErrorHandler.handleGenericErrorResponse(
285
+ res,
286
+ "USER_IS_NOT_ADMIN_OF_ORGANIZATION"
287
+ );
288
+ return;
289
+ }
290
+ try {
291
+ const deletedOrganization = await organizationService.deleteOrganizationById(organization._id);
292
+ if (!deletedOrganization) {
293
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "ORGANIZATION_NOT_FOUND", {
294
+ organizationId: organization._id
295
+ });
296
+ return;
297
+ }
298
+ import_logger.logger.info(`Organization deleted: ${String(deletedOrganization._id)}`);
299
+ const responseData = (0, import_responseData.formatResponse)({
300
+ data: deletedOrganization
301
+ });
302
+ res.json(responseData);
303
+ return;
304
+ } catch (error) {
305
+ import_errors.ErrorHandler.handleAppErrorResponse(res, error);
306
+ return;
307
+ }
308
+ };
309
+ const selectOrganization = async (req, res, _next) => {
310
+ const { organizationId } = req.params;
311
+ if (!organizationId) {
312
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "ORGANIZATION_ID_NOT_FOUND");
313
+ return;
314
+ }
315
+ try {
316
+ const organization = await organizationService.getOrganizationById(organizationId);
317
+ sessionAuthService.setOrganizationAuth(res, organization);
318
+ const responseData = (0, import_responseData.formatResponse)({
319
+ data: organization
320
+ });
321
+ res.json(responseData);
322
+ return;
323
+ } catch (error) {
324
+ import_errors.ErrorHandler.handleAppErrorResponse(res, error);
325
+ return;
326
+ }
327
+ };
328
+ const unselectOrganization = (_req, res, _next) => {
329
+ try {
330
+ sessionAuthService.clearOrganizationAuth(res);
331
+ sessionAuthService.clearProjectAuth(res);
332
+ const responseData = (0, import_responseData.formatResponse)({
333
+ data: null
334
+ });
335
+ res.json(responseData);
336
+ return;
337
+ } catch (error) {
338
+ import_errors.ErrorHandler.handleAppErrorResponse(res, error);
339
+ return;
340
+ }
341
+ };
342
+ // Annotate the CommonJS export names for ESM import in node:
343
+ 0 && (module.exports = {
344
+ addOrganization,
345
+ addOrganizationMember,
346
+ deleteOrganization,
347
+ getOrganization,
348
+ getOrganizations,
349
+ selectOrganization,
350
+ unselectOrganization,
351
+ updateOrganization,
352
+ updateOrganizationMembers
353
+ });
354
+ //# sourceMappingURL=organization.controller.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/controllers/organization.controller.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { logger } from '@logger';\nimport type { ResponseWithInformation } from '@middlewares/sessionAuth.middleware';\nimport { sessionAuthRoutes } from '@routes/sessionAuth.routes';\nimport { sendEmail } from '@services/email.service';\nimport * as sessionAuthService from '@services/sessionAuth.service';\nimport * as userService from '@services/user.service';\nimport { AppError, ErrorHandler } from '@utils/errors';\nimport type { FiltersAndPagination } from '@utils/filtersAndPagination/getFiltersAndPaginationFromBody';\nimport {\n getOrganizationFiltersAndPagination,\n type OrganizationFiltersParams,\n type OrganizationFilters,\n} from '@utils/filtersAndPagination/getOrganizationFiltersAndPagination';\nimport {\n formatPaginatedResponse,\n formatResponse,\n type PaginatedResponse,\n type ResponseData,\n} from '@utils/responseData';\nimport type { NextFunction, Request } from 'express';\nimport type { ObjectId } from 'mongoose';\nimport { User } from 'oauth2-server';\nimport * as organizationService from '@/services/organization.service';\nimport type {\n Organization,\n OrganizationCreationData,\n} from '@/types/organization.types';\n\nexport type GetOrganizationsParams =\n FiltersAndPagination<OrganizationFiltersParams>;\nexport type GetOrganizationsResult = PaginatedResponse<Organization>;\n\n/**\n * Retrieves a list of organizations based on filters and pagination.\n */\nexport const getOrganizations = async (\n req: Request<GetOrganizationsParams>,\n res: ResponseWithInformation<GetOrganizationsResult>,\n _next: NextFunction\n) => {\n const { user } = res.locals;\n const { filters, pageSize, skip, page, getNumberOfPages } =\n getOrganizationFiltersAndPagination(req);\n\n if (!user) {\n ErrorHandler.handleGenericErrorResponse(res, 'USER_NOT_FOUND');\n return;\n }\n\n const restrictedFilter: OrganizationFilters = {\n ...filters,\n\n membersIds: { $in: [...(filters.membersIds ?? []), String(user._id)] },\n };\n\n try {\n const organizations = await organizationService.findOrganizations(\n restrictedFilter,\n skip,\n pageSize\n );\n const totalItems = await organizationService.countOrganizations(filters);\n\n const responseData = formatPaginatedResponse<Organization>({\n data: organizations,\n page,\n pageSize,\n totalPages: getNumberOfPages(totalItems),\n totalItems,\n });\n\n res.status(200).json(responseData);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n\nexport type GetOrganizationParam = { organizationId: string };\nexport type GetOrganizationResult = ResponseData<Organization>;\n\n/**\n * Retrieves an organization by its ID.\n */\nexport const getOrganization = async (\n req: Request<GetOrganizationParam, any, any>,\n res: ResponseWithInformation<GetOrganizationResult>,\n _next: NextFunction\n): Promise<void> => {\n const { organizationId } = req.params as Partial<GetOrganizationParam>;\n\n if (!organizationId) {\n ErrorHandler.handleGenericErrorResponse(res, 'ORGANIZATION_ID_NOT_FOUND');\n return;\n }\n\n try {\n const organization =\n await organizationService.getOrganizationById(organizationId);\n\n const responseData = formatResponse<Organization>({ data: organization });\n\n res.json(responseData);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n\nexport type AddOrganizationBody = OrganizationCreationData;\nexport type AddOrganizationResult = ResponseData<Organization>;\n\n/**\n * Adds a new organization to the database.\n */\nexport const addOrganization = async (\n req: Request<any, any, AddOrganizationBody>,\n res: ResponseWithInformation<AddOrganizationResult>,\n _next: NextFunction\n): Promise<void> => {\n const { user } = res.locals;\n const organization = req.body;\n\n if (!organization) {\n ErrorHandler.handleGenericErrorResponse(res, 'ORGANIZATION_DATA_NOT_FOUND');\n }\n\n if (!user) {\n ErrorHandler.handleGenericErrorResponse(res, 'USER_NOT_FOUND');\n return;\n }\n\n try {\n const newOrganization = await organizationService.createOrganization(\n organization,\n user._id\n );\n\n const responseData = formatResponse<Organization>({\n data: newOrganization,\n });\n\n res.json(responseData);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n\nexport type UpdateOrganizationBody = Partial<Organization>;\nexport type UpdateOrganizationResult = ResponseData<Organization>;\n\n/**\n * Updates an existing organization in the database.\n */\nexport const updateOrganization = async (\n req: Request<undefined, undefined, UpdateOrganizationBody>,\n res: ResponseWithInformation<UpdateOrganizationResult>,\n _next: NextFunction\n): Promise<void> => {\n const { isOrganizationAdmin, organization } = res.locals;\n const organizationFields = req.body;\n\n if (!organizationFields) {\n ErrorHandler.handleGenericErrorResponse(res, 'ORGANIZATION_DATA_NOT_FOUND');\n return;\n }\n\n if (!organization) {\n ErrorHandler.handleGenericErrorResponse(res, 'ORGANIZATION_NOT_FOUND');\n return;\n }\n\n if (!isOrganizationAdmin) {\n ErrorHandler.handleGenericErrorResponse(\n res,\n 'USER_IS_NOT_ADMIN_OF_ORGANIZATION'\n );\n return;\n }\n\n try {\n const updatedOrganization =\n await organizationService.updateOrganizationById(\n organization._id,\n organizationFields\n );\n\n const responseData = formatResponse<Organization>({\n data: updatedOrganization,\n });\n\n res.json(responseData);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n\ntype UserAndAdmin = { user: User; isAdmin: boolean };\n\nexport type OrganizationMemberByIdOption = {\n userId: string | ObjectId;\n isAdmin?: boolean;\n};\n\nexport type AddOrganizationMemberBody = {\n userEmail: string;\n};\nexport type AddOrganizationMemberResult = ResponseData<Organization>;\n\n/**\n * Add member to the organization in the database.\n */\nexport const addOrganizationMember = async (\n req: Request<any, any, AddOrganizationMemberBody>,\n res: ResponseWithInformation<AddOrganizationMemberResult>,\n _next: NextFunction\n): Promise<void> => {\n const { organization, isOrganizationAdmin, user } = res.locals;\n const { userEmail } = req.body;\n\n if (!organization) {\n ErrorHandler.handleGenericErrorResponse(res, 'ORGANIZATION_NOT_FOUND');\n return;\n }\n\n if (!user) {\n ErrorHandler.handleGenericErrorResponse(res, 'USER_NOT_FOUND');\n return;\n }\n\n if (!isOrganizationAdmin) {\n ErrorHandler.handleGenericErrorResponse(\n res,\n 'USER_IS_NOT_ADMIN_OF_ORGANIZATION'\n );\n return;\n }\n\n try {\n let newMember = await userService.getUserByEmail(userEmail);\n\n if (!newMember) {\n // Create user if not found\n const newUser = await userService.createUser({ email: userEmail });\n if (!newUser) {\n ErrorHandler.handleGenericErrorResponse(res, 'USER_CREATION_FAILED', {\n email: userEmail,\n });\n return;\n }\n\n newMember = newUser;\n }\n\n await sendEmail({\n type: 'invite',\n to: userEmail,\n username: newMember.email.slice(0, newMember.email.indexOf('@')),\n invitedByUsername: user.name,\n invitedByEmail: user.email,\n organizationName: organization.name,\n inviteLink: sessionAuthRoutes.loginEmailPassword.url,\n inviteFromIp: req.ip ?? '',\n inviteFromLocation: req.hostname,\n });\n\n const updatedOrganization =\n await organizationService.updateOrganizationById(organization._id, {\n ...organization,\n membersIds: [...organization.membersIds, newMember._id],\n });\n\n const responseData = formatResponse<Organization>({\n data: updatedOrganization,\n });\n\n res.json(responseData);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n\nexport type UpdateOrganizationMembersBody = Partial<{\n membersIds: OrganizationMemberByIdOption[];\n}>;\nexport type UpdateOrganizationMembersResult = ResponseData<Organization>;\n\n/**\n * Update members to the organization in the database.\n */\nexport const updateOrganizationMembers = async (\n req: Request<any, any, UpdateOrganizationMembersBody>,\n res: ResponseWithInformation<UpdateOrganizationMembersResult>,\n _next: NextFunction\n): Promise<void> => {\n const { organization, isOrganizationAdmin } = res.locals;\n const { membersIds } = req.body;\n\n if (!organization) {\n ErrorHandler.handleGenericErrorResponse(res, 'ORGANIZATION_NOT_FOUND');\n return;\n }\n\n if (!isOrganizationAdmin) {\n ErrorHandler.handleGenericErrorResponse(\n res,\n 'USER_IS_NOT_ADMIN_OF_ORGANIZATION'\n );\n return;\n }\n\n if (membersIds?.length === 0) {\n ErrorHandler.handleGenericErrorResponse(\n res,\n 'ORGANIZATION_MUST_HAVE_MEMBER'\n );\n return;\n }\n\n if (membersIds?.map((el) => el.isAdmin)?.length === 0) {\n ErrorHandler.handleGenericErrorResponse(\n res,\n 'ORGANIZATION_MUST_HAVE_ADMIN'\n );\n return;\n }\n\n try {\n let existingUsers: UserAndAdmin[] = [];\n\n if (membersIds) {\n const userIdList = membersIds?.map((member) => member.userId);\n const users = await userService.getUsersByIds(userIdList);\n\n if (users) {\n const userMap: UserAndAdmin[] = users.map((user) => {\n const isAdmin =\n membersIds.find(\n (member) => String(member.userId) === String(user._id)\n )?.isAdmin ?? false;\n\n return {\n user,\n isAdmin,\n };\n });\n\n existingUsers = userMap;\n }\n }\n\n const formattedMembers: ObjectId[] = existingUsers.map(\n (user) => user.user._id\n );\n const formattedAdmin: ObjectId[] = existingUsers\n .filter((el) => el.isAdmin)\n .map((user) => user.user._id);\n\n const updatedOrganization =\n await organizationService.updateOrganizationById(organization._id, {\n ...organization,\n membersIds: formattedMembers,\n adminsIds: formattedAdmin,\n });\n\n const responseData = formatResponse<Organization>({\n data: updatedOrganization,\n });\n\n res.json(responseData);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n\nexport type DeleteOrganizationResult = ResponseData<Organization>;\n\n/**\n * Deletes an organization from the database by its ID.\n */\nexport const deleteOrganization = async (\n _req: Request,\n res: ResponseWithInformation,\n _next: NextFunction\n): Promise<void> => {\n const { isOrganizationAdmin, organization } = res.locals;\n\n if (!organization) {\n ErrorHandler.handleGenericErrorResponse(res, 'ORGANIZATION_NOT_FOUND');\n return;\n }\n\n if (!isOrganizationAdmin) {\n ErrorHandler.handleGenericErrorResponse(\n res,\n 'USER_IS_NOT_ADMIN_OF_ORGANIZATION'\n );\n return;\n }\n\n try {\n const deletedOrganization =\n await organizationService.deleteOrganizationById(organization._id);\n\n if (!deletedOrganization) {\n ErrorHandler.handleGenericErrorResponse(res, 'ORGANIZATION_NOT_FOUND', {\n organizationId: organization._id,\n });\n return;\n }\n\n logger.info(`Organization deleted: ${String(deletedOrganization._id)}`);\n\n const responseData = formatResponse<Organization>({\n data: deletedOrganization,\n });\n\n res.json(responseData);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n\nexport type SelectOrganizationParam = { organizationId: ObjectId | string };\nexport type SelectOrganizationResult = ResponseData<Organization>;\n\n/**\n * Select an organization.\n */\nexport const selectOrganization = async (\n req: Request<SelectOrganizationParam>,\n res: ResponseWithInformation<SelectOrganizationResult>,\n _next: NextFunction\n): Promise<void> => {\n const { organizationId } = req.params as Partial<SelectOrganizationParam>;\n\n if (!organizationId) {\n ErrorHandler.handleGenericErrorResponse(res, 'ORGANIZATION_ID_NOT_FOUND');\n return;\n }\n\n try {\n const organization =\n await organizationService.getOrganizationById(organizationId);\n\n sessionAuthService.setOrganizationAuth(res, organization);\n\n const responseData = formatResponse<Organization>({\n data: organization,\n });\n\n res.json(responseData);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n\nexport type UnselectOrganizationResult = ResponseData<null>;\n\n/**\n * Unselect an organization.\n */\nexport const unselectOrganization = (\n _req: Request,\n res: ResponseWithInformation<UnselectOrganizationResult>,\n _next: NextFunction\n): void => {\n try {\n sessionAuthService.clearOrganizationAuth(res);\n sessionAuthService.clearProjectAuth(res);\n\n const responseData = formatResponse<null>({\n data: null,\n });\n\n res.json(responseData);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n"],"mappings":"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","names":[]}
@@ -0,0 +1,298 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var project_controller_exports = {};
30
+ __export(project_controller_exports, {
31
+ addProject: () => addProject,
32
+ deleteProject: () => deleteProject,
33
+ getProjects: () => getProjects,
34
+ selectProject: () => selectProject,
35
+ unselectProject: () => unselectProject,
36
+ updateProject: () => updateProject,
37
+ updateProjectMembers: () => updateProjectMembers
38
+ });
39
+ module.exports = __toCommonJS(project_controller_exports);
40
+ var import_logger = require('./../logger/index.cjs');
41
+ var projectService = __toESM(require('./../services/project.service.cjs'), 1);
42
+ var sessionAuthService = __toESM(require('./../services/sessionAuth.service.cjs'), 1);
43
+ var userService = __toESM(require('./../services/user.service.cjs'), 1);
44
+ var import_errors = require('./../utils/errors/index.cjs');
45
+ var import_getProjectFiltersAndPagination = require('./../utils/filtersAndPagination/getProjectFiltersAndPagination.cjs');
46
+ var import_responseData = require('./../utils/responseData.cjs');
47
+ const getProjects = async (req, res, _next) => {
48
+ const { user, organization } = res.locals;
49
+ const { filters, pageSize, skip, page, getNumberOfPages } = (0, import_getProjectFiltersAndPagination.getProjectFiltersAndPagination)(req);
50
+ if (!user) {
51
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_FOUND");
52
+ return;
53
+ }
54
+ if (!organization) {
55
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "ORGANIZATION_NOT_FOUND");
56
+ return;
57
+ }
58
+ const restrictedFilter = {
59
+ ...filters,
60
+ membersIds: { $in: [...filters.membersIds ?? [], String(user._id)] },
61
+ organizationId: String(organization._id)
62
+ };
63
+ try {
64
+ const projects = await projectService.findProjects(
65
+ restrictedFilter,
66
+ skip,
67
+ pageSize
68
+ );
69
+ const totalItems = await projectService.countProjects(filters);
70
+ const responseData = (0, import_responseData.formatPaginatedResponse)({
71
+ data: projects,
72
+ page,
73
+ pageSize,
74
+ totalPages: getNumberOfPages(totalItems),
75
+ totalItems
76
+ });
77
+ res.json(responseData);
78
+ return;
79
+ } catch (error) {
80
+ import_errors.ErrorHandler.handleAppErrorResponse(res, error);
81
+ return;
82
+ }
83
+ };
84
+ const addProject = async (req, res, _next) => {
85
+ const { organization, user, isOrganizationAdmin } = res.locals;
86
+ const projectData = req.body;
87
+ if (!user) {
88
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_FOUND");
89
+ return;
90
+ }
91
+ if (!organization) {
92
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "ORGANIZATION_NOT_FOUND");
93
+ return;
94
+ }
95
+ if (!isOrganizationAdmin) {
96
+ import_errors.ErrorHandler.handleGenericErrorResponse(
97
+ res,
98
+ "USER_IS_NOT_ADMIN_OF_ORGANIZATION"
99
+ );
100
+ }
101
+ if (!projectData) {
102
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "PROJECT_DATA_NOT_FOUND");
103
+ }
104
+ const project = {
105
+ membersIds: [user._id],
106
+ adminsIds: [user._id],
107
+ creatorId: user._id,
108
+ organizationId: organization._id,
109
+ ...projectData
110
+ };
111
+ try {
112
+ const newProject = await projectService.createProject(project);
113
+ const responseData = (0, import_responseData.formatResponse)({ data: newProject });
114
+ res.json(responseData);
115
+ return;
116
+ } catch (error) {
117
+ import_errors.ErrorHandler.handleAppErrorResponse(res, error);
118
+ return;
119
+ }
120
+ };
121
+ const updateProject = async (req, res, _next) => {
122
+ const { organization } = res.locals;
123
+ const project = req.body;
124
+ if (!project) {
125
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "PROJECT_DATA_NOT_FOUND");
126
+ return;
127
+ }
128
+ if (!organization) {
129
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "ORGANIZATION_NOT_FOUND");
130
+ return;
131
+ }
132
+ if (project.organizationId !== organization._id) {
133
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "PROJECT_NOT_IN_ORGANIZATION");
134
+ return;
135
+ }
136
+ if (typeof project._id === "undefined") {
137
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "PROJECT_ID_NOT_FOUND");
138
+ return;
139
+ }
140
+ try {
141
+ const updatedProject = await projectService.updateProjectById(
142
+ project._id,
143
+ project
144
+ );
145
+ const responseData = (0, import_responseData.formatResponse)({ data: updatedProject });
146
+ res.json(responseData);
147
+ return;
148
+ } catch (error) {
149
+ import_errors.ErrorHandler.handleAppErrorResponse(res, error);
150
+ return;
151
+ }
152
+ };
153
+ const updateProjectMembers = async (req, res, _next) => {
154
+ const { project, isProjectAdmin, organization } = res.locals;
155
+ const { membersIds } = req.body;
156
+ if (!project) {
157
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "PROJECT_NOT_FOUND");
158
+ return;
159
+ }
160
+ if (!isProjectAdmin) {
161
+ import_errors.ErrorHandler.handleGenericErrorResponse(
162
+ res,
163
+ "USER_IS_NOT_ADMIN_OF_PROJECT"
164
+ );
165
+ return;
166
+ }
167
+ if (!organization) {
168
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "ORGANIZATION_NOT_FOUND");
169
+ return;
170
+ }
171
+ if (membersIds?.length === 0) {
172
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "PROJECT_MUST_HAVE_MEMBER");
173
+ return;
174
+ }
175
+ if (membersIds?.map((el) => el.isAdmin)?.length === 0) {
176
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "PROJECT_MUST_HAVE_ADMIN");
177
+ return;
178
+ }
179
+ try {
180
+ const existingUsers = [];
181
+ if (membersIds) {
182
+ const userIdList = membersIds?.filter(
183
+ (member) => (
184
+ // Remove members that are not in the organization
185
+ !organization?.membersIds.includes(member.userId)
186
+ )
187
+ ).map((member) => member.userId);
188
+ const users = await userService.getUsersByIds(userIdList);
189
+ if (users) {
190
+ const userMap = users.map((user) => ({
191
+ user,
192
+ isAdmin: membersIds.find(
193
+ (member) => String(member.userId) === String(user._id)
194
+ )?.isAdmin ?? false
195
+ }));
196
+ existingUsers.push(...userMap);
197
+ }
198
+ }
199
+ const formattedMembers = existingUsers.map(
200
+ (user) => user.user._id
201
+ );
202
+ const formattedAdmin = existingUsers.filter((el) => el.isAdmin).map((user) => user.user._id);
203
+ const updatedOrganization = await projectService.updateProjectById(
204
+ project._id,
205
+ {
206
+ ...project,
207
+ membersIds: formattedMembers,
208
+ adminsIds: formattedAdmin
209
+ }
210
+ );
211
+ const responseData = (0, import_responseData.formatResponse)({
212
+ data: updatedOrganization
213
+ });
214
+ res.json(responseData);
215
+ return;
216
+ } catch (error) {
217
+ import_errors.ErrorHandler.handleAppErrorResponse(res, error);
218
+ return;
219
+ }
220
+ };
221
+ const deleteProject = async (req, res, _next) => {
222
+ const { organization, project } = res.locals;
223
+ if (!organization) {
224
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "ORGANIZATION_NOT_FOUND");
225
+ return;
226
+ }
227
+ if (!project) {
228
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "PROJECT_NOT_FOUND");
229
+ return;
230
+ }
231
+ try {
232
+ const projectToDelete = await projectService.getProjectById(project._id);
233
+ if (projectToDelete.organizationId !== organization._id) {
234
+ import_errors.ErrorHandler.handleGenericErrorResponse(
235
+ res,
236
+ "PROJECT_NOT_IN_ORGANIZATION"
237
+ );
238
+ return;
239
+ }
240
+ const deletedProject = await projectService.deleteProjectById(project._id);
241
+ if (!deletedProject) {
242
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "PROJECT_NOT_FOUND", {
243
+ projectId: project._id
244
+ });
245
+ return;
246
+ }
247
+ import_logger.logger.info(`Project deleted: ${String(deletedProject._id)}`);
248
+ const responseData = (0, import_responseData.formatResponse)({ data: deletedProject });
249
+ res.json(responseData);
250
+ return;
251
+ } catch (error) {
252
+ import_errors.ErrorHandler.handleAppErrorResponse(res, error);
253
+ return;
254
+ }
255
+ };
256
+ const selectProject = async (req, res, _next) => {
257
+ const { projectId } = req.params;
258
+ if (!projectId) {
259
+ import_errors.ErrorHandler.handleGenericErrorResponse(res, "PROJECT_ID_NOT_FOUND");
260
+ return;
261
+ }
262
+ try {
263
+ const project = await projectService.getProjectById(projectId);
264
+ sessionAuthService.setProjectAuth(res, project);
265
+ const responseData = (0, import_responseData.formatResponse)({
266
+ data: project
267
+ });
268
+ res.json(responseData);
269
+ return;
270
+ } catch (error) {
271
+ import_errors.ErrorHandler.handleAppErrorResponse(res, error);
272
+ return;
273
+ }
274
+ };
275
+ const unselectProject = (_req, res, _next) => {
276
+ try {
277
+ sessionAuthService.clearProjectAuth(res);
278
+ const responseData = (0, import_responseData.formatResponse)({
279
+ data: null
280
+ });
281
+ res.json(responseData);
282
+ return;
283
+ } catch (error) {
284
+ import_errors.ErrorHandler.handleAppErrorResponse(res, error);
285
+ return;
286
+ }
287
+ };
288
+ // Annotate the CommonJS export names for ESM import in node:
289
+ 0 && (module.exports = {
290
+ addProject,
291
+ deleteProject,
292
+ getProjects,
293
+ selectProject,
294
+ unselectProject,
295
+ updateProject,
296
+ updateProjectMembers
297
+ });
298
+ //# sourceMappingURL=project.controller.cjs.map