@dssp/project 1.0.0-y.0 → 1.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 (318) hide show
  1. package/package.json +15 -15
  2. package/dist-client/bootstrap.d.ts +0 -0
  3. package/dist-client/bootstrap.js +0 -2
  4. package/dist-client/bootstrap.js.map +0 -1
  5. package/dist-client/index.d.ts +0 -1
  6. package/dist-client/index.js +0 -2
  7. package/dist-client/index.js.map +0 -1
  8. package/dist-client/pages/lib/chatbot-widget.d.ts +0 -53
  9. package/dist-client/pages/lib/chatbot-widget.js +0 -631
  10. package/dist-client/pages/lib/chatbot-widget.js.map +0 -1
  11. package/dist-client/pages/lib/select2-component.d.ts +0 -23
  12. package/dist-client/pages/lib/select2-component.js +0 -181
  13. package/dist-client/pages/lib/select2-component.js.map +0 -1
  14. package/dist-client/pages/lib/waether.d.ts +0 -7
  15. package/dist-client/pages/lib/waether.js +0 -156
  16. package/dist-client/pages/lib/waether.js.map +0 -1
  17. package/dist-client/pages/project/component/pagenation.d.ts +0 -18
  18. package/dist-client/pages/project/component/pagenation.js +0 -142
  19. package/dist-client/pages/project/component/pagenation.js.map +0 -1
  20. package/dist-client/pages/project/component/project-update-header.d.ts +0 -1
  21. package/dist-client/pages/project/component/project-update-header.js +0 -121
  22. package/dist-client/pages/project/component/project-update-header.js.map +0 -1
  23. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.d.ts +0 -1
  24. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.js +0 -309
  25. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.js.map +0 -1
  26. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.d.ts +0 -1
  27. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.js +0 -357
  28. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.js.map +0 -1
  29. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.d.ts +0 -1
  30. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.js +0 -681
  31. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.js.map +0 -1
  32. package/dist-client/pages/project/popup/checklist/task-checklist-view.d.ts +0 -32
  33. package/dist-client/pages/project/popup/checklist/task-checklist-view.js +0 -621
  34. package/dist-client/pages/project/popup/checklist/task-checklist-view.js.map +0 -1
  35. package/dist-client/pages/project/popup/popup-plan-export.d.ts +0 -10
  36. package/dist-client/pages/project/popup/popup-plan-export.js +0 -242
  37. package/dist-client/pages/project/popup/popup-plan-export.js.map +0 -1
  38. package/dist-client/pages/project/popup/popup-plan-upload.d.ts +0 -13
  39. package/dist-client/pages/project/popup/popup-plan-upload.js +0 -265
  40. package/dist-client/pages/project/popup/popup-plan-upload.js.map +0 -1
  41. package/dist-client/pages/project/popup/popup-project-create.d.ts +0 -12
  42. package/dist-client/pages/project/popup/popup-project-create.js +0 -152
  43. package/dist-client/pages/project/popup/popup-project-create.js.map +0 -1
  44. package/dist-client/pages/project/popup/popup-task-upload.d.ts +0 -9
  45. package/dist-client/pages/project/popup/popup-task-upload.js +0 -105
  46. package/dist-client/pages/project/popup/popup-task-upload.js.map +0 -1
  47. package/dist-client/pages/project/project-completed-list.d.ts +0 -23
  48. package/dist-client/pages/project/project-completed-list.js +0 -322
  49. package/dist-client/pages/project/project-completed-list.js.map +0 -1
  50. package/dist-client/pages/project/project-detail.d.ts +0 -41
  51. package/dist-client/pages/project/project-detail.js +0 -959
  52. package/dist-client/pages/project/project-detail.js.map +0 -1
  53. package/dist-client/pages/project/project-list.d.ts +0 -185
  54. package/dist-client/pages/project/project-list.js +0 -402
  55. package/dist-client/pages/project/project-list.js.map +0 -1
  56. package/dist-client/pages/project/project-plan-management.d.ts +0 -33
  57. package/dist-client/pages/project/project-plan-management.js +0 -487
  58. package/dist-client/pages/project/project-plan-management.js.map +0 -1
  59. package/dist-client/pages/project/project-setting-list.d.ts +0 -29
  60. package/dist-client/pages/project/project-setting-list.js +0 -431
  61. package/dist-client/pages/project/project-setting-list.js.map +0 -1
  62. package/dist-client/pages/project/project-task-list.d.ts +0 -18
  63. package/dist-client/pages/project/project-task-list.js +0 -306
  64. package/dist-client/pages/project/project-task-list.js.map +0 -1
  65. package/dist-client/pages/project/project-task.d.ts +0 -51
  66. package/dist-client/pages/project/project-task.js +0 -686
  67. package/dist-client/pages/project/project-task.js.map +0 -1
  68. package/dist-client/pages/project/project-update.d.ts +0 -47
  69. package/dist-client/pages/project/project-update.js +0 -1197
  70. package/dist-client/pages/project/project-update.js.map +0 -1
  71. package/dist-client/pages/resource/construction-detail-type-popup.d.ts +0 -2
  72. package/dist-client/pages/resource/construction-detail-type-popup.js +0 -197
  73. package/dist-client/pages/resource/construction-detail-type-popup.js.map +0 -1
  74. package/dist-client/pages/resource/construction-type-management.d.ts +0 -34
  75. package/dist-client/pages/resource/construction-type-management.js +0 -200
  76. package/dist-client/pages/resource/construction-type-management.js.map +0 -1
  77. package/dist-client/pages/resource/inspection-drawing-type-management.d.ts +0 -48
  78. package/dist-client/pages/resource/inspection-drawing-type-management.js +0 -234
  79. package/dist-client/pages/resource/inspection-drawing-type-management.js.map +0 -1
  80. package/dist-client/pages/resource/inspection-part-popup.d.ts +0 -2
  81. package/dist-client/pages/resource/inspection-part-popup.js +0 -197
  82. package/dist-client/pages/resource/inspection-part-popup.js.map +0 -1
  83. package/dist-client/pages/resource/resource-importer.d.ts +0 -10
  84. package/dist-client/pages/resource/resource-importer.js +0 -101
  85. package/dist-client/pages/resource/resource-importer.js.map +0 -1
  86. package/dist-client/pages/resource/resource-list-page.d.ts +0 -63
  87. package/dist-client/pages/resource/resource-list-page.js +0 -332
  88. package/dist-client/pages/resource/resource-list-page.js.map +0 -1
  89. package/dist-client/pages/resource/worker-type-management.d.ts +0 -34
  90. package/dist-client/pages/resource/worker-type-management.js +0 -180
  91. package/dist-client/pages/resource/worker-type-management.js.map +0 -1
  92. package/dist-client/pages/task/task-importer.d.ts +0 -10
  93. package/dist-client/pages/task/task-importer.js +0 -101
  94. package/dist-client/pages/task/task-importer.js.map +0 -1
  95. package/dist-client/pages/task/task-list-page.d.ts +0 -63
  96. package/dist-client/pages/task/task-list-page.js +0 -323
  97. package/dist-client/pages/task/task-list-page.js.map +0 -1
  98. package/dist-client/pages/task-resource/task-resource-importer.d.ts +0 -10
  99. package/dist-client/pages/task-resource/task-resource-importer.js +0 -101
  100. package/dist-client/pages/task-resource/task-resource-importer.js.map +0 -1
  101. package/dist-client/pages/task-resource/task-resource-list-page.d.ts +0 -63
  102. package/dist-client/pages/task-resource/task-resource-list-page.js +0 -332
  103. package/dist-client/pages/task-resource/task-resource-list-page.js.map +0 -1
  104. package/dist-client/route.d.ts +0 -1
  105. package/dist-client/route.js +0 -44
  106. package/dist-client/route.js.map +0 -1
  107. package/dist-client/tsconfig.tsbuildinfo +0 -1
  108. package/dist-server/controllers/export-tasks.d.ts +0 -7
  109. package/dist-server/controllers/export-tasks.js +0 -29
  110. package/dist-server/controllers/export-tasks.js.map +0 -1
  111. package/dist-server/controllers/import-task.d.ts +0 -3
  112. package/dist-server/controllers/import-task.js +0 -113
  113. package/dist-server/controllers/import-task.js.map +0 -1
  114. package/dist-server/controllers/index.d.ts +0 -0
  115. package/dist-server/controllers/index.js +0 -1
  116. package/dist-server/controllers/index.js.map +0 -1
  117. package/dist-server/controllers/parse-excel.d.ts +0 -2
  118. package/dist-server/controllers/parse-excel.js +0 -74
  119. package/dist-server/controllers/parse-excel.js.map +0 -1
  120. package/dist-server/controllers/types.d.ts +0 -18
  121. package/dist-server/controllers/types.js +0 -3
  122. package/dist-server/controllers/types.js.map +0 -1
  123. package/dist-server/index.d.ts +0 -3
  124. package/dist-server/index.js +0 -7
  125. package/dist-server/index.js.map +0 -1
  126. package/dist-server/middlewares/index.d.ts +0 -1
  127. package/dist-server/middlewares/index.js +0 -7
  128. package/dist-server/middlewares/index.js.map +0 -1
  129. package/dist-server/migrations/1723861466413-seed-roles.d.ts +0 -5
  130. package/dist-server/migrations/1723861466413-seed-roles.js +0 -117
  131. package/dist-server/migrations/1723861466413-seed-roles.js.map +0 -1
  132. package/dist-server/migrations/1723861466414-seed-codes.d.ts +0 -5
  133. package/dist-server/migrations/1723861466414-seed-codes.js +0 -150
  134. package/dist-server/migrations/1723861466414-seed-codes.js.map +0 -1
  135. package/dist-server/migrations/1723861476419-seed-resources.d.ts +0 -5
  136. package/dist-server/migrations/1723861476419-seed-resources.js +0 -57
  137. package/dist-server/migrations/1723861476419-seed-resources.js.map +0 -1
  138. package/dist-server/migrations/1723861478420-seed-/bsample-project.d.ts +0 -5
  139. package/dist-server/migrations/1723861478420-seed-/bsample-project.js +0 -68
  140. package/dist-server/migrations/1723861478420-seed-/bsample-project.js.map +0 -1
  141. package/dist-server/migrations/1723861478421-seed-/bsample-tasks.d.ts +0 -5
  142. package/dist-server/migrations/1723861478421-seed-/bsample-tasks.js +0 -189
  143. package/dist-server/migrations/1723861478421-seed-/bsample-tasks.js.map +0 -1
  144. package/dist-server/migrations/index.d.ts +0 -1
  145. package/dist-server/migrations/index.js +0 -12
  146. package/dist-server/migrations/index.js.map +0 -1
  147. package/dist-server/routes.d.ts +0 -1
  148. package/dist-server/routes.js +0 -105
  149. package/dist-server/routes.js.map +0 -1
  150. package/dist-server/service/construction-detail-type/construction-detail-type-mutation.d.ts +0 -6
  151. package/dist-server/service/construction-detail-type/construction-detail-type-mutation.js +0 -56
  152. package/dist-server/service/construction-detail-type/construction-detail-type-mutation.js.map +0 -1
  153. package/dist-server/service/construction-detail-type/construction-detail-type-query.d.ts +0 -9
  154. package/dist-server/service/construction-detail-type/construction-detail-type-query.js +0 -53
  155. package/dist-server/service/construction-detail-type/construction-detail-type-query.js.map +0 -1
  156. package/dist-server/service/construction-detail-type/construction-detail-type-type.d.ts +0 -11
  157. package/dist-server/service/construction-detail-type/construction-detail-type-type.js +0 -43
  158. package/dist-server/service/construction-detail-type/construction-detail-type-type.js.map +0 -1
  159. package/dist-server/service/construction-detail-type/construction-detail-type.d.ts +0 -15
  160. package/dist-server/service/construction-detail-type/construction-detail-type.js +0 -69
  161. package/dist-server/service/construction-detail-type/construction-detail-type.js.map +0 -1
  162. package/dist-server/service/construction-detail-type/index.d.ts +0 -5
  163. package/dist-server/service/construction-detail-type/index.js +0 -9
  164. package/dist-server/service/construction-detail-type/index.js.map +0 -1
  165. package/dist-server/service/construction-type/construction-type-mutation.d.ts +0 -6
  166. package/dist-server/service/construction-type/construction-type-mutation.js +0 -64
  167. package/dist-server/service/construction-type/construction-type-mutation.js.map +0 -1
  168. package/dist-server/service/construction-type/construction-type-query.d.ts +0 -13
  169. package/dist-server/service/construction-type/construction-type-query.js +0 -92
  170. package/dist-server/service/construction-type/construction-type-query.js.map +0 -1
  171. package/dist-server/service/construction-type/construction-type-type.d.ts +0 -11
  172. package/dist-server/service/construction-type/construction-type-type.js +0 -43
  173. package/dist-server/service/construction-type/construction-type-type.js.map +0 -1
  174. package/dist-server/service/construction-type/construction-type.d.ts +0 -18
  175. package/dist-server/service/construction-type/construction-type.js +0 -83
  176. package/dist-server/service/construction-type/construction-type.js.map +0 -1
  177. package/dist-server/service/construction-type/index.d.ts +0 -5
  178. package/dist-server/service/construction-type/index.js +0 -9
  179. package/dist-server/service/construction-type/index.js.map +0 -1
  180. package/dist-server/service/index.d.ts +0 -15
  181. package/dist-server/service/index.js +0 -59
  182. package/dist-server/service/index.js.map +0 -1
  183. package/dist-server/service/inspection-drawing-type/index.d.ts +0 -5
  184. package/dist-server/service/inspection-drawing-type/index.js +0 -9
  185. package/dist-server/service/inspection-drawing-type/index.js.map +0 -1
  186. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-mutation.d.ts +0 -6
  187. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-mutation.js +0 -64
  188. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-mutation.js.map +0 -1
  189. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.d.ts +0 -12
  190. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.js +0 -83
  191. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.js.map +0 -1
  192. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-type.d.ts +0 -10
  193. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-type.js +0 -39
  194. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-type.js.map +0 -1
  195. package/dist-server/service/inspection-drawing-type/inspection-drawing-type.d.ts +0 -16
  196. package/dist-server/service/inspection-drawing-type/inspection-drawing-type.js +0 -72
  197. package/dist-server/service/inspection-drawing-type/inspection-drawing-type.js.map +0 -1
  198. package/dist-server/service/inspection-part/index.d.ts +0 -5
  199. package/dist-server/service/inspection-part/index.js +0 -9
  200. package/dist-server/service/inspection-part/index.js.map +0 -1
  201. package/dist-server/service/inspection-part/inspection-part-mutation.d.ts +0 -6
  202. package/dist-server/service/inspection-part/inspection-part-mutation.js +0 -55
  203. package/dist-server/service/inspection-part/inspection-part-mutation.js.map +0 -1
  204. package/dist-server/service/inspection-part/inspection-part-query.d.ts +0 -10
  205. package/dist-server/service/inspection-part/inspection-part-query.js +0 -66
  206. package/dist-server/service/inspection-part/inspection-part-query.js.map +0 -1
  207. package/dist-server/service/inspection-part/inspection-part-type.d.ts +0 -11
  208. package/dist-server/service/inspection-part/inspection-part-type.js +0 -43
  209. package/dist-server/service/inspection-part/inspection-part-type.js.map +0 -1
  210. package/dist-server/service/inspection-part/inspection-part.d.ts +0 -15
  211. package/dist-server/service/inspection-part/inspection-part.js +0 -69
  212. package/dist-server/service/inspection-part/inspection-part.js.map +0 -1
  213. package/dist-server/service/manager/index.d.ts +0 -7
  214. package/dist-server/service/manager/index.js +0 -11
  215. package/dist-server/service/manager/index.js.map +0 -1
  216. package/dist-server/service/manager/manager-mutation.d.ts +0 -5
  217. package/dist-server/service/manager/manager-mutation.js +0 -39
  218. package/dist-server/service/manager/manager-mutation.js.map +0 -1
  219. package/dist-server/service/manager/manager-query.d.ts +0 -4
  220. package/dist-server/service/manager/manager-query.js +0 -39
  221. package/dist-server/service/manager/manager-query.js.map +0 -1
  222. package/dist-server/service/manager/manager-type.d.ts +0 -15
  223. package/dist-server/service/manager/manager-type.js +0 -62
  224. package/dist-server/service/manager/manager-type.js.map +0 -1
  225. package/dist-server/service/manager/manager.d.ts +0 -8
  226. package/dist-server/service/manager/manager.js +0 -41
  227. package/dist-server/service/manager/manager.js.map +0 -1
  228. package/dist-server/service/project/index.d.ts +0 -5
  229. package/dist-server/service/project/index.js +0 -9
  230. package/dist-server/service/project/index.js.map +0 -1
  231. package/dist-server/service/project/project-mutation.d.ts +0 -12
  232. package/dist-server/service/project/project-mutation.js +0 -339
  233. package/dist-server/service/project/project-mutation.js.map +0 -1
  234. package/dist-server/service/project/project-query.d.ts +0 -23
  235. package/dist-server/service/project/project-query.js +0 -215
  236. package/dist-server/service/project/project-query.js.map +0 -1
  237. package/dist-server/service/project/project-type.d.ts +0 -36
  238. package/dist-server/service/project/project-type.js +0 -128
  239. package/dist-server/service/project/project-type.js.map +0 -1
  240. package/dist-server/service/project/project.d.ts +0 -52
  241. package/dist-server/service/project/project.js +0 -190
  242. package/dist-server/service/project/project.js.map +0 -1
  243. package/dist-server/service/resource/index.d.ts +0 -6
  244. package/dist-server/service/resource/index.js +0 -10
  245. package/dist-server/service/resource/index.js.map +0 -1
  246. package/dist-server/service/resource/resource-mutation.d.ts +0 -10
  247. package/dist-server/service/resource/resource-mutation.js +0 -132
  248. package/dist-server/service/resource/resource-mutation.js.map +0 -1
  249. package/dist-server/service/resource/resource-query.d.ts +0 -11
  250. package/dist-server/service/resource/resource-query.js +0 -81
  251. package/dist-server/service/resource/resource-query.js.map +0 -1
  252. package/dist-server/service/resource/resource-type.d.ts +0 -17
  253. package/dist-server/service/resource/resource-type.js +0 -65
  254. package/dist-server/service/resource/resource-type.js.map +0 -1
  255. package/dist-server/service/resource/resource.d.ts +0 -24
  256. package/dist-server/service/resource/resource.js +0 -93
  257. package/dist-server/service/resource/resource.js.map +0 -1
  258. package/dist-server/service/task/index.d.ts +0 -5
  259. package/dist-server/service/task/index.js +0 -9
  260. package/dist-server/service/task/index.js.map +0 -1
  261. package/dist-server/service/task/task-mutation.d.ts +0 -10
  262. package/dist-server/service/task/task-mutation.js +0 -135
  263. package/dist-server/service/task/task-mutation.js.map +0 -1
  264. package/dist-server/service/task/task-query.d.ts +0 -21
  265. package/dist-server/service/task/task-query.js +0 -219
  266. package/dist-server/service/task/task-query.js.map +0 -1
  267. package/dist-server/service/task/task-type.d.ts +0 -31
  268. package/dist-server/service/task/task-type.js +0 -114
  269. package/dist-server/service/task/task-type.js.map +0 -1
  270. package/dist-server/service/task/task.d.ts +0 -35
  271. package/dist-server/service/task/task.js +0 -151
  272. package/dist-server/service/task/task.js.map +0 -1
  273. package/dist-server/service/task-checklist-binding/index.d.ts +0 -5
  274. package/dist-server/service/task-checklist-binding/index.js +0 -9
  275. package/dist-server/service/task-checklist-binding/index.js.map +0 -1
  276. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.d.ts +0 -5
  277. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.js +0 -186
  278. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.js.map +0 -1
  279. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.d.ts +0 -8
  280. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.js +0 -61
  281. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.js.map +0 -1
  282. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.d.ts +0 -15
  283. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.js +0 -57
  284. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.js.map +0 -1
  285. package/dist-server/service/task-checklist-binding/task-checklist-binding.d.ts +0 -22
  286. package/dist-server/service/task-checklist-binding/task-checklist-binding.js +0 -106
  287. package/dist-server/service/task-checklist-binding/task-checklist-binding.js.map +0 -1
  288. package/dist-server/service/task-resource/index.d.ts +0 -6
  289. package/dist-server/service/task-resource/index.js +0 -10
  290. package/dist-server/service/task-resource/index.js.map +0 -1
  291. package/dist-server/service/task-resource/task-resource-mutation.d.ts +0 -10
  292. package/dist-server/service/task-resource/task-resource-mutation.js +0 -132
  293. package/dist-server/service/task-resource/task-resource-mutation.js.map +0 -1
  294. package/dist-server/service/task-resource/task-resource-query.d.ts +0 -7
  295. package/dist-server/service/task-resource/task-resource-query.js +0 -50
  296. package/dist-server/service/task-resource/task-resource-query.js.map +0 -1
  297. package/dist-server/service/task-resource/task-resource-type.d.ts +0 -17
  298. package/dist-server/service/task-resource/task-resource-type.js +0 -65
  299. package/dist-server/service/task-resource/task-resource-type.js.map +0 -1
  300. package/dist-server/service/task-resource/task-resource.d.ts +0 -13
  301. package/dist-server/service/task-resource/task-resource.js +0 -59
  302. package/dist-server/service/task-resource/task-resource.js.map +0 -1
  303. package/dist-server/service/worker-type/index.d.ts +0 -5
  304. package/dist-server/service/worker-type/index.js +0 -9
  305. package/dist-server/service/worker-type/index.js.map +0 -1
  306. package/dist-server/service/worker-type/worker-type-mutation.d.ts +0 -6
  307. package/dist-server/service/worker-type/worker-type-mutation.js +0 -64
  308. package/dist-server/service/worker-type/worker-type-mutation.js.map +0 -1
  309. package/dist-server/service/worker-type/worker-type-query.d.ts +0 -11
  310. package/dist-server/service/worker-type/worker-type-query.js +0 -78
  311. package/dist-server/service/worker-type/worker-type-query.js.map +0 -1
  312. package/dist-server/service/worker-type/worker-type-type.d.ts +0 -11
  313. package/dist-server/service/worker-type/worker-type-type.js +0 -43
  314. package/dist-server/service/worker-type/worker-type-type.js.map +0 -1
  315. package/dist-server/service/worker-type/worker-type.d.ts +0 -16
  316. package/dist-server/service/worker-type/worker-type.js +0 -77
  317. package/dist-server/service/worker-type/worker-type.js.map +0 -1
  318. package/dist-server/tsconfig.tsbuildinfo +0 -1
@@ -1,339 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ProjectMutation = void 0;
4
- exports.createAttachmentAfterDelete = createAttachmentAfterDelete;
5
- const tslib_1 = require("tslib");
6
- const type_graphql_1 = require("type-graphql");
7
- const typeorm_1 = require("typeorm");
8
- const shell_1 = require("@things-factory/shell");
9
- const attachment_base_1 = require("@things-factory/attachment-base");
10
- const project_1 = require("./project");
11
- const project_type_1 = require("./project-type");
12
- const building_complex_1 = require("@dssp/building-complex");
13
- const headless_pdf_to_image_1 = require("@things-factory/board-service/dist-server/controllers/headless-pdf-to-image");
14
- const parse_excel_1 = require("../../controllers/parse-excel");
15
- const fs = tslib_1.__importStar(require("fs"));
16
- const path = tslib_1.__importStar(require("path"));
17
- const archiver_1 = tslib_1.__importDefault(require("archiver"));
18
- const env_1 = require("@things-factory/env");
19
- const projectType = env_1.config.get('projectType', project_1.ProjectType.DSSP);
20
- let ProjectMutation = class ProjectMutation {
21
- async createProject(project, context) {
22
- const { domain, user, tx } = context.state;
23
- const projectRepo = (0, shell_1.getRepository)(project_1.Project, tx);
24
- const buildingComplexRepo = (0, shell_1.getRepository)(building_complex_1.BuildingComplex, tx);
25
- const newBuildingComplex = await buildingComplexRepo.save({
26
- domain,
27
- creator: user,
28
- updater: user
29
- });
30
- const result = await projectRepo.save({
31
- name: project.name,
32
- documentNaming: project.name,
33
- buildingComplex: newBuildingComplex,
34
- projectType,
35
- domain,
36
- creator: user,
37
- updater: user
38
- });
39
- return result;
40
- }
41
- async updateProject(project, context) {
42
- var _a;
43
- const { user, tx } = context.state;
44
- const projectRepo = (0, shell_1.getRepository)(project_1.Project, tx);
45
- const buildingComplexRepo = (0, shell_1.getRepository)(building_complex_1.BuildingComplex, tx);
46
- const buildingRepo = (0, shell_1.getRepository)(building_complex_1.Building, tx);
47
- const buildingLevelRepo = (0, shell_1.getRepository)(building_complex_1.BuildingLevel, tx);
48
- const buildingComplex = project.buildingComplex;
49
- const buildings = ((_a = project.buildingComplex) === null || _a === void 0 ? void 0 : _a.buildings) || [];
50
- // 1. 프로젝트 수정
51
- const projectState = project.totalProgress == 100 ? project_1.ProjectState.COMPLETED : project_1.ProjectState.ONGOING;
52
- const projectResult = await projectRepo.save(Object.assign(Object.assign({}, project), { state: projectState, updater: user }));
53
- // 2. 단지 정보 수정
54
- await buildingComplexRepo.save(Object.assign(Object.assign({}, buildingComplex), { updater: user }));
55
- // 2-1. 프로젝트 메인 이미지 첨부파일 나머지 삭제 후 저장
56
- await createAttachmentAfterDelete(context, project === null || project === void 0 ? void 0 : project.mainPhotoUpload, project.id, project_1.Project.name);
57
- // 2-2. 단지 BIM 이미지 첨부파일 나머지 삭제 후 저장
58
- await createAttachmentAfterDelete(context, buildingComplex === null || buildingComplex === void 0 ? void 0 : buildingComplex.drawingUpload, buildingComplex.id, building_complex_1.BuildingComplex.name + '_bim');
59
- // 3. 동의 층 정보가 바뀌었으면 층 초기화 후 다시 생성
60
- const originBuilding = await buildingRepo.findBy({ buildingComplex: { id: buildingComplex.id } }); // 이전 동 정보 가져오기
61
- const afterBuilding = buildings.reduce((acc, building) => (Object.assign(Object.assign({}, acc), { [building.name]: building.floorCount })), {}); // 비교용으로 수정된 동 정보 데이터 파싱
62
- const afterBasement = buildings.reduce((acc, building) => (Object.assign(Object.assign({}, acc), { [building.name]: building.basementFloorCount || 0 })), {}); // 비교용으로 수정된 지하 정보 데이터 파싱
63
- const isBuidlingChanged = originBuilding.some(building => afterBuilding[building.name] !== building.floorCount || afterBasement[building.name] !== building.basementFloorCount); // 층 개수가 달라진 동이 있는지 확인
64
- // 동의 층 개수가 달라지면 모든 층의 데이터 제거 후 생성
65
- if (isBuidlingChanged || originBuilding.length !== buildings.length) {
66
- // 3-1. 기존 동/층 첨부파일 및 데이터 제거
67
- const buildingIds = originBuilding.map((building) => building.id);
68
- const buildingLevels = await buildingLevelRepo.findBy({ building: { id: (0, typeorm_1.In)(buildingIds) } });
69
- const buildingLevelIds = buildingLevels.map((buildingLevel) => buildingLevel.id);
70
- await buildingLevelRepo.softDelete({ building: { id: (0, typeorm_1.In)(buildingIds) } });
71
- await buildingRepo.softDelete({ id: (0, typeorm_1.In)(buildingIds) });
72
- await (0, attachment_base_1.deleteAttachmentsByRef)(null, { refBys: [...buildingIds, ...buildingLevelIds] }, context);
73
- // 3-2. 단지 내 동 정보들 생성
74
- for (let buildingKey in buildings) {
75
- const building = buildings[buildingKey];
76
- const newBuilding = await buildingRepo.save({
77
- buildingComplex: buildingComplex,
78
- name: building.name,
79
- floorCount: building.floorCount,
80
- hasBasement: building.hasBasement,
81
- basementFloorCount: building.hasBasement ? building.basementFloorCount : 0,
82
- updater: user,
83
- creator: user
84
- });
85
- // 3-3. 동별로 for문 돌면서 층 데이터 개수대로 생성
86
- for (let i = 1; i <= building.floorCount; i++) {
87
- await buildingLevelRepo.save({ building: newBuilding, floor: i, creator: user });
88
- }
89
- // 3-4. 지하층 층 데이터 생성
90
- if (building.hasBasement) {
91
- for (let i = 1; i <= building.basementFloorCount; i++) {
92
- await buildingLevelRepo.save({ building: newBuilding, floor: -i, creator: user });
93
- }
94
- }
95
- }
96
- }
97
- return projectResult;
98
- }
99
- async updateProjectPlan(project, context) {
100
- var _a, _b;
101
- const { user, tx, domain } = context.state;
102
- const projectRepo = (0, shell_1.getRepository)(project_1.Project, tx);
103
- const buildingComplexRepo = (0, shell_1.getRepository)(building_complex_1.BuildingComplex, tx);
104
- const buildingRepo = (0, shell_1.getRepository)(building_complex_1.Building, tx);
105
- const buildingLevelRepo = (0, shell_1.getRepository)(building_complex_1.BuildingLevel, tx);
106
- const attachmentRepo = (0, shell_1.getRepository)(attachment_base_1.Attachment, tx);
107
- const buildingComplex = project.buildingComplex;
108
- const buildings = ((_a = project.buildingComplex) === null || _a === void 0 ? void 0 : _a.buildings) || [];
109
- // 1. 프로젝트 수정 시간 업데이트
110
- const projectResult = await projectRepo.save(Object.assign(Object.assign({}, project), { updater: user }));
111
- // 2. 단지 축척 정보 수정
112
- await buildingComplexRepo.save(Object.assign(Object.assign({}, buildingComplex), { updater: user }));
113
- for (let buildingKey in buildings) {
114
- const building = buildings[buildingKey];
115
- for (let buildingLevelKey in building.buildingLevels) {
116
- const buildingLevel = building.buildingLevels[buildingLevelKey];
117
- // 3. 층별 도면 이미지 저장
118
- const mainDrawingAttatchment = await createAttachmentAfterDelete(context, buildingLevel.mainDrawingUpload, buildingLevel.id, building_complex_1.BuildingLevel.name + '_mainDrawing');
119
- // 첨부된 PDF가 있으면 PDF 파일대로 썸네일 생성
120
- if (mainDrawingAttatchment) {
121
- const mainDrawingUpload = await buildingLevel.mainDrawingUpload;
122
- const pdfPath = `/${attachment_base_1.ATTACHMENT_PATH}/${mainDrawingAttatchment.path}`; // TODO ATTACHMENT_PATH 제거, mainDrawingAttachment.fullpath 로 해도 될 것 같은데...
123
- const fileName = mainDrawingUpload.filename.replace('.pdf', '');
124
- const pngFile = await (0, headless_pdf_to_image_1.pdfToImage)({ pdfPath, fileName });
125
- await createAttachmentAfterDelete(context, pngFile, buildingLevel.id, building_complex_1.BuildingLevel.name + '_mainDrawing_image');
126
- const pngThumbnailFile = await (0, headless_pdf_to_image_1.pdfToImage)({ pdfPath, fileName, defaultViewport: { width: 300, height: 200 } });
127
- await createAttachmentAfterDelete(context, pngThumbnailFile, buildingLevel.id, building_complex_1.BuildingLevel.name + '_mainDrawing_thumbnail');
128
- }
129
- // 3-1. 입면도 파일 저장
130
- const elevationDrawingAttatchment = await createAttachmentAfterDelete(context, buildingLevel.elevationDrawingUpload, buildingLevel.id, building_complex_1.BuildingLevel.name + '_elevationDrawing');
131
- if (elevationDrawingAttatchment) {
132
- const elevationDrawingUpload = await buildingLevel.elevationDrawingUpload;
133
- const pdfPath = `/${attachment_base_1.ATTACHMENT_PATH}/${elevationDrawingAttatchment.path}`;
134
- const fileName = elevationDrawingUpload.filename.replace('.pdf', '');
135
- const pngThumbnailFile = await (0, headless_pdf_to_image_1.pdfToImage)({ pdfPath, fileName, defaultViewport: { width: 300, height: 200 } });
136
- await createAttachmentAfterDelete(context, pngThumbnailFile, buildingLevel.id, building_complex_1.BuildingLevel.name + '_elevationDrawing_thumbnail');
137
- }
138
- // 3-2. 철근배분도 파일 저장
139
- const rebarDistributionDrawingAttatchment = await createAttachmentAfterDelete(context, buildingLevel.rebarDistributionDrawingUpload, buildingLevel.id, building_complex_1.BuildingLevel.name + '_rebarDistributionDrawing');
140
- if (rebarDistributionDrawingAttatchment) {
141
- const rebarDistributionDrawingUpload = await buildingLevel.rebarDistributionDrawingUpload;
142
- const pdfPath = `/${attachment_base_1.ATTACHMENT_PATH}/${rebarDistributionDrawingAttatchment.path}`;
143
- const fileName = rebarDistributionDrawingUpload.filename.replace('.pdf', '');
144
- const pngThumbnailFile = await (0, headless_pdf_to_image_1.pdfToImage)({ pdfPath, fileName, defaultViewport: { width: 300, height: 200 } });
145
- await createAttachmentAfterDelete(context, pngThumbnailFile, buildingLevel.id, building_complex_1.BuildingLevel.name + '_rebarDistributionDrawing_thumbnail');
146
- }
147
- // 3-3. 기타 도면 파일 저장
148
- const etcDrawingRefType = building_complex_1.BuildingLevel.name + '_etcDrawings';
149
- // 기존 첨부 파일 중 제거된 것들 삭제
150
- const etcDrawings = await attachmentRepo.find({ where: { refType: etcDrawingRefType, refBy: buildingLevel.id } });
151
- for (let etcDrawing of etcDrawings) {
152
- if (!buildingLevel.etcDrawingIds.includes(etcDrawing.id)) {
153
- await (0, attachment_base_1.deleteAttachment)(null, { id: etcDrawing.id }, context);
154
- }
155
- }
156
- // 업로드
157
- if (((_b = buildingLevel.etcDrawingsUpload) === null || _b === void 0 ? void 0 : _b.length) > 0) {
158
- for (let etcDrawing of buildingLevel.etcDrawingsUpload) {
159
- await (0, attachment_base_1.createAttachment)(null, { attachment: { file: etcDrawing, refType: etcDrawingRefType, refBy: buildingLevel.id } }, context);
160
- }
161
- }
162
- // 3-4. 층 업데이트 시간 갱신
163
- await buildingLevelRepo.save(Object.assign(Object.assign({}, buildingLevel), { updater: user }));
164
- }
165
- // 4. 동별 도면 이미지 저장
166
- await createAttachmentAfterDelete(context, building === null || building === void 0 ? void 0 : building.drawingUpload, building.id, building_complex_1.Building.name);
167
- // 4-1. 동 업데이트 시간 갱신
168
- await buildingRepo.save(Object.assign(Object.assign({}, building), { updater: user }));
169
- }
170
- return projectResult;
171
- }
172
- async uploadProjectScheduleTable(param, context) {
173
- var _a, e_1, _b, _c;
174
- const { domain, user, tx } = context.state;
175
- const { projectId, scheduleTable } = param;
176
- const projectRepo = (0, shell_1.getRepository)(project_1.Project, tx);
177
- const project = await projectRepo.findOne({
178
- where: { domain: { id: domain.id }, id: projectId }
179
- });
180
- const { createReadStream, filename, mimetype } = await scheduleTable;
181
- const stream = createReadStream();
182
- const chunks = [];
183
- try {
184
- for (var _d = true, stream_1 = tslib_1.__asyncValues(stream), stream_1_1; stream_1_1 = await stream_1.next(), _a = stream_1_1.done, !_a; _d = true) {
185
- _c = stream_1_1.value;
186
- _d = false;
187
- const chunk = _c;
188
- chunks.push(chunk);
189
- }
190
- }
191
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
192
- finally {
193
- try {
194
- if (!_d && !_a && (_b = stream_1.return)) await _b.call(stream_1);
195
- }
196
- finally { if (e_1) throw e_1.error; }
197
- }
198
- const buffer = Buffer.concat(chunks);
199
- await (0, parse_excel_1.parseExcelAndImportTasks)(buffer, project, context);
200
- // await parseExcelAndImportTasks(attachment.fullpath, project, context)
201
- return true;
202
- }
203
- async deleteProject(id, context) {
204
- const { domain, tx } = context.state;
205
- await (0, shell_1.getRepository)(project_1.Project, tx).delete({ domain: { id: domain.id }, id });
206
- await (0, attachment_base_1.deleteAttachmentsByRef)(null, { refBys: [id] }, context);
207
- return true;
208
- }
209
- async downloadPlanFiles(fileIds, context) {
210
- const { domain, tx } = context.state;
211
- if (!fileIds || fileIds.length === 0) {
212
- throw new Error('다운로드할 파일을 선택해주세요.');
213
- }
214
- // 첨부파일 정보 조회
215
- const attachments = await tx.getRepository(attachment_base_1.Attachment).find({
216
- where: { domain: { id: domain.id }, id: (0, typeorm_1.In)(fileIds) }
217
- });
218
- if (attachments.length === 0) {
219
- throw new Error('선택된 파일을 찾을 수 없습니다.');
220
- }
221
- // ZIP 파일 생성 - 동과 층 정보를 포함한 파일명
222
- const zipFileName = `download.zip`;
223
- const tempDir = path.join(process.cwd(), 'temp');
224
- const zipFilePath = path.join(tempDir, zipFileName);
225
- // temp 디렉토리 생성
226
- if (!fs.existsSync(tempDir)) {
227
- fs.mkdirSync(tempDir, { recursive: true });
228
- }
229
- const output = fs.createWriteStream(zipFilePath);
230
- const archive = (0, archiver_1.default)('zip', {
231
- zlib: { level: 9 } // 최대 압축
232
- });
233
- return new Promise(async (resolve, reject) => {
234
- output.on('close', () => {
235
- // ZIP 파일을 Base64로 인코딩하여 반환
236
- const zipBuffer = fs.readFileSync(zipFilePath);
237
- const base64Data = zipBuffer.toString('base64');
238
- const dataUrl = `data:application/zip;base64,${base64Data}`;
239
- // 임시 파일 삭제
240
- fs.unlinkSync(zipFilePath);
241
- resolve(dataUrl);
242
- });
243
- archive.on('error', err => {
244
- reject(err);
245
- });
246
- archive.pipe(output);
247
- try {
248
- // 각 첨부파일을 ZIP에 추가
249
- for (const attachment of attachments) {
250
- try {
251
- const fileUrl = `http://localhost:3000${attachment.fullpath}`;
252
- const response = await fetch(fileUrl);
253
- if (response.ok) {
254
- const buffer = await response.arrayBuffer();
255
- const fileName = attachment.name || path.basename(attachment.fullpath);
256
- archive.append(Buffer.from(buffer), { name: fileName });
257
- }
258
- }
259
- catch (error) {
260
- console.error('Error processing attachment:', attachment.fullpath, error);
261
- }
262
- }
263
- archive.finalize();
264
- }
265
- catch (error) {
266
- reject(error);
267
- }
268
- });
269
- }
270
- };
271
- exports.ProjectMutation = ProjectMutation;
272
- tslib_1.__decorate([
273
- (0, type_graphql_1.Directive)('@transaction'),
274
- (0, type_graphql_1.Mutation)(returns => project_1.Project, { description: '프로젝트 생성' }),
275
- tslib_1.__param(0, (0, type_graphql_1.Arg)('project')),
276
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
277
- tslib_1.__metadata("design:type", Function),
278
- tslib_1.__metadata("design:paramtypes", [project_type_1.NewProject, Object]),
279
- tslib_1.__metadata("design:returntype", Promise)
280
- ], ProjectMutation.prototype, "createProject", null);
281
- tslib_1.__decorate([
282
- (0, type_graphql_1.Directive)('@transaction'),
283
- (0, type_graphql_1.Mutation)(returns => project_1.Project, { description: '프로젝트 업데이트 (중복 사용 금지)' }),
284
- tslib_1.__param(0, (0, type_graphql_1.Arg)('project')),
285
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
286
- tslib_1.__metadata("design:type", Function),
287
- tslib_1.__metadata("design:paramtypes", [project_type_1.ProjectPatch, Object]),
288
- tslib_1.__metadata("design:returntype", Promise)
289
- ], ProjectMutation.prototype, "updateProject", null);
290
- tslib_1.__decorate([
291
- (0, type_graphql_1.Directive)('@transaction'),
292
- (0, type_graphql_1.Mutation)(returns => project_1.Project, { description: '프로젝트 도면 업데이트' }),
293
- tslib_1.__param(0, (0, type_graphql_1.Arg)('project')),
294
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
295
- tslib_1.__metadata("design:type", Function),
296
- tslib_1.__metadata("design:paramtypes", [project_type_1.ProjectPatch, Object]),
297
- tslib_1.__metadata("design:returntype", Promise)
298
- ], ProjectMutation.prototype, "updateProjectPlan", null);
299
- tslib_1.__decorate([
300
- (0, type_graphql_1.Directive)('@transaction'),
301
- (0, type_graphql_1.Mutation)(returns => Boolean, { description: '프로젝트 공정표 업로드' }),
302
- tslib_1.__param(0, (0, type_graphql_1.Arg)('param')),
303
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
304
- tslib_1.__metadata("design:type", Function),
305
- tslib_1.__metadata("design:paramtypes", [project_type_1.UploadProjectScheduleTable, Object]),
306
- tslib_1.__metadata("design:returntype", Promise)
307
- ], ProjectMutation.prototype, "uploadProjectScheduleTable", null);
308
- tslib_1.__decorate([
309
- (0, type_graphql_1.Directive)('@transaction'),
310
- (0, type_graphql_1.Mutation)(returns => Boolean, { description: 'To delete Project' }),
311
- tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
312
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
313
- tslib_1.__metadata("design:type", Function),
314
- tslib_1.__metadata("design:paramtypes", [String, Object]),
315
- tslib_1.__metadata("design:returntype", Promise)
316
- ], ProjectMutation.prototype, "deleteProject", null);
317
- tslib_1.__decorate([
318
- (0, type_graphql_1.Directive)('@transaction'),
319
- (0, type_graphql_1.Mutation)(returns => String, { description: '선택된 도면 파일들을 ZIP으로 압축하여 다운로드 URL 반환' }),
320
- tslib_1.__param(0, (0, type_graphql_1.Arg)('fileIds', type => [String])),
321
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
322
- tslib_1.__metadata("design:type", Function),
323
- tslib_1.__metadata("design:paramtypes", [Array, Object]),
324
- tslib_1.__metadata("design:returntype", Promise)
325
- ], ProjectMutation.prototype, "downloadPlanFiles", null);
326
- exports.ProjectMutation = ProjectMutation = tslib_1.__decorate([
327
- (0, type_graphql_1.Resolver)(project_1.Project)
328
- ], ProjectMutation);
329
- async function createAttachmentAfterDelete(context, file, refBy, refType) {
330
- if (file === undefined) {
331
- return null;
332
- }
333
- const { tx } = context.state;
334
- // 기존 첨부 파일이 있으면 삭제
335
- await (0, attachment_base_1.deleteAttachmentsByRef)(null, { refBys: [refBy], refType }, context);
336
- let result = await (0, attachment_base_1.createAttachment)(null, { attachment: { file, refType, refBy } }, context);
337
- return await (0, shell_1.getRepository)(attachment_base_1.Attachment, tx).findOne({ where: { id: result.id } });
338
- }
339
- //# sourceMappingURL=project-mutation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project-mutation.js","sourceRoot":"","sources":["../../../server/service/project/project-mutation.ts"],"names":[],"mappings":";;;AA6WA,kEAaC;;AA1XD,+CAAsE;AACtE,qCAA4B;AAC5B,iDAAqD;AACrD,qEAMwC;AACxC,uCAA8D;AAC9D,iDAAgH;AAChH,6DAAiF;AACjF,uHAAwG;AACxG,+DAAwE;AACxE,+CAAwB;AACxB,mDAA4B;AAC5B,gEAA+B;AAC/B,6CAA4C;AAE5C,MAAM,WAAW,GAAG,YAAM,CAAC,GAAG,CAAC,aAAa,EAAE,qBAAW,CAAC,IAAI,CAAC,CAAA;AAGxD,IAAM,eAAe,GAArB,MAAM,eAAe;IAGpB,AAAN,KAAK,CAAC,aAAa,CAAiB,OAAmB,EAAS,OAAwB;QACtF,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAC1C,MAAM,WAAW,GAAG,IAAA,qBAAa,EAAC,iBAAO,EAAE,EAAE,CAAC,CAAA;QAC9C,MAAM,mBAAmB,GAAG,IAAA,qBAAa,EAAC,kCAAe,EAAE,EAAE,CAAC,CAAA;QAE9D,MAAM,kBAAkB,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC;YACxD,MAAM;YACN,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI;SACd,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC;YACpC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,cAAc,EAAE,OAAO,CAAC,IAAI;YAC5B,eAAe,EAAE,kBAAkB;YACnC,WAAW;YACX,MAAM;YACN,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI;SACd,CAAC,CAAA;QAEF,OAAO,MAAM,CAAA;IACf,CAAC;IAIK,AAAN,KAAK,CAAC,aAAa,CAAiB,OAAqB,EAAS,OAAwB;;QACxF,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAClC,MAAM,WAAW,GAAG,IAAA,qBAAa,EAAC,iBAAO,EAAE,EAAE,CAAC,CAAA;QAC9C,MAAM,mBAAmB,GAAG,IAAA,qBAAa,EAAC,kCAAe,EAAE,EAAE,CAAC,CAAA;QAC9D,MAAM,YAAY,GAAG,IAAA,qBAAa,EAAC,2BAAQ,EAAE,EAAE,CAAC,CAAA;QAChD,MAAM,iBAAiB,GAAG,IAAA,qBAAa,EAAC,gCAAa,EAAE,EAAE,CAAC,CAAA;QAE1D,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAA;QAC/C,MAAM,SAAS,GAAG,CAAA,MAAA,OAAO,CAAC,eAAe,0CAAE,SAAS,KAAI,EAAE,CAAA;QAE1D,aAAa;QACb,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC,CAAC,CAAC,sBAAY,CAAC,SAAS,CAAC,CAAC,CAAC,sBAAY,CAAC,OAAO,CAAA;QACjG,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,IAAI,iCAAM,OAAO,KAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,IAAG,CAAA;QAEhG,cAAc;QACd,MAAM,mBAAmB,CAAC,IAAI,iCAAM,eAAe,KAAE,OAAO,EAAE,IAAI,IAAG,CAAA;QAErE,oCAAoC;QACpC,MAAM,2BAA2B,CAAC,OAAO,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,eAAe,EAAE,OAAO,CAAC,EAAE,EAAE,iBAAO,CAAC,IAAI,CAAC,CAAA;QAE9F,mCAAmC;QACnC,MAAM,2BAA2B,CAAC,OAAO,EAAE,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,aAAa,EAAE,eAAe,CAAC,EAAE,EAAE,kCAAe,CAAC,IAAI,GAAG,MAAM,CAAC,CAAA;QAE7H,kCAAkC;QAClC,MAAM,cAAc,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA,CAAC,eAAe;QACjH,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,iCAAM,GAAG,KAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,UAAU,IAAG,EAAE,EAAE,CAAC,CAAA,CAAC,wBAAwB;QAC1I,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,iCAAM,GAAG,KAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,kBAAkB,IAAI,CAAC,IAAG,EAAE,EAAE,CAAC,CAAA,CAAC,yBAAyB;QACxJ,MAAM,iBAAiB,GAAG,cAAc,CAAC,IAAI,CAC3C,QAAQ,CAAC,EAAE,CACT,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,UAAU,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,kBAAkB,CACvH,CAAA,CAAC,sBAAsB;QAExB,kCAAkC;QAClC,IAAI,iBAAiB,IAAI,cAAc,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;YACpE,4BAA4B;YAC5B,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,QAAkB,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;YAC3E,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAA,YAAE,EAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAA;YAC5F,MAAM,gBAAgB,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,aAA4B,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;YAE/F,MAAM,iBAAiB,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAA,YAAE,EAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAA;YACzE,MAAM,YAAY,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,IAAA,YAAE,EAAC,WAAW,CAAC,EAAE,CAAC,CAAA;YACtD,MAAM,IAAA,wCAAsB,EAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;YAE9F,qBAAqB;YACrB,KAAK,IAAI,WAAW,IAAI,SAAS,EAAE,CAAC;gBAClC,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,CAAA;gBACvC,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC;oBAC1C,eAAe,EAAE,eAAe;oBAChC,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,kBAAkB,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;oBAC1E,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,IAAI;iBACd,CAAC,CAAA;gBAEF,kCAAkC;gBAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC9C,MAAM,iBAAiB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;gBAClF,CAAC;gBAED,oBAAoB;gBACpB,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;oBACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,kBAAkB,EAAE,CAAC,EAAE,EAAE,CAAC;wBACtD,MAAM,iBAAiB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;oBACnF,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,aAAa,CAAA;IACtB,CAAC;IAIK,AAAN,KAAK,CAAC,iBAAiB,CAAiB,OAAqB,EAAS,OAAwB;;QAC5F,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAC1C,MAAM,WAAW,GAAG,IAAA,qBAAa,EAAC,iBAAO,EAAE,EAAE,CAAC,CAAA;QAC9C,MAAM,mBAAmB,GAAG,IAAA,qBAAa,EAAC,kCAAe,EAAE,EAAE,CAAC,CAAA;QAC9D,MAAM,YAAY,GAAG,IAAA,qBAAa,EAAC,2BAAQ,EAAE,EAAE,CAAC,CAAA;QAChD,MAAM,iBAAiB,GAAG,IAAA,qBAAa,EAAC,gCAAa,EAAE,EAAE,CAAC,CAAA;QAC1D,MAAM,cAAc,GAAG,IAAA,qBAAa,EAAC,4BAAU,EAAE,EAAE,CAAC,CAAA;QACpD,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAA;QAC/C,MAAM,SAAS,GAAG,CAAA,MAAA,OAAO,CAAC,eAAe,0CAAE,SAAS,KAAI,EAAE,CAAA;QAE1D,qBAAqB;QACrB,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,IAAI,iCAAM,OAAO,KAAE,OAAO,EAAE,IAAI,IAAG,CAAA;QAE3E,iBAAiB;QACjB,MAAM,mBAAmB,CAAC,IAAI,iCAAM,eAAe,KAAE,OAAO,EAAE,IAAI,IAAG,CAAA;QAErE,KAAK,IAAI,WAAW,IAAI,SAAS,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,CAAA;YAEvC,KAAK,IAAI,gBAAgB,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;gBACrD,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAA;gBAE/D,kBAAkB;gBAClB,MAAM,sBAAsB,GAAG,MAAM,2BAA2B,CAC9D,OAAO,EACP,aAAa,CAAC,iBAAiB,EAC/B,aAAa,CAAC,EAAE,EAChB,gCAAa,CAAC,IAAI,GAAG,cAAc,CACpC,CAAA;gBACD,+BAA+B;gBAC/B,IAAI,sBAAsB,EAAE,CAAC;oBAC3B,MAAM,iBAAiB,GAAG,MAAM,aAAa,CAAC,iBAAiB,CAAA;oBAC/D,MAAM,OAAO,GAAG,IAAI,iCAAe,IAAI,sBAAsB,CAAC,IAAI,EAAE,CAAA,CAAC,0EAA0E;oBAC/I,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;oBAC/D,MAAM,OAAO,GAAG,MAAM,IAAA,kCAAU,EAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAA;oBACvD,MAAM,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,EAAE,gCAAa,CAAC,IAAI,GAAG,oBAAoB,CAAC,CAAA;oBAEhH,MAAM,gBAAgB,GAAG,MAAM,IAAA,kCAAU,EAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;oBAC9G,MAAM,2BAA2B,CAC/B,OAAO,EACP,gBAAgB,EAChB,aAAa,CAAC,EAAE,EAChB,gCAAa,CAAC,IAAI,GAAG,wBAAwB,CAC9C,CAAA;gBACH,CAAC;gBAED,iBAAiB;gBACjB,MAAM,2BAA2B,GAAG,MAAM,2BAA2B,CACnE,OAAO,EACP,aAAa,CAAC,sBAAsB,EACpC,aAAa,CAAC,EAAE,EAChB,gCAAa,CAAC,IAAI,GAAG,mBAAmB,CACzC,CAAA;gBACD,IAAI,2BAA2B,EAAE,CAAC;oBAChC,MAAM,sBAAsB,GAAG,MAAM,aAAa,CAAC,sBAAsB,CAAA;oBACzE,MAAM,OAAO,GAAG,IAAI,iCAAe,IAAI,2BAA2B,CAAC,IAAI,EAAE,CAAA;oBACzE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;oBACpE,MAAM,gBAAgB,GAAG,MAAM,IAAA,kCAAU,EAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;oBAC9G,MAAM,2BAA2B,CAC/B,OAAO,EACP,gBAAgB,EAChB,aAAa,CAAC,EAAE,EAChB,gCAAa,CAAC,IAAI,GAAG,6BAA6B,CACnD,CAAA;gBACH,CAAC;gBAED,mBAAmB;gBACnB,MAAM,mCAAmC,GAAG,MAAM,2BAA2B,CAC3E,OAAO,EACP,aAAa,CAAC,8BAA8B,EAC5C,aAAa,CAAC,EAAE,EAChB,gCAAa,CAAC,IAAI,GAAG,2BAA2B,CACjD,CAAA;gBACD,IAAI,mCAAmC,EAAE,CAAC;oBACxC,MAAM,8BAA8B,GAAG,MAAM,aAAa,CAAC,8BAA8B,CAAA;oBACzF,MAAM,OAAO,GAAG,IAAI,iCAAe,IAAI,mCAAmC,CAAC,IAAI,EAAE,CAAA;oBACjF,MAAM,QAAQ,GAAG,8BAA8B,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;oBAC5E,MAAM,gBAAgB,GAAG,MAAM,IAAA,kCAAU,EAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;oBAC9G,MAAM,2BAA2B,CAC/B,OAAO,EACP,gBAAgB,EAChB,aAAa,CAAC,EAAE,EAChB,gCAAa,CAAC,IAAI,GAAG,qCAAqC,CAC3D,CAAA;gBACH,CAAC;gBAED,mBAAmB;gBACnB,MAAM,iBAAiB,GAAG,gCAAa,CAAC,IAAI,GAAG,cAAc,CAAA;gBAE7D,uBAAuB;gBACvB,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;gBACjH,KAAK,IAAI,UAAU,IAAI,WAAW,EAAE,CAAC;oBACnC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;wBACzD,MAAM,IAAA,kCAAgB,EAAC,IAAI,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;oBAC9D,CAAC;gBACH,CAAC;gBAED,MAAM;gBACN,IAAI,CAAA,MAAA,aAAa,CAAC,iBAAiB,0CAAE,MAAM,IAAG,CAAC,EAAE,CAAC;oBAChD,KAAK,IAAI,UAAU,IAAI,aAAa,CAAC,iBAAiB,EAAE,CAAC;wBACvD,MAAM,IAAA,kCAAgB,EACpB,IAAI,EACJ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,aAAa,CAAC,EAAE,EAAE,EAAE,EACzF,OAAO,CACR,CAAA;oBACH,CAAC;gBACH,CAAC;gBAED,oBAAoB;gBACpB,MAAM,iBAAiB,CAAC,IAAI,iCAAM,aAAa,KAAE,OAAO,EAAE,IAAI,IAAG,CAAA;YACnE,CAAC;YAED,kBAAkB;YAClB,MAAM,2BAA2B,CAAC,OAAO,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,EAAE,2BAAQ,CAAC,IAAI,CAAC,CAAA;YAE/F,oBAAoB;YACpB,MAAM,YAAY,CAAC,IAAI,iCAAM,QAAQ,KAAE,OAAO,EAAE,IAAI,IAAG,CAAA;QACzD,CAAC;QAED,OAAO,aAAa,CAAA;IACtB,CAAC;IAIK,AAAN,KAAK,CAAC,0BAA0B,CAChB,KAAiC,EACxC,OAAwB;;QAE/B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAC1C,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,KAAK,CAAA;QAE1C,MAAM,WAAW,GAAG,IAAA,qBAAa,EAAC,iBAAO,EAAE,EAAE,CAAC,CAAA;QAC9C,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC;YACxC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;SACpD,CAAC,CAAA;QAEF,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,aAAa,CAAA;QAEpE,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAA;QAEjC,MAAM,MAAM,GAAG,EAAE,CAAA;;YACjB,KAA0B,eAAA,WAAA,sBAAA,MAAM,CAAA,YAAA,4EAAE,CAAC;gBAAT,sBAAM;gBAAN,WAAM;gBAArB,MAAM,KAAK,KAAA,CAAA;gBACpB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACpB,CAAC;;;;;;;;;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAEpC,MAAM,IAAA,sCAAwB,EAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;QACxD,wEAAwE;QAExE,OAAO,IAAI,CAAA;IACb,CAAC;IAIK,AAAN,KAAK,CAAC,aAAa,CAAY,EAAU,EAAS,OAAwB;QACxE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEpC,MAAM,IAAA,qBAAa,EAAC,iBAAO,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;QAC1E,MAAM,IAAA,wCAAsB,EAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;QAE7D,OAAO,IAAI,CAAA;IACb,CAAC;IAIK,AAAN,KAAK,CAAC,iBAAiB,CAAmC,OAAiB,EAAS,OAAwB;QAC1G,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEpC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;QACtC,CAAC;QAED,aAAa;QACb,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,4BAAU,CAAC,CAAC,IAAI,CAAC;YAC1D,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAA,YAAE,EAAC,OAAO,CAAC,EAAE;SACtD,CAAC,CAAA;QAEF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;QACvC,CAAC;QAED,+BAA+B;QAC/B,MAAM,WAAW,GAAG,cAAc,CAAA;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAA;QAChD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QAEnD,eAAe;QACf,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5C,CAAC;QAED,MAAM,MAAM,GAAG,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAA;QAChD,MAAM,OAAO,GAAG,IAAA,kBAAQ,EAAC,KAAK,EAAE;YAC9B,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,QAAQ;SAC5B,CAAC,CAAA;QAEF,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACtB,2BAA2B;gBAC3B,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAA;gBAC9C,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;gBAC/C,MAAM,OAAO,GAAG,+BAA+B,UAAU,EAAE,CAAA;gBAE3D,WAAW;gBACX,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;gBAC1B,OAAO,CAAC,OAAO,CAAC,CAAA;YAClB,CAAC,CAAC,CAAA;YAEF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBACxB,MAAM,CAAC,GAAG,CAAC,CAAA;YACb,CAAC,CAAC,CAAA;YACF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAEpB,IAAI,CAAC;gBACH,kBAAkB;gBAClB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;oBACrC,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,wBAAwB,UAAU,CAAC,QAAQ,EAAE,CAAA;wBAC7D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAA;wBACrC,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;4BAChB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAA;4BAC3C,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;4BACtE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;wBACzD,CAAC;oBACH,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;oBAC3E,CAAC;gBACH,CAAC;gBAED,OAAO,CAAC,QAAQ,EAAE,CAAA;YACpB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,CAAA;YACf,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AApVY,0CAAe;AAGpB;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,iBAAO,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;IACpC,mBAAA,IAAA,kBAAG,EAAC,SAAS,CAAC,CAAA;IAAuB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CAAlB,yBAAU;;oDAsBtD;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,iBAAO,EAAE,EAAE,WAAW,EAAE,sBAAsB,EAAE,CAAC;IACjD,mBAAA,IAAA,kBAAG,EAAC,SAAS,CAAC,CAAA;IAAyB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CAApB,2BAAY;;oDAuExD;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,iBAAO,EAAE,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;IACrC,mBAAA,IAAA,kBAAG,EAAC,SAAS,CAAC,CAAA;IAAyB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CAApB,2BAAY;;wDAwH5D;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;IAE3D,mBAAA,IAAA,kBAAG,EAAC,OAAO,CAAC,CAAA;IACZ,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CADe,yCAA0B;;iEA0BhD;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC;IAC9C,mBAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;IAAc,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;oDAOhD;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,oCAAoC,EAAE,CAAC;IAC1D,mBAAA,IAAA,kBAAG,EAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IAAqB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;wDAqElF;0BAnVU,eAAe;IAD3B,IAAA,uBAAQ,EAAC,iBAAO,CAAC;GACL,eAAe,CAoV3B;AAEM,KAAK,UAAU,2BAA2B,CAAC,OAAwB,EAAE,IAAS,EAAE,KAAU,EAAE,OAAY;IAC7G,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAE5B,mBAAmB;IACnB,MAAM,IAAA,wCAAsB,EAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,CAAA;IAEzE,IAAI,MAAM,GAAG,MAAM,IAAA,kCAAgB,EAAC,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;IAE5F,OAAO,MAAM,IAAA,qBAAa,EAAC,4BAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;AAClF,CAAC","sourcesContent":["import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'\nimport { In } from 'typeorm'\nimport { getRepository } from '@things-factory/shell'\nimport {\n Attachment,\n createAttachment,\n deleteAttachmentsByRef,\n ATTACHMENT_PATH,\n deleteAttachment\n} from '@things-factory/attachment-base'\nimport { Project, ProjectState, ProjectType } from './project'\nimport { NewProject, ProjectCompleteStep1Patch, ProjectPatch, UploadProjectScheduleTable } from './project-type'\nimport { BuildingComplex, Building, BuildingLevel } from '@dssp/building-complex'\nimport { pdfToImage } from '@things-factory/board-service/dist-server/controllers/headless-pdf-to-image'\nimport { parseExcelAndImportTasks } from '../../controllers/parse-excel'\nimport * as fs from 'fs'\nimport * as path from 'path'\nimport archiver from 'archiver'\nimport { config } from '@things-factory/env'\n\nconst projectType = config.get('projectType', ProjectType.DSSP)\n\n@Resolver(Project)\nexport class ProjectMutation {\n @Directive('@transaction')\n @Mutation(returns => Project, { description: '프로젝트 생성' })\n async createProject(@Arg('project') project: NewProject, @Ctx() context: ResolverContext): Promise<Project> {\n const { domain, user, tx } = context.state\n const projectRepo = getRepository(Project, tx)\n const buildingComplexRepo = getRepository(BuildingComplex, tx)\n\n const newBuildingComplex = await buildingComplexRepo.save({\n domain,\n creator: user,\n updater: user\n })\n\n const result = await projectRepo.save({\n name: project.name,\n documentNaming: project.name,\n buildingComplex: newBuildingComplex,\n projectType,\n domain,\n creator: user,\n updater: user\n })\n\n return result\n }\n\n @Directive('@transaction')\n @Mutation(returns => Project, { description: '프로젝트 업데이트 (중복 사용 금지)' })\n async updateProject(@Arg('project') project: ProjectPatch, @Ctx() context: ResolverContext): Promise<Project> {\n const { user, tx } = context.state\n const projectRepo = getRepository(Project, tx)\n const buildingComplexRepo = getRepository(BuildingComplex, tx)\n const buildingRepo = getRepository(Building, tx)\n const buildingLevelRepo = getRepository(BuildingLevel, tx)\n\n const buildingComplex = project.buildingComplex\n const buildings = project.buildingComplex?.buildings || []\n\n // 1. 프로젝트 수정\n const projectState = project.totalProgress == 100 ? ProjectState.COMPLETED : ProjectState.ONGOING\n const projectResult = await projectRepo.save({ ...project, state: projectState, updater: user })\n\n // 2. 단지 정보 수정\n await buildingComplexRepo.save({ ...buildingComplex, updater: user })\n\n // 2-1. 프로젝트 메인 이미지 첨부파일 나머지 삭제 후 저장\n await createAttachmentAfterDelete(context, project?.mainPhotoUpload, project.id, Project.name)\n\n // 2-2. 단지 BIM 이미지 첨부파일 나머지 삭제 후 저장\n await createAttachmentAfterDelete(context, buildingComplex?.drawingUpload, buildingComplex.id, BuildingComplex.name + '_bim')\n\n // 3. 동의 층 정보가 바뀌었으면 층 초기화 후 다시 생성\n const originBuilding = await buildingRepo.findBy({ buildingComplex: { id: buildingComplex.id } }) // 이전 동 정보 가져오기\n const afterBuilding = buildings.reduce((acc, building) => ({ ...acc, [building.name]: building.floorCount }), {}) // 비교용으로 수정된 동 정보 데이터 파싱\n const afterBasement = buildings.reduce((acc, building) => ({ ...acc, [building.name]: building.basementFloorCount || 0 }), {}) // 비교용으로 수정된 지하 정보 데이터 파싱\n const isBuidlingChanged = originBuilding.some(\n building =>\n afterBuilding[building.name] !== building.floorCount || afterBasement[building.name] !== building.basementFloorCount\n ) // 층 개수가 달라진 동이 있는지 확인\n\n // 동의 층 개수가 달라지면 모든 층의 데이터 제거 후 생성\n if (isBuidlingChanged || originBuilding.length !== buildings.length) {\n // 3-1. 기존 동/층 첨부파일 및 데이터 제거\n const buildingIds = originBuilding.map((building: Building) => building.id)\n const buildingLevels = await buildingLevelRepo.findBy({ building: { id: In(buildingIds) } })\n const buildingLevelIds = buildingLevels.map((buildingLevel: BuildingLevel) => buildingLevel.id)\n\n await buildingLevelRepo.softDelete({ building: { id: In(buildingIds) } })\n await buildingRepo.softDelete({ id: In(buildingIds) })\n await deleteAttachmentsByRef(null, { refBys: [...buildingIds, ...buildingLevelIds] }, context)\n\n // 3-2. 단지 내 동 정보들 생성\n for (let buildingKey in buildings) {\n const building = buildings[buildingKey]\n const newBuilding = await buildingRepo.save({\n buildingComplex: buildingComplex,\n name: building.name,\n floorCount: building.floorCount,\n hasBasement: building.hasBasement,\n basementFloorCount: building.hasBasement ? building.basementFloorCount : 0,\n updater: user,\n creator: user\n })\n\n // 3-3. 동별로 for문 돌면서 층 데이터 개수대로 생성\n for (let i = 1; i <= building.floorCount; i++) {\n await buildingLevelRepo.save({ building: newBuilding, floor: i, creator: user })\n }\n\n // 3-4. 지하층 층 데이터 생성\n if (building.hasBasement) {\n for (let i = 1; i <= building.basementFloorCount; i++) {\n await buildingLevelRepo.save({ building: newBuilding, floor: -i, creator: user })\n }\n }\n }\n }\n\n return projectResult\n }\n\n @Directive('@transaction')\n @Mutation(returns => Project, { description: '프로젝트 도면 업데이트' })\n async updateProjectPlan(@Arg('project') project: ProjectPatch, @Ctx() context: ResolverContext): Promise<Project> {\n const { user, tx, domain } = context.state\n const projectRepo = getRepository(Project, tx)\n const buildingComplexRepo = getRepository(BuildingComplex, tx)\n const buildingRepo = getRepository(Building, tx)\n const buildingLevelRepo = getRepository(BuildingLevel, tx)\n const attachmentRepo = getRepository(Attachment, tx)\n const buildingComplex = project.buildingComplex\n const buildings = project.buildingComplex?.buildings || []\n\n // 1. 프로젝트 수정 시간 업데이트\n const projectResult = await projectRepo.save({ ...project, updater: user })\n\n // 2. 단지 축척 정보 수정\n await buildingComplexRepo.save({ ...buildingComplex, updater: user })\n\n for (let buildingKey in buildings) {\n const building = buildings[buildingKey]\n\n for (let buildingLevelKey in building.buildingLevels) {\n const buildingLevel = building.buildingLevels[buildingLevelKey]\n\n // 3. 층별 도면 이미지 저장\n const mainDrawingAttatchment = await createAttachmentAfterDelete(\n context,\n buildingLevel.mainDrawingUpload,\n buildingLevel.id,\n BuildingLevel.name + '_mainDrawing'\n )\n // 첨부된 PDF가 있으면 PDF 파일대로 썸네일 생성\n if (mainDrawingAttatchment) {\n const mainDrawingUpload = await buildingLevel.mainDrawingUpload\n const pdfPath = `/${ATTACHMENT_PATH}/${mainDrawingAttatchment.path}` // TODO ATTACHMENT_PATH 제거, mainDrawingAttachment.fullpath 로 해도 될 것 같은데...\n const fileName = mainDrawingUpload.filename.replace('.pdf', '')\n const pngFile = await pdfToImage({ pdfPath, fileName })\n await createAttachmentAfterDelete(context, pngFile, buildingLevel.id, BuildingLevel.name + '_mainDrawing_image')\n\n const pngThumbnailFile = await pdfToImage({ pdfPath, fileName, defaultViewport: { width: 300, height: 200 } })\n await createAttachmentAfterDelete(\n context,\n pngThumbnailFile,\n buildingLevel.id,\n BuildingLevel.name + '_mainDrawing_thumbnail'\n )\n }\n\n // 3-1. 입면도 파일 저장\n const elevationDrawingAttatchment = await createAttachmentAfterDelete(\n context,\n buildingLevel.elevationDrawingUpload,\n buildingLevel.id,\n BuildingLevel.name + '_elevationDrawing'\n )\n if (elevationDrawingAttatchment) {\n const elevationDrawingUpload = await buildingLevel.elevationDrawingUpload\n const pdfPath = `/${ATTACHMENT_PATH}/${elevationDrawingAttatchment.path}`\n const fileName = elevationDrawingUpload.filename.replace('.pdf', '')\n const pngThumbnailFile = await pdfToImage({ pdfPath, fileName, defaultViewport: { width: 300, height: 200 } })\n await createAttachmentAfterDelete(\n context,\n pngThumbnailFile,\n buildingLevel.id,\n BuildingLevel.name + '_elevationDrawing_thumbnail'\n )\n }\n\n // 3-2. 철근배분도 파일 저장\n const rebarDistributionDrawingAttatchment = await createAttachmentAfterDelete(\n context,\n buildingLevel.rebarDistributionDrawingUpload,\n buildingLevel.id,\n BuildingLevel.name + '_rebarDistributionDrawing'\n )\n if (rebarDistributionDrawingAttatchment) {\n const rebarDistributionDrawingUpload = await buildingLevel.rebarDistributionDrawingUpload\n const pdfPath = `/${ATTACHMENT_PATH}/${rebarDistributionDrawingAttatchment.path}`\n const fileName = rebarDistributionDrawingUpload.filename.replace('.pdf', '')\n const pngThumbnailFile = await pdfToImage({ pdfPath, fileName, defaultViewport: { width: 300, height: 200 } })\n await createAttachmentAfterDelete(\n context,\n pngThumbnailFile,\n buildingLevel.id,\n BuildingLevel.name + '_rebarDistributionDrawing_thumbnail'\n )\n }\n\n // 3-3. 기타 도면 파일 저장\n const etcDrawingRefType = BuildingLevel.name + '_etcDrawings'\n\n // 기존 첨부 파일 중 제거된 것들 삭제\n const etcDrawings = await attachmentRepo.find({ where: { refType: etcDrawingRefType, refBy: buildingLevel.id } })\n for (let etcDrawing of etcDrawings) {\n if (!buildingLevel.etcDrawingIds.includes(etcDrawing.id)) {\n await deleteAttachment(null, { id: etcDrawing.id }, context)\n }\n }\n\n // 업로드\n if (buildingLevel.etcDrawingsUpload?.length > 0) {\n for (let etcDrawing of buildingLevel.etcDrawingsUpload) {\n await createAttachment(\n null,\n { attachment: { file: etcDrawing, refType: etcDrawingRefType, refBy: buildingLevel.id } },\n context\n )\n }\n }\n\n // 3-4. 층 업데이트 시간 갱신\n await buildingLevelRepo.save({ ...buildingLevel, updater: user })\n }\n\n // 4. 동별 도면 이미지 저장\n await createAttachmentAfterDelete(context, building?.drawingUpload, building.id, Building.name)\n\n // 4-1. 동 업데이트 시간 갱신\n await buildingRepo.save({ ...building, updater: user })\n }\n\n return projectResult\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: '프로젝트 공정표 업로드' })\n async uploadProjectScheduleTable(\n @Arg('param') param: UploadProjectScheduleTable,\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, user, tx } = context.state\n const { projectId, scheduleTable } = param\n\n const projectRepo = getRepository(Project, tx)\n const project = await projectRepo.findOne({\n where: { domain: { id: domain.id }, id: projectId }\n })\n\n const { createReadStream, filename, mimetype } = await scheduleTable\n\n const stream = createReadStream()\n\n const chunks = []\n for await (const chunk of stream) {\n chunks.push(chunk)\n }\n\n const buffer = Buffer.concat(chunks)\n\n await parseExcelAndImportTasks(buffer, project, context)\n // await parseExcelAndImportTasks(attachment.fullpath, project, context)\n\n return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To delete Project' })\n async deleteProject(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n\n await getRepository(Project, tx).delete({ domain: { id: domain.id }, id })\n await deleteAttachmentsByRef(null, { refBys: [id] }, context)\n\n return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => String, { description: '선택된 도면 파일들을 ZIP으로 압축하여 다운로드 URL 반환' })\n async downloadPlanFiles(@Arg('fileIds', type => [String]) fileIds: string[], @Ctx() context: ResolverContext): Promise<string> {\n const { domain, tx } = context.state\n\n if (!fileIds || fileIds.length === 0) {\n throw new Error('다운로드할 파일을 선택해주세요.')\n }\n\n // 첨부파일 정보 조회\n const attachments = await tx.getRepository(Attachment).find({\n where: { domain: { id: domain.id }, id: In(fileIds) }\n })\n\n if (attachments.length === 0) {\n throw new Error('선택된 파일을 찾을 수 없습니다.')\n }\n\n // ZIP 파일 생성 - 동과 층 정보를 포함한 파일명\n const zipFileName = `download.zip`\n const tempDir = path.join(process.cwd(), 'temp')\n const zipFilePath = path.join(tempDir, zipFileName)\n\n // temp 디렉토리 생성\n if (!fs.existsSync(tempDir)) {\n fs.mkdirSync(tempDir, { recursive: true })\n }\n\n const output = fs.createWriteStream(zipFilePath)\n const archive = archiver('zip', {\n zlib: { level: 9 } // 최대 압축\n })\n\n return new Promise(async (resolve, reject) => {\n output.on('close', () => {\n // ZIP 파일을 Base64로 인코딩하여 반환\n const zipBuffer = fs.readFileSync(zipFilePath)\n const base64Data = zipBuffer.toString('base64')\n const dataUrl = `data:application/zip;base64,${base64Data}`\n\n // 임시 파일 삭제\n fs.unlinkSync(zipFilePath)\n resolve(dataUrl)\n })\n\n archive.on('error', err => {\n reject(err)\n })\n archive.pipe(output)\n\n try {\n // 각 첨부파일을 ZIP에 추가\n for (const attachment of attachments) {\n try {\n const fileUrl = `http://localhost:3000${attachment.fullpath}`\n const response = await fetch(fileUrl)\n if (response.ok) {\n const buffer = await response.arrayBuffer()\n const fileName = attachment.name || path.basename(attachment.fullpath)\n archive.append(Buffer.from(buffer), { name: fileName })\n }\n } catch (error) {\n console.error('Error processing attachment:', attachment.fullpath, error)\n }\n }\n\n archive.finalize()\n } catch (error) {\n reject(error)\n }\n })\n }\n}\n\nexport async function createAttachmentAfterDelete(context: ResolverContext, file: any, refBy: any, refType: any) {\n if (file === undefined) {\n return null\n }\n\n const { tx } = context.state\n\n // 기존 첨부 파일이 있으면 삭제\n await deleteAttachmentsByRef(null, { refBys: [refBy], refType }, context)\n\n let result = await createAttachment(null, { attachment: { file, refType, refBy } }, context)\n\n return await getRepository(Attachment, tx).findOne({ where: { id: result.id } })\n}\n"]}
@@ -1,23 +0,0 @@
1
- import { Domain, ListParam } from '@things-factory/shell';
2
- import { User } from '@things-factory/auth-base';
3
- import { Project } from './project';
4
- import { Task } from '../task/task';
5
- import { ProjectList } from './project-type';
6
- import { Attachment } from '@things-factory/attachment-base';
7
- import { BuildingComplex } from '@dssp/building-complex';
8
- export declare class ProjectQuery {
9
- project(id: string, context: ResolverContext): Promise<Project>;
10
- projects(params: ListParam, context: ResolverContext): Promise<ProjectList>;
11
- projectByBuildingComplexId(buildingComplexId: string, context: ResolverContext): Promise<Project>;
12
- projectByBuildingLevelId(buildingLevelId: string, context: ResolverContext): Promise<Project>;
13
- rootTasks(project: Project): Promise<Task[]>;
14
- mainPhoto(project: Project): Promise<string | Attachment>;
15
- scheduleTable(project: Project): Promise<Attachment | undefined>;
16
- completeReports(project: Project): Promise<Attachment[] | undefined>;
17
- buildingComplex(project: Project): Promise<BuildingComplex>;
18
- domain(project: Project): Promise<Domain>;
19
- updater(project: Project): Promise<User>;
20
- creator(project: Project): Promise<User>;
21
- projectType(project: Project): Promise<string>;
22
- kpi(project: Project): Promise<number>;
23
- }
@@ -1,215 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ProjectQuery = void 0;
4
- const tslib_1 = require("tslib");
5
- const type_graphql_1 = require("type-graphql");
6
- const typeorm_1 = require("typeorm");
7
- const shell_1 = require("@things-factory/shell");
8
- const auth_base_1 = require("@things-factory/auth-base");
9
- const project_1 = require("./project");
10
- const task_1 = require("../task/task");
11
- const project_type_1 = require("./project-type");
12
- const attachment_base_1 = require("@things-factory/attachment-base");
13
- const building_complex_1 = require("@dssp/building-complex");
14
- const env_1 = require("@things-factory/env");
15
- const kpi_1 = require("@things-factory/kpi");
16
- let ProjectQuery = class ProjectQuery {
17
- async project(id, context) {
18
- const { domain } = context.state;
19
- return await (0, shell_1.getRepository)(project_1.Project).findOne({
20
- where: { domain: { id: domain.id }, id }
21
- });
22
- }
23
- async projects(params, context) {
24
- const { domain } = context.state;
25
- const queryBuilder = (0, shell_1.getQueryBuilderFromListParams)({
26
- domain,
27
- params,
28
- repository: (0, shell_1.getRepository)(project_1.Project),
29
- alias: 'p',
30
- searchables: ['name', 'description', 'state']
31
- });
32
- const [items, total] = await queryBuilder.getManyAndCount();
33
- return { items, total };
34
- }
35
- async projectByBuildingComplexId(buildingComplexId, context) {
36
- const { domain } = context.state;
37
- return await (0, shell_1.getRepository)(project_1.Project).findOne({
38
- where: { domain: { id: domain.id }, buildingComplex: { id: buildingComplexId } }
39
- });
40
- }
41
- async projectByBuildingLevelId(buildingLevelId, context) {
42
- const queryBuilder = (0, shell_1.getRepository)(project_1.Project)
43
- .createQueryBuilder('p')
44
- .innerJoin('building_complexes', 'bc', 'p.building_complex_id = bc.id')
45
- .innerJoin('buildings', 'b', 'b.building_complex_id = bc.id')
46
- .innerJoin('building_levels', 'bl', 'bl.building_id = b.id')
47
- .where('bl.id = :buildingLevelId', { buildingLevelId });
48
- const result = await queryBuilder.getOne();
49
- return result;
50
- }
51
- async rootTasks(project) {
52
- return await (0, shell_1.getRepository)(task_1.Task).find({
53
- where: {
54
- project: { id: project.id },
55
- parent: (0, typeorm_1.IsNull)()
56
- }
57
- });
58
- }
59
- async mainPhoto(project) {
60
- const attachment = await (0, shell_1.getRepository)(attachment_base_1.Attachment).findOne({
61
- where: {
62
- domain: { id: project.domainId },
63
- refBy: project.id
64
- },
65
- order: { createdAt: 'ASC' }
66
- });
67
- return attachment;
68
- }
69
- async scheduleTable(project) {
70
- const attachment = await (0, shell_1.getRepository)(attachment_base_1.Attachment).findOne({
71
- where: {
72
- domain: { id: project.domainId },
73
- refBy: project.id,
74
- refType: project_1.Project.name + '_schedule_table'
75
- }
76
- });
77
- return attachment;
78
- }
79
- async completeReports(project) {
80
- const attachments = await (0, shell_1.getRepository)(attachment_base_1.Attachment).find({
81
- where: {
82
- refType: 'ProjectCompleteReport',
83
- refBy: project.id
84
- }
85
- });
86
- return attachments;
87
- }
88
- async buildingComplex(project) {
89
- return await (0, shell_1.getRepository)(building_complex_1.BuildingComplex).findOneBy({ id: project.buildingComplexId });
90
- }
91
- async domain(project) {
92
- return await (0, shell_1.getRepository)(shell_1.Domain).findOneBy({ id: project.domainId });
93
- }
94
- async updater(project) {
95
- return await (0, shell_1.getRepository)(auth_base_1.User).findOneBy({ id: project.updaterId });
96
- }
97
- async creator(project) {
98
- return await (0, shell_1.getRepository)(auth_base_1.User).findOneBy({ id: project.creatorId });
99
- }
100
- async projectType(project) {
101
- return env_1.config.get('projectType', project_1.ProjectType.DSSP);
102
- }
103
- async kpi(project) {
104
- const kpi = await (0, shell_1.getRepository)(kpi_1.Kpi).findOneBy({ domain: { id: project.domainId }, name: 'Z. 전체스코어' });
105
- const kpiValue = await (0, shell_1.getRepository)(kpi_1.KpiValue).findOneBy({ group: project.id, kpi: { id: kpi.id } });
106
- return kpiValue ? (kpiValue.value || 0) * 20 : project.kpi;
107
- }
108
- };
109
- exports.ProjectQuery = ProjectQuery;
110
- tslib_1.__decorate([
111
- (0, type_graphql_1.Query)(returns => project_1.Project, { nullable: true, description: 'To fetch a Project' }),
112
- tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
113
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
114
- tslib_1.__metadata("design:type", Function),
115
- tslib_1.__metadata("design:paramtypes", [String, Object]),
116
- tslib_1.__metadata("design:returntype", Promise)
117
- ], ProjectQuery.prototype, "project", null);
118
- tslib_1.__decorate([
119
- (0, type_graphql_1.Query)(returns => project_type_1.ProjectList, { description: '프로젝트 리스트' }),
120
- tslib_1.__param(0, (0, type_graphql_1.Args)()),
121
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
122
- tslib_1.__metadata("design:type", Function),
123
- tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
124
- tslib_1.__metadata("design:returntype", Promise)
125
- ], ProjectQuery.prototype, "projects", null);
126
- tslib_1.__decorate([
127
- (0, type_graphql_1.Query)(returns => project_1.Project, { nullable: true, description: 'To fetch a Project' }),
128
- tslib_1.__param(0, (0, type_graphql_1.Arg)('buildingComplexId')),
129
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
130
- tslib_1.__metadata("design:type", Function),
131
- tslib_1.__metadata("design:paramtypes", [String, Object]),
132
- tslib_1.__metadata("design:returntype", Promise)
133
- ], ProjectQuery.prototype, "projectByBuildingComplexId", null);
134
- tslib_1.__decorate([
135
- (0, type_graphql_1.Query)(returns => project_1.Project, { description: 'To fetch Project' }),
136
- tslib_1.__param(0, (0, type_graphql_1.Arg)('buildingLevelId')),
137
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
138
- tslib_1.__metadata("design:type", Function),
139
- tslib_1.__metadata("design:paramtypes", [String, Object]),
140
- tslib_1.__metadata("design:returntype", Promise)
141
- ], ProjectQuery.prototype, "projectByBuildingLevelId", null);
142
- tslib_1.__decorate([
143
- (0, type_graphql_1.FieldResolver)(type => [task_1.Task], { nullable: true }),
144
- tslib_1.__param(0, (0, type_graphql_1.Root)()),
145
- tslib_1.__metadata("design:type", Function),
146
- tslib_1.__metadata("design:paramtypes", [project_1.Project]),
147
- tslib_1.__metadata("design:returntype", Promise)
148
- ], ProjectQuery.prototype, "rootTasks", null);
149
- tslib_1.__decorate([
150
- (0, type_graphql_1.FieldResolver)(type => attachment_base_1.Attachment),
151
- tslib_1.__param(0, (0, type_graphql_1.Root)()),
152
- tslib_1.__metadata("design:type", Function),
153
- tslib_1.__metadata("design:paramtypes", [project_1.Project]),
154
- tslib_1.__metadata("design:returntype", Promise)
155
- ], ProjectQuery.prototype, "mainPhoto", null);
156
- tslib_1.__decorate([
157
- (0, type_graphql_1.FieldResolver)(type => attachment_base_1.Attachment),
158
- tslib_1.__param(0, (0, type_graphql_1.Root)()),
159
- tslib_1.__metadata("design:type", Function),
160
- tslib_1.__metadata("design:paramtypes", [project_1.Project]),
161
- tslib_1.__metadata("design:returntype", Promise)
162
- ], ProjectQuery.prototype, "scheduleTable", null);
163
- tslib_1.__decorate([
164
- (0, type_graphql_1.FieldResolver)(type => [attachment_base_1.Attachment]),
165
- tslib_1.__param(0, (0, type_graphql_1.Root)()),
166
- tslib_1.__metadata("design:type", Function),
167
- tslib_1.__metadata("design:paramtypes", [project_1.Project]),
168
- tslib_1.__metadata("design:returntype", Promise)
169
- ], ProjectQuery.prototype, "completeReports", null);
170
- tslib_1.__decorate([
171
- (0, type_graphql_1.FieldResolver)(type => building_complex_1.BuildingComplex),
172
- tslib_1.__param(0, (0, type_graphql_1.Root)()),
173
- tslib_1.__metadata("design:type", Function),
174
- tslib_1.__metadata("design:paramtypes", [project_1.Project]),
175
- tslib_1.__metadata("design:returntype", Promise)
176
- ], ProjectQuery.prototype, "buildingComplex", null);
177
- tslib_1.__decorate([
178
- (0, type_graphql_1.FieldResolver)(type => shell_1.Domain),
179
- tslib_1.__param(0, (0, type_graphql_1.Root)()),
180
- tslib_1.__metadata("design:type", Function),
181
- tslib_1.__metadata("design:paramtypes", [project_1.Project]),
182
- tslib_1.__metadata("design:returntype", Promise)
183
- ], ProjectQuery.prototype, "domain", null);
184
- tslib_1.__decorate([
185
- (0, type_graphql_1.FieldResolver)(type => auth_base_1.User),
186
- tslib_1.__param(0, (0, type_graphql_1.Root)()),
187
- tslib_1.__metadata("design:type", Function),
188
- tslib_1.__metadata("design:paramtypes", [project_1.Project]),
189
- tslib_1.__metadata("design:returntype", Promise)
190
- ], ProjectQuery.prototype, "updater", null);
191
- tslib_1.__decorate([
192
- (0, type_graphql_1.FieldResolver)(type => auth_base_1.User),
193
- tslib_1.__param(0, (0, type_graphql_1.Root)()),
194
- tslib_1.__metadata("design:type", Function),
195
- tslib_1.__metadata("design:paramtypes", [project_1.Project]),
196
- tslib_1.__metadata("design:returntype", Promise)
197
- ], ProjectQuery.prototype, "creator", null);
198
- tslib_1.__decorate([
199
- (0, type_graphql_1.FieldResolver)(type => String),
200
- tslib_1.__param(0, (0, type_graphql_1.Root)()),
201
- tslib_1.__metadata("design:type", Function),
202
- tslib_1.__metadata("design:paramtypes", [project_1.Project]),
203
- tslib_1.__metadata("design:returntype", Promise)
204
- ], ProjectQuery.prototype, "projectType", null);
205
- tslib_1.__decorate([
206
- (0, type_graphql_1.FieldResolver)(type => Number),
207
- tslib_1.__param(0, (0, type_graphql_1.Root)()),
208
- tslib_1.__metadata("design:type", Function),
209
- tslib_1.__metadata("design:paramtypes", [project_1.Project]),
210
- tslib_1.__metadata("design:returntype", Promise)
211
- ], ProjectQuery.prototype, "kpi", null);
212
- exports.ProjectQuery = ProjectQuery = tslib_1.__decorate([
213
- (0, type_graphql_1.Resolver)(project_1.Project)
214
- ], ProjectQuery);
215
- //# sourceMappingURL=project-query.js.map