@things-factory/worklist 5.0.11 → 6.0.0-alpha.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 (211) hide show
  1. package/client/components/activity-/{bowner-view.js → bowner-view.ts} +27 -35
  2. package/client/components/{activity-instance-preview.js → activity-instance-preview.ts} +39 -52
  3. package/client/components/activity-intro-view.ts +0 -1
  4. package/client/components/{activity-reporter-view.js → activity-reporter-view.ts} +27 -40
  5. package/client/components/{activity-starter-form.js → activity-starter-form.ts} +55 -71
  6. package/client/pages/activity/{activity-list-page.js → activity-list-page.ts} +26 -35
  7. package/client/pages/activity/{activity-model-item-list.js → activity-model-item-list.ts} +15 -19
  8. package/client/pages/activity/{activity-page.js → activity-page.ts} +37 -42
  9. package/client/pages/activity/{starter-list-page.js → starter-list-page.ts} +15 -20
  10. package/client/pages/activity-instance/{activity-instance-list-page.js → activity-instance-list-page.ts} +22 -30
  11. package/client/pages/activity-instance/{activity-instance-page.js → activity-instance-page.ts} +37 -42
  12. package/client/pages/activity-store/{activity-store-page.js → activity-store-page.ts} +22 -29
  13. package/client/pages/activity-supervisor/{reporter-list-page.js → reporter-list-page.ts} +14 -21
  14. package/client/pages/activity-template/{activity-template-importer.js → activity-template-importer.ts} +32 -38
  15. package/client/pages/activity-template/{activity-template-list-page.js → activity-template-list-page.ts} +30 -37
  16. package/client/pages/activity-template/{activity-template-model-item-list.js → activity-template-model-item-list.ts} +5 -4
  17. package/client/pages/activity-thread/{activity-thread-importer.js → activity-thread-importer.ts} +32 -37
  18. package/client/pages/activity-thread/{activity-thread-list-page.js → activity-thread-list-page.ts} +20 -27
  19. package/client/pages/activity-thread/{activity-thread-page.js → activity-thread-page.ts} +37 -41
  20. package/client/pages/dashboard/{dashboard-home.js → dashboard-home.ts} +3 -7
  21. package/client/pages/todo/{assigned-list-page.js → assigned-list-page.ts} +13 -20
  22. package/client/pages/todo/{draft-list-page.js → draft-list-page.ts} +15 -20
  23. package/client/pages/todo/{pickable-list-page.js → pickable-list-page.ts} +13 -20
  24. package/client/pages/todo/{todo-list-page.js → todo-list-page.ts} +12 -19
  25. package/client/pages/{worklist-home.js → worklist-home.ts} +3 -7
  26. package/dist-client/components/activity-/bowner-view.d.ts +1 -1
  27. package/dist-client/components/activity-/bowner-view.js +44 -37
  28. package/dist-client/components/activity-/bowner-view.js.map +1 -1
  29. package/dist-client/components/activity-instance-preview.d.ts +2 -1
  30. package/dist-client/components/activity-instance-preview.js +59 -53
  31. package/dist-client/components/activity-instance-preview.js.map +1 -1
  32. package/dist-client/components/activity-intro-view.d.ts +0 -1
  33. package/dist-client/components/activity-intro-view.js +0 -1
  34. package/dist-client/components/activity-intro-view.js.map +1 -1
  35. package/dist-client/components/activity-reporter-view.d.ts +1 -1
  36. package/dist-client/components/activity-reporter-view.js +44 -38
  37. package/dist-client/components/activity-reporter-view.js.map +1 -1
  38. package/dist-client/components/activity-starter-form.d.ts +16 -0
  39. package/dist-client/components/activity-starter-form.js +70 -70
  40. package/dist-client/components/activity-starter-form.js.map +1 -1
  41. package/dist-client/pages/activity/activity-list-page.d.ts +13 -262
  42. package/dist-client/pages/activity/activity-list-page.js +49 -35
  43. package/dist-client/pages/activity/activity-list-page.js.map +1 -1
  44. package/dist-client/pages/activity/activity-model-item-list.d.ts +13 -155
  45. package/dist-client/pages/activity/activity-model-item-list.js +56 -45
  46. package/dist-client/pages/activity/activity-model-item-list.js.map +1 -1
  47. package/dist-client/pages/activity/activity-page.d.ts +29 -22
  48. package/dist-client/pages/activity/activity-page.js +54 -46
  49. package/dist-client/pages/activity/activity-page.js.map +1 -1
  50. package/dist-client/pages/activity/starter-list-page.d.ts +14 -120
  51. package/dist-client/pages/activity/starter-list-page.js +47 -31
  52. package/dist-client/pages/activity/starter-list-page.js.map +1 -1
  53. package/dist-client/pages/activity-instance/activity-instance-list-page.d.ts +9 -114
  54. package/dist-client/pages/activity-instance/activity-instance-list-page.js +40 -30
  55. package/dist-client/pages/activity-instance/activity-instance-list-page.js.map +1 -1
  56. package/dist-client/pages/activity-instance/activity-instance-page.d.ts +22 -22
  57. package/dist-client/pages/activity-instance/activity-instance-page.js +58 -45
  58. package/dist-client/pages/activity-instance/activity-instance-page.js.map +1 -1
  59. package/dist-client/pages/activity-store/activity-store-page.d.ts +23 -150
  60. package/dist-client/pages/activity-store/activity-store-page.js +40 -31
  61. package/dist-client/pages/activity-store/activity-store-page.js.map +1 -1
  62. package/dist-client/pages/activity-supervisor/reporter-list-page.d.ts +13 -120
  63. package/dist-client/pages/activity-supervisor/reporter-list-page.js +47 -31
  64. package/dist-client/pages/activity-supervisor/reporter-list-page.js.map +1 -1
  65. package/dist-client/pages/activity-template/activity-template-importer.d.ts +7 -21
  66. package/dist-client/pages/activity-template/activity-template-importer.js +42 -36
  67. package/dist-client/pages/activity-template/activity-template-importer.js.map +1 -1
  68. package/dist-client/pages/activity-template/activity-template-list-page.d.ts +17 -218
  69. package/dist-client/pages/activity-template/activity-template-list-page.js +58 -37
  70. package/dist-client/pages/activity-template/activity-template-list-page.js.map +1 -1
  71. package/dist-client/pages/activity-template/activity-template-model-item-list.js +10 -5
  72. package/dist-client/pages/activity-template/activity-template-model-item-list.js.map +1 -1
  73. package/dist-client/pages/activity-thread/activity-thread-importer.d.ts +7 -21
  74. package/dist-client/pages/activity-thread/activity-thread-importer.js +42 -36
  75. package/dist-client/pages/activity-thread/activity-thread-importer.js.map +1 -1
  76. package/dist-client/pages/activity-thread/activity-thread-list-page.d.ts +16 -100
  77. package/dist-client/pages/activity-thread/activity-thread-list-page.js +55 -36
  78. package/dist-client/pages/activity-thread/activity-thread-list-page.js.map +1 -1
  79. package/dist-client/pages/activity-thread/activity-thread-page.d.ts +26 -19
  80. package/dist-client/pages/activity-thread/activity-thread-page.js +54 -45
  81. package/dist-client/pages/activity-thread/activity-thread-page.js.map +1 -1
  82. package/dist-client/pages/dashboard/dashboard-home.js +8 -7
  83. package/dist-client/pages/dashboard/dashboard-home.js.map +1 -1
  84. package/dist-client/pages/todo/assigned-list-page.d.ts +12 -100
  85. package/dist-client/pages/todo/assigned-list-page.js +45 -30
  86. package/dist-client/pages/todo/assigned-list-page.js.map +1 -1
  87. package/dist-client/pages/todo/draft-list-page.d.ts +13 -174
  88. package/dist-client/pages/todo/draft-list-page.js +48 -30
  89. package/dist-client/pages/todo/draft-list-page.js.map +1 -1
  90. package/dist-client/pages/todo/pickable-list-page.d.ts +13 -126
  91. package/dist-client/pages/todo/pickable-list-page.js +46 -30
  92. package/dist-client/pages/todo/pickable-list-page.js.map +1 -1
  93. package/dist-client/pages/todo/todo-list-page.d.ts +12 -206
  94. package/dist-client/pages/todo/todo-list-page.js +44 -30
  95. package/dist-client/pages/todo/todo-list-page.js.map +1 -1
  96. package/dist-client/pages/worklist-home.js +8 -7
  97. package/dist-client/pages/worklist-home.js.map +1 -1
  98. package/dist-client/route.d.ts +1 -1
  99. package/dist-client/tsconfig.tsbuildinfo +1 -1
  100. package/dist-server/controllers/activity-instance/abort.js +8 -6
  101. package/dist-server/controllers/activity-instance/abort.js.map +1 -1
  102. package/dist-server/controllers/activity-instance/adjust.js +5 -3
  103. package/dist-server/controllers/activity-instance/adjust.js.map +1 -1
  104. package/dist-server/controllers/activity-instance/assign.js +11 -25
  105. package/dist-server/controllers/activity-instance/assign.js.map +1 -1
  106. package/dist-server/controllers/activity-instance/delegate.js +8 -6
  107. package/dist-server/controllers/activity-instance/delegate.js.map +1 -1
  108. package/dist-server/controllers/activity-instance/draft.js +9 -8
  109. package/dist-server/controllers/activity-instance/draft.js.map +1 -1
  110. package/dist-server/controllers/activity-instance/end.js +8 -6
  111. package/dist-server/controllers/activity-instance/end.js.map +1 -1
  112. package/dist-server/controllers/activity-instance/pick.js +9 -6
  113. package/dist-server/controllers/activity-instance/pick.js.map +1 -1
  114. package/dist-server/controllers/activity-instance/post.js +26 -6
  115. package/dist-server/controllers/activity-instance/post.js.map +1 -1
  116. package/dist-server/controllers/activity-instance/start.js +5 -3
  117. package/dist-server/controllers/activity-instance/start.js.map +1 -1
  118. package/dist-server/controllers/activity-instance/terminate.js +8 -6
  119. package/dist-server/controllers/activity-instance/terminate.js.map +1 -1
  120. package/dist-server/controllers/activity-thread/abort.js +7 -5
  121. package/dist-server/controllers/activity-thread/abort.js.map +1 -1
  122. package/dist-server/controllers/activity-thread/adjust.js +4 -2
  123. package/dist-server/controllers/activity-thread/adjust.js.map +1 -1
  124. package/dist-server/controllers/activity-thread/delegate.js +7 -5
  125. package/dist-server/controllers/activity-thread/delegate.js.map +1 -1
  126. package/dist-server/controllers/activity-thread/end.js +7 -5
  127. package/dist-server/controllers/activity-thread/end.js.map +1 -1
  128. package/dist-server/controllers/activity-thread/save.js +4 -2
  129. package/dist-server/controllers/activity-thread/save.js.map +1 -1
  130. package/dist-server/controllers/activity-thread/start.js +6 -4
  131. package/dist-server/controllers/activity-thread/start.js.map +1 -1
  132. package/dist-server/controllers/activity-thread/terminate.js +7 -5
  133. package/dist-server/controllers/activity-thread/terminate.js.map +1 -1
  134. package/dist-server/controllers/common.js +31 -10
  135. package/dist-server/controllers/common.js.map +1 -1
  136. package/dist-server/service/activity/activity-history.js +6 -7
  137. package/dist-server/service/activity/activity-history.js.map +1 -1
  138. package/dist-server/service/activity/activity-mutation.js +10 -4
  139. package/dist-server/service/activity/activity-mutation.js.map +1 -1
  140. package/dist-server/service/activity/activity-query.js +18 -19
  141. package/dist-server/service/activity/activity-query.js.map +1 -1
  142. package/dist-server/service/activity/activity-type.js +6 -7
  143. package/dist-server/service/activity/activity-type.js.map +1 -1
  144. package/dist-server/service/activity/activity.js +6 -7
  145. package/dist-server/service/activity/activity.js.map +1 -1
  146. package/dist-server/service/activity-instance/activity-instance-history.js +7 -8
  147. package/dist-server/service/activity-instance/activity-instance-history.js.map +1 -1
  148. package/dist-server/service/activity-instance/activity-instance-mutation.js +17 -19
  149. package/dist-server/service/activity-instance/activity-instance-mutation.js.map +1 -1
  150. package/dist-server/service/activity-instance/activity-instance-query.js +24 -25
  151. package/dist-server/service/activity-instance/activity-instance-query.js.map +1 -1
  152. package/dist-server/service/activity-instance/activity-instance-subscription.js +1 -2
  153. package/dist-server/service/activity-instance/activity-instance-subscription.js.map +1 -1
  154. package/dist-server/service/activity-instance/activity-instance-type.js +13 -6
  155. package/dist-server/service/activity-instance/activity-instance-type.js.map +1 -1
  156. package/dist-server/service/activity-instance/activity-instance.js +7 -8
  157. package/dist-server/service/activity-instance/activity-instance.js.map +1 -1
  158. package/dist-server/service/activity-instance/event-subscriber.js +0 -5
  159. package/dist-server/service/activity-instance/event-subscriber.js.map +1 -1
  160. package/dist-server/service/activity-template/activity-template-history.js +3 -4
  161. package/dist-server/service/activity-template/activity-template-history.js.map +1 -1
  162. package/dist-server/service/activity-template/activity-template-mutation.js +4 -4
  163. package/dist-server/service/activity-template/activity-template-mutation.js.map +1 -1
  164. package/dist-server/service/activity-template/activity-template-query.js +23 -11
  165. package/dist-server/service/activity-template/activity-template-query.js.map +1 -1
  166. package/dist-server/service/activity-template/activity-template.js +3 -4
  167. package/dist-server/service/activity-template/activity-template.js.map +1 -1
  168. package/dist-server/service/activity-thread/activity-thread-mutation.js +15 -11
  169. package/dist-server/service/activity-thread/activity-thread-mutation.js.map +1 -1
  170. package/dist-server/service/activity-thread/activity-thread-query.js +11 -13
  171. package/dist-server/service/activity-thread/activity-thread-query.js.map +1 -1
  172. package/dist-server/service/activity-thread/activity-thread.js +4 -5
  173. package/dist-server/service/activity-thread/activity-thread.js.map +1 -1
  174. package/dist-server/service/activity-thread/event-subscriber.js +15 -3
  175. package/dist-server/service/activity-thread/event-subscriber.js.map +1 -1
  176. package/dist-server/tsconfig.tsbuildinfo +1 -1
  177. package/package.json +7 -7
  178. package/server/controllers/activity-instance/abort.ts +9 -6
  179. package/server/controllers/activity-instance/adjust.ts +7 -4
  180. package/server/controllers/activity-instance/assign.ts +16 -44
  181. package/server/controllers/activity-instance/delegate.ts +10 -7
  182. package/server/controllers/activity-instance/draft.ts +9 -8
  183. package/server/controllers/activity-instance/end.ts +9 -7
  184. package/server/controllers/activity-instance/pick.ts +15 -7
  185. package/server/controllers/activity-instance/post.ts +30 -7
  186. package/server/controllers/activity-instance/start.ts +7 -4
  187. package/server/controllers/activity-instance/terminate.ts +10 -7
  188. package/server/controllers/activity-thread/abort.ts +7 -5
  189. package/server/controllers/activity-thread/adjust.ts +5 -3
  190. package/server/controllers/activity-thread/delegate.ts +8 -6
  191. package/server/controllers/activity-thread/end.ts +8 -6
  192. package/server/controllers/activity-thread/save.ts +5 -7
  193. package/server/controllers/activity-thread/start.ts +7 -4
  194. package/server/controllers/activity-thread/terminate.ts +6 -5
  195. package/server/controllers/common.ts +44 -21
  196. package/server/service/activity/activity-mutation.ts +19 -10
  197. package/server/service/activity/activity-query.ts +14 -14
  198. package/server/service/activity-instance/activity-instance-mutation.ts +18 -20
  199. package/server/service/activity-instance/activity-instance-query.ts +27 -21
  200. package/server/service/activity-instance/activity-instance-subscription.ts +1 -2
  201. package/server/service/activity-instance/activity-instance-type.ts +10 -4
  202. package/server/service/activity-instance/event-subscriber.ts +0 -6
  203. package/server/service/activity-template/activity-template-mutation.ts +13 -10
  204. package/server/service/activity-template/activity-template-query.ts +18 -9
  205. package/server/service/activity-thread/activity-thread-mutation.ts +27 -20
  206. package/server/service/activity-thread/activity-thread-query.ts +10 -11
  207. package/server/service/activity-thread/event-subscriber.ts +15 -3
  208. package/translations/en.json +3 -0
  209. package/translations/ko.json +3 -0
  210. package/translations/ms.json +3 -0
  211. package/translations/zh.json +3 -0
@@ -1,21 +1,22 @@
1
- import { getRepository } from 'typeorm'
1
+ import { getRepository } from '@things-factory/shell'
2
2
 
3
3
  import { ActivityThread, ActivityThreadStatus } from '../../service/activity-thread/activity-thread'
4
- import { type ContextStatus } from '../common'
5
4
 
6
5
  export async function terminate(
7
6
  { id, output, reason }: { id: string; output?: object; reason?: string },
8
- { domain, user, tx, t }: ContextStatus
7
+ context: any
9
8
  ): Promise<ActivityThread> {
9
+ const { domain, user, tx } = context.state
10
10
  var repository = getRepository(ActivityThread)
11
11
 
12
12
  var activityThread = await repository.findOne({
13
- where: { domain, id }
13
+ where: { domain: { id: domain.id }, id },
14
+ relations: ['domain', 'activityInstance', 'assignee', 'creator', 'updater']
14
15
  })
15
16
 
16
17
  if (!activityThread) {
17
18
  throw new Error(
18
- t('error.activity-instance not found', {
19
+ context.t('error.activity-instance not found', {
19
20
  activityThread: id
20
21
  })
21
22
  )
@@ -1,22 +1,37 @@
1
- import { EntityManager } from 'typeorm'
2
-
3
1
  import { Role, User } from '@things-factory/auth-base'
4
- import { Domain } from '@things-factory/shell'
5
2
 
6
3
  import { ActivityInstance, ActivityInstanceStatus } from '../service/activity-instance/activity-instance'
7
4
  import { ActivityThread, ActivityThreadStatus } from '../service/activity-thread/activity-thread'
8
5
 
9
- export type ContextStatus = { domain?: Domain; user?: User; tx?: EntityManager; t?: (...args: any[]) => string }
6
+ export async function updateActivityInstanceState(id: string, context: ResolverContext) {
7
+ const { tx } = context.state
10
8
 
11
- export async function updateActivityInstanceState(id: string, { tx }: ContextStatus) {
12
9
  await tx.getRepository(ActivityInstance).save({
13
- ...(await tx.getRepository(ActivityInstance).findOne(id)),
14
- state: await evalActivityInstanceState(id, { tx })
10
+ ...(await tx.getRepository(ActivityInstance).findOne({
11
+ where: { id },
12
+ relations: [
13
+ 'domain',
14
+ 'activity',
15
+ 'assigneeRole',
16
+ 'supervisoryRole',
17
+ 'updater',
18
+ 'creator',
19
+ 'starter',
20
+ 'terminator'
21
+ ]
22
+ })),
23
+ transaction: 'thread' /* change by transaction of activity thread */,
24
+ state: await evalActivityInstanceState(id, context)
15
25
  })
16
26
  }
17
27
 
18
- export async function evalActivityInstanceState(id: string, { tx }: ContextStatus): Promise<ActivityInstanceStatus> {
19
- const activityInstance = await tx.getRepository(ActivityInstance).findOne(id, { relations: ['activityThreads'] })
28
+ export async function evalActivityInstanceState(id: string, context: ResolverContext): Promise<ActivityInstanceStatus> {
29
+ const { tx } = context.state
30
+
31
+ const activityInstance = await tx.getRepository(ActivityInstance).findOne({
32
+ where: { id },
33
+ relations: ['activityThreads']
34
+ })
20
35
  const { threadsMin, threadsMax, activityThreads, state, dueAt } = activityInstance
21
36
 
22
37
  const validThreads = activityThreads.filter(thread => thread.isValid())
@@ -42,10 +57,13 @@ export async function evalActivityInstanceState(id: string, { tx }: ContextStatu
42
57
  }
43
58
 
44
59
  export async function createActivityThreadsForUsers(
45
- activityInstance,
46
- assignees,
47
- { domain, user, tx, t }: ContextStatus
48
- ): Promise<[ActivityThread]> {
60
+ transaction: string,
61
+ activityInstance: ActivityInstance,
62
+ assignees: User[],
63
+ context: ResolverContext
64
+ ): Promise<ActivityThread[]> {
65
+ const { domain, user, tx } = context.state
66
+
49
67
  const threadRepo = tx.getRepository(ActivityThread)
50
68
  const now = new Date()
51
69
 
@@ -56,23 +74,28 @@ export async function createActivityThreadsForUsers(
56
74
  state: ActivityThreadStatus.Assigned,
57
75
  activityInstance,
58
76
  domain,
77
+ transaction,
59
78
  creator: user,
60
79
  updater: user,
61
80
  dueAt: activityInstance.dueAt,
62
81
  assignedAt: now
63
- }
82
+ } as any
64
83
  })
65
84
  )
66
85
  }
67
86
 
68
87
  export async function createActivityThreadsForAllRoleUsers(
69
- activityInstance,
70
- { domain, user, tx, t }: ContextStatus
71
- ): Promise<[ActivityThread]> {
88
+ transaction: string,
89
+ activityInstance: ActivityInstance,
90
+ context: ResolverContext
91
+ ): Promise<ActivityThread[]> {
92
+ const { tx } = context.state
93
+
72
94
  // find how many users are having given role
73
- const assigneeRole = (await tx
74
- .getRepository(Role)
75
- .findOne({ id: activityInstance.assigneeRoleId }, { relations: ['users'] })) as Role
95
+ const assigneeRole = (await tx.getRepository(Role).findOne({
96
+ where: { id: activityInstance.assigneeRoleId },
97
+ relations: ['users']
98
+ })) as Role
76
99
  const assignees = assigneeRole?.users || []
77
100
 
78
101
  if (assignees.length === 0) {
@@ -80,5 +103,5 @@ export async function createActivityThreadsForAllRoleUsers(
80
103
  }
81
104
 
82
105
  // create activity-thread for all of users having given role
83
- return await createActivityThreadsForUsers(activityInstance, assignees, { domain, user, tx, t })
106
+ return await createActivityThreadsForUsers(transaction, activityInstance, assignees, context)
84
107
  }
@@ -10,7 +10,7 @@ import { ActivityPatch, NewActivity } from './activity-type'
10
10
  export class ActivityMutation {
11
11
  @Directive('@transaction')
12
12
  @Mutation(returns => Activity, { description: 'To create new Activity' })
13
- async createActivity(@Arg('activity') activity: NewActivity, @Ctx() context: any): Promise<Activity> {
13
+ async createActivity(@Arg('activity') activity: NewActivity, @Ctx() context: ResolverContext): Promise<Activity> {
14
14
  const { domain, user, tx } = context.state
15
15
 
16
16
  const result = await tx.getRepository(Activity).save({
@@ -42,13 +42,15 @@ export class ActivityMutation {
42
42
  async updateActivity(
43
43
  @Arg('id') id: string,
44
44
  @Arg('patch') patch: ActivityPatch,
45
- @Ctx() context: any
45
+ @Ctx() context: ResolverContext
46
46
  ): Promise<Activity> {
47
47
  const { domain, user, tx } = context.state
48
48
 
49
49
  const repository = tx.getRepository(Activity)
50
50
  const activity = await repository.findOne({
51
- where: { domain, id }
51
+ where: { domain: { id: domain.id }, id },
52
+ /* history에 항상 반영될 수 있도록 relations가 있어야 함. */
53
+ relations: ['domain', 'issuerRole', 'assigneeRole', 'supervisoryRole', 'creator', 'updater']
52
54
  })
53
55
 
54
56
  const result = await repository.save({
@@ -79,7 +81,7 @@ export class ActivityMutation {
79
81
  @Mutation(returns => [Activity], { description: "To modify multiple Activities' information" })
80
82
  async updateMultipleActivity(
81
83
  @Arg('patches', type => [ActivityPatch]) patches: ActivityPatch[],
82
- @Ctx() context: any
84
+ @Ctx() context: ResolverContext
83
85
  ): Promise<Activity[]> {
84
86
  const { domain, user, tx } = context.state
85
87
 
@@ -120,7 +122,11 @@ export class ActivityMutation {
120
122
  if (_updateRecords.length > 0) {
121
123
  for (let i = 0; i < _updateRecords.length; i++) {
122
124
  const updateRecord = _updateRecords[i]
123
- const activity = await activityRepo.findOne(updateRecord.id)
125
+ const activity = await activityRepo.findOne({
126
+ where: { id: updateRecord.id },
127
+ /* history에 항상 반영될 수 있도록 relations가 있어야 함. */
128
+ relations: ['domain', 'issuerRole', 'assigneeRole', 'supervisoryRole', 'creator', 'updater']
129
+ })
124
130
 
125
131
  const result = await activityRepo.save({
126
132
  ...activity,
@@ -152,10 +158,10 @@ export class ActivityMutation {
152
158
 
153
159
  @Directive('@transaction')
154
160
  @Mutation(returns => Boolean, { description: 'To delete Activity' })
155
- async deleteActivity(@Arg('id') id: string, @Ctx() context: any): Promise<boolean> {
161
+ async deleteActivity(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {
156
162
  const { domain, tx } = context.state
157
163
 
158
- await tx.getRepository(Activity).delete({ domain, id })
164
+ await tx.getRepository(Activity).delete({ domain: { id: domain.id }, id })
159
165
  await deleteAttachmentsByRef(null, { refBys: [id] }, context)
160
166
 
161
167
  return true
@@ -163,11 +169,14 @@ export class ActivityMutation {
163
169
 
164
170
  @Directive('@transaction')
165
171
  @Mutation(returns => Boolean, { description: 'To delete multiple Activities' })
166
- async deleteActivities(@Arg('ids', type => [String]) ids: string[], @Ctx() context: any): Promise<boolean> {
172
+ async deleteActivities(
173
+ @Arg('ids', type => [String]) ids: string[],
174
+ @Ctx() context: ResolverContext
175
+ ): Promise<boolean> {
167
176
  const { domain, tx } = context.state
168
177
 
169
178
  await tx.getRepository(Activity).delete({
170
- domain,
179
+ domain: { id: domain.id },
171
180
  id: In(ids)
172
181
  })
173
182
 
@@ -180,7 +189,7 @@ export class ActivityMutation {
180
189
  @Mutation(returns => Boolean, { description: 'To import multiple Activities' })
181
190
  async importActivities(
182
191
  @Arg('activities', type => [ActivityPatch]) activities: ActivityPatch[],
183
- @Ctx() context: any
192
+ @Ctx() context: ResolverContext
184
193
  ): Promise<boolean> {
185
194
  const { domain, tx } = context.state
186
195
 
@@ -1,9 +1,9 @@
1
1
  import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'
2
- import { Brackets, getRepository } from 'typeorm'
2
+ import { Brackets } from 'typeorm'
3
3
 
4
4
  import { Attachment } from '@things-factory/attachment-base'
5
5
  import { Role, User } from '@things-factory/auth-base'
6
- import { Domain, getQueryBuilderFromListParams, ListParam } from '@things-factory/shell'
6
+ import { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'
7
7
 
8
8
  import { Activity } from './activity'
9
9
  import { ActivityList } from './activity-type'
@@ -11,16 +11,16 @@ import { ActivityList } from './activity-type'
11
11
  @Resolver(Activity)
12
12
  export class ActivityQuery {
13
13
  @Query(returns => Activity!, { nullable: true, description: 'To fetch a Activity' })
14
- async activity(@Arg('id') id: string, @Ctx() context: any): Promise<Activity> {
14
+ async activity(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Activity> {
15
15
  const { domain } = context.state
16
16
 
17
17
  return await getRepository(Activity).findOne({
18
- where: { domain, id }
18
+ where: { domain: { id: domain.id }, id }
19
19
  })
20
20
  }
21
21
 
22
22
  @Query(returns => ActivityList, { description: 'To fetch multiple Activities' })
23
- async activities(@Args() params: ListParam, @Ctx() context: any): Promise<ActivityList> {
23
+ async activities(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<ActivityList> {
24
24
  const { domain } = context.state
25
25
 
26
26
  const queryBuilder = getQueryBuilderFromListParams({
@@ -37,7 +37,7 @@ export class ActivityQuery {
37
37
  }
38
38
 
39
39
  @Query(returns => ActivityList, { description: 'To fetch the list of activities I can start' })
40
- async startableActivities(@Args() params: ListParam, @Ctx() context: any): Promise<ActivityList> {
40
+ async startableActivities(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<ActivityList> {
41
41
  var { domain, user } = context.state
42
42
 
43
43
  /* 조회한 사용자가 assigner 역할을 가진 activity-instance 리스트만 반환 */
@@ -69,7 +69,7 @@ export class ActivityQuery {
69
69
  }
70
70
 
71
71
  @Query(returns => ActivityList, { description: 'To fetch the list of activities that I can report on' })
72
- async supervisableActivities(@Args() params: ListParam, @Ctx() context: any): Promise<ActivityList> {
72
+ async supervisableActivities(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<ActivityList> {
73
73
  var { domain, user } = context.state
74
74
 
75
75
  /* 조회한 사용자가 assigner 역할을 가진 activity-instance 리스트만 반환 */
@@ -100,7 +100,7 @@ export class ActivityQuery {
100
100
  async issuerRole(@Root() activity: Activity): Promise<Role> {
101
101
  return (
102
102
  activity.issuerRole ||
103
- (await getRepository(Role).findOne({
103
+ (await getRepository(Role).findOneBy({
104
104
  id: activity.issuerRoleId
105
105
  }))
106
106
  )
@@ -110,7 +110,7 @@ export class ActivityQuery {
110
110
  async assigneeRole(@Root() activity: Activity): Promise<Role> {
111
111
  return (
112
112
  activity.assigneeRole ||
113
- (await getRepository(Role).findOne({
113
+ (await getRepository(Role).findOneBy({
114
114
  id: activity.assigneeRoleId
115
115
  }))
116
116
  )
@@ -120,7 +120,7 @@ export class ActivityQuery {
120
120
  async supervisoryRole(@Root() activity: Activity): Promise<Role> {
121
121
  return (
122
122
  activity.supervisoryRole ||
123
- (await getRepository(Role).findOne({
123
+ (await getRepository(Role).findOneBy({
124
124
  id: activity.supervisoryRoleId
125
125
  }))
126
126
  )
@@ -130,7 +130,7 @@ export class ActivityQuery {
130
130
  async thumbnail(@Root() activity: Activity): Promise<string | undefined> {
131
131
  const attachment: Attachment = await getRepository(Attachment).findOne({
132
132
  where: {
133
- domain: activity.domainId,
133
+ domain: { id: activity.domainId },
134
134
  refType: Activity.name,
135
135
  refBy: activity.id
136
136
  }
@@ -141,16 +141,16 @@ export class ActivityQuery {
141
141
 
142
142
  @FieldResolver(type => Domain)
143
143
  async domain(@Root() activity: Activity): Promise<Domain> {
144
- return await getRepository(Domain).findOne(activity.domainId)
144
+ return await getRepository(Domain).findOneBy({ id: activity.domainId })
145
145
  }
146
146
 
147
147
  @FieldResolver(type => User)
148
148
  async updater(@Root() activity: Activity): Promise<User> {
149
- return await getRepository(User).findOne(activity.updaterId)
149
+ return await getRepository(User).findOneBy({ id: activity.updaterId })
150
150
  }
151
151
 
152
152
  @FieldResolver(type => User)
153
153
  async creator(@Root() activity: Activity): Promise<User> {
154
- return await getRepository(User).findOne(activity.creatorId)
154
+ return await getRepository(User).findOneBy({ id: activity.creatorId })
155
155
  }
156
156
  }
@@ -13,18 +13,18 @@ export class ActivityInstanceMutation {
13
13
  @Mutation(returns => ActivityInstance, { description: 'To draft standard ActivityInstance' })
14
14
  async draftActivityInstance(
15
15
  @Arg('activityInstance') activityInstance: NewActivityInstance,
16
- @Ctx() context: any
16
+ @Ctx() context: ResolverContext
17
17
  ): Promise<ActivityInstance> {
18
- return await draft(activityInstance, context.state)
18
+ return await draft(activityInstance, context)
19
19
  }
20
20
 
21
21
  @Directive('@transaction')
22
22
  @Mutation(returns => ActivityInstance, { description: 'To post standard ActivityInstance' })
23
23
  async postActivityInstance(
24
24
  @Arg('activityInstance') activityInstance: ActivityInstancePost,
25
- @Ctx() context: any
25
+ @Ctx() context: ResolverContext
26
26
  ): Promise<ActivityInstance> {
27
- return await post(activityInstance, context.state)
27
+ return await post(activityInstance, context)
28
28
  }
29
29
 
30
30
  @Directive('@transaction')
@@ -33,29 +33,27 @@ export class ActivityInstanceMutation {
33
33
  description:
34
34
  'To pick an activity ActivityInstance voluntarily. [cautions] This resolver will return a assigned ActivityThread.'
35
35
  })
36
- async pickActivityInstance(@Arg('id') id: string, @Ctx() context: any): Promise<ActivityThread> {
37
- return await pick(id, context.state)
36
+ async pickActivityInstance(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<ActivityThread> {
37
+ return await pick(id, context)
38
38
  }
39
39
 
40
40
  @Directive('@transaction')
41
41
  @Mutation(returns => ActivityInstance, { description: 'To assign a ActivityInstance' })
42
42
  async assignActivityInstance(
43
43
  @Arg('id') id: string,
44
- @Arg('assigneeRole', { nullable: true }) assigneeRole: string,
45
- @Arg('supervisoryRole', { nullable: true }) supervisoryRole: string,
44
+ @Arg('assignees', type => [String], { nullable: true, description: 'Email of assignee users' }) assignees: string[],
46
45
  @Arg('reason', { nullable: true }) reason: string,
47
46
  @Arg('dueAt', { nullable: true }) dueAt: Date,
48
- @Ctx() context: any
47
+ @Ctx() context: ResolverContext
49
48
  ): Promise<ActivityInstance> {
50
49
  return await assign(
51
50
  {
52
51
  id,
53
- assigneeRole,
54
- supervisoryRole,
52
+ assignees,
55
53
  reason,
56
54
  dueAt
57
55
  },
58
- context.state
56
+ context
59
57
  )
60
58
  }
61
59
 
@@ -64,9 +62,9 @@ export class ActivityInstanceMutation {
64
62
  async updateActivityInstance(
65
63
  @Arg('id') id: string,
66
64
  @Arg('patch') patch: ActivityInstancePatch,
67
- @Ctx() context: any
65
+ @Ctx() context: ResolverContext
68
66
  ): Promise<ActivityInstance> {
69
- return await adjust(id, patch, context.state)
67
+ return await adjust(id, patch, context)
70
68
  }
71
69
 
72
70
  @Directive('@transaction')
@@ -76,9 +74,9 @@ export class ActivityInstanceMutation {
76
74
  @Arg('assigneeRole', type => ObjectRef, { nullable: true }) assigneeRole: ObjectRef,
77
75
  @Arg('dueAt', { nullable: true }) dueAt: Date,
78
76
  @Arg('reason', { nullable: true }) reason: string,
79
- @Ctx() context: any
77
+ @Ctx() context: ResolverContext
80
78
  ): Promise<ActivityInstance> {
81
- return await delegate({ id, assigneeRole, dueAt, reason }, context.state)
79
+ return await delegate({ id, assigneeRole, dueAt, reason }, context)
82
80
  }
83
81
 
84
82
  @Directive('@transaction')
@@ -87,9 +85,9 @@ export class ActivityInstanceMutation {
87
85
  @Arg('id') id: string,
88
86
  @Arg('output', type => ScalarObject, { nullable: true }) output: { [key: string]: any },
89
87
  @Arg('reason', { nullable: true }) reason: string,
90
- @Ctx() context: any
88
+ @Ctx() context: ResolverContext
91
89
  ): Promise<ActivityInstance> {
92
- return await end({ id, output, reason }, context.state)
90
+ return await end({ id, output, reason }, context)
93
91
  }
94
92
 
95
93
  @Directive('@transaction')
@@ -97,8 +95,8 @@ export class ActivityInstanceMutation {
97
95
  async abortActivityInstance(
98
96
  @Arg('id') id: string,
99
97
  @Arg('reason', { nullable: true }) reason: string,
100
- @Ctx() context: any
98
+ @Ctx() context: ResolverContext
101
99
  ): Promise<ActivityInstance> {
102
- return await abort({ id, reason }, context.state)
100
+ return await abort({ id, reason }, context)
103
101
  }
104
102
  }
@@ -1,9 +1,8 @@
1
1
  import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'
2
- import { getRepository } from 'typeorm'
3
2
 
4
3
  import { Attachment } from '@things-factory/attachment-base'
5
4
  import { Role, User } from '@things-factory/auth-base'
6
- import { Domain, getQueryBuilderFromListParams, ListParam } from '@things-factory/shell'
5
+ import { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'
7
6
 
8
7
  import { ActivityThread } from '../activity-thread/activity-thread'
9
8
  import { Activity } from '../activity/activity'
@@ -13,16 +12,16 @@ import { ActivityInstanceList } from './activity-instance-type'
13
12
  @Resolver(ActivityInstance)
14
13
  export class ActivityInstanceQuery {
15
14
  @Query(returns => ActivityInstance!, { nullable: true, description: 'To fetch a ActivityInstance' })
16
- async activityInstance(@Arg('id') id: string, @Ctx() context: any): Promise<ActivityInstance> {
15
+ async activityInstance(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<ActivityInstance> {
17
16
  const { domain } = context.state
18
17
 
19
18
  return await getRepository(ActivityInstance).findOne({
20
- where: { domain, id }
19
+ where: { domain: { id: domain.id }, id }
21
20
  })
22
21
  }
23
22
 
24
23
  @Query(returns => ActivityInstanceList, { description: 'To fetch multiple ActivityInstances' })
25
- async activityInstances(@Args() params: ListParam, @Ctx() context: any): Promise<ActivityInstanceList> {
24
+ async activityInstances(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<ActivityInstanceList> {
26
25
  const { domain } = context.state
27
26
 
28
27
  const [items, total] = await getQueryBuilderFromListParams({
@@ -36,7 +35,10 @@ export class ActivityInstanceQuery {
36
35
  }
37
36
 
38
37
  @Query(returns => ActivityInstanceList, { description: 'To get list of activity instance that a user can pick' })
39
- async pickableActivityList(@Args() params: ListParam, @Ctx() context: any): Promise<ActivityInstanceList> {
38
+ async pickableActivityList(
39
+ @Args() params: ListParam,
40
+ @Ctx() context: ResolverContext
41
+ ): Promise<ActivityInstanceList> {
40
42
  var { domain, user } = context.state
41
43
 
42
44
  /*
@@ -74,7 +76,7 @@ export class ActivityInstanceQuery {
74
76
  }
75
77
 
76
78
  @Query(returns => ActivityInstanceList, { description: 'To fetch my own ActivityInstances' })
77
- async draftList(@Args() params: ListParam, @Ctx() context: any): Promise<ActivityInstanceList> {
79
+ async draftList(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<ActivityInstanceList> {
78
80
  var { domain, user } = context.state
79
81
 
80
82
  /* 생성자가 자신이면서, 아직 Draft 상태인 activity-instance 리스트만 반환 */
@@ -102,32 +104,36 @@ export class ActivityInstanceQuery {
102
104
  return null
103
105
  }
104
106
 
105
- return await getRepository(Activity).findOne(activityId)
107
+ return await getRepository(Activity).findOneBy({ id: activityId })
106
108
  }
107
109
 
108
110
  @FieldResolver(type => [ActivityThread])
109
- async activityThreads(@Root() activityInstance: ActivityInstance, @Ctx() context: any): Promise<ActivityThread[]> {
111
+ async activityThreads(
112
+ @Root() activityInstance: ActivityInstance,
113
+ @Ctx() context: ResolverContext
114
+ ): Promise<ActivityThread[]> {
110
115
  const { user } = context.state
111
116
  const { supervisoryRoleId } = activityInstance
112
117
 
113
118
  if (supervisoryRoleId) {
114
119
  /* only user having supervisoryRole can get whole activityThreads */
115
120
  const roles = (
116
- (await getRepository(User).findOne(user.id, {
121
+ (await getRepository(User).findOne({
122
+ where: { id: user.id },
117
123
  relations: ['roles']
118
124
  })) as User
119
125
  ).roles.map(role => role.id)
120
126
 
121
127
  if (!roles.includes(supervisoryRoleId)) {
122
- return await getRepository(ActivityThread).find({
123
- activityInstance,
124
- assigneeId: user.id
128
+ return await getRepository(ActivityThread).findBy({
129
+ activityInstance: { id: activityInstance.id },
130
+ assignee: { id: user.id }
125
131
  })
126
132
  }
127
133
  }
128
134
 
129
- return await getRepository(ActivityThread).find({
130
- activityInstance
135
+ return await getRepository(ActivityThread).findBy({
136
+ activityInstance: { id: activityInstance.id }
131
137
  })
132
138
  }
133
139
 
@@ -135,7 +141,7 @@ export class ActivityInstanceQuery {
135
141
  async assigneeRole(@Root() activityInstance: ActivityInstance): Promise<Role> {
136
142
  return (
137
143
  activityInstance.assigneeRole ||
138
- (await getRepository(Role).findOne({
144
+ (await getRepository(Role).findOneBy({
139
145
  id: activityInstance.assigneeRoleId
140
146
  }))
141
147
  )
@@ -145,7 +151,7 @@ export class ActivityInstanceQuery {
145
151
  async supervisoryRole(@Root() activityInstance: ActivityInstance): Promise<Role> {
146
152
  return (
147
153
  activityInstance.supervisoryRole ||
148
- (await getRepository(Role).findOne({
154
+ (await getRepository(Role).findOneBy({
149
155
  id: activityInstance.supervisoryRoleId
150
156
  }))
151
157
  )
@@ -158,7 +164,7 @@ export class ActivityInstanceQuery {
158
164
  activityId &&
159
165
  (await getRepository(Attachment).findOne({
160
166
  where: {
161
- domain: activityInstance.domainId,
167
+ domain: { id: activityInstance.domainId },
162
168
  refBy: activityId
163
169
  }
164
170
  }))
@@ -168,16 +174,16 @@ export class ActivityInstanceQuery {
168
174
 
169
175
  @FieldResolver(type => Domain)
170
176
  async domain(@Root() activityInstance: ActivityInstance): Promise<Domain> {
171
- return await getRepository(Domain).findOne(activityInstance.domainId)
177
+ return await getRepository(Domain).findOneBy({ id: activityInstance.domainId })
172
178
  }
173
179
 
174
180
  @FieldResolver(type => User)
175
181
  async updater(@Root() activityInstance: ActivityInstance): Promise<User> {
176
- return await getRepository(User).findOne(activityInstance.updaterId)
182
+ return await getRepository(User).findOneBy({ id: activityInstance.updaterId })
177
183
  }
178
184
 
179
185
  @FieldResolver(type => User)
180
186
  async creator(@Root() activityInstance: ActivityInstance): Promise<User> {
181
- return await getRepository(User).findOne(activityInstance.creatorId)
187
+ return await getRepository(User).findOneBy({ id: activityInstance.creatorId })
182
188
  }
183
189
  }
@@ -1,9 +1,8 @@
1
1
  import { withFilter } from 'graphql-subscriptions'
2
2
  import { Resolver, Root, Subscription } from 'type-graphql'
3
- import { getRepository } from 'typeorm'
4
3
 
5
4
  import { User } from '@things-factory/auth-base'
6
- import { pubsub } from '@things-factory/shell'
5
+ import { getRepository, pubsub } from '@things-factory/shell'
7
6
 
8
7
  import { ActivityInstance } from './activity-instance'
9
8
 
@@ -1,6 +1,6 @@
1
1
  import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
2
2
 
3
- import { Role, User } from '@things-factory/auth-base'
3
+ import { Role } from '@things-factory/auth-base'
4
4
  import { ObjectRef, ScalarDate, ScalarObject } from '@things-factory/shell'
5
5
 
6
6
  import { ActivityType, ActivityUIType } from '../activity/activity'
@@ -12,7 +12,7 @@ export class NewActivityInstance {
12
12
  name: string
13
13
 
14
14
  @Field({ nullable: true })
15
- activityId?: string
15
+ activityId: string
16
16
 
17
17
  @Field({ nullable: true })
18
18
  description?: string
@@ -110,8 +110,8 @@ export class ActivityInstancePost {
110
110
  @Field(type => ObjectRef, { nullable: true })
111
111
  assigneeRole?: Role
112
112
 
113
- @Field(type => [ObjectRef], { nullable: true })
114
- assignees?: User[]
113
+ @Field(type => [String], { nullable: true, description: 'Email of assignee users' })
114
+ assignees?: string[]
115
115
  }
116
116
 
117
117
  @InputType()
@@ -137,6 +137,12 @@ export class ActivityInstancePatch {
137
137
  @Field({ nullable: true })
138
138
  state?: ActivityInstanceStatus
139
139
 
140
+ @Field(type => Int, { nullable: true })
141
+ threadsMin?: number
142
+
143
+ @Field(type => Int, { nullable: true })
144
+ threadsMax?: number
145
+
140
146
  @Field(type => ScalarDate, { nullable: true })
141
147
  dueAt?: Date
142
148
 
@@ -9,10 +9,6 @@ import { ActivityInstanceHistory } from './activity-instance-history'
9
9
 
10
10
  @EventSubscriber()
11
11
  export class ActivityInstanceSubscriber implements EntitySubscriberInterface<ActivityInstance> {
12
- // constructor(connection: Connection) {
13
- // connection.subscribers.push(this)
14
- // }
15
-
16
12
  listenTo() {
17
13
  return ActivityInstance
18
14
  }
@@ -23,7 +19,6 @@ export class ActivityInstanceSubscriber implements EntitySubscriberInterface<Act
23
19
  pubsub.publish('activity-instance', {
24
20
  activityInstance
25
21
  })
26
- console.log('activity-instance created', activityInstance.id)
27
22
  }
28
23
 
29
24
  afterUpdate(event: UpdateEvent<ActivityInstance>): Promise<any> | void {
@@ -32,7 +27,6 @@ export class ActivityInstanceSubscriber implements EntitySubscriberInterface<Act
32
27
  pubsub.publish('activity-instance', {
33
28
  activityInstance
34
29
  })
35
- console.log('activity-instance updated', activityInstance.id)
36
30
  }
37
31
  }
38
32