@things-factory/worklist 9.0.0-beta.8 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/README.md +30 -5
  2. package/dist-client/activity-summary-generator.js +17 -22
  3. package/dist-client/activity-summary-generator.js.map +1 -1
  4. package/dist-client/components/activity-/bowner-view.js +24 -24
  5. package/dist-client/components/activity-/bowner-view.js.map +1 -1
  6. package/dist-client/components/activity-approval-ribon.js +47 -48
  7. package/dist-client/components/activity-approval-ribon.js.map +1 -1
  8. package/dist-client/components/activity-instance-preview.js +34 -32
  9. package/dist-client/components/activity-instance-preview.js.map +1 -1
  10. package/dist-client/components/activity-instance-ribon.js +41 -41
  11. package/dist-client/components/activity-instance-ribon.js.map +1 -1
  12. package/dist-client/components/activity-intro-view.js +24 -24
  13. package/dist-client/components/activity-intro-view.js.map +1 -1
  14. package/dist-client/components/activity-reporter-view.js +24 -24
  15. package/dist-client/components/activity-reporter-view.js.map +1 -1
  16. package/dist-client/components/activity-starter-form.js +53 -54
  17. package/dist-client/components/activity-starter-form.js.map +1 -1
  18. package/dist-client/components/activity-thread-ribon.js +38 -38
  19. package/dist-client/components/activity-thread-ribon.js.map +1 -1
  20. package/dist-client/components/activity-thread-timeline.js +74 -74
  21. package/dist-client/components/activity-thread-timeline.js.map +1 -1
  22. package/dist-client/grist-editor/grist-editor-activity-search-key.js +2 -3
  23. package/dist-client/grist-editor/grist-editor-activity-search-key.js.map +1 -1
  24. package/dist-client/grist-editor/popup-activity-search-keys-input.js +19 -19
  25. package/dist-client/grist-editor/popup-activity-search-keys-input.js.map +1 -1
  26. package/dist-client/pages/activity/activity-list-page.js +34 -34
  27. package/dist-client/pages/activity/activity-list-page.js.map +1 -1
  28. package/dist-client/pages/activity/activity-model-item-list.js +18 -20
  29. package/dist-client/pages/activity/activity-model-item-list.js.map +1 -1
  30. package/dist-client/pages/activity/activity-page.js +64 -46
  31. package/dist-client/pages/activity/activity-page.js.map +1 -1
  32. package/dist-client/pages/activity/activity-partial-view.js +18 -18
  33. package/dist-client/pages/activity/activity-partial-view.js.map +1 -1
  34. package/dist-client/pages/activity/starter-list-page.js +22 -25
  35. package/dist-client/pages/activity/starter-list-page.js.map +1 -1
  36. package/dist-client/pages/activity-approval/activity-approval-importer.js +16 -17
  37. package/dist-client/pages/activity-approval/activity-approval-importer.js.map +1 -1
  38. package/dist-client/pages/activity-approval/activity-approval-list-page.js +30 -23
  39. package/dist-client/pages/activity-approval/activity-approval-list-page.js.map +1 -1
  40. package/dist-client/pages/activity-approval/activity-approval-page.js +105 -78
  41. package/dist-client/pages/activity-approval/activity-approval-page.js.map +1 -1
  42. package/dist-client/pages/activity-instance/activity-instance-list-page.d.ts +17 -2
  43. package/dist-client/pages/activity-instance/activity-instance-list-page.js +235 -40
  44. package/dist-client/pages/activity-instance/activity-instance-list-page.js.map +1 -1
  45. package/dist-client/pages/activity-instance/activity-instance-search-page.js +38 -38
  46. package/dist-client/pages/activity-instance/activity-instance-search-page.js.map +1 -1
  47. package/dist-client/pages/activity-instance/activity-instance-start-page.js +54 -41
  48. package/dist-client/pages/activity-instance/activity-instance-start-page.js.map +1 -1
  49. package/dist-client/pages/activity-instance/activity-instance-view.js +211 -213
  50. package/dist-client/pages/activity-instance/activity-instance-view.js.map +1 -1
  51. package/dist-client/pages/activity-stats/activity-stats-importer.js +16 -17
  52. package/dist-client/pages/activity-stats/activity-stats-importer.js.map +1 -1
  53. package/dist-client/pages/activity-stats/activity-stats-list-page.js +30 -23
  54. package/dist-client/pages/activity-stats/activity-stats-list-page.js.map +1 -1
  55. package/dist-client/pages/activity-store/activity-store-page.js +27 -26
  56. package/dist-client/pages/activity-store/activity-store-page.js.map +1 -1
  57. package/dist-client/pages/activity-supervisor/reporter-list-page.js +26 -29
  58. package/dist-client/pages/activity-supervisor/reporter-list-page.js.map +1 -1
  59. package/dist-client/pages/activity-template/activity-template-importer.js +16 -17
  60. package/dist-client/pages/activity-template/activity-template-importer.js.map +1 -1
  61. package/dist-client/pages/activity-template/activity-template-list-page.js +38 -37
  62. package/dist-client/pages/activity-template/activity-template-list-page.js.map +1 -1
  63. package/dist-client/pages/activity-template/activity-template-model-item-list.js +2 -3
  64. package/dist-client/pages/activity-template/activity-template-model-item-list.js.map +1 -1
  65. package/dist-client/pages/activity-thread/activity-thread-importer.js +16 -17
  66. package/dist-client/pages/activity-thread/activity-thread-importer.js.map +1 -1
  67. package/dist-client/pages/activity-thread/activity-thread-list-page.d.ts +1 -1
  68. package/dist-client/pages/activity-thread/activity-thread-list-page.js +38 -36
  69. package/dist-client/pages/activity-thread/activity-thread-list-page.js.map +1 -1
  70. package/dist-client/pages/activity-thread/activity-thread-page.js +71 -51
  71. package/dist-client/pages/activity-thread/activity-thread-page.js.map +1 -1
  72. package/dist-client/pages/activity-thread/activity-thread-view-page.js +69 -60
  73. package/dist-client/pages/activity-thread/activity-thread-view-page.js.map +1 -1
  74. package/dist-client/pages/activity-thread/activity-thread-view.js +150 -151
  75. package/dist-client/pages/activity-thread/activity-thread-view.js.map +1 -1
  76. package/dist-client/pages/installable-activity/installable-activity-list-page.js +25 -30
  77. package/dist-client/pages/installable-activity/installable-activity-list-page.js.map +1 -1
  78. package/dist-client/pages/todo/approval-done-list-page.js +39 -35
  79. package/dist-client/pages/todo/approval-done-list-page.js.map +1 -1
  80. package/dist-client/pages/todo/approval-pending-list-page.js +58 -53
  81. package/dist-client/pages/todo/approval-pending-list-page.js.map +1 -1
  82. package/dist-client/pages/todo/done-list-calendar-page.js +17 -17
  83. package/dist-client/pages/todo/done-list-calendar-page.js.map +1 -1
  84. package/dist-client/pages/todo/done-list-page.js +40 -35
  85. package/dist-client/pages/todo/done-list-page.js.map +1 -1
  86. package/dist-client/pages/todo/draft-list-page.js +27 -30
  87. package/dist-client/pages/todo/draft-list-page.js.map +1 -1
  88. package/dist-client/pages/todo/pickable-list-page.js +31 -37
  89. package/dist-client/pages/todo/pickable-list-page.js.map +1 -1
  90. package/dist-client/pages/todo/todo-list-page.js +55 -54
  91. package/dist-client/pages/todo/todo-list-page.js.map +1 -1
  92. package/dist-client/templates/activity-approval-context-template.js +49 -49
  93. package/dist-client/templates/activity-approval-context-template.js.map +1 -1
  94. package/dist-client/templates/activity-instance-context-template.js +104 -104
  95. package/dist-client/templates/activity-instance-context-template.js.map +1 -1
  96. package/dist-client/templates/activity-thread-context-template.js +41 -41
  97. package/dist-client/templates/activity-thread-context-template.js.map +1 -1
  98. package/dist-client/tsconfig.tsbuildinfo +1 -1
  99. package/dist-server/controllers/activity-approval/_abort.js +18 -2
  100. package/dist-server/controllers/activity-approval/_abort.js.map +1 -1
  101. package/dist-server/controllers/activity-approval/approve.js +25 -3
  102. package/dist-server/controllers/activity-approval/approve.js.map +1 -1
  103. package/dist-server/controllers/activity-approval/check-authority.js +2 -3
  104. package/dist-server/controllers/activity-approval/check-authority.js.map +1 -1
  105. package/dist-server/controllers/activity-approval/delegate.js +17 -3
  106. package/dist-server/controllers/activity-approval/delegate.js.map +1 -1
  107. package/dist-server/controllers/activity-approval/reject.js +16 -2
  108. package/dist-server/controllers/activity-approval/reject.js.map +1 -1
  109. package/dist-server/controllers/activity-approval/save.js +6 -2
  110. package/dist-server/controllers/activity-approval/save.js.map +1 -1
  111. package/dist-server/controllers/activity-installation/activity-installation-controller.js +1 -1
  112. package/dist-server/controllers/activity-installation/activity-installation-controller.js.map +1 -1
  113. package/dist-server/controllers/activity-installation/call-webhook.js +3 -1
  114. package/dist-server/controllers/activity-installation/call-webhook.js.map +1 -1
  115. package/dist-server/controllers/activity-instance/abort.js +9 -1
  116. package/dist-server/controllers/activity-instance/abort.js.map +1 -1
  117. package/dist-server/controllers/activity-instance/draft.js +19 -2
  118. package/dist-server/controllers/activity-instance/draft.js.map +1 -1
  119. package/dist-server/controllers/activity-instance/end.js +10 -2
  120. package/dist-server/controllers/activity-instance/end.js.map +1 -1
  121. package/dist-server/controllers/activity-instance/issue.js +30 -5
  122. package/dist-server/controllers/activity-instance/issue.js.map +1 -1
  123. package/dist-server/controllers/activity-instance/pick.js +5 -1
  124. package/dist-server/controllers/activity-instance/pick.js.map +1 -1
  125. package/dist-server/controllers/activity-thread/_abort.js +9 -1
  126. package/dist-server/controllers/activity-thread/_abort.js.map +1 -1
  127. package/dist-server/controllers/activity-thread/check-authority.js +2 -3
  128. package/dist-server/controllers/activity-thread/check-authority.js.map +1 -1
  129. package/dist-server/controllers/activity-thread/delegate.js +9 -1
  130. package/dist-server/controllers/activity-thread/delegate.js.map +1 -1
  131. package/dist-server/controllers/activity-thread/end.js +9 -2
  132. package/dist-server/controllers/activity-thread/end.js.map +1 -1
  133. package/dist-server/controllers/activity-thread/restart.js +9 -1
  134. package/dist-server/controllers/activity-thread/restart.js.map +1 -1
  135. package/dist-server/controllers/activity-thread/save.js +7 -1
  136. package/dist-server/controllers/activity-thread/save.js.map +1 -1
  137. package/dist-server/controllers/activity-thread/start.js +8 -1
  138. package/dist-server/controllers/activity-thread/start.js.map +1 -1
  139. package/dist-server/controllers/activity-thread/submit.js +18 -4
  140. package/dist-server/controllers/activity-thread/submit.js.map +1 -1
  141. package/dist-server/controllers/common.js +5 -5
  142. package/dist-server/controllers/common.js.map +1 -1
  143. package/dist-server/routes.js +5 -2
  144. package/dist-server/routes.js.map +1 -1
  145. package/dist-server/service/activity/activity-mutation.js +43 -13
  146. package/dist-server/service/activity/activity-mutation.js.map +1 -1
  147. package/dist-server/service/activity/activity-query.js +3 -3
  148. package/dist-server/service/activity/activity-query.js.map +1 -1
  149. package/dist-server/service/activity-approval/activity-approval-subscription.js +3 -4
  150. package/dist-server/service/activity-approval/activity-approval-subscription.js.map +1 -1
  151. package/dist-server/service/activity-instance/activity-instance-mutation.d.ts +1 -0
  152. package/dist-server/service/activity-instance/activity-instance-mutation.js +36 -3
  153. package/dist-server/service/activity-instance/activity-instance-mutation.js.map +1 -1
  154. package/dist-server/service/activity-instance/activity-instance-query.d.ts +1 -0
  155. package/dist-server/service/activity-instance/activity-instance-query.js +25 -5
  156. package/dist-server/service/activity-instance/activity-instance-query.js.map +1 -1
  157. package/dist-server/service/activity-instance/activity-instance-subscription.js +3 -4
  158. package/dist-server/service/activity-instance/activity-instance-subscription.js.map +1 -1
  159. package/dist-server/service/activity-template/activity-template-mutation.js +25 -7
  160. package/dist-server/service/activity-template/activity-template-mutation.js.map +1 -1
  161. package/dist-server/service/activity-template/activity-template-query.js +1 -1
  162. package/dist-server/service/activity-template/activity-template-query.js.map +1 -1
  163. package/dist-server/service/activity-thread/activity-thread-subscription.js +3 -4
  164. package/dist-server/service/activity-thread/activity-thread-subscription.js.map +1 -1
  165. package/dist-server/service/installable-activity/installable-activity-mutation.js +19 -3
  166. package/dist-server/service/installable-activity/installable-activity-mutation.js.map +1 -1
  167. package/dist-server/tsconfig.tsbuildinfo +1 -1
  168. package/helps/worklist/activity-instance-list-page.md +90 -0
  169. package/helps/worklist/activity-instance-search-page.md +83 -0
  170. package/helps/worklist/activity-instance-start-page.md +92 -0
  171. package/helps/worklist/activity-thread-list-page.md +87 -0
  172. package/helps/worklist/activity-thread-page.md +93 -0
  173. package/helps/worklist/activity-thread-view-page.md +86 -0
  174. package/helps/worklist/approval-done-list-page.md +72 -0
  175. package/helps/worklist/approval-pending-list-page.md +89 -0
  176. package/helps/worklist/done-list-calendar-page.md +66 -0
  177. package/helps/worklist/done-list-page.md +76 -0
  178. package/helps/worklist/draft-list-page.md +80 -0
  179. package/helps/worklist/pickable-list-page.md +75 -0
  180. package/helps/worklist/todo-list-page.md +90 -0
  181. package/package.json +16 -15
  182. package/translations/en.json +3 -1
  183. package/translations/ja.json +2 -0
  184. package/translations/ko.json +2 -0
  185. package/translations/ms.json +2 -0
  186. package/translations/zh.json +2 -0
@@ -1 +1 @@
1
- {"version":3,"file":"issue.js","sourceRoot":"","sources":["../../../server/controllers/activity-instance/issue.ts"],"names":[],"mappings":"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","sourcesContent":["import { In } from 'typeorm'\nimport { Activity } from '../../service/activity/activity.js'\nimport { ActivityInstance, ActivityInstanceStatus } from '../../service/activity-instance/activity-instance.js'\nimport { ActivityInstanceIssue } from '../../service/activity-instance/activity-instance-type.js'\nimport {\n createActivityThreadWithUnassigned,\n createActivityThreadsForAllRoleUsers,\n createActivityThreadsForUsers,\n getSystemUserFromOrgMemberItem,\n createActivityThreadForUser,\n fillActivitySearchKeys\n} from '../common.js'\nimport { submit } from '../activity-thread/submit.js'\n\nexport async function issue(\n activityInstance: ActivityInstanceIssue,\n context: ResolverContext\n): Promise<ActivityInstance> {\n const { domain, user, tx } = context.state\n const issuedAt = new Date()\n var {\n id,\n name,\n description,\n assignees,\n uiType,\n uiSource,\n viewType,\n viewSource,\n dueAt,\n priority,\n approvalLine,\n activityId,\n activityType,\n assigneeRole,\n supervisoryRole,\n input\n } = activityInstance\n\n var origin = id\n ? await tx.getRepository(ActivityInstance).findOne({\n where: { domain: { id: domain.id }, id },\n relations: [\n 'domain',\n 'activity',\n 'assigneeRole',\n 'supervisoryRole',\n 'updater',\n 'creator',\n 'starter',\n 'terminator'\n ]\n })\n : null\n\n /* \n Prerequisites for a Task to Be Issued.\n - The previous state of the task should be Draft.\n */\n if (origin && origin.state !== ActivityInstanceStatus.Draft) {\n throw new Error(\n context.t(`error.activity-instance is already issued`, {\n id: id,\n state: origin.state\n })\n )\n }\n\n var repository = tx.getRepository(Activity)\n var activity =\n origin?.activity ||\n (await repository.findOne({\n where: { domain: domain.parentId ? { id: In([domain.id, domain.parentId]) } : { id: domain.id }, id: activityId },\n relations: ['assigneeRole', 'supervisoryRole']\n }))\n\n if (!activity) {\n throw new Error(\n context.t('error.activity not found', {\n activity: activityId\n })\n )\n }\n\n if (!origin) {\n activityInstance.name = name || activity.name\n activityInstance.description = description || activity.description\n activityInstance.activityType = activityType || activity.activityType\n activityInstance.uiType = uiType || activity.uiType\n activityInstance.uiSource = uiSource || activity.uiSource\n activityInstance.viewType = viewType || activity.viewType\n activityInstance.viewSource = viewSource || activity.viewSource\n activityInstance.assigneeRole = assigneeRole || activity.assigneeRole\n activityInstance.supervisoryRole = supervisoryRole || activity.supervisoryRole\n activityInstance.priority = priority ?? activity.priority\n\n activityInstance.adhocType = 'standard'\n activityInstance.refBy = activityId\n\n if (!assignees || !approvalLine) {\n if (!assignees) {\n assignees = activityInstance.assignees = activity.assignees\n }\n\n if (!approvalLine) {\n approvalLine = activityInstance.approvalLine = activity.approvalLine\n }\n\n if (!dueAt && activity.standardTime) {\n activityInstance.dueAt = new Date(issuedAt.getTime() + activity.standardTime * 1000)\n }\n }\n }\n\n const activitySearchKeys = fillActivitySearchKeys(activity?.searchKeys, input)\n\n if (activity.startingType == 'post') {\n /* \n startingType이 'post'이면, \n activityInstance 이슈와 동시에 issuer에게 할당된 activityThread가 생성되고 submit까지 모두 완료되게 된다.\n 만일, 결재선이 있다면, 상신되게 된다.\n */\n const posted = await tx.getRepository(ActivityInstance).save({\n creator: user,\n ...origin,\n ...activityInstance,\n transaction: 'post',\n activity,\n ...activitySearchKeys,\n state: ActivityInstanceStatus.Started,\n domain,\n issuer: user,\n updater: user,\n issuedAt,\n startedAt: issuedAt\n })\n\n const thread = await createActivityThreadForUser('post', posted, user, context)\n\n /* post 방식은 thread가 하나이므로, instance의 output을 그대로 thread의 output이라고 판단할 수 있다. 따라서, 아래 로직은 제거한다. */\n // const data = { ...activityInstance.input, ...activityInstance.output }\n // const output = (activity.model || [])\n // .filter(item => item.inout === 'inout' || item.inout === 'out')\n // .reduce((inout, item) => {\n // inout[item.tag] = data[item.tag]\n // return inout\n // }, {})\n\n await submit({ id: thread.id, output: activityInstance.output }, context)\n\n return await tx.getRepository(ActivityInstance).findOneBy({ id: posted.id })\n } else {\n const issued = await tx.getRepository(ActivityInstance).save({\n creator: user,\n ...origin,\n ...activityInstance,\n transaction: 'issue',\n activity,\n ...activitySearchKeys,\n state: ActivityInstanceStatus.Issued,\n domain,\n issuer: user,\n updater: user,\n issuedAt\n })\n\n /*\n 1. 하나의 thread가 필요한 경우 (대부분)\n 조건 : activityInstance의 threadsMin이 1 이어야 한다.\n 로직 1 : getSystemUserFromOrgMemberItem 의 결과가 한명이라면 그대로 activityThread.assignee로 직접 할당한다.\n 로직 2 : getSystemUserFromOrgMemberItem 의 결과가 한명이 아니라면, assignee타입이 assigneeRole 인 경우에만 처리가 가능하다.\n 이 경우에는 assignee를 비운다. - createActivityThreadWithUnassigned\n 2. 할당되지 않은 복수개의 thread가 필요한 경우\n 조건 : threadsMin이 1 이상이어야 한다.\n 로직 1 : getSystemUserFromOrgMemberItem 의 결과와 threadsMin 값이 같다면, 그대로 activityThread.assignee로 직접 할당한다. createActivityThreadsForAllRoleUsers\n 로직 2 : createActivityThreadWithUnassigned\n 3. 모든 assignee가 처리를 해야하는 경우\n 조건 : threadsMin이 0 이어야 한다.\n 로직 : getSystemUserFromOrgMemberItem 의 결과로 createActivityThreadsForUsers\n */\n\n // assignees가 복수인 것은 아무 의미가 없다.\n const assignedUsers = await Promise.all(\n (assignees || []).map(assignee => getSystemUserFromOrgMemberItem(assignee, context))\n )\n\n if (assignedUsers.length == 0) {\n if (issued.assigneeRoleId) {\n if (issued.threadsMin === 0) {\n /* assigneeRoleId에 해당하는 모든 assignee 에게 태스크를 할당하는 경우 */\n await createActivityThreadsForAllRoleUsers('issue', issued, context)\n } else {\n /* minimum threads 설정에 따른 pending assignment 상태로 activityThread를 만드는 경우 */\n await createActivityThreadWithUnassigned('issue', issued, context)\n }\n }\n } else {\n await createActivityThreadsForUsers('issue', issued, assignedUsers, context)\n }\n\n return await tx.getRepository(ActivityInstance).findOneBy({ id: issued.id })\n }\n}\n"]}
1
+ {"version":3,"file":"issue.js","sourceRoot":"","sources":["../../../server/controllers/activity-instance/issue.ts"],"names":[],"mappings":"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","sourcesContent":["import { In } from 'typeorm'\nimport { Activity } from '../../service/activity/activity.js'\nimport { ActivityInstance, ActivityInstanceStatus } from '../../service/activity-instance/activity-instance.js'\nimport { ActivityInstanceIssue } from '../../service/activity-instance/activity-instance-type.js'\nimport {\n createActivityThreadWithUnassigned,\n createActivityThreadsForAllRoleUsers,\n createActivityThreadsForUsers,\n getSystemUserFromOrgMemberItem,\n createActivityThreadForUser,\n fillActivitySearchKeys\n} from '../common.js'\nimport { submit } from '../activity-thread/submit.js'\n\nexport async function issue(\n activityInstance: ActivityInstanceIssue,\n context: ResolverContext\n): Promise<ActivityInstance> {\n const { domain, user, tx } = context.state\n const issuedAt = new Date()\n var {\n id,\n name,\n description,\n assignees,\n uiType,\n uiSource,\n viewType,\n viewSource,\n dueAt,\n priority,\n approvalLine,\n activityId,\n activityType,\n assigneeRole,\n supervisoryRole,\n input\n } = activityInstance\n\n var origin = id\n ? await tx.getRepository(ActivityInstance).findOne({\n where: { domain: { id: domain.id }, id },\n relations: [\n 'domain',\n 'activity',\n 'assigneeRole',\n 'supervisoryRole',\n 'updater',\n 'creator',\n 'starter',\n 'terminator'\n ]\n })\n : null\n\n /* \n Prerequisites for a Task to Be Issued.\n - The previous state of the task should be Draft.\n */\n if (origin && origin.state !== ActivityInstanceStatus.Draft) {\n throw new Error(\n context.t(`error.activity-instance is already issued`, {\n id: id,\n state: origin.state\n })\n )\n }\n\n var repository = tx.getRepository(Activity)\n var activity =\n origin?.activity ||\n (await repository.findOne({\n where: { domain: domain.parentId ? { id: In([domain.id, domain.parentId]) } : { id: domain.id }, id: activityId },\n relations: ['assigneeRole', 'supervisoryRole']\n }))\n\n if (!activity) {\n throw new Error(\n context.t('error.activity not found', {\n activity: activityId\n })\n )\n }\n\n if (!origin) {\n activityInstance.name = name || activity.name\n activityInstance.description = description || activity.description\n activityInstance.activityType = activityType || activity.activityType\n activityInstance.uiType = uiType || activity.uiType\n activityInstance.uiSource = uiSource || activity.uiSource\n activityInstance.viewType = viewType || activity.viewType\n activityInstance.viewSource = viewSource || activity.viewSource\n activityInstance.assigneeRole = assigneeRole || activity.assigneeRole\n activityInstance.supervisoryRole = supervisoryRole || activity.supervisoryRole\n activityInstance.priority = priority ?? activity.priority\n\n activityInstance.adhocType = 'standard'\n activityInstance.refBy = activityId\n\n if (!assignees || !approvalLine) {\n if (!assignees) {\n assignees = activityInstance.assignees = activity.assignees\n }\n\n if (!approvalLine) {\n approvalLine = activityInstance.approvalLine = activity.approvalLine\n }\n\n if (!dueAt && activity.standardTime) {\n activityInstance.dueAt = new Date(issuedAt.getTime() + activity.standardTime * 1000)\n }\n }\n }\n\n const activitySearchKeys = fillActivitySearchKeys(activity?.searchKeys, input)\n\n if (activity.startingType == 'post') {\n /* \n startingType이 'post'이면, \n activityInstance 이슈와 동시에 issuer에게 할당된 activityThread가 생성되고 submit까지 모두 완료되게 된다.\n 만일, 결재선이 있다면, 상신되게 된다.\n */\n const posted = await tx.getRepository(ActivityInstance).save({\n creator: user,\n ...origin,\n ...activityInstance,\n transaction: 'post',\n activity,\n ...activitySearchKeys,\n state: ActivityInstanceStatus.Started,\n domain,\n issuer: user,\n updater: user,\n issuedAt,\n startedAt: issuedAt\n })\n\n const thread = await createActivityThreadForUser('post', posted, user, context)\n\n /* post 방식은 thread가 하나이므로, instance의 output을 그대로 thread의 output이라고 판단할 수 있다. 따라서, 아래 로직은 제거한다. */\n // const data = { ...activityInstance.input, ...activityInstance.output }\n // const output = (activity.model || [])\n // .filter(item => item.inout === 'inout' || item.inout === 'out')\n // .reduce((inout, item) => {\n // inout[item.tag] = data[item.tag]\n // return inout\n // }, {})\n\n await submit({ id: thread.id, output: activityInstance.output }, context)\n\n return await tx.getRepository(ActivityInstance).findOneBy({ id: posted.id })\n } else {\n const issued = await tx.getRepository(ActivityInstance).save({\n creator: user,\n ...origin,\n ...activityInstance,\n transaction: 'issue',\n activity,\n ...activitySearchKeys,\n state: ActivityInstanceStatus.Issued,\n domain,\n issuer: user,\n updater: user,\n issuedAt\n })\n\n /*\n 1. 하나의 thread가 필요한 경우 (대부분)\n 조건 : activityInstance의 threadsMin이 1 이어야 한다.\n 로직 1 : getSystemUserFromOrgMemberItem 의 결과가 한명이라면 그대로 activityThread.assignee로 직접 할당한다.\n 로직 2 : getSystemUserFromOrgMemberItem 의 결과가 한명이 아니라면, assignee타입이 assigneeRole 인 경우에만 처리가 가능하다.\n 이 경우에는 assignee를 비운다. - createActivityThreadWithUnassigned\n 2. 할당되지 않은 복수개의 thread가 필요한 경우\n 조건 : threadsMin이 1 이상이어야 한다.\n 로직 1 : getSystemUserFromOrgMemberItem 의 결과와 threadsMin 값이 같다면, 그대로 activityThread.assignee로 직접 할당한다. createActivityThreadsForAllRoleUsers\n 로직 2 : createActivityThreadWithUnassigned\n 3. 모든 assignee가 처리를 해야하는 경우\n 조건 : threadsMin이 0 이어야 한다.\n 로직 : getSystemUserFromOrgMemberItem 의 결과로 createActivityThreadsForUsers\n */\n\n // assignees가 복수인 것은 아무 의미가 없다.\n const assignedUsers = await Promise.all(\n (assignees || []).map(assignee => getSystemUserFromOrgMemberItem(assignee, context))\n )\n\n if (assignedUsers.length == 0) {\n if (issued.assigneeRoleId) {\n if (issued.threadsMin === 0) {\n /* assigneeRoleId에 해당하는 모든 assignee 에게 태스크를 할당하는 경우 */\n await createActivityThreadsForAllRoleUsers('issue', issued, context)\n } else {\n /* minimum threads 설정에 따른 pending assignment 상태로 activityThread를 만드는 경우 */\n await createActivityThreadWithUnassigned('issue', issued, context)\n }\n }\n } else {\n await createActivityThreadsForUsers('issue', issued, assignedUsers, context)\n }\n\n return await tx.getRepository(ActivityInstance).findOneBy({ id: issued.id })\n }\n}\n"]}
@@ -26,7 +26,11 @@ async function pick(id, context) {
26
26
  actual: activityInstance.state
27
27
  }));
28
28
  }
29
- const picked = await repository.save(Object.assign(Object.assign({}, activityInstance), { transaction: 'pick', updater: user }));
29
+ const picked = await repository.save({
30
+ ...activityInstance,
31
+ transaction: 'pick',
32
+ updater: user
33
+ });
30
34
  return (await (0, common_js_1.createActivityThreadsForUsers)('pick', picked, [user], context))[0];
31
35
  }
32
36
  //# sourceMappingURL=pick.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pick.js","sourceRoot":"","sources":["../../../server/controllers/activity-instance/pick.ts"],"names":[],"mappings":";;AAIA,oBAwCC;AA5CD,+FAA+G;AAE/G,4CAA4D;AAErD,KAAK,UAAU,IAAI,CAAC,EAAU,EAAE,OAAwB;IAC7D,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAC1C,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,uCAAgB,CAAC,CAAA;IAErD,IAAI,gBAAgB,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;QAC9C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;QACxC,SAAS,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC;KACpH,CAAC,CAAA;IAEF,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,mCAAmC,EAAE;YAC7C,gBAAgB,EAAE,EAAE;SACrB,CAAC,CACH,CAAA;IACH,CAAC;IAED;;;MAGE;IACF,IACE,gBAAgB,CAAC,KAAK,KAAK,6CAAsB,CAAC,MAAM;QACxD,gBAAgB,CAAC,KAAK,KAAK,6CAAsB,CAAC,UAAU,EAC5D,CAAC;QACD,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,gDAAgD,EAAE;YAC1D,EAAE;YACF,MAAM,EAAE,gBAAgB,CAAC,KAAK;SAC/B,CAAC,CACH,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,iCAC/B,gBAAgB,KACnB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,IAAI,IACb,CAAA;IAEF,OAAO,CAAC,MAAM,IAAA,yCAA6B,EAAC,MAAM,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAClF,CAAC","sourcesContent":["import { ActivityInstance, ActivityInstanceStatus } from '../../service/activity-instance/activity-instance.js'\nimport { ActivityThread } from '../../service/activity-thread/activity-thread.js'\nimport { createActivityThreadsForUsers } from '../common.js'\n\nexport async function pick(id: string, context: ResolverContext): Promise<ActivityThread> {\n const { domain, user, tx } = context.state\n const repository = tx.getRepository(ActivityInstance)\n\n var activityInstance = await repository.findOne({\n where: { domain: { id: domain.id }, id },\n relations: ['domain', 'activity', 'assigneeRole', 'supervisoryRole', 'updater', 'creator', 'starter', 'terminator']\n })\n\n if (!activityInstance) {\n throw new Error(\n context.t('error.activity-instance not found', {\n activityInstance: id\n })\n )\n }\n\n /* \n Prerequisites for a Task to Be Picked.\n - The previous state of the task must not be Assigned.\n */\n if (\n activityInstance.state !== ActivityInstanceStatus.Issued &&\n activityInstance.state !== ActivityInstanceStatus.Unassigned\n ) {\n throw new Error(\n context.t(`error.activity-instance should not be assigned`, {\n id,\n actual: activityInstance.state\n })\n )\n }\n\n const picked = await repository.save({\n ...activityInstance,\n transaction: 'pick',\n updater: user\n })\n\n return (await createActivityThreadsForUsers('pick', picked, [user], context))[0]\n}\n"]}
1
+ {"version":3,"file":"pick.js","sourceRoot":"","sources":["../../../server/controllers/activity-instance/pick.ts"],"names":[],"mappings":";;AAIA,oBAwCC;AA5CD,+FAA+G;AAE/G,4CAA4D;AAErD,KAAK,UAAU,IAAI,CAAC,EAAU,EAAE,OAAwB;IAC7D,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAC1C,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,uCAAgB,CAAC,CAAA;IAErD,IAAI,gBAAgB,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;QAC9C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;QACxC,SAAS,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC;KACpH,CAAC,CAAA;IAEF,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,mCAAmC,EAAE;YAC7C,gBAAgB,EAAE,EAAE;SACrB,CAAC,CACH,CAAA;IACH,CAAC;IAED;;;MAGE;IACF,IACE,gBAAgB,CAAC,KAAK,KAAK,6CAAsB,CAAC,MAAM;QACxD,gBAAgB,CAAC,KAAK,KAAK,6CAAsB,CAAC,UAAU,EAC5D,CAAC;QACD,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,gDAAgD,EAAE;YAC1D,EAAE;YACF,MAAM,EAAE,gBAAgB,CAAC,KAAK;SAC/B,CAAC,CACH,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC;QACnC,GAAG,gBAAgB;QACnB,WAAW,EAAE,MAAM;QACnB,OAAO,EAAE,IAAI;KACd,CAAC,CAAA;IAEF,OAAO,CAAC,MAAM,IAAA,yCAA6B,EAAC,MAAM,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAClF,CAAC","sourcesContent":["import { ActivityInstance, ActivityInstanceStatus } from '../../service/activity-instance/activity-instance.js'\nimport { ActivityThread } from '../../service/activity-thread/activity-thread.js'\nimport { createActivityThreadsForUsers } from '../common.js'\n\nexport async function pick(id: string, context: ResolverContext): Promise<ActivityThread> {\n const { domain, user, tx } = context.state\n const repository = tx.getRepository(ActivityInstance)\n\n var activityInstance = await repository.findOne({\n where: { domain: { id: domain.id }, id },\n relations: ['domain', 'activity', 'assigneeRole', 'supervisoryRole', 'updater', 'creator', 'starter', 'terminator']\n })\n\n if (!activityInstance) {\n throw new Error(\n context.t('error.activity-instance not found', {\n activityInstance: id\n })\n )\n }\n\n /* \n Prerequisites for a Task to Be Picked.\n - The previous state of the task must not be Assigned.\n */\n if (\n activityInstance.state !== ActivityInstanceStatus.Issued &&\n activityInstance.state !== ActivityInstanceStatus.Unassigned\n ) {\n throw new Error(\n context.t(`error.activity-instance should not be assigned`, {\n id,\n actual: activityInstance.state\n })\n )\n }\n\n const picked = await repository.save({\n ...activityInstance,\n transaction: 'pick',\n updater: user\n })\n\n return (await createActivityThreadsForUsers('pick', picked, [user], context))[0]\n}\n"]}
@@ -23,6 +23,14 @@ async function _abort({ activityThread, reason }, context) {
23
23
  comment: reason
24
24
  }, context);
25
25
  }
26
- return await repository.save(Object.assign(Object.assign({}, activityThread), { reason, state: activity_thread_js_1.ActivityThreadStatus.Aborted, transaction: 'abort', updater: user, terminatedAt: new Date(), terminator: user }));
26
+ return await repository.save({
27
+ ...activityThread,
28
+ reason,
29
+ state: activity_thread_js_1.ActivityThreadStatus.Aborted,
30
+ transaction: 'abort',
31
+ updater: user,
32
+ terminatedAt: new Date(),
33
+ terminator: user
34
+ });
27
35
  }
28
36
  //# sourceMappingURL=_abort.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_abort.js","sourceRoot":"","sources":["../../../server/controllers/activity-thread/_abort.ts"],"names":[],"mappings":";;AAIA,wBAsCC;AA1CD,yFAAuG;AACvG,+FAAiH;AACjH,8DAAgF;AAEzE,KAAK,UAAU,MAAM,CAC1B,EAAE,cAAc,EAAE,MAAM,EAAsD,EAC9E,OAAwB;IAExB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAE1C,IAAI,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,mCAAc,CAAC,CAAA;IAEjD,IAAI,iBAAiB,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,uCAAgB,CAAC,CAAC,IAAI,CAAC;QACpE,KAAK,EAAE;YACL,cAAc,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,EAAE;YACzC,QAAQ,EAAE,+CAAwB,CAAC,OAAO;SAC3C;KACF,CAAC,CAAA;IAEF;;;MAGE;IACF,KAAK,IAAI,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;QAC/C,MAAM,IAAA,kBAAqB,EACzB;YACE,gBAAgB;YAChB,OAAO,EAAE,MAAM;SAChB,EACD,OAAO,CACR,CAAA;IACH,CAAC;IAED,OAAO,MAAM,UAAU,CAAC,IAAI,iCACvB,cAAc,KACjB,MAAM,EACN,KAAK,EAAE,yCAAoB,CAAC,OAAO,EACnC,WAAW,EAAE,OAAO,EACpB,OAAO,EAAE,IAAI,EACb,YAAY,EAAE,IAAI,IAAI,EAAE,EACxB,UAAU,EAAE,IAAI,IAChB,CAAA;AACJ,CAAC","sourcesContent":["import { ActivityThread, ActivityThreadStatus } from '../../service/activity-thread/activity-thread.js'\nimport { ActivityApproval, ActivityApprovalJudgment } from '../../service/activity-approval/activity-approval.js'\nimport { _abort as abortActivityApproval } from '../activity-approval/_abort.js'\n\nexport async function _abort(\n { activityThread, reason }: { activityThread: ActivityThread; reason: string },\n context: ResolverContext\n): Promise<ActivityThread> {\n const { domain, user, tx } = context.state\n\n var repository = tx.getRepository(ActivityThread)\n\n let activityApprovals = await tx.getRepository(ActivityApproval).find({\n where: {\n activityThread: { id: activityThread.id },\n judgment: ActivityApprovalJudgment.Pending\n }\n })\n\n /* \n Actions to be processed when a activity thread is aborted\n - All related activity approvals must be aborted.\n */\n for (let activityApproval of activityApprovals) {\n await abortActivityApproval(\n {\n activityApproval,\n comment: reason\n },\n context\n )\n }\n\n return await repository.save({\n ...activityThread,\n reason,\n state: ActivityThreadStatus.Aborted,\n transaction: 'abort',\n updater: user,\n terminatedAt: new Date(),\n terminator: user\n })\n}\n"]}
1
+ {"version":3,"file":"_abort.js","sourceRoot":"","sources":["../../../server/controllers/activity-thread/_abort.ts"],"names":[],"mappings":";;AAIA,wBAsCC;AA1CD,yFAAuG;AACvG,+FAAiH;AACjH,8DAAgF;AAEzE,KAAK,UAAU,MAAM,CAC1B,EAAE,cAAc,EAAE,MAAM,EAAsD,EAC9E,OAAwB;IAExB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAE1C,IAAI,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,mCAAc,CAAC,CAAA;IAEjD,IAAI,iBAAiB,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,uCAAgB,CAAC,CAAC,IAAI,CAAC;QACpE,KAAK,EAAE;YACL,cAAc,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,EAAE;YACzC,QAAQ,EAAE,+CAAwB,CAAC,OAAO;SAC3C;KACF,CAAC,CAAA;IAEF;;;MAGE;IACF,KAAK,IAAI,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;QAC/C,MAAM,IAAA,kBAAqB,EACzB;YACE,gBAAgB;YAChB,OAAO,EAAE,MAAM;SAChB,EACD,OAAO,CACR,CAAA;IACH,CAAC;IAED,OAAO,MAAM,UAAU,CAAC,IAAI,CAAC;QAC3B,GAAG,cAAc;QACjB,MAAM;QACN,KAAK,EAAE,yCAAoB,CAAC,OAAO;QACnC,WAAW,EAAE,OAAO;QACpB,OAAO,EAAE,IAAI;QACb,YAAY,EAAE,IAAI,IAAI,EAAE;QACxB,UAAU,EAAE,IAAI;KACjB,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { ActivityThread, ActivityThreadStatus } from '../../service/activity-thread/activity-thread.js'\nimport { ActivityApproval, ActivityApprovalJudgment } from '../../service/activity-approval/activity-approval.js'\nimport { _abort as abortActivityApproval } from '../activity-approval/_abort.js'\n\nexport async function _abort(\n { activityThread, reason }: { activityThread: ActivityThread; reason: string },\n context: ResolverContext\n): Promise<ActivityThread> {\n const { domain, user, tx } = context.state\n\n var repository = tx.getRepository(ActivityThread)\n\n let activityApprovals = await tx.getRepository(ActivityApproval).find({\n where: {\n activityThread: { id: activityThread.id },\n judgment: ActivityApprovalJudgment.Pending\n }\n })\n\n /* \n Actions to be processed when a activity thread is aborted\n - All related activity approvals must be aborted.\n */\n for (let activityApproval of activityApprovals) {\n await abortActivityApproval(\n {\n activityApproval,\n comment: reason\n },\n context\n )\n }\n\n return await repository.save({\n ...activityThread,\n reason,\n state: ActivityThreadStatus.Aborted,\n transaction: 'abort',\n updater: user,\n terminatedAt: new Date(),\n terminator: user\n })\n}\n"]}
@@ -6,7 +6,6 @@ const auth_base_1 = require("@things-factory/auth-base");
6
6
  const activity_thread_js_1 = require("../../service/activity-thread/activity-thread.js");
7
7
  const activity_instance_js_1 = require("../../service/activity-instance/activity-instance.js");
8
8
  async function checkAuthority(activityThread, context) {
9
- var _a;
10
9
  const { user, tx } = context.state;
11
10
  if (activityThread.assigneeId && activityThread.assigneeId === user.id) {
12
11
  return;
@@ -17,10 +16,10 @@ async function checkAuthority(activityThread, context) {
17
16
  id: activityThread.activityInstanceId
18
17
  });
19
18
  if (activityInstance && activityInstance.assigneeRoleId) {
20
- const roles = (_a = (await (0, shell_1.getRepository)(auth_base_1.User, tx).findOne({
19
+ const roles = (await (0, shell_1.getRepository)(auth_base_1.User, tx).findOne({
21
20
  where: { id: user.id },
22
21
  relations: ['roles']
23
- }))) === null || _a === void 0 ? void 0 : _a.roles;
22
+ }))?.roles;
24
23
  if (roles.find(role => role.id == activityInstance.assigneeRoleId)) {
25
24
  activityThread.assignee = user;
26
25
  activityThread.state = activity_thread_js_1.ActivityThreadStatus.Assigned;
@@ -1 +1 @@
1
- {"version":3,"file":"check-authority.js","sourceRoot":"","sources":["../../../server/controllers/activity-thread/check-authority.ts"],"names":[],"mappings":";;AAKA,wCA+BC;AApCD,iDAAqD;AACrD,yDAAgD;AAChD,yFAAuG;AACvG,+FAAuF;AAEhF,KAAK,UAAU,cAAc,CAAC,cAA8B,EAAE,OAAwB;;IAC3F,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAElC,IAAI,cAAc,CAAC,UAAU,IAAI,cAAc,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;QACvE,OAAM;IACR,CAAC;IAED,wGAAwG;IACxG,IAAI,cAAc,CAAC,KAAK,IAAI,yCAAoB,CAAC,UAAU,EAAE,CAAC;QAC5D,MAAM,gBAAgB,GAAG,MAAM,IAAA,qBAAa,EAAC,uCAAgB,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC;YAC3E,EAAE,EAAE,cAAc,CAAC,kBAAkB;SACtC,CAAC,CAAA;QAEF,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,cAAc,EAAE,CAAC;YACxD,MAAM,KAAK,GAAG,MAAA,CACZ,MAAM,IAAA,qBAAa,EAAC,gBAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC;gBACpC,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE;gBACtB,SAAS,EAAE,CAAC,OAAO,CAAC;aACrB,CAAC,CACH,0CAAE,KAAK,CAAA;YAER,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,gBAAgB,CAAC,cAAc,CAAC,EAAE,CAAC;gBACnE,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAA;gBAC9B,cAAc,CAAC,KAAK,GAAG,yCAAoB,CAAC,QAAQ,CAAA;gBAEpD,OAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAA;AACxE,CAAC","sourcesContent":["import { getRepository } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { ActivityThread, ActivityThreadStatus } from '../../service/activity-thread/activity-thread.js'\nimport { ActivityInstance } from '../../service/activity-instance/activity-instance.js'\n\nexport async function checkAuthority(activityThread: ActivityThread, context: ResolverContext) {\n const { user, tx } = context.state\n\n if (activityThread.assigneeId && activityThread.assigneeId === user.id) {\n return\n }\n\n // TODO activityInstance의 cardinality를 기준으로 unassigned thread를 추가로 만들 지, assigned thread로 대체할 지를 구현해야한다.\n if (activityThread.state == ActivityThreadStatus.Unassigned) {\n const activityInstance = await getRepository(ActivityInstance, tx).findOneBy({\n id: activityThread.activityInstanceId\n })\n\n if (activityInstance && activityInstance.assigneeRoleId) {\n const roles = (\n await getRepository(User, tx).findOne({\n where: { id: user.id },\n relations: ['roles']\n })\n )?.roles\n\n if (roles.find(role => role.id == activityInstance.assigneeRoleId)) {\n activityThread.assignee = user\n activityThread.state = ActivityThreadStatus.Assigned\n\n return\n }\n }\n }\n\n throw new Error(context.t(`error.not authorized to handle this task`))\n}\n"]}
1
+ {"version":3,"file":"check-authority.js","sourceRoot":"","sources":["../../../server/controllers/activity-thread/check-authority.ts"],"names":[],"mappings":";;AAKA,wCA+BC;AApCD,iDAAqD;AACrD,yDAAgD;AAChD,yFAAuG;AACvG,+FAAuF;AAEhF,KAAK,UAAU,cAAc,CAAC,cAA8B,EAAE,OAAwB;IAC3F,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAElC,IAAI,cAAc,CAAC,UAAU,IAAI,cAAc,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;QACvE,OAAM;IACR,CAAC;IAED,wGAAwG;IACxG,IAAI,cAAc,CAAC,KAAK,IAAI,yCAAoB,CAAC,UAAU,EAAE,CAAC;QAC5D,MAAM,gBAAgB,GAAG,MAAM,IAAA,qBAAa,EAAC,uCAAgB,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC;YAC3E,EAAE,EAAE,cAAc,CAAC,kBAAkB;SACtC,CAAC,CAAA;QAEF,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,cAAc,EAAE,CAAC;YACxD,MAAM,KAAK,GAAG,CACZ,MAAM,IAAA,qBAAa,EAAC,gBAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC;gBACpC,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE;gBACtB,SAAS,EAAE,CAAC,OAAO,CAAC;aACrB,CAAC,CACH,EAAE,KAAK,CAAA;YAER,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,gBAAgB,CAAC,cAAc,CAAC,EAAE,CAAC;gBACnE,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAA;gBAC9B,cAAc,CAAC,KAAK,GAAG,yCAAoB,CAAC,QAAQ,CAAA;gBAEpD,OAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAA;AACxE,CAAC","sourcesContent":["import { getRepository } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { ActivityThread, ActivityThreadStatus } from '../../service/activity-thread/activity-thread.js'\nimport { ActivityInstance } from '../../service/activity-instance/activity-instance.js'\n\nexport async function checkAuthority(activityThread: ActivityThread, context: ResolverContext) {\n const { user, tx } = context.state\n\n if (activityThread.assigneeId && activityThread.assigneeId === user.id) {\n return\n }\n\n // TODO activityInstance의 cardinality를 기준으로 unassigned thread를 추가로 만들 지, assigned thread로 대체할 지를 구현해야한다.\n if (activityThread.state == ActivityThreadStatus.Unassigned) {\n const activityInstance = await getRepository(ActivityInstance, tx).findOneBy({\n id: activityThread.activityInstanceId\n })\n\n if (activityInstance && activityInstance.assigneeRoleId) {\n const roles = (\n await getRepository(User, tx).findOne({\n where: { id: user.id },\n relations: ['roles']\n })\n )?.roles\n\n if (roles.find(role => role.id == activityInstance.assigneeRoleId)) {\n activityThread.assignee = user\n activityThread.state = ActivityThreadStatus.Assigned\n\n return\n }\n }\n }\n\n throw new Error(context.t(`error.not authorized to handle this task`))\n}\n"]}
@@ -29,7 +29,15 @@ async function delegate({ id, assignee, dueAt, reason }, context) {
29
29
  if (dueAt) {
30
30
  activityThread.dueAt = dueAt;
31
31
  }
32
- const result = await repository.save(Object.assign(Object.assign({}, activityThread), { assignee, transaction: 'delegate', reason, state: activity_thread_js_1.ActivityThreadStatus.Assigned, updater: user, assignedAt: new Date() }));
32
+ const result = await repository.save({
33
+ ...activityThread,
34
+ assignee,
35
+ transaction: 'delegate',
36
+ reason,
37
+ state: activity_thread_js_1.ActivityThreadStatus.Assigned,
38
+ updater: user,
39
+ assignedAt: new Date()
40
+ });
33
41
  await (0, common_js_1.updateActivityInstanceState)(activityThread.activityInstanceId, { causedBy: [result] }, context);
34
42
  return result;
35
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"delegate.js","sourceRoot":"","sources":["../../../server/controllers/activity-thread/delegate.ts"],"names":[],"mappings":";;AAIA,4BA8DC;AAlED,yFAAuG;AACvG,4CAA0D;AAC1D,6DAAqD;AAE9C,KAAK,UAAU,QAAQ,CAC5B,EACE,EAAE,EACF,QAAQ,EACR,KAAK,EACL,MAAM,EAMP,EACD,OAAwB;IAExB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAE1C,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,mCAAc,CAAC,CAAA;IAEnD,IAAI,cAAc,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;QAC5C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;KACzC,CAAC,CAAA;IAEF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,iCAAiC,EAAE;YAC3C,cAAc,EAAE,EAAE;SACnB,CAAC,CACH,CAAA;IACH,CAAC;IAED,MAAM,IAAA,mCAAc,EAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAE7C;;;MAGE;IACF,IAAI,cAAc,CAAC,KAAK,KAAK,yCAAoB,CAAC,QAAQ,IAAI,cAAc,CAAC,KAAK,KAAK,yCAAoB,CAAC,OAAO,EAAE,CAAC;QACpH,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,6CAA6C,EAAE;YACvD,EAAE;YACF,MAAM,EAAE,cAAc,CAAC,KAAK;SAC7B,CAAC,CACH,CAAA;IACH,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,cAAc,CAAC,KAAK,GAAG,KAAK,CAAA;IAC9B,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,iCAC/B,cAAc,KACjB,QAAQ,EACR,WAAW,EAAE,UAAU,EACvB,MAAM,EACN,KAAK,EAAE,yCAAoB,CAAC,QAAQ,EACpC,OAAO,EAAE,IAAI,EACb,UAAU,EAAE,IAAI,IAAI,EAAE,IACtB,CAAA;IAEF,MAAM,IAAA,uCAA2B,EAAC,cAAc,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IAErG,OAAO,MAAM,CAAA;AACf,CAAC","sourcesContent":["import { ActivityThread, ActivityThreadStatus } from '../../service/activity-thread/activity-thread.js'\nimport { updateActivityInstanceState } from '../common.js'\nimport { checkAuthority } from './check-authority.js'\n\nexport async function delegate(\n {\n id,\n assignee,\n dueAt,\n reason\n }: {\n id: string\n assignee?: object\n dueAt?: Date\n reason?: string\n },\n context: ResolverContext\n): Promise<ActivityThread> {\n const { domain, user, tx } = context.state\n\n const repository = tx.getRepository(ActivityThread)\n\n var activityThread = await repository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n if (!activityThread) {\n throw new Error(\n context.t('error.activity-thread not found', {\n activityThread: id\n })\n )\n }\n\n await checkAuthority(activityThread, context)\n\n /* \n Prerequisites for a activity thread to Be Delegated.\n - The previous state of the activity thread should be assigned or started.\n */\n if (activityThread.state !== ActivityThreadStatus.Assigned && activityThread.state !== ActivityThreadStatus.Started) {\n throw new Error(\n context.t(`error.activity-thread is already terminated`, {\n id,\n actual: activityThread.state\n })\n )\n }\n\n if (dueAt) {\n activityThread.dueAt = dueAt\n }\n\n const result = await repository.save({\n ...activityThread,\n assignee,\n transaction: 'delegate',\n reason,\n state: ActivityThreadStatus.Assigned,\n updater: user,\n assignedAt: new Date()\n })\n\n await updateActivityInstanceState(activityThread.activityInstanceId, { causedBy: [result] }, context)\n\n return result\n}\n"]}
1
+ {"version":3,"file":"delegate.js","sourceRoot":"","sources":["../../../server/controllers/activity-thread/delegate.ts"],"names":[],"mappings":";;AAIA,4BA8DC;AAlED,yFAAuG;AACvG,4CAA0D;AAC1D,6DAAqD;AAE9C,KAAK,UAAU,QAAQ,CAC5B,EACE,EAAE,EACF,QAAQ,EACR,KAAK,EACL,MAAM,EAMP,EACD,OAAwB;IAExB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAE1C,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,mCAAc,CAAC,CAAA;IAEnD,IAAI,cAAc,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;QAC5C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;KACzC,CAAC,CAAA;IAEF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,iCAAiC,EAAE;YAC3C,cAAc,EAAE,EAAE;SACnB,CAAC,CACH,CAAA;IACH,CAAC;IAED,MAAM,IAAA,mCAAc,EAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAE7C;;;MAGE;IACF,IAAI,cAAc,CAAC,KAAK,KAAK,yCAAoB,CAAC,QAAQ,IAAI,cAAc,CAAC,KAAK,KAAK,yCAAoB,CAAC,OAAO,EAAE,CAAC;QACpH,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,6CAA6C,EAAE;YACvD,EAAE;YACF,MAAM,EAAE,cAAc,CAAC,KAAK;SAC7B,CAAC,CACH,CAAA;IACH,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,cAAc,CAAC,KAAK,GAAG,KAAK,CAAA;IAC9B,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC;QACnC,GAAG,cAAc;QACjB,QAAQ;QACR,WAAW,EAAE,UAAU;QACvB,MAAM;QACN,KAAK,EAAE,yCAAoB,CAAC,QAAQ;QACpC,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,IAAI,IAAI,EAAE;KACvB,CAAC,CAAA;IAEF,MAAM,IAAA,uCAA2B,EAAC,cAAc,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IAErG,OAAO,MAAM,CAAA;AACf,CAAC","sourcesContent":["import { ActivityThread, ActivityThreadStatus } from '../../service/activity-thread/activity-thread.js'\nimport { updateActivityInstanceState } from '../common.js'\nimport { checkAuthority } from './check-authority.js'\n\nexport async function delegate(\n {\n id,\n assignee,\n dueAt,\n reason\n }: {\n id: string\n assignee?: object\n dueAt?: Date\n reason?: string\n },\n context: ResolverContext\n): Promise<ActivityThread> {\n const { domain, user, tx } = context.state\n\n const repository = tx.getRepository(ActivityThread)\n\n var activityThread = await repository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n if (!activityThread) {\n throw new Error(\n context.t('error.activity-thread not found', {\n activityThread: id\n })\n )\n }\n\n await checkAuthority(activityThread, context)\n\n /* \n Prerequisites for a activity thread to Be Delegated.\n - The previous state of the activity thread should be assigned or started.\n */\n if (activityThread.state !== ActivityThreadStatus.Assigned && activityThread.state !== ActivityThreadStatus.Started) {\n throw new Error(\n context.t(`error.activity-thread is already terminated`, {\n id,\n actual: activityThread.state\n })\n )\n }\n\n if (dueAt) {\n activityThread.dueAt = dueAt\n }\n\n const result = await repository.save({\n ...activityThread,\n assignee,\n transaction: 'delegate',\n reason,\n state: ActivityThreadStatus.Assigned,\n updater: user,\n assignedAt: new Date()\n })\n\n await updateActivityInstanceState(activityThread.activityInstanceId, { causedBy: [result] }, context)\n\n return result\n}\n"]}
@@ -29,8 +29,15 @@ async function end({ id, output, reason }, context) {
29
29
  if (!activityThread.startedAt) {
30
30
  activityThread.startedAt = new Date();
31
31
  }
32
- activityThread = await repository.save(Object.assign(Object.assign({}, activityThread), { reason,
33
- output, transaction: 'end', state: activity_thread_js_1.ActivityThreadStatus.Ended, updater: user, terminatedAt: new Date() }));
32
+ activityThread = await repository.save({
33
+ ...activityThread,
34
+ reason,
35
+ output,
36
+ transaction: 'end',
37
+ state: activity_thread_js_1.ActivityThreadStatus.Ended,
38
+ updater: user,
39
+ terminatedAt: new Date()
40
+ });
34
41
  await (0, common_js_1.updateActivityInstanceState)(activityThread.activityInstanceId, { causedBy: [activityThread] }, context);
35
42
  return activityThread;
36
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"end.js","sourceRoot":"","sources":["../../../server/controllers/activity-thread/end.ts"],"names":[],"mappings":";;AAIA,kBAoDC;AAxDD,yFAAuG;AACvG,4CAA0D;AAC1D,6DAAqD;AAE9C,KAAK,UAAU,GAAG,CACvB,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAoD,EACxE,OAAwB;IAExB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAE1C,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,mCAAc,CAAC,CAAA;IAEnD,IAAI,cAAc,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;QAC5C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;KACzC,CAAC,CAAA;IAEF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,iCAAiC,EAAE;YAC3C,cAAc,EAAE,EAAE;SACnB,CAAC,CACH,CAAA;IACH,CAAC;IAED,MAAM,IAAA,mCAAc,EAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAE7C;;;MAGE;IACF,IAAI,cAAc,CAAC,KAAK,IAAI,yCAAoB,CAAC,OAAO,IAAI,cAAc,CAAC,KAAK,IAAI,yCAAoB,CAAC,KAAK,EAAE,CAAC;QAC/G,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,6CAA6C,EAAE;YACvD,EAAE;YACF,MAAM,EAAE,cAAc,CAAC,KAAK;SAC7B,CAAC,CACH,CAAA;IACH,CAAC;IAED,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;QAC9B,cAAc,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAA;IACvC,CAAC;IAED,cAAc,GAAG,MAAM,UAAU,CAAC,IAAI,iCACjC,cAAc,KACjB,MAAM;QACN,MAAM,EACN,WAAW,EAAE,KAAK,EAClB,KAAK,EAAE,yCAAoB,CAAC,KAAK,EACjC,OAAO,EAAE,IAAI,EACb,YAAY,EAAE,IAAI,IAAI,EAAE,IACxB,CAAA;IAEF,MAAM,IAAA,uCAA2B,EAAC,cAAc,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IAE7G,OAAO,cAAc,CAAA;AACvB,CAAC","sourcesContent":["import { ActivityThread, ActivityThreadStatus } from '../../service/activity-thread/activity-thread.js'\nimport { updateActivityInstanceState } from '../common.js'\nimport { checkAuthority } from './check-authority.js'\n\nexport async function end(\n { id, output, reason }: { id: string; output?: object; reason?: string },\n context: ResolverContext\n): Promise<ActivityThread> {\n const { domain, user, tx } = context.state\n\n const repository = tx.getRepository(ActivityThread)\n\n var activityThread = await repository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n if (!activityThread) {\n throw new Error(\n context.t('error.activity-thread not found', {\n activityThread: id\n })\n )\n }\n\n await checkAuthority(activityThread, context)\n\n /* \n Prerequisites for a activity thread to Be End.\n - The previous state of the activity thread must not be End or End.\n */\n if (activityThread.state == ActivityThreadStatus.Aborted || activityThread.state == ActivityThreadStatus.Ended) {\n throw new Error(\n context.t(`error.activity-thread is already terminated`, {\n id,\n actual: activityThread.state\n })\n )\n }\n\n if (!activityThread.startedAt) {\n activityThread.startedAt = new Date()\n }\n\n activityThread = await repository.save({\n ...activityThread,\n reason,\n output,\n transaction: 'end',\n state: ActivityThreadStatus.Ended,\n updater: user,\n terminatedAt: new Date()\n })\n\n await updateActivityInstanceState(activityThread.activityInstanceId, { causedBy: [activityThread] }, context)\n\n return activityThread\n}\n"]}
1
+ {"version":3,"file":"end.js","sourceRoot":"","sources":["../../../server/controllers/activity-thread/end.ts"],"names":[],"mappings":";;AAIA,kBAoDC;AAxDD,yFAAuG;AACvG,4CAA0D;AAC1D,6DAAqD;AAE9C,KAAK,UAAU,GAAG,CACvB,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAoD,EACxE,OAAwB;IAExB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAE1C,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,mCAAc,CAAC,CAAA;IAEnD,IAAI,cAAc,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;QAC5C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;KACzC,CAAC,CAAA;IAEF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,iCAAiC,EAAE;YAC3C,cAAc,EAAE,EAAE;SACnB,CAAC,CACH,CAAA;IACH,CAAC;IAED,MAAM,IAAA,mCAAc,EAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAE7C;;;MAGE;IACF,IAAI,cAAc,CAAC,KAAK,IAAI,yCAAoB,CAAC,OAAO,IAAI,cAAc,CAAC,KAAK,IAAI,yCAAoB,CAAC,KAAK,EAAE,CAAC;QAC/G,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,6CAA6C,EAAE;YACvD,EAAE;YACF,MAAM,EAAE,cAAc,CAAC,KAAK;SAC7B,CAAC,CACH,CAAA;IACH,CAAC;IAED,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;QAC9B,cAAc,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAA;IACvC,CAAC;IAED,cAAc,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC;QACrC,GAAG,cAAc;QACjB,MAAM;QACN,MAAM;QACN,WAAW,EAAE,KAAK;QAClB,KAAK,EAAE,yCAAoB,CAAC,KAAK;QACjC,OAAO,EAAE,IAAI;QACb,YAAY,EAAE,IAAI,IAAI,EAAE;KACzB,CAAC,CAAA;IAEF,MAAM,IAAA,uCAA2B,EAAC,cAAc,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IAE7G,OAAO,cAAc,CAAA;AACvB,CAAC","sourcesContent":["import { ActivityThread, ActivityThreadStatus } from '../../service/activity-thread/activity-thread.js'\nimport { updateActivityInstanceState } from '../common.js'\nimport { checkAuthority } from './check-authority.js'\n\nexport async function end(\n { id, output, reason }: { id: string; output?: object; reason?: string },\n context: ResolverContext\n): Promise<ActivityThread> {\n const { domain, user, tx } = context.state\n\n const repository = tx.getRepository(ActivityThread)\n\n var activityThread = await repository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n if (!activityThread) {\n throw new Error(\n context.t('error.activity-thread not found', {\n activityThread: id\n })\n )\n }\n\n await checkAuthority(activityThread, context)\n\n /* \n Prerequisites for a activity thread to Be End.\n - The previous state of the activity thread must not be End or End.\n */\n if (activityThread.state == ActivityThreadStatus.Aborted || activityThread.state == ActivityThreadStatus.Ended) {\n throw new Error(\n context.t(`error.activity-thread is already terminated`, {\n id,\n actual: activityThread.state\n })\n )\n }\n\n if (!activityThread.startedAt) {\n activityThread.startedAt = new Date()\n }\n\n activityThread = await repository.save({\n ...activityThread,\n reason,\n output,\n transaction: 'end',\n state: ActivityThreadStatus.Ended,\n updater: user,\n terminatedAt: new Date()\n })\n\n await updateActivityInstanceState(activityThread.activityInstanceId, { causedBy: [activityThread] }, context)\n\n return activityThread\n}\n"]}
@@ -30,7 +30,15 @@ async function restart(id, output, reason, context) {
30
30
  if (output) {
31
31
  activityThread.output = output;
32
32
  }
33
- const result = await tx.getRepository(activity_thread_js_1.ActivityThread).save(Object.assign(Object.assign({}, activityThread), { reason, state: activity_thread_js_1.ActivityThreadStatus.Started, transaction: 'restart', round: activityThread.round + 1, updater: user, startedAt: new Date() }));
33
+ const result = await tx.getRepository(activity_thread_js_1.ActivityThread).save({
34
+ ...activityThread,
35
+ reason,
36
+ state: activity_thread_js_1.ActivityThreadStatus.Started,
37
+ transaction: 'restart',
38
+ round: activityThread.round + 1,
39
+ updater: user,
40
+ startedAt: new Date()
41
+ });
34
42
  await (0, common_js_1.updateActivityInstanceState)(activityThread.activityInstanceId, { causedBy: [result] }, context);
35
43
  return result;
36
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"restart.js","sourceRoot":"","sources":["../../../server/controllers/activity-thread/restart.ts"],"names":[],"mappings":";;AAIA,0BAsDC;AA1DD,yFAAuG;AACvG,4CAA0D;AAC1D,6DAAqD;AAE9C,KAAK,UAAU,OAAO,CAC3B,EAAU,EACV,MAAc,EACd,MAAc,EACd,OAAwB;IAExB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAE1C,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,mCAAc,CAAC,CAAA;IACnD,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;QAC9C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;KACzC,CAAC,CAAA;IAEF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,iCAAiC,EAAE;YAC3C,cAAc,EAAE,EAAE;SACnB,CAAC,CACH,CAAA;IACH,CAAC;IAED,MAAM,IAAA,mCAAc,EAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAE7C;;;MAGE;IACF,IAAI,cAAc,CAAC,KAAK,KAAK,yCAAoB,CAAC,QAAQ,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,2CAA2C,EAAE;YACrD,EAAE;YACF,KAAK,EAAE,yCAAoB,CAAC,QAAQ;YACpC,MAAM,EAAE,cAAc,CAAC,KAAK;SAC7B,CAAC,CACH,CAAA;IACH,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,cAAc,CAAC,MAAM,GAAG,MAAM,CAAA;IAChC,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,mCAAc,CAAC,CAAC,IAAI,iCACrD,cAAc,KACjB,MAAM,EACN,KAAK,EAAE,yCAAoB,CAAC,OAAO,EACnC,WAAW,EAAE,SAAS,EACtB,KAAK,EAAE,cAAc,CAAC,KAAK,GAAG,CAAC,EAC/B,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,IAAI,IAAI,EAAE,IACrB,CAAA;IAEF,MAAM,IAAA,uCAA2B,EAAC,cAAc,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IAErG,OAAO,MAAM,CAAA;AACf,CAAC","sourcesContent":["import { ActivityThread, ActivityThreadStatus } from '../../service/activity-thread/activity-thread.js'\nimport { updateActivityInstanceState } from '../common.js'\nimport { checkAuthority } from './check-authority.js'\n\nexport async function restart(\n id: string,\n output: object,\n reason: string,\n context: ResolverContext\n): Promise<ActivityThread> {\n const { domain, user, tx } = context.state\n\n const repository = tx.getRepository(ActivityThread)\n const activityThread = await repository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n if (!activityThread) {\n throw new Error(\n context.t('error.activity-thread not found', {\n activityThread: id\n })\n )\n }\n\n await checkAuthority(activityThread, context)\n\n /* \n Prerequisites for a activity thread to Be Delegated.\n - The previous state of the activity thread should be Rejected.\n */\n if (activityThread.state !== ActivityThreadStatus.Rejected) {\n throw new Error(\n context.t(`error.activity-thread should be the state`, {\n id,\n state: ActivityThreadStatus.Rejected,\n actual: activityThread.state\n })\n )\n }\n\n if (output) {\n activityThread.output = output\n }\n\n const result = await tx.getRepository(ActivityThread).save({\n ...activityThread,\n reason,\n state: ActivityThreadStatus.Started,\n transaction: 'restart',\n round: activityThread.round + 1,\n updater: user,\n startedAt: new Date()\n })\n\n await updateActivityInstanceState(activityThread.activityInstanceId, { causedBy: [result] }, context)\n\n return result\n}\n"]}
1
+ {"version":3,"file":"restart.js","sourceRoot":"","sources":["../../../server/controllers/activity-thread/restart.ts"],"names":[],"mappings":";;AAIA,0BAsDC;AA1DD,yFAAuG;AACvG,4CAA0D;AAC1D,6DAAqD;AAE9C,KAAK,UAAU,OAAO,CAC3B,EAAU,EACV,MAAc,EACd,MAAc,EACd,OAAwB;IAExB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAE1C,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,mCAAc,CAAC,CAAA;IACnD,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;QAC9C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;KACzC,CAAC,CAAA;IAEF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,iCAAiC,EAAE;YAC3C,cAAc,EAAE,EAAE;SACnB,CAAC,CACH,CAAA;IACH,CAAC;IAED,MAAM,IAAA,mCAAc,EAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAE7C;;;MAGE;IACF,IAAI,cAAc,CAAC,KAAK,KAAK,yCAAoB,CAAC,QAAQ,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,2CAA2C,EAAE;YACrD,EAAE;YACF,KAAK,EAAE,yCAAoB,CAAC,QAAQ;YACpC,MAAM,EAAE,cAAc,CAAC,KAAK;SAC7B,CAAC,CACH,CAAA;IACH,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,cAAc,CAAC,MAAM,GAAG,MAAM,CAAA;IAChC,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,mCAAc,CAAC,CAAC,IAAI,CAAC;QACzD,GAAG,cAAc;QACjB,MAAM;QACN,KAAK,EAAE,yCAAoB,CAAC,OAAO;QACnC,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE,cAAc,CAAC,KAAK,GAAG,CAAC;QAC/B,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,IAAI,IAAI,EAAE;KACtB,CAAC,CAAA;IAEF,MAAM,IAAA,uCAA2B,EAAC,cAAc,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IAErG,OAAO,MAAM,CAAA;AACf,CAAC","sourcesContent":["import { ActivityThread, ActivityThreadStatus } from '../../service/activity-thread/activity-thread.js'\nimport { updateActivityInstanceState } from '../common.js'\nimport { checkAuthority } from './check-authority.js'\n\nexport async function restart(\n id: string,\n output: object,\n reason: string,\n context: ResolverContext\n): Promise<ActivityThread> {\n const { domain, user, tx } = context.state\n\n const repository = tx.getRepository(ActivityThread)\n const activityThread = await repository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n if (!activityThread) {\n throw new Error(\n context.t('error.activity-thread not found', {\n activityThread: id\n })\n )\n }\n\n await checkAuthority(activityThread, context)\n\n /* \n Prerequisites for a activity thread to Be Delegated.\n - The previous state of the activity thread should be Rejected.\n */\n if (activityThread.state !== ActivityThreadStatus.Rejected) {\n throw new Error(\n context.t(`error.activity-thread should be the state`, {\n id,\n state: ActivityThreadStatus.Rejected,\n actual: activityThread.state\n })\n )\n }\n\n if (output) {\n activityThread.output = output\n }\n\n const result = await tx.getRepository(ActivityThread).save({\n ...activityThread,\n reason,\n state: ActivityThreadStatus.Started,\n transaction: 'restart',\n round: activityThread.round + 1,\n updater: user,\n startedAt: new Date()\n })\n\n await updateActivityInstanceState(activityThread.activityInstanceId, { causedBy: [result] }, context)\n\n return result\n}\n"]}
@@ -32,7 +32,13 @@ async function save(id, save, reason, context) {
32
32
  /* The act of saving means automatically starting the work. */
33
33
  activityThread.startedAt = new Date();
34
34
  }
35
- activityThread = await repository.save(Object.assign(Object.assign(Object.assign({}, activityThread), save), { state: activity_thread_js_1.ActivityThreadStatus.Started, transaction: 'save', updater: user }));
35
+ activityThread = await repository.save({
36
+ ...activityThread,
37
+ ...save,
38
+ state: activity_thread_js_1.ActivityThreadStatus.Started,
39
+ transaction: 'save',
40
+ updater: user
41
+ });
36
42
  await (0, common_js_1.updateActivityInstanceState)(activityThread.activityInstanceId, { causedBy: [activityThread] }, context);
37
43
  return activityThread;
38
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"save.js","sourceRoot":"","sources":["../../../server/controllers/activity-thread/save.ts"],"names":[],"mappings":";;AAKA,oBAuDC;AA3DD,4CAA0D;AAC1D,yFAAuG;AACvG,6DAAqD;AAE9C,KAAK,UAAU,IAAI,CACxB,EAAU,EACV,IAAwB,EACxB,MAAc,EACd,OAAwB;IAExB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAC1C,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,mCAAc,CAAC,CAAA;IAEnD,IAAI,cAAc,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;QAC5C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;KACzC,CAAC,CAAA;IAEF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,iCAAiC,EAAE;YAC3C,cAAc,EAAE,EAAE;SACnB,CAAC,CACH,CAAA;IACH,CAAC;IAED,MAAM,IAAA,mCAAc,EAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAE7C;;;MAGE;IACF,IAAI,cAAc,CAAC,KAAK,IAAI,yCAAoB,CAAC,OAAO,IAAI,cAAc,CAAC,KAAK,IAAI,yCAAoB,CAAC,KAAK,EAAE,CAAC;QAC/G,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,6CAA6C,EAAE;YACvD,EAAE;YACF,MAAM,EAAE,cAAc,CAAC,KAAK;SAC7B,CAAC,CACH,CAAA;IACH,CAAC;IAED,2FAA2F;IAC3F,mEAAmE;IAEnE,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;QAC9B,8DAA8D;QAC9D,cAAc,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAA;IACvC,CAAC;IAED,cAAc,GAAG,MAAM,UAAU,CAAC,IAAI,+CACjC,cAAc,GACd,IAAI,KACP,KAAK,EAAE,yCAAoB,CAAC,OAAO,EACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,IAAI,IACb,CAAA;IAEF,MAAM,IAAA,uCAA2B,EAAC,cAAc,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IAE7G,OAAO,cAAc,CAAA;AACvB,CAAC","sourcesContent":["import { ActivityThreadSave } from '../../service/activity-thread/activity-thread-type.js'\nimport { updateActivityInstanceState } from '../common.js'\nimport { ActivityThread, ActivityThreadStatus } from '../../service/activity-thread/activity-thread.js'\nimport { checkAuthority } from './check-authority.js'\n\nexport async function save(\n id: string,\n save: ActivityThreadSave,\n reason: string,\n context: ResolverContext\n): Promise<ActivityThread> {\n const { domain, user, tx } = context.state\n const repository = tx.getRepository(ActivityThread)\n\n var activityThread = await repository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n if (!activityThread) {\n throw new Error(\n context.t('error.activity-thread not found', {\n activityThread: id\n })\n )\n }\n\n await checkAuthority(activityThread, context)\n\n /* \n Prerequisites for a activity thread to Be Saved.\n - The previous state of the activity thread must not be terminated.\n */\n if (activityThread.state == ActivityThreadStatus.Aborted || activityThread.state == ActivityThreadStatus.Ended) {\n throw new Error(\n context.t(`error.activity-thread is already terminated`, {\n id,\n actual: activityThread.state\n })\n )\n }\n\n // TODO 만약 activityInstance의 threadsMin 갯수를 아직 채우지 못했다면, 새로운 activityThread를 만들어서 처리하도록 한다.\n // (다른 사용자들이 threadsMin 개수만큼의 activityThread를 채울 수 있는 기회를 제공하기 위해서)\n\n if (!activityThread.startedAt) {\n /* The act of saving means automatically starting the work. */\n activityThread.startedAt = new Date()\n }\n\n activityThread = await repository.save({\n ...activityThread,\n ...save,\n state: ActivityThreadStatus.Started,\n transaction: 'save',\n updater: user\n })\n\n await updateActivityInstanceState(activityThread.activityInstanceId, { causedBy: [activityThread] }, context)\n\n return activityThread\n}\n"]}
1
+ {"version":3,"file":"save.js","sourceRoot":"","sources":["../../../server/controllers/activity-thread/save.ts"],"names":[],"mappings":";;AAKA,oBAuDC;AA3DD,4CAA0D;AAC1D,yFAAuG;AACvG,6DAAqD;AAE9C,KAAK,UAAU,IAAI,CACxB,EAAU,EACV,IAAwB,EACxB,MAAc,EACd,OAAwB;IAExB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAC1C,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,mCAAc,CAAC,CAAA;IAEnD,IAAI,cAAc,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;QAC5C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;KACzC,CAAC,CAAA;IAEF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,iCAAiC,EAAE;YAC3C,cAAc,EAAE,EAAE;SACnB,CAAC,CACH,CAAA;IACH,CAAC;IAED,MAAM,IAAA,mCAAc,EAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAE7C;;;MAGE;IACF,IAAI,cAAc,CAAC,KAAK,IAAI,yCAAoB,CAAC,OAAO,IAAI,cAAc,CAAC,KAAK,IAAI,yCAAoB,CAAC,KAAK,EAAE,CAAC;QAC/G,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,6CAA6C,EAAE;YACvD,EAAE;YACF,MAAM,EAAE,cAAc,CAAC,KAAK;SAC7B,CAAC,CACH,CAAA;IACH,CAAC;IAED,2FAA2F;IAC3F,mEAAmE;IAEnE,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;QAC9B,8DAA8D;QAC9D,cAAc,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAA;IACvC,CAAC;IAED,cAAc,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC;QACrC,GAAG,cAAc;QACjB,GAAG,IAAI;QACP,KAAK,EAAE,yCAAoB,CAAC,OAAO;QACnC,WAAW,EAAE,MAAM;QACnB,OAAO,EAAE,IAAI;KACd,CAAC,CAAA;IAEF,MAAM,IAAA,uCAA2B,EAAC,cAAc,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IAE7G,OAAO,cAAc,CAAA;AACvB,CAAC","sourcesContent":["import { ActivityThreadSave } from '../../service/activity-thread/activity-thread-type.js'\nimport { updateActivityInstanceState } from '../common.js'\nimport { ActivityThread, ActivityThreadStatus } from '../../service/activity-thread/activity-thread.js'\nimport { checkAuthority } from './check-authority.js'\n\nexport async function save(\n id: string,\n save: ActivityThreadSave,\n reason: string,\n context: ResolverContext\n): Promise<ActivityThread> {\n const { domain, user, tx } = context.state\n const repository = tx.getRepository(ActivityThread)\n\n var activityThread = await repository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n if (!activityThread) {\n throw new Error(\n context.t('error.activity-thread not found', {\n activityThread: id\n })\n )\n }\n\n await checkAuthority(activityThread, context)\n\n /* \n Prerequisites for a activity thread to Be Saved.\n - The previous state of the activity thread must not be terminated.\n */\n if (activityThread.state == ActivityThreadStatus.Aborted || activityThread.state == ActivityThreadStatus.Ended) {\n throw new Error(\n context.t(`error.activity-thread is already terminated`, {\n id,\n actual: activityThread.state\n })\n )\n }\n\n // TODO 만약 activityInstance의 threadsMin 갯수를 아직 채우지 못했다면, 새로운 activityThread를 만들어서 처리하도록 한다.\n // (다른 사용자들이 threadsMin 개수만큼의 activityThread를 채울 수 있는 기회를 제공하기 위해서)\n\n if (!activityThread.startedAt) {\n /* The act of saving means automatically starting the work. */\n activityThread.startedAt = new Date()\n }\n\n activityThread = await repository.save({\n ...activityThread,\n ...save,\n state: ActivityThreadStatus.Started,\n transaction: 'save',\n updater: user\n })\n\n await updateActivityInstanceState(activityThread.activityInstanceId, { causedBy: [activityThread] }, context)\n\n return activityThread\n}\n"]}
@@ -29,7 +29,14 @@ async function start(id, output, reason, context) {
29
29
  if (output) {
30
30
  activityThread.output = output;
31
31
  }
32
- const result = await tx.getRepository(activity_thread_js_1.ActivityThread).save(Object.assign(Object.assign({}, activityThread), { reason, state: activity_thread_js_1.ActivityThreadStatus.Started, transaction: 'start', updater: user, startedAt: new Date() }));
32
+ const result = await tx.getRepository(activity_thread_js_1.ActivityThread).save({
33
+ ...activityThread,
34
+ reason,
35
+ state: activity_thread_js_1.ActivityThreadStatus.Started,
36
+ transaction: 'start',
37
+ updater: user,
38
+ startedAt: new Date()
39
+ });
33
40
  await (0, common_js_1.updateActivityInstanceState)(activityThread.activityInstanceId, { causedBy: [result] }, context);
34
41
  return result;
35
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../server/controllers/activity-thread/start.ts"],"names":[],"mappings":";;AAIA,sBAoDC;AAxDD,yFAAuG;AACvG,4CAA0D;AAC1D,6DAAqD;AAE9C,KAAK,UAAU,KAAK,CACzB,EAAU,EACV,MAAc,EACd,MAAc,EACd,OAAwB;IAExB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAE1C,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,mCAAc,CAAC,CAAA;IACnD,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;QAC9C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;KACzC,CAAC,CAAA;IAEF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,iCAAiC,EAAE;YAC3C,cAAc,EAAE,EAAE;SACnB,CAAC,CACH,CAAA;IACH,CAAC;IAED,MAAM,IAAA,mCAAc,EAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAE7C;;;MAGE;IACF,IAAI,cAAc,CAAC,KAAK,KAAK,yCAAoB,CAAC,QAAQ,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,6CAA6C,EAAE;YACvD,EAAE;YACF,MAAM,EAAE,cAAc,CAAC,KAAK;SAC7B,CAAC,CACH,CAAA;IACH,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,cAAc,CAAC,MAAM,GAAG,MAAM,CAAA;IAChC,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,mCAAc,CAAC,CAAC,IAAI,iCACrD,cAAc,KACjB,MAAM,EACN,KAAK,EAAE,yCAAoB,CAAC,OAAO,EACnC,WAAW,EAAE,OAAO,EACpB,OAAO,EAAE,IAAI,EACb,SAAS,EAAE,IAAI,IAAI,EAAE,IACrB,CAAA;IAEF,MAAM,IAAA,uCAA2B,EAAC,cAAc,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IAErG,OAAO,MAAM,CAAA;AACf,CAAC","sourcesContent":["import { ActivityThread, ActivityThreadStatus } from '../../service/activity-thread/activity-thread.js'\nimport { updateActivityInstanceState } from '../common.js'\nimport { checkAuthority } from './check-authority.js'\n\nexport async function start(\n id: string,\n output: object,\n reason: string,\n context: ResolverContext\n): Promise<ActivityThread> {\n const { domain, user, tx } = context.state\n\n const repository = tx.getRepository(ActivityThread)\n const activityThread = await repository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n if (!activityThread) {\n throw new Error(\n context.t('error.activity-thread not found', {\n activityThread: id\n })\n )\n }\n\n await checkAuthority(activityThread, context)\n\n /* \n Prerequisites for a activity thread to Be Started.\n - The previous state of the activity thread must not be terminated.\n */\n if (activityThread.state !== ActivityThreadStatus.Assigned) {\n throw new Error(\n context.t(`error.activity-thread should not be started`, {\n id,\n actual: activityThread.state\n })\n )\n }\n\n if (output) {\n activityThread.output = output\n }\n\n const result = await tx.getRepository(ActivityThread).save({\n ...activityThread,\n reason,\n state: ActivityThreadStatus.Started,\n transaction: 'start',\n updater: user,\n startedAt: new Date()\n })\n\n await updateActivityInstanceState(activityThread.activityInstanceId, { causedBy: [result] }, context)\n\n return result\n}\n"]}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../server/controllers/activity-thread/start.ts"],"names":[],"mappings":";;AAIA,sBAoDC;AAxDD,yFAAuG;AACvG,4CAA0D;AAC1D,6DAAqD;AAE9C,KAAK,UAAU,KAAK,CACzB,EAAU,EACV,MAAc,EACd,MAAc,EACd,OAAwB;IAExB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAE1C,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,mCAAc,CAAC,CAAA;IACnD,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;QAC9C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;KACzC,CAAC,CAAA;IAEF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,iCAAiC,EAAE;YAC3C,cAAc,EAAE,EAAE;SACnB,CAAC,CACH,CAAA;IACH,CAAC;IAED,MAAM,IAAA,mCAAc,EAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAE7C;;;MAGE;IACF,IAAI,cAAc,CAAC,KAAK,KAAK,yCAAoB,CAAC,QAAQ,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,6CAA6C,EAAE;YACvD,EAAE;YACF,MAAM,EAAE,cAAc,CAAC,KAAK;SAC7B,CAAC,CACH,CAAA;IACH,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,cAAc,CAAC,MAAM,GAAG,MAAM,CAAA;IAChC,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,mCAAc,CAAC,CAAC,IAAI,CAAC;QACzD,GAAG,cAAc;QACjB,MAAM;QACN,KAAK,EAAE,yCAAoB,CAAC,OAAO;QACnC,WAAW,EAAE,OAAO;QACpB,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,IAAI,IAAI,EAAE;KACtB,CAAC,CAAA;IAEF,MAAM,IAAA,uCAA2B,EAAC,cAAc,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IAErG,OAAO,MAAM,CAAA;AACf,CAAC","sourcesContent":["import { ActivityThread, ActivityThreadStatus } from '../../service/activity-thread/activity-thread.js'\nimport { updateActivityInstanceState } from '../common.js'\nimport { checkAuthority } from './check-authority.js'\n\nexport async function start(\n id: string,\n output: object,\n reason: string,\n context: ResolverContext\n): Promise<ActivityThread> {\n const { domain, user, tx } = context.state\n\n const repository = tx.getRepository(ActivityThread)\n const activityThread = await repository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n if (!activityThread) {\n throw new Error(\n context.t('error.activity-thread not found', {\n activityThread: id\n })\n )\n }\n\n await checkAuthority(activityThread, context)\n\n /* \n Prerequisites for a activity thread to Be Started.\n - The previous state of the activity thread must not be terminated.\n */\n if (activityThread.state !== ActivityThreadStatus.Assigned) {\n throw new Error(\n context.t(`error.activity-thread should not be started`, {\n id,\n actual: activityThread.state\n })\n )\n }\n\n if (output) {\n activityThread.output = output\n }\n\n const result = await tx.getRepository(ActivityThread).save({\n ...activityThread,\n reason,\n state: ActivityThreadStatus.Started,\n transaction: 'start',\n updater: user,\n startedAt: new Date()\n })\n\n await updateActivityInstanceState(activityThread.activityInstanceId, { causedBy: [result] }, context)\n\n return result\n}\n"]}
@@ -79,12 +79,26 @@ async function submit({ id, output, reason }, context) {
79
79
  updater: user
80
80
  });
81
81
  }
82
- activityThread = await repository.save(Object.assign(Object.assign({}, activityThread), { reason,
83
- output, transaction: 'submit', state: activity_thread_js_1.ActivityThreadStatus.Submitted, updater: user }));
82
+ activityThread = await repository.save({
83
+ ...activityThread,
84
+ reason,
85
+ output,
86
+ transaction: 'submit',
87
+ state: activity_thread_js_1.ActivityThreadStatus.Submitted,
88
+ updater: user
89
+ });
84
90
  }
85
91
  else {
86
- activityThread = await repository.save(Object.assign(Object.assign({}, activityThread), { reason,
87
- output, transaction: 'end', state: activity_thread_js_1.ActivityThreadStatus.Ended, updater: user, terminator: user, terminatedAt: new Date() }));
92
+ activityThread = await repository.save({
93
+ ...activityThread,
94
+ reason,
95
+ output,
96
+ transaction: 'end',
97
+ state: activity_thread_js_1.ActivityThreadStatus.Ended,
98
+ updater: user,
99
+ terminator: user,
100
+ terminatedAt: new Date()
101
+ });
88
102
  }
89
103
  await (0, common_js_1.updateActivityInstanceState)(activityThread.activityInstanceId, { causedBy: [activityThread] }, context);
90
104
  return activityThread;
@@ -1 +1 @@
1
- {"version":3,"file":"submit.js","sourceRoot":"","sources":["../../../server/controllers/activity-thread/submit.ts"],"names":[],"mappings":";;AAOA,wBAuHC;AA9HD,+DAAoF;AACpF,yDAAgD;AAChD,yFAAuG;AACvG,+FAAiH;AACjH,4CAA0F;AAC1F,6DAAqD;AAE9C,KAAK,UAAU,MAAM,CAC1B,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAoD,EACxE,OAAwB;IAExB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAE1C,+DAA+D;IAC/D,0DAA0D;IAE1D,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,mCAAc,CAAC,CAAA;IAEnD,IAAI,cAAc,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;QAC5C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;QACxC,SAAS,EAAE,CAAC,kBAAkB,CAAC;KAChC,CAAC,CAAA;IAEF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,iCAAiC,EAAE;YAC3C,cAAc,EAAE,EAAE;SACnB,CAAC,CACH,CAAA;IACH,CAAC;IAED,MAAM,IAAA,mCAAc,EAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAE7C;;;MAGE;IACF,IAAI,cAAc,CAAC,KAAK,KAAK,yCAAoB,CAAC,QAAQ,IAAI,cAAc,CAAC,KAAK,KAAK,yCAAoB,CAAC,OAAO,EAAE,CAAC;QACpH,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,+CAA+C,EAAE;YACzD,EAAE;YACF,MAAM,EAAE,cAAc,CAAC,KAAK;SAC7B,CAAC,CACH,CAAA;IACH,CAAC;IAED,2FAA2F;IAC3F,mEAAmE;IAEnE,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;QAC9B,cAAc,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAA;IACvC,CAAC;IAED,MAAM,YAAY,GAAuB,cAAc,CAAC,gBAAgB,CAAC,YAAY,CAAA;IAErF,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,kCAAmB,CAAC,IAAI,EAAE,CAAC;YACrD,MAAM,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;YAE5C,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,yDAAyD,CAAA;YACjE,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,gBAAI,CAAC,CAAC,SAAS,CAAC;gBAC1D,EAAE,EAAE,cAAc;aACnB,CAAC,CAAA;YAEF,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,MAAM,sDAAsD,CAAA;YAC9D,CAAC;YAED,MAAM,EAAE,CAAC,aAAa,CAAC,uCAAgB,CAAC,CAAC,IAAI,CAAC;gBAC5C,MAAM;gBACN,cAAc;gBACd,KAAK,EAAE,cAAc,CAAC,KAAK;gBAC3B,KAAK,EAAE,CAAC;gBACR,QAAQ,EAAE,+CAAwB,CAAC,OAAO;gBAC1C,WAAW,EAAE,QAAQ;gBACrB,YAAY,EAAE,YAAY;gBAC1B,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI;aACd,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,YAAY,GAAG,MAAM,IAAA,0CAA8B,EAAC,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;YAEjF,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,MAAM,yDAAyD,CAAA;YACjE,CAAC;YAED,MAAM,EAAE,CAAC,aAAa,CAAC,uCAAgB,CAAC,CAAC,IAAI,CAAC;gBAC5C,MAAM;gBACN,cAAc;gBACd,KAAK,EAAE,cAAc,CAAC,KAAK;gBAC3B,KAAK,EAAE,CAAC;gBACR,QAAQ,EAAE,+CAAwB,CAAC,OAAO;gBAC1C,WAAW,EAAE,QAAQ;gBACrB,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI;aACd,CAAC,CAAA;QACJ,CAAC;QAED,cAAc,GAAG,MAAM,UAAU,CAAC,IAAI,iCACjC,cAAc,KACjB,MAAM;YACN,MAAM,EACN,WAAW,EAAE,QAAQ,EACrB,KAAK,EAAE,yCAAoB,CAAC,SAAS,EACrC,OAAO,EAAE,IAAI,IACb,CAAA;IACJ,CAAC;SAAM,CAAC;QACN,cAAc,GAAG,MAAM,UAAU,CAAC,IAAI,iCACjC,cAAc,KACjB,MAAM;YACN,MAAM,EACN,WAAW,EAAE,KAAK,EAClB,KAAK,EAAE,yCAAoB,CAAC,KAAK,EACjC,OAAO,EAAE,IAAI,EACb,UAAU,EAAE,IAAI,EAChB,YAAY,EAAE,IAAI,IAAI,EAAE,IACxB,CAAA;IACJ,CAAC;IAED,MAAM,IAAA,uCAA2B,EAAC,cAAc,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IAE7G,OAAO,cAAc,CAAA;AACvB,CAAC","sourcesContent":["import { ApprovalLineItem, OrgMemberTargetType } from '@things-factory/organization'\nimport { Role } from '@things-factory/auth-base'\nimport { ActivityThread, ActivityThreadStatus } from '../../service/activity-thread/activity-thread.js'\nimport { ActivityApproval, ActivityApprovalJudgment } from '../../service/activity-approval/activity-approval.js'\nimport { getSystemUserFromOrgMemberItem, updateActivityInstanceState } from '../common.js'\nimport { checkAuthority } from './check-authority.js'\n\nexport async function submit(\n { id, output, reason }: { id: string; output?: object; reason?: string },\n context: ResolverContext\n): Promise<ActivityThread> {\n const { domain, user, tx } = context.state\n\n // TODO - output값 체크해서 필수필드, validation 을 만족하지 못하면, Error를 던진다.\n // 필수 필드가 빈 값인 경우나, validation 이 있는 경우에 체크하여 false가 되는 경우.\n\n const repository = tx.getRepository(ActivityThread)\n\n var activityThread = await repository.findOne({\n where: { domain: { id: domain.id }, id },\n relations: ['activityInstance']\n })\n\n if (!activityThread) {\n throw new Error(\n context.t('error.activity-thread not found', {\n activityThread: id\n })\n )\n }\n\n await checkAuthority(activityThread, context)\n\n /* \n Prerequisites for a activity thread to Be Started.\n - The previous state of the activity thread must not be terminated.\n */\n if (activityThread.state !== ActivityThreadStatus.Assigned && activityThread.state !== ActivityThreadStatus.Started) {\n throw new Error(\n context.t(`error.activity-thread should not be submitted`, {\n id,\n actual: activityThread.state\n })\n )\n }\n\n // TODO 만약 activityInstance의 threadsMin 갯수를 아직 채우지 못했다면, 새로운 activityThread를 만들어서 처리하도록 한다.\n // (다른 사용자들이 threadsMin 개수만큼의 activityThread를 채울 수 있는 기회를 제공하기 위해서)\n\n if (!activityThread.startedAt) {\n activityThread.startedAt = new Date()\n }\n\n const approvalLine: ApprovalLineItem[] = activityThread.activityInstance.approvalLine\n\n if (approvalLine && approvalLine.length > 0) {\n if (approvalLine[0].type == OrgMemberTargetType.Role) {\n const approverRoleId = approvalLine[0].value\n\n if (approverRoleId) {\n throw 'Cannot specify the approver role for this approval line'\n }\n\n const approverRole = await tx.getRepository(Role).findOneBy({\n id: approverRoleId\n })\n\n if (!approverRole) {\n throw 'Cannot find the approver role for this approval line'\n }\n\n await tx.getRepository(ActivityApproval).save({\n domain,\n activityThread,\n round: activityThread.round,\n order: 1,\n judgment: ActivityApprovalJudgment.Pending,\n transaction: 'submit',\n approverRole: approverRole,\n creator: user,\n updater: user\n })\n } else {\n var approverUser = await getSystemUserFromOrgMemberItem(approvalLine[0], context)\n\n if (!approverUser) {\n throw 'Cannot specify the approval user for this approval line'\n }\n\n await tx.getRepository(ActivityApproval).save({\n domain,\n activityThread,\n round: activityThread.round,\n order: 1,\n judgment: ActivityApprovalJudgment.Pending,\n transaction: 'submit',\n approver: approverUser,\n creator: user,\n updater: user\n })\n }\n\n activityThread = await repository.save({\n ...activityThread,\n reason,\n output,\n transaction: 'submit',\n state: ActivityThreadStatus.Submitted,\n updater: user\n })\n } else {\n activityThread = await repository.save({\n ...activityThread,\n reason,\n output,\n transaction: 'end',\n state: ActivityThreadStatus.Ended,\n updater: user,\n terminator: user,\n terminatedAt: new Date()\n })\n }\n\n await updateActivityInstanceState(activityThread.activityInstanceId, { causedBy: [activityThread] }, context)\n\n return activityThread\n}\n"]}
1
+ {"version":3,"file":"submit.js","sourceRoot":"","sources":["../../../server/controllers/activity-thread/submit.ts"],"names":[],"mappings":"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","sourcesContent":["import { ApprovalLineItem, OrgMemberTargetType } from '@things-factory/organization'\nimport { Role } from '@things-factory/auth-base'\nimport { ActivityThread, ActivityThreadStatus } from '../../service/activity-thread/activity-thread.js'\nimport { ActivityApproval, ActivityApprovalJudgment } from '../../service/activity-approval/activity-approval.js'\nimport { getSystemUserFromOrgMemberItem, updateActivityInstanceState } from '../common.js'\nimport { checkAuthority } from './check-authority.js'\n\nexport async function submit(\n { id, output, reason }: { id: string; output?: object; reason?: string },\n context: ResolverContext\n): Promise<ActivityThread> {\n const { domain, user, tx } = context.state\n\n // TODO - output값 체크해서 필수필드, validation 을 만족하지 못하면, Error를 던진다.\n // 필수 필드가 빈 값인 경우나, validation 이 있는 경우에 체크하여 false가 되는 경우.\n\n const repository = tx.getRepository(ActivityThread)\n\n var activityThread = await repository.findOne({\n where: { domain: { id: domain.id }, id },\n relations: ['activityInstance']\n })\n\n if (!activityThread) {\n throw new Error(\n context.t('error.activity-thread not found', {\n activityThread: id\n })\n )\n }\n\n await checkAuthority(activityThread, context)\n\n /* \n Prerequisites for a activity thread to Be Started.\n - The previous state of the activity thread must not be terminated.\n */\n if (activityThread.state !== ActivityThreadStatus.Assigned && activityThread.state !== ActivityThreadStatus.Started) {\n throw new Error(\n context.t(`error.activity-thread should not be submitted`, {\n id,\n actual: activityThread.state\n })\n )\n }\n\n // TODO 만약 activityInstance의 threadsMin 갯수를 아직 채우지 못했다면, 새로운 activityThread를 만들어서 처리하도록 한다.\n // (다른 사용자들이 threadsMin 개수만큼의 activityThread를 채울 수 있는 기회를 제공하기 위해서)\n\n if (!activityThread.startedAt) {\n activityThread.startedAt = new Date()\n }\n\n const approvalLine: ApprovalLineItem[] = activityThread.activityInstance.approvalLine\n\n if (approvalLine && approvalLine.length > 0) {\n if (approvalLine[0].type == OrgMemberTargetType.Role) {\n const approverRoleId = approvalLine[0].value\n\n if (approverRoleId) {\n throw 'Cannot specify the approver role for this approval line'\n }\n\n const approverRole = await tx.getRepository(Role).findOneBy({\n id: approverRoleId\n })\n\n if (!approverRole) {\n throw 'Cannot find the approver role for this approval line'\n }\n\n await tx.getRepository(ActivityApproval).save({\n domain,\n activityThread,\n round: activityThread.round,\n order: 1,\n judgment: ActivityApprovalJudgment.Pending,\n transaction: 'submit',\n approverRole: approverRole,\n creator: user,\n updater: user\n })\n } else {\n var approverUser = await getSystemUserFromOrgMemberItem(approvalLine[0], context)\n\n if (!approverUser) {\n throw 'Cannot specify the approval user for this approval line'\n }\n\n await tx.getRepository(ActivityApproval).save({\n domain,\n activityThread,\n round: activityThread.round,\n order: 1,\n judgment: ActivityApprovalJudgment.Pending,\n transaction: 'submit',\n approver: approverUser,\n creator: user,\n updater: user\n })\n }\n\n activityThread = await repository.save({\n ...activityThread,\n reason,\n output,\n transaction: 'submit',\n state: ActivityThreadStatus.Submitted,\n updater: user\n })\n } else {\n activityThread = await repository.save({\n ...activityThread,\n reason,\n output,\n transaction: 'end',\n state: ActivityThreadStatus.Ended,\n updater: user,\n terminator: user,\n terminatedAt: new Date()\n })\n }\n\n await updateActivityInstanceState(activityThread.activityInstanceId, { causedBy: [activityThread] }, context)\n\n return activityThread\n}\n"]}
@@ -169,7 +169,7 @@ async function createActivityThreadsForAllRoleUsers(transaction, activityInstanc
169
169
  where: { id: activityInstance.assigneeRoleId },
170
170
  relations: ['users']
171
171
  }));
172
- const assignees = ((assigneeRole === null || assigneeRole === void 0 ? void 0 : assigneeRole.users) || []).filter(user => user.userType == 'user');
172
+ const assignees = (assigneeRole?.users || []).filter(user => user.userType == 'user');
173
173
  if (assignees.length === 0) {
174
174
  throw new Error("there's no users having given role");
175
175
  }
@@ -199,7 +199,7 @@ async function getSystemUserFromMyDepartmentManager(context) {
199
199
  },
200
200
  relations: ['user']
201
201
  });
202
- return manager === null || manager === void 0 ? void 0 : manager.user;
202
+ return manager?.user;
203
203
  }
204
204
  async function getSystemUserFromMySupervosor(context) {
205
205
  const { domain, user, tx } = context.state;
@@ -216,12 +216,12 @@ async function getSystemUserFromMySupervosor(context) {
216
216
  },
217
217
  relations: ['user']
218
218
  });
219
- return supervisor === null || supervisor === void 0 ? void 0 : supervisor.user;
219
+ return supervisor?.user;
220
220
  }
221
221
  async function getSystemUserFromOrgMemberItem(item, context) {
222
222
  const { domain, user, tx } = context.state;
223
223
  const { type, approver, assignee, value } = item;
224
- const id = (approver === null || approver === void 0 ? void 0 : approver.id) || (assignee === null || assignee === void 0 ? void 0 : assignee.id) || value;
224
+ const id = approver?.id || assignee?.id || value;
225
225
  if (type == organization_1.OrgMemberTargetType.Employee) {
226
226
  const employee = id && (await tx.getRepository(organization_1.Employee).findOne({ where: { id }, relations: ['user'] }));
227
227
  if (!employee || !employee.user) {
@@ -257,7 +257,7 @@ function fillActivitySearchKeys(searchKeys, input) {
257
257
  if (!input || typeof input !== 'object') {
258
258
  return;
259
259
  }
260
- return searchKeys === null || searchKeys === void 0 ? void 0 : searchKeys.reduce((sum, key, index) => {
260
+ return searchKeys?.reduce((sum, key, index) => {
261
261
  const value = input[key.inputKey];
262
262
  if (value != null) {
263
263
  sum[`key0${index + 1}`] = value instanceof Array ? value[0] : value;
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../server/controllers/common.ts"],"names":[],"mappings":"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","sourcesContent":["import { Role, User } from '@things-factory/auth-base'\n\nimport { Department, Employee, ApprovalLineItem, OrgMemberTargetType } from '@things-factory/organization'\nimport { ActivitySearchKeyItem } from '../service/activity/activity-search-key-item-type.js'\nimport { AssigneeItem, MultipleInstanceType } from '../service/activity/activity.js'\nimport { ActivityInstance, ActivityInstanceStatus } from '../service/activity-instance/activity-instance.js'\nimport { ActivityThread, ActivityThreadStatus } from '../service/activity-thread/activity-thread.js'\nimport { ActivityInstallations } from './activity-installation/activity-installation-controller.js'\n\nexport type UpdateActivityInstanceStateAddendum = {\n causedBy?: ActivityThread[]\n}\n\nexport async function updateActivityInstanceState(\n id: string,\n { causedBy }: UpdateActivityInstanceStateAddendum,\n context: ResolverContext\n) {\n const { tx } = context.state\n\n var activityInstance = await tx.getRepository(ActivityInstance).findOne({\n where: { id },\n relations: [\n 'domain',\n 'activity',\n 'activityThreads',\n 'assigneeRole',\n 'supervisoryRole',\n 'updater',\n 'creator',\n 'starter',\n 'terminator'\n ]\n })\n\n activityInstance.transaction = 'thread' /* activity thread에 의해서 변경된 것임을 의미 */\n Object.assign(activityInstance, await evalActivityInstanceState(id, context))\n\n /* callback에서 업무적인 처리도 하고, activityInstance를 일부(주로 input) 수정할 수 있는 기회도 제공. */\n await ActivityInstallations.callback(activityInstance.activity.name, activityInstance, causedBy, context)\n\n await tx.getRepository(ActivityInstance).save(activityInstance)\n}\n\nexport async function evalActivityInstanceState(\n id: string,\n context: ResolverContext\n): Promise<Partial<ActivityInstance>> {\n const { tx, user } = context.state\n\n const activityInstance = await tx.getRepository(ActivityInstance).findOne({\n where: { id },\n relations: ['activityThreads', 'activity']\n })\n const { threadsMin, activityThreads, state, dueAt } = activityInstance\n\n const validThreads = activityThreads.filter(thread => thread.isValid())\n const pendingStartedThreads = activityThreads.filter(thread => thread.isPendingStarted())\n const pendingEndedThreads = activityThreads.filter(thread => thread.isPendingEnded())\n\n switch (true) {\n case state === ActivityInstanceStatus.Draft:\n case state === ActivityInstanceStatus.Ended:\n case state === ActivityInstanceStatus.Aborted:\n return {}\n case validThreads.length === 0:\n return {\n state: ActivityInstanceStatus.Issued\n }\n case threadsMin > validThreads.length:\n return {\n state: ActivityInstanceStatus.Unassigned\n }\n case pendingStartedThreads.length > 0:\n return {\n state: ActivityInstanceStatus.Assigned,\n assignedAt: new Date()\n }\n case pendingEndedThreads.length > 0:\n var started = !dueAt || dueAt.getTime() > Date.now()\n var changed =\n (started && state !== ActivityInstanceStatus.Started) || (!started && state !== ActivityInstanceStatus.Pending)\n\n return !changed\n ? null\n : started\n ? {\n state: ActivityInstanceStatus.Started,\n startedAt: new Date(),\n starter: user\n }\n : {\n state: ActivityInstanceStatus.Pending\n }\n default:\n return {\n state: activityThreads.some(thread => thread.state == ActivityThreadStatus.Aborted)\n ? ActivityInstanceStatus.Aborted\n : ActivityInstanceStatus.Ended,\n reason: '',\n output: [MultipleInstanceType.Parallel, MultipleInstanceType.Sequential].includes(\n activityInstance.activity.multiple\n )\n ? activityThreads\n .filter(thread => (thread.state = ActivityThreadStatus.Ended))\n .reduce((sum, thread) => {\n sum[thread.assigneeId] = thread.output\n return sum\n }, {} as any)\n : activityThreads[0].output,\n terminatedAt: new Date(),\n terminator: user\n }\n }\n}\n\nexport async function createActivityThreadWithUnassigned(\n transaction: string,\n activityInstance: ActivityInstance,\n context: ResolverContext\n): Promise<ActivityThread> {\n const { domain, user, tx } = context.state\n\n const threadRepo = tx.getRepository(ActivityThread)\n const now = new Date()\n\n const result = await threadRepo.save({\n domain,\n state: ActivityThreadStatus.Unassigned,\n activityInstance,\n transaction,\n output: activityInstance.output,\n dueAt: activityInstance.dueAt,\n assignedAt: now,\n creator: user,\n updater: user,\n createdAt: now\n })\n\n await updateActivityInstanceState(activityInstance.id, { causedBy: [result] }, context)\n\n return result\n}\n\nexport async function createActivityThreadForUser(\n transaction: string,\n activityInstance: ActivityInstance,\n assignee: User,\n context: ResolverContext\n): Promise<ActivityThread> {\n const { domain, user, tx } = context.state\n\n const threadRepo = tx.getRepository(ActivityThread)\n const now = new Date()\n\n const result = await threadRepo.save({\n domain,\n assignee,\n state: ActivityThreadStatus.Assigned,\n activityInstance,\n transaction,\n output: activityInstance.output,\n dueAt: activityInstance.dueAt,\n assignedAt: now,\n creator: user,\n updater: user,\n createdAt: now\n })\n\n await updateActivityInstanceState(activityInstance.id, { causedBy: [result] }, context)\n\n return result\n}\n\nexport async function createActivityThreadsForUsers(\n transaction: string,\n activityInstance: ActivityInstance,\n assignees: User[],\n context: ResolverContext\n): Promise<ActivityThread[]> {\n const { domain, user, tx } = context.state\n\n const threadRepo = tx.getRepository(ActivityThread)\n const now = new Date()\n\n const distinct = assignees.filter((assignee, idx) => {\n return assignee && !assignees.slice(0, idx).find(x => x.id == assignee.id)\n })\n\n const result = await threadRepo.save(\n distinct.map(assignee => {\n return {\n assignee,\n state: ActivityThreadStatus.Assigned,\n activityInstance,\n domain,\n transaction,\n output: activityInstance.output,\n creator: user,\n updater: user,\n dueAt: activityInstance.dueAt,\n assignedAt: now\n } as any\n })\n )\n\n await updateActivityInstanceState(activityInstance.id, { causedBy: result }, context)\n\n return result\n}\n\nexport async function createActivityThreadsForAllRoleUsers(\n transaction: string,\n activityInstance: ActivityInstance,\n context: ResolverContext\n): Promise<ActivityThread[]> {\n const { tx } = context.state\n\n // find how many users are having given role\n const assigneeRole = (await tx.getRepository(Role).findOne({\n where: { id: activityInstance.assigneeRoleId },\n relations: ['users']\n })) as Role\n const assignees = (assigneeRole?.users || []).filter(user => user.userType == 'user')\n\n if (assignees.length === 0) {\n throw new Error(\"there's no users having given role\")\n }\n\n // create activity-thread for all of users having given role\n return await createActivityThreadsForUsers(transaction, activityInstance, assignees, context)\n}\n\nexport async function getSystemUserFromMyDepartmentManager(context: ResolverContext): Promise<User> {\n const { domain, user, tx } = context.state\n\n const employee = await tx.getRepository(Employee).findOneBy({\n domain: { id: domain.id },\n user: { id: user.id }\n })\n\n if (!employee || !employee.departmentId) {\n return\n }\n\n const department = await tx.getRepository(Department).findOne({\n where: {\n id: employee.departmentId\n }\n })\n\n if (!department || !department.managerId) return\n\n const manager = await tx.getRepository(Employee).findOne({\n where: {\n domain: { id: domain.id },\n id: department.managerId\n },\n relations: ['user']\n })\n\n return manager?.user\n}\n\nexport async function getSystemUserFromMySupervosor(context: ResolverContext): Promise<User> {\n const { domain, user, tx } = context.state\n\n const employee = await tx.getRepository(Employee).findOneBy({\n domain: { id: domain.id },\n user: { id: user.id }\n })\n\n if (!employee || !employee.supervisorId) {\n return\n }\n\n const supervisor = await tx.getRepository(Employee).findOne({\n where: {\n id: employee.supervisorId\n },\n relations: ['user']\n })\n\n return supervisor?.user\n}\n\nexport async function getSystemUserFromOrgMemberItem(\n item: AssigneeItem | ApprovalLineItem,\n context: ResolverContext\n): Promise<User> {\n const { domain, user, tx } = context.state\n\n const { type, approver, assignee, value } = item as AssigneeItem & ApprovalLineItem\n const id = approver?.id || assignee?.id || value\n\n if (type == OrgMemberTargetType.Employee) {\n const employee = id && (await tx.getRepository(Employee).findOne({ where: { id }, relations: ['user'] }))\n\n if (!employee || !employee.user) {\n return\n }\n return employee.user\n } else if (type == OrgMemberTargetType.Department) {\n const department = id && (await tx.getRepository(Department).findOne({ where: { id }, relations: ['manager'] }))\n\n if (!department || !department.manager) {\n return\n }\n return await tx.getRepository(User).findOneBy({ id: department.manager.userId })\n } else if (type == OrgMemberTargetType.Role) {\n const role = id && (await tx.getRepository(Role).findOne({ where: { id }, relations: ['users'] }))\n\n if (!role || !role.users || !role.users[0]) {\n return\n }\n\n return await tx.getRepository(User).findOneBy({ id: role.users[0].id })\n } else if (type == OrgMemberTargetType.Myself) {\n return user\n } else if (type == OrgMemberTargetType.MyDepartment) {\n return await getSystemUserFromMyDepartmentManager(context)\n } else if (type == OrgMemberTargetType.MySupervisor) {\n return await getSystemUserFromMySupervosor(context)\n }\n}\n\nexport function fillActivitySearchKeys(searchKeys: ActivitySearchKeyItem[], input: { [key: string]: any }) {\n if (!input || typeof input !== 'object') {\n return\n }\n\n return searchKeys?.reduce((sum, key, index) => {\n const value = input[key.inputKey]\n if (value != null) {\n sum[`key0${index + 1}`] = value instanceof Array ? value[0] : value\n }\n return sum\n }, {})\n}\n"]}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../server/controllers/common.ts"],"names":[],"mappings":"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","sourcesContent":["import { Role, User } from '@things-factory/auth-base'\n\nimport { Department, Employee, ApprovalLineItem, OrgMemberTargetType } from '@things-factory/organization'\nimport { ActivitySearchKeyItem } from '../service/activity/activity-search-key-item-type.js'\nimport { AssigneeItem, MultipleInstanceType } from '../service/activity/activity.js'\nimport { ActivityInstance, ActivityInstanceStatus } from '../service/activity-instance/activity-instance.js'\nimport { ActivityThread, ActivityThreadStatus } from '../service/activity-thread/activity-thread.js'\nimport { ActivityInstallations } from './activity-installation/activity-installation-controller.js'\n\nexport type UpdateActivityInstanceStateAddendum = {\n causedBy?: ActivityThread[]\n}\n\nexport async function updateActivityInstanceState(\n id: string,\n { causedBy }: UpdateActivityInstanceStateAddendum,\n context: ResolverContext\n) {\n const { tx } = context.state\n\n var activityInstance = await tx.getRepository(ActivityInstance).findOne({\n where: { id },\n relations: [\n 'domain',\n 'activity',\n 'activityThreads',\n 'assigneeRole',\n 'supervisoryRole',\n 'updater',\n 'creator',\n 'starter',\n 'terminator'\n ]\n })\n\n activityInstance.transaction = 'thread' /* activity thread에 의해서 변경된 것임을 의미 */\n Object.assign(activityInstance, await evalActivityInstanceState(id, context))\n\n /* callback에서 업무적인 처리도 하고, activityInstance를 일부(주로 input) 수정할 수 있는 기회도 제공. */\n await ActivityInstallations.callback(activityInstance.activity.name, activityInstance, causedBy, context)\n\n await tx.getRepository(ActivityInstance).save(activityInstance)\n}\n\nexport async function evalActivityInstanceState(\n id: string,\n context: ResolverContext\n): Promise<Partial<ActivityInstance>> {\n const { tx, user } = context.state\n\n const activityInstance = await tx.getRepository(ActivityInstance).findOne({\n where: { id },\n relations: ['activityThreads', 'activity']\n })\n const { threadsMin, activityThreads, state, dueAt } = activityInstance\n\n const validThreads = activityThreads.filter(thread => thread.isValid())\n const pendingStartedThreads = activityThreads.filter(thread => thread.isPendingStarted())\n const pendingEndedThreads = activityThreads.filter(thread => thread.isPendingEnded())\n\n switch (true) {\n case state === ActivityInstanceStatus.Draft:\n case state === ActivityInstanceStatus.Ended:\n case state === ActivityInstanceStatus.Aborted:\n return {}\n case validThreads.length === 0:\n return {\n state: ActivityInstanceStatus.Issued\n }\n case threadsMin > validThreads.length:\n return {\n state: ActivityInstanceStatus.Unassigned\n }\n case pendingStartedThreads.length > 0:\n return {\n state: ActivityInstanceStatus.Assigned,\n assignedAt: new Date()\n }\n case pendingEndedThreads.length > 0:\n var started = !dueAt || dueAt.getTime() > Date.now()\n var changed =\n (started && state !== ActivityInstanceStatus.Started) || (!started && state !== ActivityInstanceStatus.Pending)\n\n return !changed\n ? null\n : started\n ? {\n state: ActivityInstanceStatus.Started,\n startedAt: new Date(),\n starter: user\n }\n : {\n state: ActivityInstanceStatus.Pending\n }\n default:\n return {\n state: activityThreads.some(thread => thread.state == ActivityThreadStatus.Aborted)\n ? ActivityInstanceStatus.Aborted\n : ActivityInstanceStatus.Ended,\n reason: '',\n output: [MultipleInstanceType.Parallel, MultipleInstanceType.Sequential].includes(\n activityInstance.activity.multiple\n )\n ? activityThreads\n .filter(thread => (thread.state = ActivityThreadStatus.Ended))\n .reduce((sum, thread) => {\n sum[thread.assigneeId] = thread.output\n return sum\n }, {} as any)\n : activityThreads[0].output,\n terminatedAt: new Date(),\n terminator: user\n }\n }\n}\n\nexport async function createActivityThreadWithUnassigned(\n transaction: string,\n activityInstance: ActivityInstance,\n context: ResolverContext\n): Promise<ActivityThread> {\n const { domain, user, tx } = context.state\n\n const threadRepo = tx.getRepository(ActivityThread)\n const now = new Date()\n\n const result = await threadRepo.save({\n domain,\n state: ActivityThreadStatus.Unassigned,\n activityInstance,\n transaction,\n output: activityInstance.output,\n dueAt: activityInstance.dueAt,\n assignedAt: now,\n creator: user,\n updater: user,\n createdAt: now\n })\n\n await updateActivityInstanceState(activityInstance.id, { causedBy: [result] }, context)\n\n return result\n}\n\nexport async function createActivityThreadForUser(\n transaction: string,\n activityInstance: ActivityInstance,\n assignee: User,\n context: ResolverContext\n): Promise<ActivityThread> {\n const { domain, user, tx } = context.state\n\n const threadRepo = tx.getRepository(ActivityThread)\n const now = new Date()\n\n const result = await threadRepo.save({\n domain,\n assignee,\n state: ActivityThreadStatus.Assigned,\n activityInstance,\n transaction,\n output: activityInstance.output,\n dueAt: activityInstance.dueAt,\n assignedAt: now,\n creator: user,\n updater: user,\n createdAt: now\n })\n\n await updateActivityInstanceState(activityInstance.id, { causedBy: [result] }, context)\n\n return result\n}\n\nexport async function createActivityThreadsForUsers(\n transaction: string,\n activityInstance: ActivityInstance,\n assignees: User[],\n context: ResolverContext\n): Promise<ActivityThread[]> {\n const { domain, user, tx } = context.state\n\n const threadRepo = tx.getRepository(ActivityThread)\n const now = new Date()\n\n const distinct = assignees.filter((assignee, idx) => {\n return assignee && !assignees.slice(0, idx).find(x => x.id == assignee.id)\n })\n\n const result = await threadRepo.save(\n distinct.map(assignee => {\n return {\n assignee,\n state: ActivityThreadStatus.Assigned,\n activityInstance,\n domain,\n transaction,\n output: activityInstance.output,\n creator: user,\n updater: user,\n dueAt: activityInstance.dueAt,\n assignedAt: now\n } as any\n })\n )\n\n await updateActivityInstanceState(activityInstance.id, { causedBy: result }, context)\n\n return result\n}\n\nexport async function createActivityThreadsForAllRoleUsers(\n transaction: string,\n activityInstance: ActivityInstance,\n context: ResolverContext\n): Promise<ActivityThread[]> {\n const { tx } = context.state\n\n // find how many users are having given role\n const assigneeRole = (await tx.getRepository(Role).findOne({\n where: { id: activityInstance.assigneeRoleId },\n relations: ['users']\n })) as Role\n const assignees = (assigneeRole?.users || []).filter(user => user.userType == 'user')\n\n if (assignees.length === 0) {\n throw new Error(\"there's no users having given role\")\n }\n\n // create activity-thread for all of users having given role\n return await createActivityThreadsForUsers(transaction, activityInstance, assignees, context)\n}\n\nexport async function getSystemUserFromMyDepartmentManager(context: ResolverContext): Promise<User> {\n const { domain, user, tx } = context.state\n\n const employee = await tx.getRepository(Employee).findOneBy({\n domain: { id: domain.id },\n user: { id: user.id }\n })\n\n if (!employee || !employee.departmentId) {\n return\n }\n\n const department = await tx.getRepository(Department).findOne({\n where: {\n id: employee.departmentId\n }\n })\n\n if (!department || !department.managerId) return\n\n const manager = await tx.getRepository(Employee).findOne({\n where: {\n domain: { id: domain.id },\n id: department.managerId\n },\n relations: ['user']\n })\n\n return manager?.user\n}\n\nexport async function getSystemUserFromMySupervosor(context: ResolverContext): Promise<User> {\n const { domain, user, tx } = context.state\n\n const employee = await tx.getRepository(Employee).findOneBy({\n domain: { id: domain.id },\n user: { id: user.id }\n })\n\n if (!employee || !employee.supervisorId) {\n return\n }\n\n const supervisor = await tx.getRepository(Employee).findOne({\n where: {\n id: employee.supervisorId\n },\n relations: ['user']\n })\n\n return supervisor?.user\n}\n\nexport async function getSystemUserFromOrgMemberItem(\n item: AssigneeItem | ApprovalLineItem,\n context: ResolverContext\n): Promise<User> {\n const { domain, user, tx } = context.state\n\n const { type, approver, assignee, value } = item as AssigneeItem & ApprovalLineItem\n const id = approver?.id || assignee?.id || value\n\n if (type == OrgMemberTargetType.Employee) {\n const employee = id && (await tx.getRepository(Employee).findOne({ where: { id }, relations: ['user'] }))\n\n if (!employee || !employee.user) {\n return\n }\n return employee.user\n } else if (type == OrgMemberTargetType.Department) {\n const department = id && (await tx.getRepository(Department).findOne({ where: { id }, relations: ['manager'] }))\n\n if (!department || !department.manager) {\n return\n }\n return await tx.getRepository(User).findOneBy({ id: department.manager.userId })\n } else if (type == OrgMemberTargetType.Role) {\n const role = id && (await tx.getRepository(Role).findOne({ where: { id }, relations: ['users'] }))\n\n if (!role || !role.users || !role.users[0]) {\n return\n }\n\n return await tx.getRepository(User).findOneBy({ id: role.users[0].id })\n } else if (type == OrgMemberTargetType.Myself) {\n return user\n } else if (type == OrgMemberTargetType.MyDepartment) {\n return await getSystemUserFromMyDepartmentManager(context)\n } else if (type == OrgMemberTargetType.MySupervisor) {\n return await getSystemUserFromMySupervosor(context)\n }\n}\n\nexport function fillActivitySearchKeys(searchKeys: ActivitySearchKeyItem[], input: { [key: string]: any }) {\n if (!input || typeof input !== 'object') {\n return\n }\n\n return searchKeys?.reduce((sum, key, index) => {\n const value = input[key.inputKey]\n if (value != null) {\n sum[`key0${index + 1}`] = value instanceof Array ? value[0] : value\n }\n return sum\n }, {})\n}\n"]}
@@ -27,8 +27,11 @@ process.on('bootstrap-module-global-public-route', (app, globalPublicRouter) =>
27
27
  if (!domain) {
28
28
  throw new Error(`domain(${domainId}) not found`);
29
29
  }
30
- context.state = Object.assign(Object.assign({}, context.state), { domain,
31
- tx });
30
+ context.state = {
31
+ ...context.state,
32
+ domain,
33
+ tx
34
+ };
32
35
  await (0, issue_js_1.issue)({
33
36
  activityId
34
37
  }, context);
@@ -1 +1 @@
1
- {"version":3,"file":"routes.js","sourceRoot":"","sources":["../server/routes.ts"],"names":[],"mappings":";;AAAA,iDAA6D;AAE7D,uEAAgE;AAEhE,OAAO,CAAC,EAAE,CAAC,sCAA6C,EAAE,CAAC,GAAG,EAAE,kBAAkB,EAAE,EAAE;IACpF;;;;;OAKG;IAEH,+IAA+I;IAC/I,kBAAkB,CAAC,IAAI,CAAC,iCAAiC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,IAA+B,CAAA;QAElE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;QACvE,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;QAEnD,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,SAAS,QAAQ,aAAa,UAAU,kCAAkC,CAAC,CAAA;QAC7F,CAAC;QAED,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,oBAAoB,UAAU,kCAAkC,CAAC,CAAA;QACvG,CAAC;QAED,MAAM,IAAA,qBAAa,GAAE,CAAC,WAAW,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE;YAC3C,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,cAAM,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAA;YAEzE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,UAAU,QAAQ,aAAa,CAAC,CAAA;YAClD,CAAC;YAED,OAAO,CAAC,KAAK,mCACR,OAAO,CAAC,KAAK,KAChB,MAAM;gBACN,EAAE,GACH,CAAA;YAED,MAAM,IAAA,gBAAK,EACT;gBACE,UAAU;aACX,EACD,OAAO,CACR,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,OAAO,CAAC,MAAM,GAAG,GAAG,CAAA;IACtB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,EAAE,CAAC,uCAA8C,EAAE,CAAC,GAAG,EAAE,mBAAmB,EAAE,EAAE;IACtF;;OAEG;AACL,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,EAAE,CAAC,sCAA6C,EAAE,CAAC,GAAG,EAAE,kBAAkB,EAAE,EAAE;IACpF;;OAEG;AACL,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,EAAE,CAAC,uCAA8C,EAAE,CAAC,GAAG,EAAE,mBAAmB,EAAE,EAAE;IACtF;;OAEG;AACL,CAAC,CAAC,CAAA","sourcesContent":["import { Domain, getDataSource } from '@things-factory/shell'\nimport { ScheduleRegisterRequest } from '@things-factory/scheduler-client'\nimport { issue } from './controllers/activity-instance/issue.js'\n\nprocess.on('bootstrap-module-global-public-route' as any, (app, globalPublicRouter) => {\n /*\n * can add global public routes to application (auth not required, tenancy not required)\n *\n * ex) routes.get('/path', async(context, next) => {})\n * ex) routes.post('/path', async(context, next) => {})\n */\n\n /* When a callback occurs from the scheduler when a scheduled dataset is on schedule, data collection task for the dataset should be issued. */\n globalPublicRouter.post('/callback-schedule-for-activity', async (context, next) => {\n const { client } = context.request.body as ScheduleRegisterRequest\n\n if (!client || typeof client !== 'object') {\n throw new Error('client property should be a part of callback body.')\n }\n\n const { group: domainId, key: activityId } = client\n\n if (!domainId || !activityId) {\n throw new Error(`group(${domainId}) and key(${activityId}) properties should not be empty`)\n }\n\n if (!domainId || !activityId) {\n throw new Error(`domainId(${domainId}) and activityId(${activityId}) properties should not be empty`)\n }\n\n await getDataSource().transaction(async tx => {\n const domain = await tx.getRepository(Domain).findOneBy({ id: domainId })\n\n if (!domain) {\n throw new Error(`domain(${domainId}) not found`)\n }\n\n context.state = {\n ...context.state,\n domain,\n tx\n }\n\n await issue(\n {\n activityId\n },\n context\n )\n })\n\n context.status = 200\n })\n})\n\nprocess.on('bootstrap-module-global-private-route' as any, (app, globalPrivateRouter) => {\n /*\n * can add global private routes to application (auth required, tenancy not required)\n */\n})\n\nprocess.on('bootstrap-module-domain-public-route' as any, (app, domainPublicRouter) => {\n /*\n * can add domain public routes to application (auth not required, tenancy required)\n */\n})\n\nprocess.on('bootstrap-module-domain-private-route' as any, (app, domainPrivateRouter) => {\n /*\n * can add domain private routes to application (auth required, tenancy required)\n */\n})\n"]}
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../server/routes.ts"],"names":[],"mappings":";;AAAA,iDAA6D;AAE7D,uEAAgE;AAEhE,OAAO,CAAC,EAAE,CAAC,sCAA6C,EAAE,CAAC,GAAG,EAAE,kBAAkB,EAAE,EAAE;IACpF;;;;;OAKG;IAEH,+IAA+I;IAC/I,kBAAkB,CAAC,IAAI,CAAC,iCAAiC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACjF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,IAA+B,CAAA;QAElE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;QACvE,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;QAEnD,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,SAAS,QAAQ,aAAa,UAAU,kCAAkC,CAAC,CAAA;QAC7F,CAAC;QAED,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,oBAAoB,UAAU,kCAAkC,CAAC,CAAA;QACvG,CAAC;QAED,MAAM,IAAA,qBAAa,GAAE,CAAC,WAAW,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE;YAC3C,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,cAAM,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAA;YAEzE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,UAAU,QAAQ,aAAa,CAAC,CAAA;YAClD,CAAC;YAED,OAAO,CAAC,KAAK,GAAG;gBACd,GAAG,OAAO,CAAC,KAAK;gBAChB,MAAM;gBACN,EAAE;aACH,CAAA;YAED,MAAM,IAAA,gBAAK,EACT;gBACE,UAAU;aACX,EACD,OAAO,CACR,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,OAAO,CAAC,MAAM,GAAG,GAAG,CAAA;IACtB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,EAAE,CAAC,uCAA8C,EAAE,CAAC,GAAG,EAAE,mBAAmB,EAAE,EAAE;IACtF;;OAEG;AACL,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,EAAE,CAAC,sCAA6C,EAAE,CAAC,GAAG,EAAE,kBAAkB,EAAE,EAAE;IACpF;;OAEG;AACL,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,EAAE,CAAC,uCAA8C,EAAE,CAAC,GAAG,EAAE,mBAAmB,EAAE,EAAE;IACtF;;OAEG;AACL,CAAC,CAAC,CAAA","sourcesContent":["import { Domain, getDataSource } from '@things-factory/shell'\nimport { ScheduleRegisterRequest } from '@things-factory/scheduler-client'\nimport { issue } from './controllers/activity-instance/issue.js'\n\nprocess.on('bootstrap-module-global-public-route' as any, (app, globalPublicRouter) => {\n /*\n * can add global public routes to application (auth not required, tenancy not required)\n *\n * ex) routes.get('/path', async(context, next) => {})\n * ex) routes.post('/path', async(context, next) => {})\n */\n\n /* When a callback occurs from the scheduler when a scheduled dataset is on schedule, data collection task for the dataset should be issued. */\n globalPublicRouter.post('/callback-schedule-for-activity', async (context, next) => {\n const { client } = context.request.body as ScheduleRegisterRequest\n\n if (!client || typeof client !== 'object') {\n throw new Error('client property should be a part of callback body.')\n }\n\n const { group: domainId, key: activityId } = client\n\n if (!domainId || !activityId) {\n throw new Error(`group(${domainId}) and key(${activityId}) properties should not be empty`)\n }\n\n if (!domainId || !activityId) {\n throw new Error(`domainId(${domainId}) and activityId(${activityId}) properties should not be empty`)\n }\n\n await getDataSource().transaction(async tx => {\n const domain = await tx.getRepository(Domain).findOneBy({ id: domainId })\n\n if (!domain) {\n throw new Error(`domain(${domainId}) not found`)\n }\n\n context.state = {\n ...context.state,\n domain,\n tx\n }\n\n await issue(\n {\n activityId\n },\n context\n )\n })\n\n context.status = 200\n })\n})\n\nprocess.on('bootstrap-module-global-private-route' as any, (app, globalPrivateRouter) => {\n /*\n * can add global private routes to application (auth required, tenancy not required)\n */\n})\n\nprocess.on('bootstrap-module-domain-public-route' as any, (app, domainPublicRouter) => {\n /*\n * can add domain public routes to application (auth not required, tenancy required)\n */\n})\n\nprocess.on('bootstrap-module-domain-private-route' as any, (app, domainPrivateRouter) => {\n /*\n * can add domain private routes to application (auth required, tenancy required)\n */\n})\n"]}