@dssp/project 0.0.8 → 0.0.10

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 (286) hide show
  1. package/client/pages/project/project-detail.ts +109 -30
  2. package/client/pages/project/project-list.ts +46 -10
  3. package/client/pages/project/project-schedule-list.ts +11 -3
  4. package/client/pages/project/project-schedule.ts +111 -312
  5. package/client/pages/project/project-setting-list.ts +11 -3
  6. package/client/pages/resource/construction-detail-type-popup.ts +201 -0
  7. package/client/pages/resource/construction-type-management.ts +40 -39
  8. package/client/pages/resource/inspection-drawing-type-management.ts +210 -0
  9. package/client/pages/resource/inspection-part-popup.ts +201 -0
  10. package/client/pages/resource/manager-management.ts +0 -27
  11. package/client/pages/{checklist/checklist-importer.ts → resource/resource-importer.ts} +11 -8
  12. package/client/pages/{checklist/checklist-list-page.ts → resource/resource-list-page.ts} +41 -25
  13. package/client/pages/resource/worker-type-management.ts +3 -37
  14. package/client/pages/task-resource/task-resource-importer.ts +97 -0
  15. package/client/pages/task-resource/task-resource-list-page.ts +356 -0
  16. package/client/route.ts +13 -1
  17. package/dist-client/pages/project/project-detail.d.ts +5 -1
  18. package/dist-client/pages/project/project-detail.js +123 -40
  19. package/dist-client/pages/project/project-detail.js.map +1 -1
  20. package/dist-client/pages/project/project-list.d.ts +33 -7
  21. package/dist-client/pages/project/project-list.js +26 -11
  22. package/dist-client/pages/project/project-list.js.map +1 -1
  23. package/dist-client/pages/project/project-schedule-list.js +11 -3
  24. package/dist-client/pages/project/project-schedule-list.js.map +1 -1
  25. package/dist-client/pages/project/project-schedule.d.ts +5 -1
  26. package/dist-client/pages/project/project-schedule.js +117 -306
  27. package/dist-client/pages/project/project-schedule.js.map +1 -1
  28. package/dist-client/pages/project/project-setting-list.js +11 -3
  29. package/dist-client/pages/project/project-setting-list.js.map +1 -1
  30. package/dist-client/pages/resource/construction-detail-type-popup.d.ts +2 -0
  31. package/dist-client/pages/resource/construction-detail-type-popup.js +197 -0
  32. package/dist-client/pages/resource/construction-detail-type-popup.js.map +1 -0
  33. package/dist-client/pages/resource/construction-type-management.d.ts +12 -0
  34. package/dist-client/pages/resource/construction-type-management.js +30 -38
  35. package/dist-client/pages/resource/construction-type-management.js.map +1 -1
  36. package/dist-client/pages/resource/inspection-drawing-type-management.d.ts +34 -0
  37. package/dist-client/pages/resource/inspection-drawing-type-management.js +198 -0
  38. package/dist-client/pages/resource/inspection-drawing-type-management.js.map +1 -0
  39. package/dist-client/pages/resource/inspection-part-popup.d.ts +2 -0
  40. package/dist-client/pages/resource/inspection-part-popup.js +197 -0
  41. package/dist-client/pages/resource/inspection-part-popup.js.map +1 -0
  42. package/dist-client/pages/resource/manager-management.js +0 -27
  43. package/dist-client/pages/resource/manager-management.js.map +1 -1
  44. package/dist-client/pages/{checklist/checklist-importer.d.ts → resource/resource-importer.d.ts} +2 -2
  45. package/dist-client/pages/{checklist/checklist-importer.js → resource/resource-importer.js} +10 -10
  46. package/dist-client/pages/resource/resource-importer.js.map +1 -0
  47. package/dist-client/pages/{checklist/checklist-list-page.d.ts → resource/resource-list-page.d.ts} +6 -6
  48. package/dist-client/pages/{checklist/checklist-list-page.js → resource/resource-list-page.js} +41 -32
  49. package/dist-client/pages/resource/resource-list-page.js.map +1 -0
  50. package/dist-client/pages/resource/worker-type-management.d.ts +7 -1
  51. package/dist-client/pages/resource/worker-type-management.js +3 -45
  52. package/dist-client/pages/resource/worker-type-management.js.map +1 -1
  53. package/dist-client/pages/task-resource/task-resource-importer.d.ts +10 -0
  54. package/dist-client/pages/task-resource/task-resource-importer.js +101 -0
  55. package/dist-client/pages/task-resource/task-resource-importer.js.map +1 -0
  56. package/dist-client/pages/task-resource/task-resource-list-page.d.ts +63 -0
  57. package/dist-client/pages/task-resource/task-resource-list-page.js +332 -0
  58. package/dist-client/pages/task-resource/task-resource-list-page.js.map +1 -0
  59. package/dist-client/route.d.ts +1 -1
  60. package/dist-client/route.js +9 -0
  61. package/dist-client/route.js.map +1 -1
  62. package/dist-client/tsconfig.tsbuildinfo +1 -1
  63. package/dist-server/controllers/import-task.d.ts +19 -0
  64. package/dist-server/controllers/import-task.js +104 -0
  65. package/dist-server/controllers/import-task.js.map +1 -0
  66. package/dist-server/index.d.ts +1 -0
  67. package/dist-server/index.js +1 -0
  68. package/dist-server/index.js.map +1 -1
  69. package/dist-server/migrations/1723861466413-seed-roles.d.ts +5 -0
  70. package/dist-server/migrations/1723861466413-seed-roles.js +117 -0
  71. package/dist-server/migrations/1723861466413-seed-roles.js.map +1 -0
  72. package/dist-server/migrations/1723861466414-seed-codes.d.ts +5 -0
  73. package/dist-server/migrations/1723861466414-seed-codes.js +132 -0
  74. package/dist-server/migrations/1723861466414-seed-codes.js.map +1 -0
  75. package/dist-server/migrations/1723861476419-seed-resources.d.ts +5 -0
  76. package/dist-server/migrations/1723861476419-seed-resources.js +57 -0
  77. package/dist-server/migrations/1723861476419-seed-resources.js.map +1 -0
  78. package/dist-server/migrations/1723861478420-seed-/bsample-project.d.ts +5 -0
  79. package/dist-server/migrations/1723861478420-seed-/bsample-project.js +68 -0
  80. package/dist-server/migrations/1723861478420-seed-/bsample-project.js.map +1 -0
  81. package/dist-server/migrations/1723861478421-seed-/bsample-tasks.d.ts +5 -0
  82. package/dist-server/migrations/1723861478421-seed-/bsample-tasks.js +189 -0
  83. package/dist-server/migrations/1723861478421-seed-/bsample-tasks.js.map +1 -0
  84. package/dist-server/migrations/index.d.ts +1 -0
  85. package/dist-server/migrations/index.js +12 -0
  86. package/dist-server/migrations/index.js.map +1 -0
  87. package/dist-server/service/construction-detail-type/construction-detail-type-mutation.d.ts +6 -0
  88. package/dist-server/service/construction-detail-type/construction-detail-type-mutation.js +56 -0
  89. package/dist-server/service/construction-detail-type/construction-detail-type-mutation.js.map +1 -0
  90. package/dist-server/service/construction-detail-type/construction-detail-type-query.d.ts +9 -0
  91. package/dist-server/service/construction-detail-type/construction-detail-type-query.js +53 -0
  92. package/dist-server/service/construction-detail-type/construction-detail-type-query.js.map +1 -0
  93. package/dist-server/service/construction-detail-type/construction-detail-type-type.d.ts +11 -0
  94. package/dist-server/service/construction-detail-type/construction-detail-type-type.js +43 -0
  95. package/dist-server/service/construction-detail-type/construction-detail-type-type.js.map +1 -0
  96. package/dist-server/service/construction-detail-type/construction-detail-type.d.ts +15 -0
  97. package/dist-server/service/construction-detail-type/construction-detail-type.js +69 -0
  98. package/dist-server/service/construction-detail-type/construction-detail-type.js.map +1 -0
  99. package/dist-server/service/construction-detail-type/index.d.ts +5 -0
  100. package/dist-server/service/construction-detail-type/index.js +9 -0
  101. package/dist-server/service/construction-detail-type/index.js.map +1 -0
  102. package/dist-server/service/construction-type/construction-type-query.d.ts +2 -0
  103. package/dist-server/service/construction-type/construction-type-query.js +14 -0
  104. package/dist-server/service/construction-type/construction-type-query.js.map +1 -1
  105. package/dist-server/service/construction-type/construction-type.d.ts +2 -0
  106. package/dist-server/service/construction-type/construction-type.js +6 -0
  107. package/dist-server/service/construction-type/construction-type.js.map +1 -1
  108. package/dist-server/service/index.d.ts +7 -5
  109. package/dist-server/service/index.js +21 -10
  110. package/dist-server/service/index.js.map +1 -1
  111. package/dist-server/service/inspection-drawing-type/index.d.ts +5 -0
  112. package/dist-server/service/inspection-drawing-type/index.js +9 -0
  113. package/dist-server/service/inspection-drawing-type/index.js.map +1 -0
  114. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-mutation.d.ts +6 -0
  115. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-mutation.js +64 -0
  116. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-mutation.js.map +1 -0
  117. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.d.ts +12 -0
  118. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.js +83 -0
  119. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.js.map +1 -0
  120. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-type.d.ts +10 -0
  121. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-type.js +39 -0
  122. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-type.js.map +1 -0
  123. package/dist-server/service/inspection-drawing-type/inspection-drawing-type.d.ts +16 -0
  124. package/dist-server/service/inspection-drawing-type/inspection-drawing-type.js +72 -0
  125. package/dist-server/service/inspection-drawing-type/inspection-drawing-type.js.map +1 -0
  126. package/dist-server/service/inspection-part/index.d.ts +5 -0
  127. package/dist-server/service/inspection-part/index.js +9 -0
  128. package/dist-server/service/inspection-part/index.js.map +1 -0
  129. package/dist-server/service/inspection-part/inspection-part-mutation.d.ts +6 -0
  130. package/dist-server/service/inspection-part/inspection-part-mutation.js +55 -0
  131. package/dist-server/service/inspection-part/inspection-part-mutation.js.map +1 -0
  132. package/dist-server/service/inspection-part/inspection-part-query.d.ts +10 -0
  133. package/dist-server/service/inspection-part/inspection-part-query.js +66 -0
  134. package/dist-server/service/inspection-part/inspection-part-query.js.map +1 -0
  135. package/dist-server/service/inspection-part/inspection-part-type.d.ts +11 -0
  136. package/dist-server/service/inspection-part/inspection-part-type.js +43 -0
  137. package/dist-server/service/inspection-part/inspection-part-type.js.map +1 -0
  138. package/dist-server/service/inspection-part/inspection-part.d.ts +15 -0
  139. package/dist-server/service/inspection-part/inspection-part.js +69 -0
  140. package/dist-server/service/inspection-part/inspection-part.js.map +1 -0
  141. package/dist-server/service/project/index.d.ts +0 -2
  142. package/dist-server/service/project/index.js +1 -3
  143. package/dist-server/service/project/index.js.map +1 -1
  144. package/dist-server/service/project/project-query.d.ts +7 -5
  145. package/dist-server/service/project/project-query.js +34 -38
  146. package/dist-server/service/project/project-query.js.map +1 -1
  147. package/dist-server/service/project/project-type.d.ts +3 -6
  148. package/dist-server/service/project/project-type.js +25 -35
  149. package/dist-server/service/project/project-type.js.map +1 -1
  150. package/dist-server/service/project/project.d.ts +3 -2
  151. package/dist-server/service/project/project.js +10 -10
  152. package/dist-server/service/project/project.js.map +1 -1
  153. package/dist-server/service/resource/index.d.ts +6 -0
  154. package/dist-server/service/resource/index.js +10 -0
  155. package/dist-server/service/resource/index.js.map +1 -0
  156. package/dist-server/service/resource/resource-mutation.d.ts +10 -0
  157. package/dist-server/service/resource/resource-mutation.js +132 -0
  158. package/dist-server/service/resource/resource-mutation.js.map +1 -0
  159. package/dist-server/service/resource/resource-query.d.ts +11 -0
  160. package/dist-server/service/{checklist/checklist-query.js → resource/resource-query.js} +33 -38
  161. package/dist-server/service/resource/resource-query.js.map +1 -0
  162. package/dist-server/service/resource/resource-type.d.ts +17 -0
  163. package/dist-server/service/resource/resource-type.js +65 -0
  164. package/dist-server/service/resource/resource-type.js.map +1 -0
  165. package/dist-server/service/resource/resource.d.ts +24 -0
  166. package/dist-server/service/resource/resource.js +93 -0
  167. package/dist-server/service/resource/resource.js.map +1 -0
  168. package/dist-server/service/task/task-mutation.js +6 -0
  169. package/dist-server/service/task/task-mutation.js.map +1 -1
  170. package/dist-server/service/task/task-query.d.ts +9 -1
  171. package/dist-server/service/task/task-query.js +142 -20
  172. package/dist-server/service/task/task-query.js.map +1 -1
  173. package/dist-server/service/task/task-type.d.ts +13 -0
  174. package/dist-server/service/task/task-type.js +57 -12
  175. package/dist-server/service/task/task-type.js.map +1 -1
  176. package/dist-server/service/task/task.d.ts +12 -5
  177. package/dist-server/service/task/task.js +51 -16
  178. package/dist-server/service/task/task.js.map +1 -1
  179. package/dist-server/service/task-resource/index.d.ts +6 -0
  180. package/dist-server/service/task-resource/index.js +10 -0
  181. package/dist-server/service/task-resource/index.js.map +1 -0
  182. package/dist-server/service/task-resource/task-resource-mutation.d.ts +10 -0
  183. package/dist-server/service/task-resource/task-resource-mutation.js +132 -0
  184. package/dist-server/service/task-resource/task-resource-mutation.js.map +1 -0
  185. package/dist-server/service/task-resource/task-resource-query.d.ts +7 -0
  186. package/dist-server/service/task-resource/task-resource-query.js +50 -0
  187. package/dist-server/service/task-resource/task-resource-query.js.map +1 -0
  188. package/dist-server/service/task-resource/task-resource-type.d.ts +17 -0
  189. package/dist-server/service/task-resource/task-resource-type.js +65 -0
  190. package/dist-server/service/task-resource/task-resource-type.js.map +1 -0
  191. package/dist-server/service/task-resource/task-resource.d.ts +13 -0
  192. package/dist-server/service/task-resource/task-resource.js +59 -0
  193. package/dist-server/service/task-resource/task-resource.js.map +1 -0
  194. package/dist-server/tsconfig.tsbuildinfo +1 -1
  195. package/helps/project/checklist-type-detail.md +160 -0
  196. package/helps/project/checklist-type.md +160 -0
  197. package/helps/project/task-resource.md +160 -0
  198. package/package.json +11 -7
  199. package/server/controllers/import-task.ts +140 -0
  200. package/server/index.ts +1 -0
  201. package/server/migrations/1723861466413-seed-roles.ts +128 -0
  202. package/server/migrations/1723861466414-seed-codes.ts +139 -0
  203. package/server/migrations/1723861476419-seed-resources.ts +62 -0
  204. package/server/migrations/1723861478420-seed-/bsample-project.ts +87 -0
  205. package/server/migrations/1723861478421-seed-/bsample-tasks.ts +194 -0
  206. package/server/migrations/index.ts +9 -0
  207. package/server/service/construction-detail-type/construction-detail-type-mutation.ts +57 -0
  208. package/server/service/construction-detail-type/construction-detail-type-query.ts +31 -0
  209. package/server/service/construction-detail-type/construction-detail-type-type.ts +26 -0
  210. package/server/service/construction-detail-type/construction-detail-type.ts +52 -0
  211. package/server/service/construction-detail-type/index.ts +6 -0
  212. package/server/service/construction-type/construction-type-query.ts +9 -0
  213. package/server/service/construction-type/construction-type.ts +8 -2
  214. package/server/service/index.ts +24 -11
  215. package/server/service/inspection-drawing-type/index.ts +6 -0
  216. package/server/service/inspection-drawing-type/inspection-drawing-type-mutation.ts +69 -0
  217. package/server/service/inspection-drawing-type/inspection-drawing-type-query.ts +55 -0
  218. package/server/service/inspection-drawing-type/inspection-drawing-type-type.ts +23 -0
  219. package/server/service/inspection-drawing-type/inspection-drawing-type.ts +68 -0
  220. package/server/service/inspection-part/index.ts +6 -0
  221. package/server/service/inspection-part/inspection-part-mutation.ts +52 -0
  222. package/server/service/inspection-part/inspection-part-query.ts +41 -0
  223. package/server/service/inspection-part/inspection-part-type.ts +26 -0
  224. package/server/service/inspection-part/inspection-part.ts +51 -0
  225. package/server/service/project/index.ts +0 -2
  226. package/server/service/project/project-query.ts +30 -38
  227. package/server/service/project/project-type.ts +22 -27
  228. package/server/service/project/project.ts +11 -12
  229. package/server/service/resource/index.ts +7 -0
  230. package/server/service/resource/resource-mutation.ts +137 -0
  231. package/server/service/resource/resource-query.ts +50 -0
  232. package/server/service/resource/resource-type.ts +41 -0
  233. package/server/service/resource/resource.ts +82 -0
  234. package/server/service/task/task-mutation.ts +8 -9
  235. package/server/service/task/task-query.ts +135 -22
  236. package/server/service/task/task-type.ts +41 -15
  237. package/server/service/task/task.ts +44 -15
  238. package/server/service/task-resource/index.ts +7 -0
  239. package/server/service/task-resource/task-resource-mutation.ts +140 -0
  240. package/server/service/task-resource/task-resource-query.ts +36 -0
  241. package/server/service/task-resource/task-resource-type.ts +41 -0
  242. package/server/service/task-resource/task-resource.ts +51 -0
  243. package/things-factory.config.js +1 -0
  244. package/translations/en.json +15 -1
  245. package/translations/ko.json +9 -5
  246. package/dist-client/pages/checklist/checklist-importer.js.map +0 -1
  247. package/dist-client/pages/checklist/checklist-list-page.js.map +0 -1
  248. package/dist-server/service/check-item/check-item-mutation.d.ts +0 -10
  249. package/dist-server/service/check-item/check-item-mutation.js +0 -129
  250. package/dist-server/service/check-item/check-item-mutation.js.map +0 -1
  251. package/dist-server/service/check-item/check-item-query.d.ts +0 -11
  252. package/dist-server/service/check-item/check-item-query.js +0 -86
  253. package/dist-server/service/check-item/check-item-query.js.map +0 -1
  254. package/dist-server/service/check-item/check-item-type.d.ts +0 -18
  255. package/dist-server/service/check-item/check-item-type.js +0 -69
  256. package/dist-server/service/check-item/check-item-type.js.map +0 -1
  257. package/dist-server/service/check-item/check-item.d.ts +0 -18
  258. package/dist-server/service/check-item/check-item.js +0 -84
  259. package/dist-server/service/check-item/check-item.js.map +0 -1
  260. package/dist-server/service/check-item/index.d.ts +0 -5
  261. package/dist-server/service/check-item/index.js +0 -9
  262. package/dist-server/service/check-item/index.js.map +0 -1
  263. package/dist-server/service/checklist/checklist-mutation.d.ts +0 -10
  264. package/dist-server/service/checklist/checklist-mutation.js +0 -129
  265. package/dist-server/service/checklist/checklist-mutation.js.map +0 -1
  266. package/dist-server/service/checklist/checklist-query.d.ts +0 -11
  267. package/dist-server/service/checklist/checklist-query.js.map +0 -1
  268. package/dist-server/service/checklist/checklist-type.d.ts +0 -18
  269. package/dist-server/service/checklist/checklist-type.js +0 -69
  270. package/dist-server/service/checklist/checklist-type.js.map +0 -1
  271. package/dist-server/service/checklist/checklist.d.ts +0 -26
  272. package/dist-server/service/checklist/checklist.js +0 -120
  273. package/dist-server/service/checklist/checklist.js.map +0 -1
  274. package/dist-server/service/checklist/index.d.ts +0 -5
  275. package/dist-server/service/checklist/index.js +0 -9
  276. package/dist-server/service/checklist/index.js.map +0 -1
  277. package/server/service/check-item/check-item-mutation.ts +0 -142
  278. package/server/service/check-item/check-item-query.ts +0 -56
  279. package/server/service/check-item/check-item-type.ts +0 -49
  280. package/server/service/check-item/check-item.ts +0 -74
  281. package/server/service/check-item/index.ts +0 -6
  282. package/server/service/checklist/checklist-mutation.ts +0 -142
  283. package/server/service/checklist/checklist-query.ts +0 -56
  284. package/server/service/checklist/checklist-type.ts +0 -49
  285. package/server/service/checklist/checklist.ts +0 -105
  286. package/server/service/checklist/index.ts +0 -6
@@ -0,0 +1,19 @@
1
+ import { Project } from '../service/project/project';
2
+ import { TaskType } from '../service/task/task';
3
+ export interface RawResource {
4
+ type: string;
5
+ allocated: number;
6
+ }
7
+ export interface RawTask {
8
+ code: string;
9
+ title: string;
10
+ type?: TaskType;
11
+ duration?: number;
12
+ startDate?: string;
13
+ dependsOn?: string;
14
+ progress?: number;
15
+ tags?: string[];
16
+ resources?: RawResource[];
17
+ children?: RawTask[];
18
+ }
19
+ export declare function importTasks(project: Project, tasks: RawTask[], context: ResolverContext): Promise<void>;
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.importTasks = void 0;
4
+ const shell_1 = require("@things-factory/shell");
5
+ const task_1 = require("../service/task/task");
6
+ const task_resource_1 = require("../service/task-resource/task-resource");
7
+ const resource_1 = require("../service/resource/resource");
8
+ async function importTasks(project, tasks, context) {
9
+ const { domain, user, tx } = context.state;
10
+ const taskRepository = (0, shell_1.getRepository)(task_1.Task, tx);
11
+ const resourceRepository = (0, shell_1.getRepository)(resource_1.Resource, tx);
12
+ const taskResourceRepository = (0, shell_1.getRepository)(task_resource_1.TaskResource, tx);
13
+ // 1. 기존 태스크와 리소스를 Soft Delete
14
+ await taskRepository.softDelete({ project: { id: project.id } });
15
+ // 2. 태스크 임포트
16
+ const importTaskData = async (rawTask, parent) => {
17
+ var _a;
18
+ if (rawTask.children && rawTask.children.length > 0) {
19
+ rawTask.type = task_1.TaskType.GROUP;
20
+ }
21
+ else {
22
+ rawTask.type = task_1.TaskType.TASK;
23
+ }
24
+ // 유효성 검사
25
+ if (!rawTask.title || !rawTask.code || (rawTask.type == task_1.TaskType.TASK && ((_a = rawTask.duration) !== null && _a !== void 0 ? _a : null) === null)) {
26
+ throw new Error(`Task '${rawTask.code}' is missing required fields.`);
27
+ }
28
+ if (rawTask.type == task_1.TaskType.TASK) {
29
+ // 시작일, 종료일 계산
30
+ var startDate = rawTask.startDate ? new Date(rawTask.startDate) : undefined;
31
+ if (!startDate && rawTask.dependsOn) {
32
+ const dependsOnTask = await taskRepository.findOne({ where: { code: rawTask.dependsOn, project: { id: project.id } } });
33
+ if (!dependsOnTask || !dependsOnTask.endDate) {
34
+ throw new Error(`Task '${rawTask.code}' depends on a task '${rawTask.dependsOn}' that doesn't have a valid end date.`);
35
+ }
36
+ startDate = new Date(dependsOnTask.endDate);
37
+ startDate.setDate(startDate.getDate() + 1);
38
+ }
39
+ if (!startDate) {
40
+ throw new Error(`Task '${rawTask.code}' must have either a start date or a valid dependency.`);
41
+ }
42
+ var duration = rawTask.duration;
43
+ var endDate = new Date(startDate);
44
+ endDate.setDate(startDate.getDate() + duration - 1);
45
+ }
46
+ // 태스크 생성 및 저장
47
+ var task = await taskRepository.save({
48
+ code: rawTask.code,
49
+ name: rawTask.title,
50
+ type: rawTask.type,
51
+ startDate,
52
+ endDate,
53
+ project,
54
+ parent,
55
+ duration,
56
+ dependsOn: rawTask.dependsOn,
57
+ progress: rawTask.progress,
58
+ tags: rawTask.tags,
59
+ updater: user,
60
+ creator: user
61
+ });
62
+ // 리소스 생성 및 저장
63
+ if (rawTask.resources) {
64
+ for (const resource of rawTask.resources) {
65
+ const resourceType = await resourceRepository.findOne({ where: { domain: { id: domain.id }, name: resource.type } });
66
+ if (resourceType) {
67
+ await taskResourceRepository.save({
68
+ task,
69
+ resource: resourceType,
70
+ quantity: resource.allocated
71
+ });
72
+ }
73
+ else {
74
+ throw new Error(`unknown resource type: ${resource.type}`);
75
+ }
76
+ }
77
+ }
78
+ // 자식 태스크 처리
79
+ if (rawTask.children) {
80
+ var lastEndDate = null;
81
+ var lastStartDate = null;
82
+ for (const childTask of rawTask.children) {
83
+ const subtask = await importTaskData(childTask, task);
84
+ lastEndDate = !lastEndDate ? subtask.endDate : lastEndDate > subtask.endDate ? lastEndDate : subtask.endDate;
85
+ lastStartDate = !lastStartDate ? subtask.startDate : lastStartDate < subtask.startDate ? lastStartDate : subtask.startDate;
86
+ }
87
+ // 그룹 태스크의 기간(duration)을 계산합니다.
88
+ const calculatedDuration = lastEndDate && lastStartDate
89
+ ? Math.ceil((lastEndDate.getTime() - lastStartDate.getTime()) / (1000 * 60 * 60 * 24)) + 1
90
+ : 0;
91
+ task = (await taskRepository.findOne({
92
+ where: { id: task.id }
93
+ }));
94
+ return await taskRepository.save(Object.assign(Object.assign({}, task), { startDate: lastStartDate, endDate: lastEndDate, duration: calculatedDuration }));
95
+ }
96
+ return task;
97
+ };
98
+ // 루트 태스크들 임포트
99
+ for (const rootTask of tasks) {
100
+ await importTaskData(rootTask);
101
+ }
102
+ }
103
+ exports.importTasks = importTasks;
104
+ //# sourceMappingURL=import-task.js.map
@@ -0,0 +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'\n\nexport interface RawResource {\n type: string\n allocated: number\n}\n\nexport interface RawTask {\n code: string\n title: string\n type?: TaskType\n duration?: number\n startDate?: string /* YYYY-MM-DD */\n dependsOn?: string\n progress?: number\n tags?: string[]\n resources?: RawResource[]\n children?: RawTask[]\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\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 | undefined = rawTask.startDate ? new Date(rawTask.startDate) : undefined\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 throw new Error(`Task '${rawTask.code}' depends on a task '${rawTask.dependsOn}' that doesn't have a valid end date.`)\n }\n startDate = new Date(dependsOnTask.endDate)\n startDate.setDate(startDate.getDate() + 1)\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 var duration = rawTask.duration\n var endDate = new Date(startDate)\n endDate.setDate(startDate.getDate() + duration - 1)\n }\n\n // 태스크 생성 및 저장\n var 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,\n dependsOn: rawTask.dependsOn,\n progress: rawTask.progress,\n tags: rawTask.tags,\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) {\n var lastEndDate = null\n var 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({\n where: { id: task.id }\n })) as any\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,2 +1,3 @@
1
1
  export * from './service';
2
+ export * from './migrations';
2
3
  import './routes';
@@ -2,5 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  tslib_1.__exportStar(require("./service"), exports);
5
+ tslib_1.__exportStar(require("./migrations"), exports);
5
6
  require("./routes");
6
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../server/index.ts"],"names":[],"mappings":";;;AAAA,oDAAyB;AAEzB,oBAAiB","sourcesContent":["export * from './service'\n\nimport './routes'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../server/index.ts"],"names":[],"mappings":";;;AAAA,oDAAyB;AACzB,uDAA4B;AAE5B,oBAAiB","sourcesContent":["export * from './service'\nexport * from './migrations'\n\nimport './routes'\n"]}
@@ -0,0 +1,5 @@
1
+ import { MigrationInterface, QueryRunner } from 'typeorm';
2
+ export declare class Roles1723861466413 implements MigrationInterface {
3
+ up(queryRunner: QueryRunner): Promise<void>;
4
+ down(queryRunner: QueryRunner): Promise<void>;
5
+ }
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Roles1723861466413 = void 0;
4
+ const env_1 = require("@things-factory/env");
5
+ const shell_1 = require("@things-factory/shell");
6
+ const auth_base_1 = require("@things-factory/auth-base");
7
+ const SEED_ROLES = [
8
+ {
9
+ name: '감리사',
10
+ description: '감리사',
11
+ privileges: [
12
+ {
13
+ name: 'query',
14
+ category: 'board'
15
+ },
16
+ {
17
+ name: 'query',
18
+ category: 'attachment'
19
+ }
20
+ ]
21
+ },
22
+ {
23
+ name: '설계사',
24
+ description: '설계사',
25
+ privileges: [
26
+ {
27
+ name: 'query',
28
+ category: 'board'
29
+ },
30
+ {
31
+ name: 'query',
32
+ category: 'attachment'
33
+ }
34
+ ]
35
+ },
36
+ {
37
+ name: '현장관리자',
38
+ description: '현장관리자',
39
+ privileges: [
40
+ {
41
+ name: 'query',
42
+ category: 'board'
43
+ },
44
+ {
45
+ name: 'query',
46
+ category: 'attachment'
47
+ }
48
+ ]
49
+ },
50
+ {
51
+ name: '시공자',
52
+ description: '시공자',
53
+ privileges: [
54
+ {
55
+ name: 'query',
56
+ category: 'board'
57
+ },
58
+ {
59
+ name: 'query',
60
+ category: 'attachment'
61
+ }
62
+ ]
63
+ }
64
+ ];
65
+ class Roles1723861466413 {
66
+ async up(queryRunner) {
67
+ const domainRepository = (0, shell_1.getRepository)(shell_1.Domain);
68
+ const roleRepository = (0, shell_1.getRepository)(auth_base_1.Role);
69
+ const userRepository = (0, shell_1.getRepository)(auth_base_1.User);
70
+ const privilegeRepository = (0, shell_1.getRepository)(auth_base_1.Privilege);
71
+ const domain = await domainRepository.findOne({
72
+ where: { name: 'SYSTEM' }
73
+ });
74
+ const admin = await userRepository.findOne({
75
+ where: { email: 'admin@hatiolab.com' }
76
+ });
77
+ try {
78
+ for (let i = 0; i < SEED_ROLES.length; i++) {
79
+ const { name, description, privileges } = SEED_ROLES[i];
80
+ const role = await roleRepository.save({
81
+ domain,
82
+ name,
83
+ description,
84
+ creator: admin,
85
+ updater: admin
86
+ });
87
+ const ps = [];
88
+ for (const privilege of privileges) {
89
+ const { name, category } = privilege;
90
+ ps.push(await privilegeRepository.findOne({
91
+ where: {
92
+ name,
93
+ category
94
+ }
95
+ }));
96
+ }
97
+ role.privileges = ps;
98
+ await roleRepository.save(role);
99
+ }
100
+ }
101
+ catch (e) {
102
+ env_1.logger.error(e);
103
+ }
104
+ }
105
+ async down(queryRunner) {
106
+ const domainRepository = (0, shell_1.getRepository)(shell_1.Domain);
107
+ const roleRepository = (0, shell_1.getRepository)(auth_base_1.Role);
108
+ const domain = await domainRepository.findOne({
109
+ where: { name: 'SYSTEM' }
110
+ });
111
+ SEED_ROLES.reverse().forEach(async ({ name }) => {
112
+ await roleRepository.delete({ name, domain: { id: domain.id } });
113
+ });
114
+ }
115
+ }
116
+ exports.Roles1723861466413 = Roles1723861466413;
117
+ //# sourceMappingURL=1723861466413-seed-roles.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,5 @@
1
+ import { MigrationInterface, QueryRunner } from 'typeorm';
2
+ export declare class SeedCodes1723861466414 implements MigrationInterface {
3
+ up(queryRunner: QueryRunner): Promise<void>;
4
+ down(queryRunner: QueryRunner): Promise<void>;
5
+ }
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SeedCodes1723861466414 = void 0;
4
+ const env_1 = require("@things-factory/env");
5
+ const shell_1 = require("@things-factory/shell");
6
+ const auth_base_1 = require("@things-factory/auth-base");
7
+ const code_base_1 = require("@things-factory/code-base");
8
+ const SEED_COMMON_CODES = [
9
+ {
10
+ name: 'EMPLOYEE_TYPE',
11
+ description: '직원 유형',
12
+ details: [
13
+ {
14
+ name: 'FULLTIME',
15
+ description: '풀타임 정규직',
16
+ labels: null,
17
+ rank: 1
18
+ },
19
+ {
20
+ name: 'PARTTIME',
21
+ description: '파트타임 정규직',
22
+ labels: null,
23
+ rank: 2
24
+ },
25
+ {
26
+ name: 'TEMPORARY',
27
+ description: '임시직',
28
+ labels: null,
29
+ rank: 3
30
+ }
31
+ ]
32
+ },
33
+ {
34
+ name: 'JOB_POSITION',
35
+ description: '직급',
36
+ details: [
37
+ {
38
+ name: '임원',
39
+ description: '임원',
40
+ labels: null,
41
+ rank: 1
42
+ },
43
+ {
44
+ name: '직원',
45
+ description: '직원',
46
+ labels: null,
47
+ rank: 2
48
+ }
49
+ ]
50
+ },
51
+ {
52
+ name: 'JOB_RESPONSIBILITY',
53
+ description: '직책',
54
+ details: [
55
+ {
56
+ name: '감리사',
57
+ description: '감리사',
58
+ labels: null,
59
+ rank: 1
60
+ },
61
+ {
62
+ name: '설계사',
63
+ description: '설계사',
64
+ labels: null,
65
+ rank: 2
66
+ },
67
+ {
68
+ name: '현장관리자',
69
+ description: '현장관리자',
70
+ labels: null,
71
+ rank: 3
72
+ },
73
+ {
74
+ name: '시공자',
75
+ description: '시공자',
76
+ labels: null,
77
+ rank: 4
78
+ }
79
+ ]
80
+ }
81
+ ];
82
+ class SeedCodes1723861466414 {
83
+ async up(queryRunner) {
84
+ const commonCodeRepository = (0, shell_1.getRepository)(code_base_1.CommonCode);
85
+ const commonCodeDetailRepository = (0, shell_1.getRepository)(code_base_1.CommonCodeDetail);
86
+ const domainRepository = (0, shell_1.getRepository)(shell_1.Domain);
87
+ const userRepository = (0, shell_1.getRepository)(auth_base_1.User);
88
+ const domain = await domainRepository.findOne({
89
+ where: { name: 'SYSTEM' }
90
+ });
91
+ const user = await userRepository.findOne({ where: { id: domain.owner } });
92
+ try {
93
+ for (let i = 0; i < SEED_COMMON_CODES.length; i++) {
94
+ const { name, description, details } = SEED_COMMON_CODES[i];
95
+ const commonCode = await commonCodeRepository.save({
96
+ domain,
97
+ name,
98
+ description,
99
+ creator: user,
100
+ updater: user
101
+ });
102
+ for (const commonCodeDetail of details) {
103
+ const { name, description, labels, rank } = commonCodeDetail;
104
+ await commonCodeDetailRepository.save({
105
+ domain,
106
+ commonCode,
107
+ name,
108
+ description,
109
+ labels,
110
+ rank
111
+ });
112
+ }
113
+ }
114
+ }
115
+ catch (e) {
116
+ env_1.logger.error(e);
117
+ }
118
+ }
119
+ async down(queryRunner) {
120
+ const domainRepository = (0, shell_1.getRepository)(shell_1.Domain);
121
+ const domain = await domainRepository.findOne({
122
+ where: { name: 'SYSTEM' }
123
+ });
124
+ const repository = (0, shell_1.getRepository)(code_base_1.CommonCode);
125
+ SEED_COMMON_CODES.reverse().forEach(async (commonCode) => {
126
+ let record = await repository.findOne({ where: { name: commonCode.name, domain: { id: domain.id } } });
127
+ record && (await repository.remove(record));
128
+ });
129
+ }
130
+ }
131
+ exports.SeedCodes1723861466414 = SeedCodes1723861466414;
132
+ //# sourceMappingURL=1723861466414-seed-codes.js.map
@@ -0,0 +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: '감리사',\n description: '감리사',\n labels: null,\n rank: 1\n },\n {\n name: '설계사',\n description: '설계사',\n labels: null,\n rank: 2\n },\n {\n name: '현장관리자',\n description: '현장관리자',\n labels: null,\n rank: 3\n },\n {\n name: '시공자',\n description: '시공자',\n labels: null,\n rank: 4\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"]}
@@ -0,0 +1,5 @@
1
+ import { MigrationInterface, QueryRunner } from 'typeorm';
2
+ export declare class SeedResources1723861476419 implements MigrationInterface {
3
+ up(queryRunner: QueryRunner): Promise<void>;
4
+ down(queryRunner: QueryRunner): Promise<void>;
5
+ }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SeedResources1723861476419 = void 0;
4
+ const env_1 = require("@things-factory/env");
5
+ const shell_1 = require("@things-factory/shell");
6
+ const auth_base_1 = require("@things-factory/auth-base");
7
+ const resource_1 = require("../service/resource/resource");
8
+ const SEED_RESOURCES = [
9
+ { name: '철근/형틀공', type: resource_1.ResourceType.HUMAN, unit: 'man/day' },
10
+ { name: '방수공', type: resource_1.ResourceType.HUMAN, unit: 'man/day' },
11
+ { name: '목공', type: resource_1.ResourceType.HUMAN, unit: 'man/day' },
12
+ { name: '금속공', type: resource_1.ResourceType.HUMAN, unit: 'man/day' },
13
+ { name: '타일공', type: resource_1.ResourceType.HUMAN, unit: 'man/day' },
14
+ { name: '창호공', type: resource_1.ResourceType.HUMAN, unit: 'man/day' },
15
+ { name: '도배공', type: resource_1.ResourceType.HUMAN, unit: 'man/day' },
16
+ { name: '조적공', type: resource_1.ResourceType.HUMAN, unit: 'man/day' }
17
+ ];
18
+ class SeedResources1723861476419 {
19
+ async up(queryRunner) {
20
+ const resourceRepository = (0, shell_1.getRepository)(resource_1.Resource);
21
+ const domainRepository = (0, shell_1.getRepository)(shell_1.Domain);
22
+ const userRepository = (0, shell_1.getRepository)(auth_base_1.User);
23
+ const domain = await domainRepository.findOne({
24
+ where: { name: 'SYSTEM' }
25
+ });
26
+ const user = await userRepository.findOne({ where: { id: domain.owner } });
27
+ try {
28
+ for (let i = 0; i < SEED_RESOURCES.length; i++) {
29
+ const { name, type, unit } = SEED_RESOURCES[i];
30
+ const resource = await resourceRepository.save({
31
+ domain,
32
+ name,
33
+ type,
34
+ unit,
35
+ creator: user,
36
+ updater: user
37
+ });
38
+ }
39
+ }
40
+ catch (e) {
41
+ env_1.logger.error(e);
42
+ }
43
+ }
44
+ async down(queryRunner) {
45
+ const domainRepository = (0, shell_1.getRepository)(shell_1.Domain);
46
+ const domain = await domainRepository.findOne({
47
+ where: { name: 'SYSTEM' }
48
+ });
49
+ const repository = (0, shell_1.getRepository)(resource_1.Resource);
50
+ SEED_RESOURCES.reverse().forEach(async (resource) => {
51
+ let record = await repository.findOne({ where: { name: resource.name, domain: { id: domain.id } } });
52
+ record && (await repository.remove(record));
53
+ });
54
+ }
55
+ }
56
+ exports.SeedResources1723861476419 = SeedResources1723861476419;
57
+ //# sourceMappingURL=1723861476419-seed-resources.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,5 @@
1
+ import { MigrationInterface, QueryRunner } from 'typeorm';
2
+ export declare class SeedSampleProject1723861478420 implements MigrationInterface {
3
+ up(queryRunner: QueryRunner): Promise<void>;
4
+ down(queryRunner: QueryRunner): Promise<void>;
5
+ }
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SeedSampleProject1723861478420 = void 0;
4
+ const env_1 = require("@things-factory/env");
5
+ const shell_1 = require("@things-factory/shell");
6
+ const auth_base_1 = require("@things-factory/auth-base");
7
+ const building_complex_1 = require("@dssp/building-complex");
8
+ const project_1 = require("../service/project/project");
9
+ const SEED_SAMPLE_BUILDING_COMPLEX = {
10
+ address: '서울시 마포구 공덕동 아파트 17번지',
11
+ longitude: 37.548239525193,
12
+ latitude: 126.95315808838,
13
+ clientCompany: 'A 고객',
14
+ constructionCompany: 'B 건설',
15
+ supervisoryComapny: 'C 감리',
16
+ designCompany: 'D 디자인',
17
+ constructionType: '아파트',
18
+ etc: '',
19
+ householdCount: 500,
20
+ buildingCount: 5,
21
+ notice: '',
22
+ planXScale: 20,
23
+ planYScale: 20,
24
+ area: 22700
25
+ };
26
+ const SEED_SAMPLE_PROJECT = {
27
+ name: '서울시 마포구 공덕동 아파트 신축공사',
28
+ state: project_1.ProjectStatus.ONGOING,
29
+ startDate: '2024-01-01',
30
+ endDate: '2025-12-31',
31
+ totalProgress: 40,
32
+ weeklyProgress: 37
33
+ };
34
+ class SeedSampleProject1723861478420 {
35
+ async up(queryRunner) {
36
+ const buildingRepository = (0, shell_1.getRepository)(building_complex_1.BuildingComplex);
37
+ const projectRepository = (0, shell_1.getRepository)(project_1.Project);
38
+ const domainRepository = (0, shell_1.getRepository)(shell_1.Domain);
39
+ const userRepository = (0, shell_1.getRepository)(auth_base_1.User);
40
+ const domain = await domainRepository.findOne({
41
+ where: { name: 'SYSTEM' }
42
+ });
43
+ const user = await userRepository.findOne({ where: { id: domain.owner } });
44
+ try {
45
+ const buildingComplex = await buildingRepository.save(Object.assign(Object.assign({ domain }, SEED_SAMPLE_BUILDING_COMPLEX), { creator: user, updater: user }));
46
+ const project = await projectRepository.save(Object.assign(Object.assign({ domain }, SEED_SAMPLE_PROJECT), { buildingComplex, creator: user, updater: user }));
47
+ }
48
+ catch (e) {
49
+ env_1.logger.error(e);
50
+ }
51
+ }
52
+ async down(queryRunner) {
53
+ const domainRepository = (0, shell_1.getRepository)(shell_1.Domain);
54
+ const domain = await domainRepository.findOne({
55
+ where: { name: 'SYSTEM' }
56
+ });
57
+ const repository = (0, shell_1.getRepository)(project_1.Project);
58
+ let project = await repository.findOne({ where: { name: SEED_SAMPLE_PROJECT.name, domain: { id: domain.id } } });
59
+ project && (await repository.remove(project));
60
+ const buildRepository = (0, shell_1.getRepository)(building_complex_1.BuildingComplex);
61
+ let buildingComplex = await buildRepository.findOne({
62
+ where: { address: SEED_SAMPLE_BUILDING_COMPLEX.address, domain: { id: domain.id } }
63
+ });
64
+ buildingComplex && (await buildRepository.remove(buildingComplex));
65
+ }
66
+ }
67
+ exports.SeedSampleProject1723861478420 = SeedSampleProject1723861478420;
68
+ //# sourceMappingURL=1723861478420-seed-%08sample-project.js.map
@@ -0,0 +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, ProjectStatus } 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: ProjectStatus.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"]}
@@ -0,0 +1,5 @@
1
+ import { MigrationInterface, QueryRunner } from 'typeorm';
2
+ export declare class SeedSampleTasks1723861478421 implements MigrationInterface {
3
+ up(queryRunner: QueryRunner): Promise<void>;
4
+ down(queryRunner: QueryRunner): Promise<void>;
5
+ }