@dssp/project 1.0.0-alpha.0 → 1.0.0-alpha.100

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 (330) hide show
  1. package/dist-client/index.d.ts +1 -0
  2. package/dist-client/index.js +1 -1
  3. package/dist-client/index.js.map +1 -1
  4. package/dist-client/pages/lib/chatbot-widget.d.ts +53 -0
  5. package/dist-client/pages/lib/chatbot-widget.js +631 -0
  6. package/dist-client/pages/lib/chatbot-widget.js.map +1 -0
  7. package/dist-client/pages/lib/select2-component.d.ts +1 -1
  8. package/dist-client/pages/lib/select2-component.js +36 -36
  9. package/dist-client/pages/lib/select2-component.js.map +1 -1
  10. package/dist-client/pages/lib/waether.d.ts +2 -1
  11. package/dist-client/pages/lib/waether.js +7 -3
  12. package/dist-client/pages/lib/waether.js.map +1 -1
  13. package/dist-client/pages/project/component/pagenation.d.ts +18 -0
  14. package/dist-client/pages/project/component/pagenation.js +142 -0
  15. package/dist-client/pages/project/component/pagenation.js.map +1 -0
  16. package/dist-client/pages/project/component/project-update-header.js +26 -3
  17. package/dist-client/pages/project/component/project-update-header.js.map +1 -1
  18. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.d.ts +1 -0
  19. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.js +308 -0
  20. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.js.map +1 -0
  21. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.d.ts +1 -0
  22. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.js +356 -0
  23. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.js.map +1 -0
  24. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.d.ts +1 -0
  25. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.js +682 -0
  26. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.js.map +1 -0
  27. package/dist-client/pages/project/popup/checklist/task-checklist-view.d.ts +33 -0
  28. package/dist-client/pages/project/popup/checklist/task-checklist-view.js +676 -0
  29. package/dist-client/pages/project/popup/checklist/task-checklist-view.js.map +1 -0
  30. package/dist-client/pages/project/popup/popup-plan-export.d.ts +10 -0
  31. package/dist-client/pages/project/popup/popup-plan-export.js +242 -0
  32. package/dist-client/pages/project/popup/popup-plan-export.js.map +1 -0
  33. package/dist-client/pages/project/popup/popup-plan-upload.d.ts +3 -0
  34. package/dist-client/pages/project/popup/popup-plan-upload.js +130 -4
  35. package/dist-client/pages/project/popup/popup-plan-upload.js.map +1 -1
  36. package/dist-client/pages/project/popup/popup-project-create.js.map +1 -1
  37. package/dist-client/pages/project/popup/{popup-schedule-upload.d.ts → popup-task-upload.d.ts} +1 -1
  38. package/dist-client/pages/project/popup/{popup-schedule-upload.js → popup-task-upload.js} +9 -9
  39. package/dist-client/pages/project/popup/popup-task-upload.js.map +1 -0
  40. package/dist-client/pages/project/project-completed-list.d.ts +5 -0
  41. package/dist-client/pages/project/project-completed-list.js +32 -4
  42. package/dist-client/pages/project/project-completed-list.js.map +1 -1
  43. package/dist-client/pages/project/project-detail.d.ts +8 -1
  44. package/dist-client/pages/project/project-detail.js +488 -163
  45. package/dist-client/pages/project/project-detail.js.map +1 -1
  46. package/dist-client/pages/project/project-list.d.ts +69 -0
  47. package/dist-client/pages/project/project-list.js +94 -16
  48. package/dist-client/pages/project/project-list.js.map +1 -1
  49. package/dist-client/pages/project/project-plan-management.js +35 -14
  50. package/dist-client/pages/project/project-plan-management.js.map +1 -1
  51. package/dist-client/pages/project/project-setting-list.d.ts +7 -0
  52. package/dist-client/pages/project/project-setting-list.js +82 -27
  53. package/dist-client/pages/project/project-setting-list.js.map +1 -1
  54. package/dist-client/pages/project/{project-schedule-list.d.ts → project-task-list.d.ts} +2 -2
  55. package/dist-client/pages/project/{project-schedule-list.js → project-task-list.js} +11 -11
  56. package/dist-client/pages/project/project-task-list.js.map +1 -0
  57. package/dist-client/pages/project/{project-schedule.d.ts → project-task.d.ts} +17 -4
  58. package/dist-client/pages/project/project-task.js +692 -0
  59. package/dist-client/pages/project/project-task.js.map +1 -0
  60. package/dist-client/pages/project/project-update.d.ts +35 -0
  61. package/dist-client/pages/project/project-update.js +633 -49
  62. package/dist-client/pages/project/project-update.js.map +1 -1
  63. package/dist-client/pages/resource/construction-detail-type-popup.js.map +1 -1
  64. package/dist-client/pages/resource/construction-type-management.js +14 -0
  65. package/dist-client/pages/resource/construction-type-management.js.map +1 -1
  66. package/dist-client/pages/resource/inspection-drawing-type-management.js.map +1 -1
  67. package/dist-client/pages/resource/inspection-part-popup.js.map +1 -1
  68. package/dist-client/pages/resource/resource-importer.js.map +1 -1
  69. package/dist-client/pages/resource/resource-list-page.d.ts +1 -2
  70. package/dist-client/pages/resource/resource-list-page.js +1 -2
  71. package/dist-client/pages/resource/resource-list-page.js.map +1 -1
  72. package/dist-client/pages/resource/worker-type-management.js.map +1 -1
  73. package/dist-client/pages/task/task-importer.js.map +1 -1
  74. package/dist-client/pages/task/task-list-page.d.ts +1 -2
  75. package/dist-client/pages/task/task-list-page.js +1 -2
  76. package/dist-client/pages/task/task-list-page.js.map +1 -1
  77. package/dist-client/pages/task-resource/task-resource-importer.js.map +1 -1
  78. package/dist-client/pages/task-resource/task-resource-list-page.d.ts +1 -2
  79. package/dist-client/pages/task-resource/task-resource-list-page.js +1 -2
  80. package/dist-client/pages/task-resource/task-resource-list-page.js.map +1 -1
  81. package/dist-client/route.d.ts +1 -1
  82. package/dist-client/route.js +4 -4
  83. package/dist-client/route.js.map +1 -1
  84. package/dist-client/shared/domain-context.d.ts +18 -0
  85. package/dist-client/shared/domain-context.js +28 -0
  86. package/dist-client/shared/domain-context.js.map +1 -0
  87. package/dist-client/tsconfig.tsbuildinfo +1 -1
  88. package/dist-client/viewparts/domain-switch.d.ts +19 -0
  89. package/dist-client/viewparts/domain-switch.js +274 -0
  90. package/dist-client/viewparts/domain-switch.js.map +1 -0
  91. package/dist-server/controllers/export-tasks.js +1 -2
  92. package/dist-server/controllers/export-tasks.js.map +1 -1
  93. package/dist-server/controllers/import-task.js +1 -2
  94. package/dist-server/controllers/import-task.js.map +1 -1
  95. package/dist-server/controllers/parse-excel.d.ts +0 -2
  96. package/dist-server/controllers/parse-excel.js +1 -2
  97. package/dist-server/controllers/parse-excel.js.map +1 -1
  98. package/dist-server/middlewares/index.js +1 -2
  99. package/dist-server/middlewares/index.js.map +1 -1
  100. package/dist-server/migrations/1723861466413-seed-roles.js.map +1 -1
  101. package/dist-server/migrations/1723861466414-seed-codes.js +1 -1
  102. package/dist-server/migrations/1723861466414-seed-codes.js.map +1 -1
  103. package/dist-server/migrations/1723861476419-seed-resources.js.map +1 -1
  104. package/dist-server/migrations/1723861478420-seed-/bsample-project.js.map +1 -1
  105. package/dist-server/migrations/1723861478421-seed-/bsample-tasks.js.map +1 -1
  106. package/dist-server/service/construction-detail-type/construction-detail-type-mutation.js +2 -2
  107. package/dist-server/service/construction-detail-type/construction-detail-type-mutation.js.map +1 -1
  108. package/dist-server/service/construction-detail-type/construction-detail-type-query.js +2 -2
  109. package/dist-server/service/construction-detail-type/construction-detail-type-query.js.map +1 -1
  110. package/dist-server/service/construction-detail-type/construction-detail-type-type.js +4 -4
  111. package/dist-server/service/construction-detail-type/construction-detail-type-type.js.map +1 -1
  112. package/dist-server/service/construction-detail-type/construction-detail-type.js +2 -2
  113. package/dist-server/service/construction-detail-type/construction-detail-type.js.map +1 -1
  114. package/dist-server/service/construction-type/construction-type-mutation.js +2 -2
  115. package/dist-server/service/construction-type/construction-type-mutation.js.map +1 -1
  116. package/dist-server/service/construction-type/construction-type-query.d.ts +2 -2
  117. package/dist-server/service/construction-type/construction-type-query.js +7 -12
  118. package/dist-server/service/construction-type/construction-type-query.js.map +1 -1
  119. package/dist-server/service/construction-type/construction-type-type.d.ts +1 -0
  120. package/dist-server/service/construction-type/construction-type-type.js +8 -4
  121. package/dist-server/service/construction-type/construction-type-type.js.map +1 -1
  122. package/dist-server/service/construction-type/construction-type.d.ts +1 -0
  123. package/dist-server/service/construction-type/construction-type.js +7 -2
  124. package/dist-server/service/construction-type/construction-type.js.map +1 -1
  125. package/dist-server/service/index.d.ts +3 -2
  126. package/dist-server/service/index.js +6 -2
  127. package/dist-server/service/index.js.map +1 -1
  128. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-mutation.js +2 -2
  129. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-mutation.js.map +1 -1
  130. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.d.ts +2 -2
  131. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.js +7 -12
  132. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.js.map +1 -1
  133. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-type.js +4 -4
  134. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-type.js.map +1 -1
  135. package/dist-server/service/inspection-drawing-type/inspection-drawing-type.js +2 -2
  136. package/dist-server/service/inspection-drawing-type/inspection-drawing-type.js.map +1 -1
  137. package/dist-server/service/inspection-part/inspection-part-mutation.js +2 -2
  138. package/dist-server/service/inspection-part/inspection-part-mutation.js.map +1 -1
  139. package/dist-server/service/inspection-part/inspection-part-query.js +2 -2
  140. package/dist-server/service/inspection-part/inspection-part-query.js.map +1 -1
  141. package/dist-server/service/inspection-part/inspection-part-type.js +4 -4
  142. package/dist-server/service/inspection-part/inspection-part-type.js.map +1 -1
  143. package/dist-server/service/inspection-part/inspection-part.js +2 -2
  144. package/dist-server/service/inspection-part/inspection-part.js.map +1 -1
  145. package/dist-server/service/manager/index.d.ts +2 -0
  146. package/dist-server/service/manager/index.js +3 -1
  147. package/dist-server/service/manager/index.js.map +1 -1
  148. package/dist-server/service/manager/manager-mutation.js +2 -2
  149. package/dist-server/service/manager/manager-mutation.js.map +1 -1
  150. package/dist-server/service/manager/manager-query.d.ts +1 -1
  151. package/dist-server/service/manager/manager-query.js +5 -9
  152. package/dist-server/service/manager/manager-query.js.map +1 -1
  153. package/dist-server/service/manager/manager-type.js +4 -4
  154. package/dist-server/service/manager/manager-type.js.map +1 -1
  155. package/dist-server/service/manager/manager.js +2 -2
  156. package/dist-server/service/manager/manager.js.map +1 -1
  157. package/dist-server/service/project/issue-project-code.d.ts +7 -0
  158. package/dist-server/service/project/issue-project-code.js +27 -0
  159. package/dist-server/service/project/issue-project-code.js.map +1 -0
  160. package/dist-server/service/project/project-mutation.d.ts +3 -0
  161. package/dist-server/service/project/project-mutation.js +231 -24
  162. package/dist-server/service/project/project-mutation.js.map +1 -1
  163. package/dist-server/service/project/project-query.d.ts +14 -2
  164. package/dist-server/service/project/project-query.js +167 -16
  165. package/dist-server/service/project/project-query.js.map +1 -1
  166. package/dist-server/service/project/project-type.d.ts +14 -2
  167. package/dist-server/service/project/project-type.js +57 -11
  168. package/dist-server/service/project/project-type.js.map +1 -1
  169. package/dist-server/service/project/project.d.ts +29 -0
  170. package/dist-server/service/project/project.js +103 -5
  171. package/dist-server/service/project/project.js.map +1 -1
  172. package/dist-server/service/resource/resource-mutation.js +7 -8
  173. package/dist-server/service/resource/resource-mutation.js.map +1 -1
  174. package/dist-server/service/resource/resource-query.d.ts +2 -2
  175. package/dist-server/service/resource/resource-query.js +7 -12
  176. package/dist-server/service/resource/resource-query.js.map +1 -1
  177. package/dist-server/service/resource/resource-type.js +6 -6
  178. package/dist-server/service/resource/resource-type.js.map +1 -1
  179. package/dist-server/service/resource/resource.js +3 -3
  180. package/dist-server/service/resource/resource.js.map +1 -1
  181. package/dist-server/service/task/task-mutation.js +2 -2
  182. package/dist-server/service/task/task-mutation.js.map +1 -1
  183. package/dist-server/service/task/task-query.d.ts +2 -0
  184. package/dist-server/service/task/task-query.js +15 -4
  185. package/dist-server/service/task/task-query.js.map +1 -1
  186. package/dist-server/service/task/task-type.js +10 -10
  187. package/dist-server/service/task/task-type.js.map +1 -1
  188. package/dist-server/service/task/task.d.ts +2 -0
  189. package/dist-server/service/task/task.js +13 -8
  190. package/dist-server/service/task/task.js.map +1 -1
  191. package/dist-server/service/task-checklist-binding/index.d.ts +5 -0
  192. package/dist-server/service/task-checklist-binding/index.js +9 -0
  193. package/dist-server/service/task-checklist-binding/index.js.map +1 -0
  194. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.d.ts +5 -0
  195. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.js +188 -0
  196. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.js.map +1 -0
  197. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.d.ts +8 -0
  198. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.js +61 -0
  199. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.js.map +1 -0
  200. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.d.ts +15 -0
  201. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.js +57 -0
  202. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.js.map +1 -0
  203. package/dist-server/service/task-checklist-binding/task-checklist-binding.d.ts +22 -0
  204. package/dist-server/service/task-checklist-binding/task-checklist-binding.js +106 -0
  205. package/dist-server/service/task-checklist-binding/task-checklist-binding.js.map +1 -0
  206. package/dist-server/service/task-resource/task-resource-mutation.js +2 -2
  207. package/dist-server/service/task-resource/task-resource-mutation.js.map +1 -1
  208. package/dist-server/service/task-resource/task-resource-query.d.ts +2 -2
  209. package/dist-server/service/task-resource/task-resource-query.js +6 -11
  210. package/dist-server/service/task-resource/task-resource-query.js.map +1 -1
  211. package/dist-server/service/task-resource/task-resource-type.js +6 -6
  212. package/dist-server/service/task-resource/task-resource-type.js.map +1 -1
  213. package/dist-server/service/task-resource/task-resource.js +2 -2
  214. package/dist-server/service/task-resource/task-resource.js.map +1 -1
  215. package/dist-server/service/worker-type/worker-type-mutation.js +2 -2
  216. package/dist-server/service/worker-type/worker-type-mutation.js.map +1 -1
  217. package/dist-server/service/worker-type/worker-type-query.d.ts +2 -2
  218. package/dist-server/service/worker-type/worker-type-query.js +7 -12
  219. package/dist-server/service/worker-type/worker-type-query.js.map +1 -1
  220. package/dist-server/service/worker-type/worker-type-type.js +4 -4
  221. package/dist-server/service/worker-type/worker-type-type.js.map +1 -1
  222. package/dist-server/service/worker-type/worker-type.js +2 -2
  223. package/dist-server/service/worker-type/worker-type.js.map +1 -1
  224. package/dist-server/tsconfig.tsbuildinfo +1 -1
  225. package/package.json +15 -11
  226. package/things-factory.config.js +3 -3
  227. package/translations/en.json +10 -9
  228. package/translations/ja.json +15 -1
  229. package/translations/ko.json +3 -0
  230. package/translations/ms.json +15 -1
  231. package/translations/zh.json +15 -1
  232. package/client/bootstrap.ts +0 -0
  233. package/client/index.ts +0 -0
  234. package/client/pages/lib/select2-component.ts +0 -175
  235. package/client/pages/lib/waether.ts +0 -159
  236. package/client/pages/project/component/project-update-header.ts +0 -88
  237. package/client/pages/project/popup/popup-plan-upload.ts +0 -138
  238. package/client/pages/project/popup/popup-project-create.ts +0 -147
  239. package/client/pages/project/popup/popup-schedule-upload.ts +0 -102
  240. package/client/pages/project/project-completed-list.ts +0 -281
  241. package/client/pages/project/project-detail.ts +0 -738
  242. package/client/pages/project/project-list.ts +0 -418
  243. package/client/pages/project/project-plan-management.ts +0 -476
  244. package/client/pages/project/project-schedule-list.ts +0 -294
  245. package/client/pages/project/project-schedule.ts +0 -393
  246. package/client/pages/project/project-setting-list.ts +0 -393
  247. package/client/pages/project/project-update.ts +0 -876
  248. package/client/pages/resource/construction-detail-type-popup.ts +0 -201
  249. package/client/pages/resource/construction-type-management.ts +0 -212
  250. package/client/pages/resource/inspection-drawing-type-management.ts +0 -245
  251. package/client/pages/resource/inspection-part-popup.ts +0 -201
  252. package/client/pages/resource/resource-importer.ts +0 -97
  253. package/client/pages/resource/resource-list-page.ts +0 -356
  254. package/client/pages/resource/worker-type-management.ts +0 -192
  255. package/client/pages/task/task-importer.ts +0 -94
  256. package/client/pages/task/task-list-page.ts +0 -340
  257. package/client/pages/task-resource/task-resource-importer.ts +0 -97
  258. package/client/pages/task-resource/task-resource-list-page.ts +0 -356
  259. package/client/route.ts +0 -55
  260. package/client/tsconfig.json +0 -11
  261. package/dist-client/pages/project/popup/popup-schedule-upload.js.map +0 -1
  262. package/dist-client/pages/project/project-schedule-list.js.map +0 -1
  263. package/dist-client/pages/project/project-schedule.js +0 -407
  264. package/dist-client/pages/project/project-schedule.js.map +0 -1
  265. package/server/controllers/export-tasks.ts +0 -40
  266. package/server/controllers/import-task.ts +0 -134
  267. package/server/controllers/index.ts +0 -0
  268. package/server/controllers/parse-excel.ts +0 -86
  269. package/server/controllers/types.ts +0 -20
  270. package/server/index.ts +0 -4
  271. package/server/middlewares/index.ts +0 -3
  272. package/server/migrations/1723861466413-seed-roles.ts +0 -128
  273. package/server/migrations/1723861466414-seed-codes.ts +0 -157
  274. package/server/migrations/1723861476419-seed-resources.ts +0 -62
  275. package/server/migrations/1723861478420-seed-/bsample-project.ts +0 -87
  276. package/server/migrations/1723861478421-seed-/bsample-tasks.ts +0 -194
  277. package/server/migrations/index.ts +0 -9
  278. package/server/routes.ts +0 -108
  279. package/server/service/construction-detail-type/construction-detail-type-mutation.ts +0 -57
  280. package/server/service/construction-detail-type/construction-detail-type-query.ts +0 -31
  281. package/server/service/construction-detail-type/construction-detail-type-type.ts +0 -26
  282. package/server/service/construction-detail-type/construction-detail-type.ts +0 -52
  283. package/server/service/construction-detail-type/index.ts +0 -6
  284. package/server/service/construction-type/construction-type-mutation.ts +0 -66
  285. package/server/service/construction-type/construction-type-query.ts +0 -56
  286. package/server/service/construction-type/construction-type-type.ts +0 -26
  287. package/server/service/construction-type/construction-type.ts +0 -74
  288. package/server/service/construction-type/index.ts +0 -6
  289. package/server/service/index.ts +0 -56
  290. package/server/service/inspection-drawing-type/index.ts +0 -6
  291. package/server/service/inspection-drawing-type/inspection-drawing-type-mutation.ts +0 -69
  292. package/server/service/inspection-drawing-type/inspection-drawing-type-query.ts +0 -55
  293. package/server/service/inspection-drawing-type/inspection-drawing-type-type.ts +0 -23
  294. package/server/service/inspection-drawing-type/inspection-drawing-type.ts +0 -68
  295. package/server/service/inspection-part/index.ts +0 -6
  296. package/server/service/inspection-part/inspection-part-mutation.ts +0 -52
  297. package/server/service/inspection-part/inspection-part-query.ts +0 -41
  298. package/server/service/inspection-part/inspection-part-type.ts +0 -26
  299. package/server/service/inspection-part/inspection-part.ts +0 -51
  300. package/server/service/manager/index.ts +0 -6
  301. package/server/service/manager/manager-mutation.ts +0 -42
  302. package/server/service/manager/manager-query.ts +0 -28
  303. package/server/service/manager/manager-type.ts +0 -40
  304. package/server/service/manager/manager.ts +0 -29
  305. package/server/service/project/index.ts +0 -6
  306. package/server/service/project/project-mutation.ts +0 -255
  307. package/server/service/project/project-query.ts +0 -105
  308. package/server/service/project/project-type.ts +0 -72
  309. package/server/service/project/project.ts +0 -134
  310. package/server/service/resource/index.ts +0 -7
  311. package/server/service/resource/resource-mutation.ts +0 -137
  312. package/server/service/resource/resource-query.ts +0 -50
  313. package/server/service/resource/resource-type.ts +0 -41
  314. package/server/service/resource/resource.ts +0 -82
  315. package/server/service/task/index.ts +0 -6
  316. package/server/service/task/task-mutation.ts +0 -135
  317. package/server/service/task/task-query.ts +0 -169
  318. package/server/service/task/task-type.ts +0 -75
  319. package/server/service/task/task.ts +0 -130
  320. package/server/service/task-resource/index.ts +0 -7
  321. package/server/service/task-resource/task-resource-mutation.ts +0 -140
  322. package/server/service/task-resource/task-resource-query.ts +0 -36
  323. package/server/service/task-resource/task-resource-type.ts +0 -41
  324. package/server/service/task-resource/task-resource.ts +0 -51
  325. package/server/service/worker-type/index.ts +0 -6
  326. package/server/service/worker-type/worker-type-mutation.ts +0 -66
  327. package/server/service/worker-type/worker-type-query.ts +0 -47
  328. package/server/service/worker-type/worker-type-type.ts +0 -26
  329. package/server/service/worker-type/worker-type.ts +0 -68
  330. package/server/tsconfig.json +0 -10
@@ -0,0 +1,19 @@
1
+ import '@material/web/icon/icon.js';
2
+ import { LitElement } from 'lit';
3
+ declare const DsspDomainSwitch_base: (new (...args: any[]) => LitElement) & typeof LitElement;
4
+ export declare class DsspDomainSwitch extends DsspDomainSwitch_base {
5
+ static styles: import("lit").CSSResult[];
6
+ private _appCtrl;
7
+ attrname: string;
8
+ icon: string;
9
+ private _open;
10
+ private _outsideClickHandler;
11
+ private _escHandler;
12
+ connectedCallback(): void;
13
+ disconnectedCallback(): void;
14
+ render(): import("lit-html").TemplateResult<1>;
15
+ private _renderCategory;
16
+ private _select;
17
+ private _groupAndOrder;
18
+ }
19
+ export {};
@@ -0,0 +1,274 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import '@material/web/icon/icon.js';
3
+ import { css, html, LitElement, nothing } from 'lit';
4
+ import { customElement, property, state } from 'lit/decorators.js';
5
+ import { AppController } from '@operato/shell';
6
+ import { ScrollbarStyles } from '@operato/styles';
7
+ import { i18next, localize } from '@operato/i18n';
8
+ const CATEGORY_ICON = {
9
+ domain: 'business',
10
+ project: 'assignment',
11
+ company: 'corporate_fare',
12
+ equipment: 'precision_manufacturing'
13
+ };
14
+ const CATEGORY_FALLBACK_ICON = 'folder';
15
+ const CATEGORY_ORDER = ['project', 'domain', 'company', 'equipment'];
16
+ let DsspDomainSwitch = class DsspDomainSwitch extends localize(i18next)(LitElement) {
17
+ constructor() {
18
+ super(...arguments);
19
+ this._appCtrl = new AppController(this);
20
+ this.attrname = 'name';
21
+ this.icon = 'domain';
22
+ this._open = false;
23
+ this._outsideClickHandler = (e) => {
24
+ if (!this._open)
25
+ return;
26
+ const path = e.composedPath();
27
+ if (!path.includes(this)) {
28
+ this._open = false;
29
+ }
30
+ };
31
+ this._escHandler = (e) => {
32
+ if (e.key === 'Escape')
33
+ this._open = false;
34
+ };
35
+ }
36
+ connectedCallback() {
37
+ super.connectedCallback();
38
+ document.addEventListener('click', this._outsideClickHandler, true);
39
+ document.addEventListener('keydown', this._escHandler);
40
+ }
41
+ disconnectedCallback() {
42
+ document.removeEventListener('click', this._outsideClickHandler, true);
43
+ document.removeEventListener('keydown', this._escHandler);
44
+ super.disconnectedCallback();
45
+ }
46
+ render() {
47
+ var _a;
48
+ const domains = this._appCtrl.domains || [];
49
+ const current = this._appCtrl.domain || {};
50
+ const attrname = this.attrname || 'name';
51
+ const currentLabel = current[attrname] || current.name || '';
52
+ if (domains.length <= 1) {
53
+ return html `
54
+ <button class="trigger" disabled>
55
+ ${this.icon ? html `<md-icon class="lead">${this.icon}</md-icon>` : nothing}
56
+ <span class="current-label">${((_a = domains[0]) === null || _a === void 0 ? void 0 : _a[attrname]) || currentLabel}</span>
57
+ </button>
58
+ `;
59
+ }
60
+ const ordered = this._groupAndOrder(domains);
61
+ return html `
62
+ <button
63
+ class="trigger"
64
+ @click=${(e) => {
65
+ e.stopPropagation();
66
+ this._open = !this._open;
67
+ }}
68
+ aria-haspopup="listbox"
69
+ aria-expanded=${this._open ? 'true' : 'false'}
70
+ >
71
+ ${this.icon ? html `<md-icon class="lead">${this.icon}</md-icon>` : nothing}
72
+ <span class="current-label">${currentLabel}</span>
73
+ <md-icon>${this._open ? 'expand_less' : 'expand_more'}</md-icon>
74
+ </button>
75
+ ${this._open
76
+ ? html `
77
+ <div class="panel" role="listbox">
78
+ ${ordered.map(([category, items]) => this._renderCategory(category, items, current, attrname))}
79
+ </div>
80
+ `
81
+ : nothing}
82
+ `;
83
+ }
84
+ _renderCategory(category, items, current, attrname) {
85
+ return html `
86
+ <section>
87
+ <header class="category-header">
88
+ <md-icon>${CATEGORY_ICON[category] || CATEGORY_FALLBACK_ICON}</md-icon>
89
+ <span>${i18next.t(`label.domain_type.${category}`, { defaultValue: category })}</span>
90
+ <span class="count">${items.length}</span>
91
+ </header>
92
+ <ul class="domains">
93
+ ${items.map(d => html `
94
+ <li
95
+ ?selected=${d.subdomain === current.subdomain}
96
+ role="option"
97
+ aria-selected=${d.subdomain === current.subdomain ? 'true' : 'false'}
98
+ title=${d.description ? `${d.name}\n${d.description}` : d.name || ''}
99
+ @click=${() => this._select(d)}
100
+ >
101
+ <strong>${d[attrname] || d.name}</strong>
102
+ ${attrname !== 'subdomain' && d.subdomain
103
+ ? html `<span class="sub">${d.subdomain}</span>`
104
+ : nothing}
105
+ </li>
106
+ `)}
107
+ </ul>
108
+ </section>
109
+ `;
110
+ }
111
+ _select(d) {
112
+ if (!(d === null || d === void 0 ? void 0 : d.subdomain))
113
+ return;
114
+ window.location.pathname = `/auth/checkin/${d.subdomain}`;
115
+ }
116
+ _groupAndOrder(domains) {
117
+ var _a;
118
+ const groups = {};
119
+ for (const d of domains) {
120
+ const cat = d.extType || 'domain';
121
+ (groups[cat] || (groups[cat] = [])).push(d);
122
+ }
123
+ // 카테고리 안 등록번호 (subdomain) 역순.
124
+ for (const items of Object.values(groups)) {
125
+ items.sort((a, b) => (b.subdomain || '').localeCompare(a.subdomain || ''));
126
+ }
127
+ const ordered = [];
128
+ const seen = new Set();
129
+ for (const cat of CATEGORY_ORDER) {
130
+ if ((_a = groups[cat]) === null || _a === void 0 ? void 0 : _a.length) {
131
+ ordered.push([cat, groups[cat]]);
132
+ seen.add(cat);
133
+ }
134
+ }
135
+ for (const [cat, items] of Object.entries(groups)) {
136
+ if (!seen.has(cat))
137
+ ordered.push([cat, items]);
138
+ }
139
+ return ordered;
140
+ }
141
+ };
142
+ DsspDomainSwitch.styles = [
143
+ ScrollbarStyles,
144
+ css `
145
+ :host {
146
+ /* content 폭으로 — 헤더바 전체를 채우지 않도록 (inline-flex + fit-content) */
147
+ display: inline-flex;
148
+ width: fit-content;
149
+ position: relative;
150
+ max-width: 100%;
151
+ background-color: var(--md-sys-color-primary-container, rgb(215 231 241));
152
+ border-bottom: var(--border-dim-color);
153
+ }
154
+
155
+ :host * {
156
+ vertical-align: middle;
157
+ }
158
+
159
+ button.trigger {
160
+ display: flex;
161
+ align-items: center;
162
+ gap: var(--spacing-small);
163
+ padding: var(--spacing-small);
164
+ background: transparent;
165
+ border: 0;
166
+ cursor: pointer;
167
+ color: var(--md-sys-color-on-primary-container, rgb(50 66 82));
168
+ font: bold 14px/20px var(--theme-font);
169
+ text-align: left;
170
+ }
171
+
172
+ button.trigger > md-icon.lead {
173
+ background-color: var(--md-sys-color-primary, rgb(46 121 190));
174
+ padding: 2px;
175
+ border-radius: 50%;
176
+ font-size: var(--fontsize-large);
177
+ color: var(--md-sys-color-on-primary, rgba(255, 255, 255, 0.9));
178
+ }
179
+
180
+ .current-label {
181
+ /* 이름 전체가 보이도록 content 폭 (말줄임 없음). 헤더바를 넘길 때만 :host max-width 로 잘림 */
182
+ overflow: hidden;
183
+ text-overflow: ellipsis;
184
+ white-space: nowrap;
185
+ }
186
+
187
+ .panel {
188
+ position: absolute;
189
+ top: 100%;
190
+ left: 0;
191
+ /* 아이템(최장 이름) 길이에 맞춘 content 폭. 줄바꿈 없이 다 보이도록 캡을 넉넉히,
192
+ 화면을 넘지 않을 정도(90vw)로만 상한. */
193
+ width: max-content;
194
+ min-width: 280px;
195
+ max-width: 90vw;
196
+ max-height: 60vh;
197
+ overflow: auto;
198
+ background: var(--md-sys-color-surface, #fff);
199
+ border: var(--border-dim-color);
200
+ border-radius: 0 0 var(--border-radius-default, 4px) var(--border-radius-default, 4px);
201
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
202
+ z-index: 10;
203
+ padding: var(--spacing-small) 0;
204
+ }
205
+
206
+ .category-header {
207
+ display: flex;
208
+ align-items: center;
209
+ gap: var(--spacing-small);
210
+ padding: var(--spacing-small) var(--spacing-medium);
211
+ background: var(--md-sys-color-surface-variant, #f3f4f6);
212
+ font: bold 12px/16px var(--theme-font);
213
+ color: var(--md-sys-color-on-surface-variant, #555);
214
+ text-transform: uppercase;
215
+ letter-spacing: 0.04em;
216
+ }
217
+
218
+ .category-header md-icon {
219
+ font-size: 16px;
220
+ color: var(--md-sys-color-primary, #2e79be);
221
+ }
222
+
223
+ .category-header .count {
224
+ margin-left: auto;
225
+ font-weight: normal;
226
+ color: var(--md-sys-color-on-surface-variant, #777);
227
+ }
228
+
229
+ ul.domains {
230
+ list-style: none;
231
+ margin: 0;
232
+ padding: 0;
233
+ }
234
+
235
+ ul.domains li {
236
+ padding: var(--spacing-small) var(--spacing-medium);
237
+ cursor: pointer;
238
+ color: var(--md-sys-color-on-surface, #222);
239
+ font: normal 13px/18px var(--theme-font);
240
+ }
241
+
242
+ ul.domains li[selected] {
243
+ background: var(--md-sys-color-primary-container, #d7e7f1);
244
+ font-weight: bold;
245
+ }
246
+
247
+ ul.domains li:hover {
248
+ background: var(--md-sys-color-secondary-container, #eef3fa);
249
+ }
250
+
251
+ ul.domains li .sub {
252
+ display: block;
253
+ font-size: 11px;
254
+ color: var(--md-sys-color-on-surface-variant, #888);
255
+ }
256
+ `
257
+ ];
258
+ __decorate([
259
+ property({ type: String, attribute: true }),
260
+ __metadata("design:type", String)
261
+ ], DsspDomainSwitch.prototype, "attrname", void 0);
262
+ __decorate([
263
+ property({ type: String, attribute: true }),
264
+ __metadata("design:type", String)
265
+ ], DsspDomainSwitch.prototype, "icon", void 0);
266
+ __decorate([
267
+ state(),
268
+ __metadata("design:type", Object)
269
+ ], DsspDomainSwitch.prototype, "_open", void 0);
270
+ DsspDomainSwitch = __decorate([
271
+ customElement('dssp-domain-switch')
272
+ ], DsspDomainSwitch);
273
+ export { DsspDomainSwitch };
274
+ //# sourceMappingURL=domain-switch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-switch.js","sourceRoot":"","sources":["../../client/viewparts/domain-switch.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\n\nimport { css, html, LitElement, nothing } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { AppController } from '@operato/shell'\nimport { ScrollbarStyles } from '@operato/styles'\nimport { i18next, localize } from '@operato/i18n'\n\nconst CATEGORY_ICON: Record<string, string> = {\n domain: 'business',\n project: 'assignment',\n company: 'corporate_fare',\n equipment: 'precision_manufacturing'\n}\n\nconst CATEGORY_FALLBACK_ICON = 'folder'\n\nconst CATEGORY_ORDER = ['project', 'domain', 'company', 'equipment']\n\n@customElement('dssp-domain-switch')\nexport class DsspDomainSwitch extends localize(i18next)(LitElement) {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n /* content 폭으로 — 헤더바 전체를 채우지 않도록 (inline-flex + fit-content) */\n display: inline-flex;\n width: fit-content;\n position: relative;\n max-width: 100%;\n background-color: var(--md-sys-color-primary-container, rgb(215 231 241));\n border-bottom: var(--border-dim-color);\n }\n\n :host * {\n vertical-align: middle;\n }\n\n button.trigger {\n display: flex;\n align-items: center;\n gap: var(--spacing-small);\n padding: var(--spacing-small);\n background: transparent;\n border: 0;\n cursor: pointer;\n color: var(--md-sys-color-on-primary-container, rgb(50 66 82));\n font: bold 14px/20px var(--theme-font);\n text-align: left;\n }\n\n button.trigger > md-icon.lead {\n background-color: var(--md-sys-color-primary, rgb(46 121 190));\n padding: 2px;\n border-radius: 50%;\n font-size: var(--fontsize-large);\n color: var(--md-sys-color-on-primary, rgba(255, 255, 255, 0.9));\n }\n\n .current-label {\n /* 이름 전체가 보이도록 content 폭 (말줄임 없음). 헤더바를 넘길 때만 :host max-width 로 잘림 */\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .panel {\n position: absolute;\n top: 100%;\n left: 0;\n /* 아이템(최장 이름) 길이에 맞춘 content 폭. 줄바꿈 없이 다 보이도록 캡을 넉넉히,\n 화면을 넘지 않을 정도(90vw)로만 상한. */\n width: max-content;\n min-width: 280px;\n max-width: 90vw;\n max-height: 60vh;\n overflow: auto;\n background: var(--md-sys-color-surface, #fff);\n border: var(--border-dim-color);\n border-radius: 0 0 var(--border-radius-default, 4px) var(--border-radius-default, 4px);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n z-index: 10;\n padding: var(--spacing-small) 0;\n }\n\n .category-header {\n display: flex;\n align-items: center;\n gap: var(--spacing-small);\n padding: var(--spacing-small) var(--spacing-medium);\n background: var(--md-sys-color-surface-variant, #f3f4f6);\n font: bold 12px/16px var(--theme-font);\n color: var(--md-sys-color-on-surface-variant, #555);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n }\n\n .category-header md-icon {\n font-size: 16px;\n color: var(--md-sys-color-primary, #2e79be);\n }\n\n .category-header .count {\n margin-left: auto;\n font-weight: normal;\n color: var(--md-sys-color-on-surface-variant, #777);\n }\n\n ul.domains {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n ul.domains li {\n padding: var(--spacing-small) var(--spacing-medium);\n cursor: pointer;\n color: var(--md-sys-color-on-surface, #222);\n font: normal 13px/18px var(--theme-font);\n }\n\n ul.domains li[selected] {\n background: var(--md-sys-color-primary-container, #d7e7f1);\n font-weight: bold;\n }\n\n ul.domains li:hover {\n background: var(--md-sys-color-secondary-container, #eef3fa);\n }\n\n ul.domains li .sub {\n display: block;\n font-size: 11px;\n color: var(--md-sys-color-on-surface-variant, #888);\n }\n `\n ]\n\n private _appCtrl = new AppController(this)\n\n @property({ type: String, attribute: true }) attrname: string = 'name'\n @property({ type: String, attribute: true }) icon: string = 'domain'\n\n @state() private _open = false\n\n private _outsideClickHandler = (e: MouseEvent) => {\n if (!this._open) return\n const path = e.composedPath()\n if (!path.includes(this)) {\n this._open = false\n }\n }\n\n private _escHandler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') this._open = false\n }\n\n connectedCallback() {\n super.connectedCallback()\n document.addEventListener('click', this._outsideClickHandler, true)\n document.addEventListener('keydown', this._escHandler)\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this._outsideClickHandler, true)\n document.removeEventListener('keydown', this._escHandler)\n super.disconnectedCallback()\n }\n\n render() {\n const domains: any[] = (this._appCtrl.domains as any[]) || []\n const current: any = (this._appCtrl.domain as any) || {}\n const attrname = this.attrname || 'name'\n const currentLabel = current[attrname] || current.name || ''\n\n if (domains.length <= 1) {\n return html`\n <button class=\"trigger\" disabled>\n ${this.icon ? html`<md-icon class=\"lead\">${this.icon}</md-icon>` : nothing}\n <span class=\"current-label\">${(domains[0] as any)?.[attrname] || currentLabel}</span>\n </button>\n `\n }\n\n const ordered = this._groupAndOrder(domains)\n\n return html`\n <button\n class=\"trigger\"\n @click=${(e: Event) => {\n e.stopPropagation()\n this._open = !this._open\n }}\n aria-haspopup=\"listbox\"\n aria-expanded=${this._open ? 'true' : 'false'}\n >\n ${this.icon ? html`<md-icon class=\"lead\">${this.icon}</md-icon>` : nothing}\n <span class=\"current-label\">${currentLabel}</span>\n <md-icon>${this._open ? 'expand_less' : 'expand_more'}</md-icon>\n </button>\n ${this._open\n ? html`\n <div class=\"panel\" role=\"listbox\">\n ${ordered.map(([category, items]) => this._renderCategory(category, items, current, attrname))}\n </div>\n `\n : nothing}\n `\n }\n\n private _renderCategory(category: string, items: any[], current: any, attrname: string) {\n return html`\n <section>\n <header class=\"category-header\">\n <md-icon>${CATEGORY_ICON[category] || CATEGORY_FALLBACK_ICON}</md-icon>\n <span>${i18next.t(`label.domain_type.${category}`, { defaultValue: category })}</span>\n <span class=\"count\">${items.length}</span>\n </header>\n <ul class=\"domains\">\n ${items.map(\n d => html`\n <li\n ?selected=${d.subdomain === current.subdomain}\n role=\"option\"\n aria-selected=${d.subdomain === current.subdomain ? 'true' : 'false'}\n title=${d.description ? `${d.name}\\n${d.description}` : d.name || ''}\n @click=${() => this._select(d)}\n >\n <strong>${d[attrname] || d.name}</strong>\n ${attrname !== 'subdomain' && d.subdomain\n ? html`<span class=\"sub\">${d.subdomain}</span>`\n : nothing}\n </li>\n `\n )}\n </ul>\n </section>\n `\n }\n\n private _select(d: any) {\n if (!d?.subdomain) return\n window.location.pathname = `/auth/checkin/${d.subdomain}`\n }\n\n private _groupAndOrder(domains: any[]): [string, any[]][] {\n const groups: Record<string, any[]> = {}\n for (const d of domains) {\n const cat = d.extType || 'domain'\n ;(groups[cat] ||= []).push(d)\n }\n\n // 카테고리 안 등록번호 (subdomain) 역순.\n for (const items of Object.values(groups)) {\n items.sort((a, b) => (b.subdomain || '').localeCompare(a.subdomain || ''))\n }\n\n const ordered: [string, any[]][] = []\n const seen = new Set<string>()\n for (const cat of CATEGORY_ORDER) {\n if (groups[cat]?.length) {\n ordered.push([cat, groups[cat]])\n seen.add(cat)\n }\n }\n for (const [cat, items] of Object.entries(groups)) {\n if (!seen.has(cat)) ordered.push([cat, items])\n }\n return ordered\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateExcel = void 0;
3
+ exports.generateExcel = generateExcel;
4
4
  const exceljs_1 = require("exceljs");
5
5
  function createGanttChart(tasks, worksheet, level = 0) {
6
6
  tasks.forEach(task => {
@@ -26,5 +26,4 @@ async function generateExcel(tasks) {
26
26
  createGanttChart(tasks, worksheet);
27
27
  return await workbook.xlsx.writeBuffer();
28
28
  }
29
- exports.generateExcel = generateExcel;
30
29
  //# sourceMappingURL=export-tasks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"export-tasks.js","sourceRoot":"","sources":["../../server/controllers/export-tasks.ts"],"names":[],"mappings":";;;AAAA,qCAA6C;AAS7C,SAAS,gBAAgB,CAAC,KAAa,EAAE,SAAoB,EAAE,QAAgB,CAAC;IAC9E,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;QAEvE,GAAG,CAAC,YAAY,GAAG,KAAK,CAAA;QAExB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7C,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;SACtD;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,KAAa;IAC/C,MAAM,QAAQ,GAAG,IAAI,kBAAQ,EAAE,CAAA;IAC/B,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;IAEtD,SAAS,CAAC,UAAU,CAAC,iBAAiB,GAAG;QACvC,YAAY,EAAE,KAAK;QACnB,YAAY,EAAE,KAAK;KACpB,CAAA;IAED,SAAS,CAAC,OAAO,GAAG;QAClB,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QAC/C,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE;QACrD,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;KAClD,CAAA;IAED,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;IAElC,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;AAC1C,CAAC;AAlBD,sCAkBC","sourcesContent":["import { Workbook, Worksheet } from 'exceljs'\n\nexport interface Task {\n name: string\n startDate: Date\n endDate: Date\n subtasks?: Task[]\n}\n\nfunction createGanttChart(tasks: Task[], worksheet: Worksheet, level: number = 0) {\n tasks.forEach(task => {\n const row = worksheet.addRow([task.name, task.startDate, task.endDate])\n\n row.outlineLevel = level\n\n if (task.subtasks && task.subtasks.length > 0) {\n createGanttChart(task.subtasks, worksheet, level + 1)\n }\n })\n}\n\nexport async function generateExcel(tasks: Task[]) {\n const workbook = new Workbook()\n const worksheet = workbook.addWorksheet('Gantt Chart')\n\n worksheet.properties.outlineProperties = {\n summaryBelow: false,\n summaryRight: false\n }\n\n worksheet.columns = [\n { header: 'Task Name', key: 'name', width: 30 },\n { header: 'Start Date', key: 'startDate', width: 20 },\n { header: 'End Date', key: 'endDate', width: 20 }\n ]\n\n createGanttChart(tasks, worksheet)\n\n return await workbook.xlsx.writeBuffer()\n}\n"]}
1
+ {"version":3,"file":"export-tasks.js","sourceRoot":"","sources":["../../server/controllers/export-tasks.ts"],"names":[],"mappings":";;AAqBA,sCAkBC;AAvCD,qCAA6C;AAS7C,SAAS,gBAAgB,CAAC,KAAa,EAAE,SAAoB,EAAE,QAAgB,CAAC;IAC9E,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;QAEvE,GAAG,CAAC,YAAY,GAAG,KAAK,CAAA;QAExB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;QACvD,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,KAAa;IAC/C,MAAM,QAAQ,GAAG,IAAI,kBAAQ,EAAE,CAAA;IAC/B,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;IAEtD,SAAS,CAAC,UAAU,CAAC,iBAAiB,GAAG;QACvC,YAAY,EAAE,KAAK;QACnB,YAAY,EAAE,KAAK;KACpB,CAAA;IAED,SAAS,CAAC,OAAO,GAAG;QAClB,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QAC/C,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE;QACrD,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;KAClD,CAAA;IAED,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;IAElC,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;AAC1C,CAAC","sourcesContent":["import { Workbook, Worksheet } from 'exceljs'\n\nexport interface Task {\n name: string\n startDate: Date\n endDate: Date\n subtasks?: Task[]\n}\n\nfunction createGanttChart(tasks: Task[], worksheet: Worksheet, level: number = 0) {\n tasks.forEach(task => {\n const row = worksheet.addRow([task.name, task.startDate, task.endDate])\n\n row.outlineLevel = level\n\n if (task.subtasks && task.subtasks.length > 0) {\n createGanttChart(task.subtasks, worksheet, level + 1)\n }\n })\n}\n\nexport async function generateExcel(tasks: Task[]) {\n const workbook = new Workbook()\n const worksheet = workbook.addWorksheet('Gantt Chart')\n\n worksheet.properties.outlineProperties = {\n summaryBelow: false,\n summaryRight: false\n }\n\n worksheet.columns = [\n { header: 'Task Name', key: 'name', width: 30 },\n { header: 'Start Date', key: 'startDate', width: 20 },\n { header: 'End Date', key: 'endDate', width: 20 }\n ]\n\n createGanttChart(tasks, worksheet)\n\n return await workbook.xlsx.writeBuffer()\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.importTasks = void 0;
3
+ exports.importTasks = importTasks;
4
4
  const shell_1 = require("@things-factory/shell");
5
5
  const task_1 = require("../service/task/task");
6
6
  const task_resource_1 = require("../service/task-resource/task-resource");
@@ -110,5 +110,4 @@ async function importTasks(project, tasks, context) {
110
110
  await importTaskData(rootTask);
111
111
  }
112
112
  }
113
- exports.importTasks = importTasks;
114
113
  //# sourceMappingURL=import-task.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"import-task.js","sourceRoot":"","sources":["../../server/controllers/import-task.ts"],"names":[],"mappings":"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","sourcesContent":["import { getRepository } from '@things-factory/shell'\n\nimport { Project } from '../service/project/project'\nimport { Task, TaskType } from '../service/task/task'\nimport { TaskResource } from '../service/task-resource/task-resource'\nimport { Resource } from '../service/resource/resource'\nimport { RawTask } from './types'\n\nfunction excelSerialToJSDate(serial) {\n const excelEpoch = new Date(1899, 11, 30) // Excel epoch (30th December 1899)\n const days = Math.floor(serial) // Get the number of days\n const milliseconds = (serial - days) * 86400 * 1000 // Convert the fractional day part to milliseconds\n\n const jsDate = new Date(excelEpoch.getTime() + days * 86400 * 1000 + milliseconds)\n return jsDate\n}\n\nexport async function importTasks(project: Project, tasks: RawTask[], context: ResolverContext) {\n const { domain, user, tx } = context.state\n\n const taskRepository = getRepository(Task, tx)\n const resourceRepository = getRepository(Resource, tx)\n const taskResourceRepository = getRepository(TaskResource, tx)\n\n // 1. 기존 태스크와 리소스를 Soft Delete\n await taskRepository.softDelete({ project: { id: project.id } })\n\n // 2. 태스크 임포트\n const importTaskData = async (rawTask: RawTask, parent?: Task) => {\n if (rawTask.children && rawTask.children.length > 0) {\n rawTask.type = TaskType.GROUP\n } else {\n rawTask.type = TaskType.TASK\n }\n\n // 유효성 검사\n if (!rawTask.title || !rawTask.code || (rawTask.type == TaskType.TASK && (rawTask.duration ?? null) === null)) {\n throw new Error(`Task '${rawTask.code}' is missing required fields.`)\n }\n\n if (rawTask.type == TaskType.TASK) {\n // 시작일, 종료일 계산\n var startDate: Date = new Date(rawTask.startDate)\n\n var endDate\n if (!startDate && rawTask.dependsOn) {\n const dependsOnTask = await taskRepository.findOne({ where: { code: rawTask.dependsOn, project: { id: project.id } } })\n if (dependsOnTask && dependsOnTask.endDate) {\n startDate = new Date(dependsOnTask.endDate)\n startDate.setDate(startDate.getDate() + 1)\n } else {\n // TODO handler error\n // throw new Error(`Task '${rawTask.code}' depends on a task '${rawTask.dependsOn}' that doesn't have a valid end date.`)\n }\n }\n\n if (!startDate) {\n throw new Error(`Task '${rawTask.code}' must have either a start date or a valid dependency.`)\n }\n\n const duration = rawTask.duration\n endDate = new Date(startDate)\n endDate.setDate(startDate.getDate() + duration - 1)\n }\n\n // 태스크 생성 및 저장\n var task: Task = await taskRepository.save({\n code: rawTask.code,\n name: rawTask.title,\n type: rawTask.type,\n startDate,\n endDate,\n project,\n parent,\n duration: rawTask.duration,\n dependsOn: rawTask.dependsOn,\n progress: rawTask.progress,\n tags: rawTask.tags,\n style: rawTask.style,\n updater: user,\n creator: user\n })\n\n // 리소스 생성 및 저장\n if (rawTask.resources) {\n for (const resource of rawTask.resources) {\n const resourceType = await resourceRepository.findOne({ where: { domain: { id: domain.id }, name: resource.type } })\n if (resourceType) {\n await taskResourceRepository.save({\n task,\n resource: resourceType,\n quantity: resource.allocated\n })\n } else {\n throw new Error(`unknown resource type: ${resource.type}`)\n }\n }\n }\n\n // 자식 태스크 처리\n if (rawTask.children && rawTask.children.length > 0) {\n let lastEndDate = null\n let lastStartDate = null\n for (const childTask of rawTask.children) {\n const subtask = await importTaskData(childTask, task)\n\n lastEndDate = !lastEndDate ? subtask.endDate : lastEndDate > subtask.endDate ? lastEndDate : subtask.endDate\n lastStartDate = !lastStartDate ? subtask.startDate : lastStartDate < subtask.startDate ? lastStartDate : subtask.startDate\n }\n\n // 그룹 태스크의 기간(duration)을 계산합니다.\n const calculatedDuration =\n lastEndDate && lastStartDate\n ? Math.ceil((lastEndDate.getTime() - lastStartDate.getTime()) / (1000 * 60 * 60 * 24)) + 1\n : 0\n\n task = await taskRepository.findOne({ where: { id: task.id } })\n\n return await taskRepository.save({\n ...task,\n startDate: lastStartDate,\n endDate: lastEndDate,\n duration: calculatedDuration\n })\n }\n\n return task\n }\n\n // 루트 태스크들 임포트\n for (const rootTask of tasks) {\n await importTaskData(rootTask)\n }\n}\n"]}
1
+ {"version":3,"file":"import-task.js","sourceRoot":"","sources":["../../server/controllers/import-task.ts"],"names":[],"mappings":"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","sourcesContent":["import { getRepository } from '@things-factory/shell'\n\nimport { Project } from '../service/project/project'\nimport { Task, TaskType } from '../service/task/task'\nimport { TaskResource } from '../service/task-resource/task-resource'\nimport { Resource } from '../service/resource/resource'\nimport { RawTask } from './types'\n\nfunction excelSerialToJSDate(serial) {\n const excelEpoch = new Date(1899, 11, 30) // Excel epoch (30th December 1899)\n const days = Math.floor(serial) // Get the number of days\n const milliseconds = (serial - days) * 86400 * 1000 // Convert the fractional day part to milliseconds\n\n const jsDate = new Date(excelEpoch.getTime() + days * 86400 * 1000 + milliseconds)\n return jsDate\n}\n\nexport async function importTasks(project: Project, tasks: RawTask[], context: ResolverContext) {\n const { domain, user, tx } = context.state\n\n const taskRepository = getRepository(Task, tx)\n const resourceRepository = getRepository(Resource, tx)\n const taskResourceRepository = getRepository(TaskResource, tx)\n\n // 1. 기존 태스크와 리소스를 Soft Delete\n await taskRepository.softDelete({ project: { id: project.id } })\n\n // 2. 태스크 임포트\n const importTaskData = async (rawTask: RawTask, parent?: Task) => {\n if (rawTask.children && rawTask.children.length > 0) {\n rawTask.type = TaskType.GROUP\n } else {\n rawTask.type = TaskType.TASK\n }\n\n // 유효성 검사\n if (!rawTask.title || !rawTask.code || (rawTask.type == TaskType.TASK && (rawTask.duration ?? null) === null)) {\n throw new Error(`Task '${rawTask.code}' is missing required fields.`)\n }\n\n if (rawTask.type == TaskType.TASK) {\n // 시작일, 종료일 계산\n var startDate: Date = new Date(rawTask.startDate)\n\n var endDate\n if (!startDate && rawTask.dependsOn) {\n const dependsOnTask = await taskRepository.findOne({ where: { code: rawTask.dependsOn, project: { id: project.id } } })\n if (dependsOnTask && dependsOnTask.endDate) {\n startDate = new Date(dependsOnTask.endDate)\n startDate.setDate(startDate.getDate() + 1)\n } else {\n // TODO handler error\n // throw new Error(`Task '${rawTask.code}' depends on a task '${rawTask.dependsOn}' that doesn't have a valid end date.`)\n }\n }\n\n if (!startDate) {\n throw new Error(`Task '${rawTask.code}' must have either a start date or a valid dependency.`)\n }\n\n const duration = rawTask.duration\n endDate = new Date(startDate)\n endDate.setDate(startDate.getDate() + duration - 1)\n }\n\n // 태스크 생성 및 저장\n var task: Task = await taskRepository.save({\n code: rawTask.code,\n name: rawTask.title,\n type: rawTask.type,\n startDate,\n endDate,\n project,\n parent,\n duration: rawTask.duration,\n dependsOn: rawTask.dependsOn,\n progress: rawTask.progress,\n tags: rawTask.tags,\n style: rawTask.style,\n updater: user,\n creator: user\n })\n\n // 리소스 생성 및 저장\n if (rawTask.resources) {\n for (const resource of rawTask.resources) {\n const resourceType = await resourceRepository.findOne({ where: { domain: { id: domain.id }, name: resource.type } })\n if (resourceType) {\n await taskResourceRepository.save({\n task,\n resource: resourceType,\n quantity: resource.allocated\n })\n } else {\n throw new Error(`unknown resource type: ${resource.type}`)\n }\n }\n }\n\n // 자식 태스크 처리\n if (rawTask.children && rawTask.children.length > 0) {\n let lastEndDate = null\n let lastStartDate = null\n for (const childTask of rawTask.children) {\n const subtask = await importTaskData(childTask, task)\n\n lastEndDate = !lastEndDate ? subtask.endDate : lastEndDate > subtask.endDate ? lastEndDate : subtask.endDate\n lastStartDate = !lastStartDate ? subtask.startDate : lastStartDate < subtask.startDate ? lastStartDate : subtask.startDate\n }\n\n // 그룹 태스크의 기간(duration)을 계산합니다.\n const calculatedDuration =\n lastEndDate && lastStartDate\n ? Math.ceil((lastEndDate.getTime() - lastStartDate.getTime()) / (1000 * 60 * 60 * 24)) + 1\n : 0\n\n task = await taskRepository.findOne({ where: { id: task.id } })\n\n return await taskRepository.save({\n ...task,\n startDate: lastStartDate,\n endDate: lastEndDate,\n duration: calculatedDuration\n })\n }\n\n return task\n }\n\n // 루트 태스크들 임포트\n for (const rootTask of tasks) {\n await importTaskData(rootTask)\n }\n}\n"]}
@@ -1,4 +1,2 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
1
  import { Project } from '../service/project/project';
4
2
  export declare function parseExcelAndImportTasks(buffer: Buffer, project: Project, context: ResolverContext): Promise<void>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseExcelAndImportTasks = void 0;
3
+ exports.parseExcelAndImportTasks = parseExcelAndImportTasks;
4
4
  const tslib_1 = require("tslib");
5
5
  const exceljs_1 = tslib_1.__importDefault(require("exceljs"));
6
6
  const import_task_1 = require("./import-task");
@@ -71,5 +71,4 @@ async function parseExcelAndImportTasks(buffer, project, context) {
71
71
  // 5. 변환된 데이터를 importTasks 함수로 전달합니다.
72
72
  await (0, import_task_1.importTasks)(project, tasks, context);
73
73
  }
74
- exports.parseExcelAndImportTasks = parseExcelAndImportTasks;
75
74
  //# sourceMappingURL=parse-excel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-excel.js","sourceRoot":"","sources":["../../server/controllers/parse-excel.ts"],"names":[],"mappings":"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","sourcesContent":["import ExcelJS from 'exceljs'\nimport { RawTask } from './types'\nimport { Project } from '../service/project/project'\nimport { importTasks } from './import-task'\n\nexport async function parseExcelAndImportTasks(buffer: Buffer, project: Project, context: ResolverContext) {\n // 1. 엑셀 파일을 읽어들입니다.\n const workbook = new ExcelJS.Workbook()\n await workbook.xlsx.load(buffer)\n\n // 2. 첫 번째 워크시트를 가져옵니다.\n const worksheet = workbook.getWorksheet(1) // Index or sheet name can be used\n\n // 3. 첫 번째 row를 header로 사용합니다.\n const headers: string[] = []\n let taskCodeColumnIndex = -1\n\n const headerRow = worksheet.getRow(1)\n headerRow.eachCell((cell, colNumber) => {\n const headerText = cell.text.toString()\n headers[colNumber - 1] = headerText // Store headers in an array\n\n if (headerText === '작업코드') {\n taskCodeColumnIndex = colNumber // Store the column index for \"작업코드\"\n }\n })\n\n if (taskCodeColumnIndex === -1) {\n throw new Error('작업코드 column not found')\n }\n\n // 4. 엑셀 데이터를 RawTask 형식으로 변환합니다.\n const tasks: RawTask[] = []\n\n // Start processing from the second row onward to skip the header\n for (let rowIndex = 2; rowIndex <= worksheet.rowCount; rowIndex++) {\n const row = worksheet.getRow(rowIndex)\n const taskData: any = {}\n\n row.eachCell((cell, colNumber) => {\n const header = headers[colNumber - 1]\n\n // Check if the cell has a formula(or sharedFormula) and use the formula result\n let cellValue: any = cell.value\n if (cellValue && typeof cellValue === 'object' && ('formula' in cellValue || 'sharedFormula' in cellValue)) {\n // Cell contains a formula, use the calculated result if available\n cellValue = cellValue.result ?? cellValue.value // Use the result, or fallback to value if result is not calculated\n }\n\n taskData[header] = cellValue\n })\n\n const taskCodeCell = row.getCell(taskCodeColumnIndex)\n let bgColor = '#FFFFFF'\n const fill = taskCodeCell.style.fill\n\n if (fill && fill.type === 'pattern' && fill.pattern === 'solid') {\n const fgColor = fill.fgColor\n if (fgColor && fgColor.argb) {\n // ARGB is a color in the format AARRGGBB, remove the alpha channel (first two characters)\n bgColor = `#${fgColor.argb.slice(2)}`\n }\n }\n\n const task: RawTask = {\n code: taskData['작업코드'],\n title: taskData['작업명'],\n type: taskData['세부공종'],\n duration: taskData['기간'],\n startDate: taskData['시작일'],\n dependsOn: taskData['선행작업코드'],\n progress: taskData['진척율'],\n tags: taskData['Tags'] ? taskData['Tags'].split(',') : [],\n resources: taskData['Resources'] ? JSON.parse(taskData['Resources']) : [],\n style: bgColor,\n children: []\n }\n\n if (task.code && task.type) {\n tasks.push(task)\n }\n }\n\n // 5. 변환된 데이터를 importTasks 함수로 전달합니다.\n await importTasks(project, tasks, context)\n}\n"]}
1
+ {"version":3,"file":"parse-excel.js","sourceRoot":"","sources":["../../server/controllers/parse-excel.ts"],"names":[],"mappings":"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","sourcesContent":["import ExcelJS from 'exceljs'\nimport { RawTask } from './types'\nimport { Project } from '../service/project/project'\nimport { importTasks } from './import-task'\n\nexport async function parseExcelAndImportTasks(buffer: Buffer, project: Project, context: ResolverContext) {\n // 1. 엑셀 파일을 읽어들입니다.\n const workbook = new ExcelJS.Workbook()\n await workbook.xlsx.load(buffer as any)\n\n // 2. 첫 번째 워크시트를 가져옵니다.\n const worksheet = workbook.getWorksheet(1) // Index or sheet name can be used\n\n // 3. 첫 번째 row를 header로 사용합니다.\n const headers: string[] = []\n let taskCodeColumnIndex = -1\n\n const headerRow = worksheet.getRow(1)\n headerRow.eachCell((cell, colNumber) => {\n const headerText = cell.text.toString()\n headers[colNumber - 1] = headerText // Store headers in an array\n\n if (headerText === '작업코드') {\n taskCodeColumnIndex = colNumber // Store the column index for \"작업코드\"\n }\n })\n\n if (taskCodeColumnIndex === -1) {\n throw new Error('작업코드 column not found')\n }\n\n // 4. 엑셀 데이터를 RawTask 형식으로 변환합니다.\n const tasks: RawTask[] = []\n\n // Start processing from the second row onward to skip the header\n for (let rowIndex = 2; rowIndex <= worksheet.rowCount; rowIndex++) {\n const row = worksheet.getRow(rowIndex)\n const taskData: any = {}\n\n row.eachCell((cell, colNumber) => {\n const header = headers[colNumber - 1]\n\n // Check if the cell has a formula(or sharedFormula) and use the formula result\n let cellValue: any = cell.value\n if (cellValue && typeof cellValue === 'object' && ('formula' in cellValue || 'sharedFormula' in cellValue)) {\n // Cell contains a formula, use the calculated result if available\n cellValue = cellValue.result ?? cellValue.value // Use the result, or fallback to value if result is not calculated\n }\n\n taskData[header] = cellValue\n })\n\n const taskCodeCell = row.getCell(taskCodeColumnIndex)\n let bgColor = '#FFFFFF'\n const fill = taskCodeCell.style.fill\n\n if (fill && fill.type === 'pattern' && fill.pattern === 'solid') {\n const fgColor = fill.fgColor\n if (fgColor && fgColor.argb) {\n // ARGB is a color in the format AARRGGBB, remove the alpha channel (first two characters)\n bgColor = `#${fgColor.argb.slice(2)}`\n }\n }\n\n const task: RawTask = {\n code: taskData['작업코드'],\n title: taskData['작업명'],\n type: taskData['세부공종'],\n duration: taskData['기간'],\n startDate: taskData['시작일'],\n dependsOn: taskData['선행작업코드'],\n progress: taskData['진척율'],\n tags: taskData['Tags'] ? taskData['Tags'].split(',') : [],\n resources: taskData['Resources'] ? JSON.parse(taskData['Resources']) : [],\n style: bgColor,\n children: []\n }\n\n if (task.code && task.type) {\n tasks.push(task)\n }\n }\n\n // 5. 변환된 데이터를 importTasks 함수로 전달합니다.\n await importTasks(project, tasks, context)\n}\n"]}
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.initMiddlewares = void 0;
3
+ exports.initMiddlewares = initMiddlewares;
4
4
  function initMiddlewares(app) {
5
5
  /* can add middlewares into app */
6
6
  }
7
- exports.initMiddlewares = initMiddlewares;
8
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/middlewares/index.ts"],"names":[],"mappings":";;;AAAA,SAAgB,eAAe,CAAC,GAAG;IACjC,kCAAkC;AACpC,CAAC;AAFD,0CAEC","sourcesContent":["export function initMiddlewares(app) {\n /* can add middlewares into app */\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/middlewares/index.ts"],"names":[],"mappings":";;AAAA,0CAEC;AAFD,SAAgB,eAAe,CAAC,GAAG;IACjC,kCAAkC;AACpC,CAAC","sourcesContent":["export function initMiddlewares(app) {\n /* can add middlewares into app */\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"1723861466413-seed-roles.js","sourceRoot":"","sources":["../../server/migrations/1723861466413-seed-roles.ts"],"names":[],"mappings":"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","sourcesContent":["import { MigrationInterface, QueryRunner } from 'typeorm'\n\nimport { logger } from '@things-factory/env'\nimport { Domain, getRepository } from '@things-factory/shell'\nimport { Privilege, Role, User } from '@things-factory/auth-base'\n\nconst SEED_ROLES = [\n {\n name: '감리사',\n description: '감리사',\n privileges: [\n {\n name: 'query',\n category: 'board'\n },\n {\n name: 'query',\n category: 'attachment'\n }\n ]\n },\n {\n name: '설계사',\n description: '설계사',\n privileges: [\n {\n name: 'query',\n category: 'board'\n },\n {\n name: 'query',\n category: 'attachment'\n }\n ]\n },\n {\n name: '현장관리자',\n description: '현장관리자',\n privileges: [\n {\n name: 'query',\n category: 'board'\n },\n {\n name: 'query',\n category: 'attachment'\n }\n ]\n },\n {\n name: '시공자',\n description: '시공자',\n privileges: [\n {\n name: 'query',\n category: 'board'\n },\n {\n name: 'query',\n category: 'attachment'\n }\n ]\n }\n]\n\nexport class Roles1723861466413 implements MigrationInterface {\n public async up(queryRunner: QueryRunner): Promise<void> {\n const domainRepository = getRepository(Domain)\n const roleRepository = getRepository(Role)\n const userRepository = getRepository(User)\n const privilegeRepository = getRepository(Privilege)\n\n const domain: Domain = await domainRepository.findOne({\n where: { name: 'SYSTEM' }\n })\n\n const admin: User = await userRepository.findOne({\n where: { email: 'admin@hatiolab.com' }\n })\n\n try {\n for (let i = 0; i < SEED_ROLES.length; i++) {\n const { name, description, privileges } = SEED_ROLES[i]\n\n const role = await roleRepository.save({\n domain,\n name,\n description,\n creator: admin,\n updater: admin\n })\n\n const ps = []\n\n for (const privilege of privileges) {\n const { name, category } = privilege\n ps.push(\n await privilegeRepository.findOne({\n where: {\n name,\n category\n }\n })\n )\n }\n\n role.privileges = ps\n\n await roleRepository.save(role)\n }\n } catch (e) {\n logger.error(e)\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n const domainRepository = getRepository(Domain)\n const roleRepository = getRepository(Role)\n\n const domain: Domain = await domainRepository.findOne({\n where: { name: 'SYSTEM' }\n })\n\n SEED_ROLES.reverse().forEach(async ({ name }) => {\n await roleRepository.delete({ name, domain: { id: domain.id } })\n })\n }\n}\n"]}
1
+ {"version":3,"file":"1723861466413-seed-roles.js","sourceRoot":"","sources":["../../server/migrations/1723861466413-seed-roles.ts"],"names":[],"mappings":";;;AAEA,6CAA4C;AAC5C,iDAA6D;AAC7D,yDAAiE;AAEjE,MAAM,UAAU,GAAG;IACjB;QACE,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,KAAK;QAClB,UAAU,EAAE;YACV;gBACE,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,OAAO;aAClB;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,YAAY;aACvB;SACF;KACF;IACD;QACE,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,KAAK;QAClB,UAAU,EAAE;YACV;gBACE,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,OAAO;aAClB;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,YAAY;aACvB;SACF;KACF;IACD;QACE,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,OAAO;QACpB,UAAU,EAAE;YACV;gBACE,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,OAAO;aAClB;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,YAAY;aACvB;SACF;KACF;IACD;QACE,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,KAAK;QAClB,UAAU,EAAE;YACV;gBACE,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,OAAO;aAClB;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,YAAY;aACvB;SACF;KACF;CACF,CAAA;AAED,MAAa,kBAAkB;IACtB,KAAK,CAAC,EAAE,CAAC,WAAwB;QACtC,MAAM,gBAAgB,GAAG,IAAA,qBAAa,EAAC,cAAM,CAAC,CAAA;QAC9C,MAAM,cAAc,GAAG,IAAA,qBAAa,EAAC,gBAAI,CAAC,CAAA;QAC1C,MAAM,cAAc,GAAG,IAAA,qBAAa,EAAC,gBAAI,CAAC,CAAA;QAC1C,MAAM,mBAAmB,GAAG,IAAA,qBAAa,EAAC,qBAAS,CAAC,CAAA;QAEpD,MAAM,MAAM,GAAW,MAAM,gBAAgB,CAAC,OAAO,CAAC;YACpD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC1B,CAAC,CAAA;QAEF,MAAM,KAAK,GAAS,MAAM,cAAc,CAAC,OAAO,CAAC;YAC/C,KAAK,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;SACvC,CAAC,CAAA;QAEF,IAAI,CAAC;YACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;gBAEvD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC;oBACrC,MAAM;oBACN,IAAI;oBACJ,WAAW;oBACX,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,KAAK;iBACf,CAAC,CAAA;gBAEF,MAAM,EAAE,GAAG,EAAE,CAAA;gBAEb,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;oBACnC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAA;oBACpC,EAAE,CAAC,IAAI,CACL,MAAM,mBAAmB,CAAC,OAAO,CAAC;wBAChC,KAAK,EAAE;4BACL,IAAI;4BACJ,QAAQ;yBACT;qBACF,CAAC,CACH,CAAA;gBACH,CAAC;gBAED,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;gBAEpB,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACjC,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,YAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAwB;QACxC,MAAM,gBAAgB,GAAG,IAAA,qBAAa,EAAC,cAAM,CAAC,CAAA;QAC9C,MAAM,cAAc,GAAG,IAAA,qBAAa,EAAC,gBAAI,CAAC,CAAA;QAE1C,MAAM,MAAM,GAAW,MAAM,gBAAgB,CAAC,OAAO,CAAC;YACpD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC1B,CAAC,CAAA;QAEF,UAAU,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;YAC9C,MAAM,cAAc,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAClE,CAAC,CAAC,CAAA;IACJ,CAAC;CACF;AA9DD,gDA8DC","sourcesContent":["import { MigrationInterface, QueryRunner } from 'typeorm'\n\nimport { logger } from '@things-factory/env'\nimport { Domain, getRepository } from '@things-factory/shell'\nimport { Privilege, Role, User } from '@things-factory/auth-base'\n\nconst SEED_ROLES = [\n {\n name: '감리사',\n description: '감리사',\n privileges: [\n {\n name: 'query',\n category: 'board'\n },\n {\n name: 'query',\n category: 'attachment'\n }\n ]\n },\n {\n name: '설계사',\n description: '설계사',\n privileges: [\n {\n name: 'query',\n category: 'board'\n },\n {\n name: 'query',\n category: 'attachment'\n }\n ]\n },\n {\n name: '현장관리자',\n description: '현장관리자',\n privileges: [\n {\n name: 'query',\n category: 'board'\n },\n {\n name: 'query',\n category: 'attachment'\n }\n ]\n },\n {\n name: '시공자',\n description: '시공자',\n privileges: [\n {\n name: 'query',\n category: 'board'\n },\n {\n name: 'query',\n category: 'attachment'\n }\n ]\n }\n]\n\nexport class Roles1723861466413 implements MigrationInterface {\n public async up(queryRunner: QueryRunner): Promise<void> {\n const domainRepository = getRepository(Domain)\n const roleRepository = getRepository(Role)\n const userRepository = getRepository(User)\n const privilegeRepository = getRepository(Privilege)\n\n const domain: Domain = await domainRepository.findOne({\n where: { name: 'SYSTEM' }\n })\n\n const admin: User = await userRepository.findOne({\n where: { email: 'admin@hatiolab.com' }\n })\n\n try {\n for (let i = 0; i < SEED_ROLES.length; i++) {\n const { name, description, privileges } = SEED_ROLES[i]\n\n const role = await roleRepository.save({\n domain,\n name,\n description,\n creator: admin,\n updater: admin\n })\n\n const ps = []\n\n for (const privilege of privileges) {\n const { name, category } = privilege\n ps.push(\n await privilegeRepository.findOne({\n where: {\n name,\n category\n }\n })\n )\n }\n\n role.privileges = ps\n\n await roleRepository.save(role)\n }\n } catch (e) {\n logger.error(e)\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n const domainRepository = getRepository(Domain)\n const roleRepository = getRepository(Role)\n\n const domain: Domain = await domainRepository.findOne({\n where: { name: 'SYSTEM' }\n })\n\n SEED_ROLES.reverse().forEach(async ({ name }) => {\n await roleRepository.delete({ name, domain: { id: domain.id } })\n })\n }\n}\n"]}
@@ -83,7 +83,7 @@ const SEED_COMMON_CODES = [
83
83
  rank: 5
84
84
  },
85
85
  {
86
- name: 'DESIGNER',
86
+ name: 'ARCHITECT',
87
87
  description: '설계사',
88
88
  labels: null,
89
89
  rank: 6
@@ -1 +1 @@
1
- {"version":3,"file":"1723861466414-seed-codes.js","sourceRoot":"","sources":["../../server/migrations/1723861466414-seed-codes.ts"],"names":[],"mappings":"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","sourcesContent":["import { MigrationInterface, QueryRunner } from 'typeorm'\n\nimport { logger } from '@things-factory/env'\nimport { Domain, getRepository } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { CommonCode, CommonCodeDetail } from '@things-factory/code-base'\n\nconst SEED_COMMON_CODES = [\n {\n name: 'EMPLOYEE_TYPE',\n description: '직원 유형',\n details: [\n {\n name: 'FULLTIME',\n description: '풀타임 정규직',\n labels: null,\n rank: 1\n },\n {\n name: 'PARTTIME',\n description: '파트타임 정규직',\n labels: null,\n rank: 2\n },\n {\n name: 'TEMPORARY',\n description: '임시직',\n labels: null,\n rank: 3\n }\n ]\n },\n {\n name: 'JOB_POSITION',\n description: '직급',\n details: [\n {\n name: '임원',\n description: '임원',\n labels: null,\n rank: 1\n },\n {\n name: '직원',\n description: '직원',\n labels: null,\n rank: 2\n }\n ]\n },\n {\n name: 'JOB_RESPONSIBILITY',\n description: '직책',\n details: [\n {\n name: 'ADMIN',\n description: '관리자',\n labels: null,\n rank: 1\n },\n {\n name: 'OVERALL_SUPERVISORY',\n description: '총괄 감리 책임자',\n labels: null,\n rank: 2\n },\n {\n name: 'TASK_SUPERVISORY',\n description: '공종별 감리 책임자',\n labels: null,\n rank: 3\n },\n {\n name: 'OVERALL_CONSTRUCTOR',\n description: '총괄 시공 책임자',\n labels: null,\n rank: 4\n },\n {\n name: 'TASK_CONSTRUCTOR',\n description: '공종별 시공 관리자',\n labels: null,\n rank: 5\n },\n {\n name: 'DESIGNER',\n description: '설계사',\n labels: null,\n rank: 6\n },\n {\n name: 'CONSTRUCTOR',\n description: '시공자',\n labels: null,\n rank: 7\n }\n ]\n }\n]\n\nexport class SeedCodes1723861466414 implements MigrationInterface {\n public async up(queryRunner: QueryRunner): Promise<void> {\n const commonCodeRepository = getRepository(CommonCode)\n const commonCodeDetailRepository = getRepository(CommonCodeDetail)\n const domainRepository = getRepository(Domain)\n const userRepository = getRepository(User)\n\n const domain: Domain = await domainRepository.findOne({\n where: { name: 'SYSTEM' }\n })\n const user = await userRepository.findOne({ where: { id: domain.owner } })\n\n try {\n for (let i = 0; i < SEED_COMMON_CODES.length; i++) {\n const { name, description, details } = SEED_COMMON_CODES[i]\n\n const commonCode = await commonCodeRepository.save({\n domain,\n name,\n description,\n creator: user,\n updater: user\n })\n\n for (const commonCodeDetail of details) {\n const { name, description, labels, rank } = commonCodeDetail\n\n await commonCodeDetailRepository.save({\n domain,\n commonCode,\n name,\n description,\n labels,\n rank\n })\n }\n }\n } catch (e) {\n logger.error(e)\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n const domainRepository = getRepository(Domain)\n\n const domain: Domain = await domainRepository.findOne({\n where: { name: 'SYSTEM' }\n })\n\n const repository = getRepository(CommonCode)\n\n SEED_COMMON_CODES.reverse().forEach(async commonCode => {\n let record = await repository.findOne({ where: { name: commonCode.name, domain: { id: domain.id } } })\n record && (await repository.remove(record))\n })\n }\n}\n"]}
1
+ {"version":3,"file":"1723861466414-seed-codes.js","sourceRoot":"","sources":["../../server/migrations/1723861466414-seed-codes.ts"],"names":[],"mappings":"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","sourcesContent":["import { MigrationInterface, QueryRunner } from 'typeorm'\n\nimport { logger } from '@things-factory/env'\nimport { Domain, getRepository } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { CommonCode, CommonCodeDetail } from '@things-factory/code-base'\n\nconst SEED_COMMON_CODES = [\n {\n name: 'EMPLOYEE_TYPE',\n description: '직원 유형',\n details: [\n {\n name: 'FULLTIME',\n description: '풀타임 정규직',\n labels: null,\n rank: 1\n },\n {\n name: 'PARTTIME',\n description: '파트타임 정규직',\n labels: null,\n rank: 2\n },\n {\n name: 'TEMPORARY',\n description: '임시직',\n labels: null,\n rank: 3\n }\n ]\n },\n {\n name: 'JOB_POSITION',\n description: '직급',\n details: [\n {\n name: '임원',\n description: '임원',\n labels: null,\n rank: 1\n },\n {\n name: '직원',\n description: '직원',\n labels: null,\n rank: 2\n }\n ]\n },\n {\n name: 'JOB_RESPONSIBILITY',\n description: '직책',\n details: [\n {\n name: 'ADMIN',\n description: '관리자',\n labels: null,\n rank: 1\n },\n {\n name: 'OVERALL_SUPERVISORY',\n description: '총괄 감리 책임자',\n labels: null,\n rank: 2\n },\n {\n name: 'TASK_SUPERVISORY',\n description: '공종별 감리 책임자',\n labels: null,\n rank: 3\n },\n {\n name: 'OVERALL_CONSTRUCTOR',\n description: '총괄 시공 책임자',\n labels: null,\n rank: 4\n },\n {\n name: 'TASK_CONSTRUCTOR',\n description: '공종별 시공 관리자',\n labels: null,\n rank: 5\n },\n {\n name: 'ARCHITECT',\n description: '설계사',\n labels: null,\n rank: 6\n },\n {\n name: 'CONSTRUCTOR',\n description: '시공자',\n labels: null,\n rank: 7\n }\n ]\n }\n]\n\nexport class SeedCodes1723861466414 implements MigrationInterface {\n public async up(queryRunner: QueryRunner): Promise<void> {\n const commonCodeRepository = getRepository(CommonCode)\n const commonCodeDetailRepository = getRepository(CommonCodeDetail)\n const domainRepository = getRepository(Domain)\n const userRepository = getRepository(User)\n\n const domain: Domain = await domainRepository.findOne({\n where: { name: 'SYSTEM' }\n })\n const user = await userRepository.findOne({ where: { id: domain.owner } })\n\n try {\n for (let i = 0; i < SEED_COMMON_CODES.length; i++) {\n const { name, description, details } = SEED_COMMON_CODES[i]\n\n const commonCode = await commonCodeRepository.save({\n domain,\n name,\n description,\n creator: user,\n updater: user\n })\n\n for (const commonCodeDetail of details) {\n const { name, description, labels, rank } = commonCodeDetail\n\n await commonCodeDetailRepository.save({\n domain,\n commonCode,\n name,\n description,\n labels,\n rank\n })\n }\n }\n } catch (e) {\n logger.error(e)\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n const domainRepository = getRepository(Domain)\n\n const domain: Domain = await domainRepository.findOne({\n where: { name: 'SYSTEM' }\n })\n\n const repository = getRepository(CommonCode)\n\n SEED_COMMON_CODES.reverse().forEach(async commonCode => {\n let record = await repository.findOne({ where: { name: commonCode.name, domain: { id: domain.id } } })\n record && (await repository.remove(record))\n })\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"1723861476419-seed-resources.js","sourceRoot":"","sources":["../../server/migrations/1723861476419-seed-resources.ts"],"names":[],"mappings":"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","sourcesContent":["import { MigrationInterface, QueryRunner } from 'typeorm'\n\nimport { logger } from '@things-factory/env'\nimport { Domain, getRepository } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { ResourceType, Resource } from '../service/resource/resource'\n\nconst SEED_RESOURCES = [\n { name: '철근/형틀공', type: ResourceType.HUMAN, unit: 'man/day' },\n { name: '방수공', type: ResourceType.HUMAN, unit: 'man/day' },\n { name: '목공', type: ResourceType.HUMAN, unit: 'man/day' },\n { name: '금속공', type: ResourceType.HUMAN, unit: 'man/day' },\n { name: '타일공', type: ResourceType.HUMAN, unit: 'man/day' },\n { name: '창호공', type: ResourceType.HUMAN, unit: 'man/day' },\n { name: '도배공', type: ResourceType.HUMAN, unit: 'man/day' },\n { name: '조적공', type: ResourceType.HUMAN, unit: 'man/day' }\n]\n\nexport class SeedResources1723861476419 implements MigrationInterface {\n public async up(queryRunner: QueryRunner): Promise<void> {\n const resourceRepository = getRepository(Resource)\n const domainRepository = getRepository(Domain)\n const userRepository = getRepository(User)\n\n const domain: Domain = await domainRepository.findOne({\n where: { name: 'SYSTEM' }\n })\n const user = await userRepository.findOne({ where: { id: domain.owner } })\n\n try {\n for (let i = 0; i < SEED_RESOURCES.length; i++) {\n const { name, type, unit } = SEED_RESOURCES[i]\n\n const resource = await resourceRepository.save({\n domain,\n name,\n type,\n unit,\n creator: user,\n updater: user\n })\n }\n } catch (e) {\n logger.error(e)\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n const domainRepository = getRepository(Domain)\n\n const domain: Domain = await domainRepository.findOne({\n where: { name: 'SYSTEM' }\n })\n\n const repository = getRepository(Resource)\n\n SEED_RESOURCES.reverse().forEach(async resource => {\n let record = await repository.findOne({ where: { name: resource.name, domain: { id: domain.id } } })\n record && (await repository.remove(record))\n })\n }\n}\n"]}
1
+ {"version":3,"file":"1723861476419-seed-resources.js","sourceRoot":"","sources":["../../server/migrations/1723861476419-seed-resources.ts"],"names":[],"mappings":"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","sourcesContent":["import { MigrationInterface, QueryRunner } from 'typeorm'\n\nimport { logger } from '@things-factory/env'\nimport { Domain, getRepository } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { ResourceType, Resource } from '../service/resource/resource'\n\nconst SEED_RESOURCES = [\n { name: '철근/형틀공', type: ResourceType.HUMAN, unit: 'man/day' },\n { name: '방수공', type: ResourceType.HUMAN, unit: 'man/day' },\n { name: '목공', type: ResourceType.HUMAN, unit: 'man/day' },\n { name: '금속공', type: ResourceType.HUMAN, unit: 'man/day' },\n { name: '타일공', type: ResourceType.HUMAN, unit: 'man/day' },\n { name: '창호공', type: ResourceType.HUMAN, unit: 'man/day' },\n { name: '도배공', type: ResourceType.HUMAN, unit: 'man/day' },\n { name: '조적공', type: ResourceType.HUMAN, unit: 'man/day' }\n]\n\nexport class SeedResources1723861476419 implements MigrationInterface {\n public async up(queryRunner: QueryRunner): Promise<void> {\n const resourceRepository = getRepository(Resource)\n const domainRepository = getRepository(Domain)\n const userRepository = getRepository(User)\n\n const domain: Domain = await domainRepository.findOne({\n where: { name: 'SYSTEM' }\n })\n const user = await userRepository.findOne({ where: { id: domain.owner } })\n\n try {\n for (let i = 0; i < SEED_RESOURCES.length; i++) {\n const { name, type, unit } = SEED_RESOURCES[i]\n\n const resource = await resourceRepository.save({\n domain,\n name,\n type,\n unit,\n creator: user,\n updater: user\n })\n }\n } catch (e) {\n logger.error(e)\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n const domainRepository = getRepository(Domain)\n\n const domain: Domain = await domainRepository.findOne({\n where: { name: 'SYSTEM' }\n })\n\n const repository = getRepository(Resource)\n\n SEED_RESOURCES.reverse().forEach(async resource => {\n let record = await repository.findOne({ where: { name: resource.name, domain: { id: domain.id } } })\n record && (await repository.remove(record))\n })\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"1723861478420-seed-\bsample-project.js","sourceRoot":"","sources":["../../server/migrations/1723861478420-seed-\bsample-project.ts"],"names":[],"mappings":"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","sourcesContent":["import { MigrationInterface, QueryRunner } from 'typeorm'\n\nimport { logger } from '@things-factory/env'\nimport { Domain, getRepository } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { BuildingComplex } from '@dssp/building-complex'\nimport { Project, ProjectState } from '../service/project/project'\n\nconst SEED_SAMPLE_BUILDING_COMPLEX = {\n address: '서울시 마포구 공덕동 아파트 17번지',\n longitude: 37.548239525193,\n latitude: 126.95315808838,\n clientCompany: 'A 고객',\n constructionCompany: 'B 건설',\n supervisoryComapny: 'C 감리',\n designCompany: 'D 디자인',\n constructionType: '아파트',\n etc: '',\n householdCount: 500,\n buildingCount: 5,\n notice: '',\n planXScale: 20,\n planYScale: 20,\n area: 22700\n}\n\nconst SEED_SAMPLE_PROJECT = {\n name: '서울시 마포구 공덕동 아파트 신축공사',\n state: ProjectState.ONGOING,\n startDate: '2024-01-01',\n endDate: '2025-12-31',\n totalProgress: 40,\n weeklyProgress: 37\n}\n\nexport class SeedSampleProject1723861478420 implements MigrationInterface {\n public async up(queryRunner: QueryRunner): Promise<void> {\n const buildingRepository = getRepository(BuildingComplex)\n const projectRepository = getRepository(Project)\n const domainRepository = getRepository(Domain)\n const userRepository = getRepository(User)\n\n const domain: Domain = await domainRepository.findOne({\n where: { name: 'SYSTEM' }\n })\n const user = await userRepository.findOne({ where: { id: domain.owner } })\n\n try {\n const buildingComplex = await buildingRepository.save({\n domain,\n ...SEED_SAMPLE_BUILDING_COMPLEX,\n creator: user,\n updater: user\n })\n\n const project = await projectRepository.save({\n domain,\n ...SEED_SAMPLE_PROJECT,\n buildingComplex,\n creator: user,\n updater: user\n })\n } catch (e) {\n logger.error(e)\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n const domainRepository = getRepository(Domain)\n\n const domain: Domain = await domainRepository.findOne({\n where: { name: 'SYSTEM' }\n })\n\n const repository = getRepository(Project)\n\n let project = await repository.findOne({ where: { name: SEED_SAMPLE_PROJECT.name, domain: { id: domain.id } } })\n project && (await repository.remove(project))\n\n const buildRepository = getRepository(BuildingComplex)\n\n let buildingComplex = await buildRepository.findOne({\n where: { address: SEED_SAMPLE_BUILDING_COMPLEX.address, domain: { id: domain.id } }\n })\n buildingComplex && (await buildRepository.remove(buildingComplex))\n }\n}\n"]}
1
+ {"version":3,"file":"1723861478420-seed-\bsample-project.js","sourceRoot":"","sources":["../../server/migrations/1723861478420-seed-\bsample-project.ts"],"names":[],"mappings":"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","sourcesContent":["import { MigrationInterface, QueryRunner } from 'typeorm'\n\nimport { logger } from '@things-factory/env'\nimport { Domain, getRepository } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { BuildingComplex } from '@dssp/building-complex'\nimport { Project, ProjectState } from '../service/project/project'\n\nconst SEED_SAMPLE_BUILDING_COMPLEX = {\n address: '서울시 마포구 공덕동 아파트 17번지',\n longitude: 37.548239525193,\n latitude: 126.95315808838,\n clientCompany: 'A 고객',\n constructionCompany: 'B 건설',\n supervisoryComapny: 'C 감리',\n designCompany: 'D 디자인',\n constructionType: '아파트',\n etc: '',\n householdCount: 500,\n buildingCount: 5,\n notice: '',\n planXScale: 20,\n planYScale: 20,\n area: 22700\n}\n\nconst SEED_SAMPLE_PROJECT = {\n name: '서울시 마포구 공덕동 아파트 신축공사',\n state: ProjectState.ONGOING,\n startDate: '2024-01-01',\n endDate: '2025-12-31',\n totalProgress: 40,\n weeklyProgress: 37\n}\n\nexport class SeedSampleProject1723861478420 implements MigrationInterface {\n public async up(queryRunner: QueryRunner): Promise<void> {\n const buildingRepository = getRepository(BuildingComplex)\n const projectRepository = getRepository(Project)\n const domainRepository = getRepository(Domain)\n const userRepository = getRepository(User)\n\n const domain: Domain = await domainRepository.findOne({\n where: { name: 'SYSTEM' }\n })\n const user = await userRepository.findOne({ where: { id: domain.owner } })\n\n try {\n const buildingComplex = await buildingRepository.save({\n domain,\n ...SEED_SAMPLE_BUILDING_COMPLEX,\n creator: user,\n updater: user\n })\n\n const project = await projectRepository.save({\n domain,\n ...SEED_SAMPLE_PROJECT,\n buildingComplex,\n creator: user,\n updater: user\n })\n } catch (e) {\n logger.error(e)\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n const domainRepository = getRepository(Domain)\n\n const domain: Domain = await domainRepository.findOne({\n where: { name: 'SYSTEM' }\n })\n\n const repository = getRepository(Project)\n\n let project = await repository.findOne({ where: { name: SEED_SAMPLE_PROJECT.name, domain: { id: domain.id } } })\n project && (await repository.remove(project))\n\n const buildRepository = getRepository(BuildingComplex)\n\n let buildingComplex = await buildRepository.findOne({\n where: { address: SEED_SAMPLE_BUILDING_COMPLEX.address, domain: { id: domain.id } }\n })\n buildingComplex && (await buildRepository.remove(buildingComplex))\n }\n}\n"]}