@things-factory/worklist 6.0.43 → 6.0.45

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 (61) hide show
  1. package/client/pages/activity-stats/activity-stats-importer.ts +97 -0
  2. package/client/pages/activity-stats/activity-stats-list-page.ts +348 -0
  3. package/client/pages/todo/approval-done-list-page.ts +340 -0
  4. package/client/pages/todo/approval-pending-list-page.ts +1 -1
  5. package/client/pages/todo/done-list-calendar-page.ts +115 -0
  6. package/client/pages/todo/done-list-page.ts +1 -2
  7. package/client/pages/todo/pickable-list-page.ts +2 -1
  8. package/client/route.ts +12 -0
  9. package/client/themes/calendar-theme.css +54 -0
  10. package/dist-client/pages/activity-stats/activity-stats-importer.d.ts +22 -0
  11. package/dist-client/pages/activity-stats/activity-stats-importer.js +100 -0
  12. package/dist-client/pages/activity-stats/activity-stats-importer.js.map +1 -0
  13. package/dist-client/pages/activity-stats/activity-stats-list-page.d.ts +62 -0
  14. package/dist-client/pages/activity-stats/activity-stats-list-page.js +326 -0
  15. package/dist-client/pages/activity-stats/activity-stats-list-page.js.map +1 -0
  16. package/dist-client/pages/todo/approval-done-list-page.d.ts +39 -0
  17. package/dist-client/pages/todo/approval-done-list-page.js +338 -0
  18. package/dist-client/pages/todo/approval-done-list-page.js.map +1 -0
  19. package/dist-client/pages/todo/approval-pending-list-page.js +1 -1
  20. package/dist-client/pages/todo/approval-pending-list-page.js.map +1 -1
  21. package/dist-client/pages/todo/done-list-calendar-page.d.ts +24 -0
  22. package/dist-client/pages/todo/done-list-calendar-page.js +107 -0
  23. package/dist-client/pages/todo/done-list-calendar-page.js.map +1 -0
  24. package/dist-client/pages/todo/done-list-page.js +1 -2
  25. package/dist-client/pages/todo/done-list-page.js.map +1 -1
  26. package/dist-client/pages/todo/pickable-list-page.d.ts +1 -0
  27. package/dist-client/pages/todo/pickable-list-page.js +2 -1
  28. package/dist-client/pages/todo/pickable-list-page.js.map +1 -1
  29. package/dist-client/route.d.ts +1 -1
  30. package/dist-client/route.js +9 -0
  31. package/dist-client/route.js.map +1 -1
  32. package/dist-client/tsconfig.tsbuildinfo +1 -1
  33. package/dist-server/service/activity-approval/activity-approval-query.js +48 -0
  34. package/dist-server/service/activity-approval/activity-approval-query.js.map +1 -1
  35. package/dist-server/service/activity-stats/activity-stats-query.js +93 -0
  36. package/dist-server/service/activity-stats/activity-stats-query.js.map +1 -0
  37. package/dist-server/service/activity-stats/activity-stats-type.js +47 -0
  38. package/dist-server/service/activity-stats/activity-stats-type.js.map +1 -0
  39. package/dist-server/service/activity-stats/index.js +6 -0
  40. package/dist-server/service/activity-stats/index.js.map +1 -0
  41. package/dist-server/service/activity-summary/activity-summary-query.js +4 -22
  42. package/dist-server/service/activity-summary/activity-summary-query.js.map +1 -1
  43. package/dist-server/service/index.js +2 -0
  44. package/dist-server/service/index.js.map +1 -1
  45. package/dist-server/tsconfig.tsbuildinfo +1 -1
  46. package/helps/worklist/activity-bank.md +22 -0
  47. package/helps/worklist/{activity-approval.md → activity-stats.md} +1 -1
  48. package/helps/worklist/draft-list.md +15 -0
  49. package/helps/worklist/worklist-concept.md +11 -8
  50. package/package.json +3 -2
  51. package/server/service/activity-approval/activity-approval-query.ts +45 -1
  52. package/server/service/activity-stats/activity-stats-query.ts +94 -0
  53. package/server/service/activity-stats/activity-stats-type.ts +34 -0
  54. package/server/service/activity-stats/index.ts +3 -0
  55. package/server/service/activity-summary/activity-summary-query.ts +4 -22
  56. package/server/service/index.ts +2 -0
  57. package/things-factory.config.js +4 -1
  58. package/translations/en.json +10 -0
  59. package/translations/ko.json +12 -2
  60. package/translations/ms.json +10 -0
  61. package/translations/zh.json +10 -0
@@ -64,6 +64,44 @@ let ActivityApprovalQuery = class ActivityApprovalQuery {
64
64
  .getManyAndCount();
65
65
  return { items, total };
66
66
  }
67
+ async approvalDoneList(params, context) {
68
+ var { domain, user } = context.state;
69
+ const judgment = [
70
+ activity_approval_1.ActivityApprovalJudgment.Escalated,
71
+ activity_approval_1.ActivityApprovalJudgment.Delegated,
72
+ activity_approval_1.ActivityApprovalJudgment.Approved,
73
+ activity_approval_1.ActivityApprovalJudgment.Rejected
74
+ ];
75
+ const [items, total] = await (0, shell_1.getQueryBuilderFromListParams)({
76
+ repository: (0, shell_1.getRepository)(activity_approval_1.ActivityApproval),
77
+ params,
78
+ domain,
79
+ alias: 'ap',
80
+ searchables: ['name', 'description'],
81
+ filtersMap: {
82
+ name: {
83
+ relationColumn: 'activityThread.activityInstance',
84
+ columnName: 'name'
85
+ },
86
+ description: {
87
+ relationColumn: 'activityThread.activityInstance',
88
+ columnName: 'description'
89
+ },
90
+ priority: {
91
+ relationColumn: 'activityThread.activityInstance',
92
+ columnName: 'priority'
93
+ },
94
+ dueAt: {
95
+ relationColumn: 'activityThread.activityInstance',
96
+ columnName: 'dueAt'
97
+ }
98
+ }
99
+ })
100
+ .andWhere('ap.judgment IN (:...judgment)', { judgment })
101
+ .andWhere('ap.approver = :user', { user: user.id })
102
+ .getManyAndCount();
103
+ return { items, total };
104
+ }
67
105
  async activityThread(activityApproval) {
68
106
  return await (0, shell_1.getRepository)(activity_thread_1.ActivityThread).findOneBy({ id: activityApproval.activityThreadId });
69
107
  }
@@ -107,6 +145,16 @@ tslib_1.__decorate([
107
145
  tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
108
146
  tslib_1.__metadata("design:returntype", Promise)
109
147
  ], ActivityApprovalQuery.prototype, "approvalPendingList", null);
148
+ tslib_1.__decorate([
149
+ (0, type_graphql_1.Query)(returns => activity_approval_type_1.ActivityApprovalList, {
150
+ description: 'To fetch the approvals(ActivityApprovals) which has done by me'
151
+ }),
152
+ tslib_1.__param(0, (0, type_graphql_1.Args)()),
153
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
154
+ tslib_1.__metadata("design:type", Function),
155
+ tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
156
+ tslib_1.__metadata("design:returntype", Promise)
157
+ ], ActivityApprovalQuery.prototype, "approvalDoneList", null);
110
158
  tslib_1.__decorate([
111
159
  (0, type_graphql_1.FieldResolver)(type => activity_thread_1.ActivityThread),
112
160
  tslib_1.__param(0, (0, type_graphql_1.Root)()),
@@ -1 +1 @@
1
- {"version":3,"file":"activity-approval-query.js","sourceRoot":"","sources":["../../../server/service/activity-approval/activity-approval-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx, Directive } from 'type-graphql'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { ActivityInstance } from '../activity-instance/activity-instance'\nimport { ActivityThread } from '../activity-thread/activity-thread'\nimport { ActivityApproval, ActivityApprovalJudgment } from './activity-approval'\nimport { ActivityApprovalList } from './activity-approval-type'\n\n@Resolver(ActivityApproval)\nexport class ActivityApprovalQuery {\n @Query(returns => ActivityApproval!, { nullable: true, description: 'To fetch a ActivityApproval' })\n async activityApproval(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<ActivityApproval> {\n const { domain } = context.state\n\n return await getRepository(ActivityApproval).findOne({\n where: { domain: { id: domain.id }, id }\n })\n }\n\n @Query(returns => ActivityApprovalList, { description: 'To fetch multiple ActivityApprovals' })\n async activityApprovals(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<ActivityApprovalList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: getRepository(ActivityApproval),\n searchables: ['name', 'description']\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @Query(returns => ActivityApprovalList, { description: 'To fetch the list of work results I need to review' })\n async approvalPendingList(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<ActivityApprovalList> {\n var { domain, user } = context.state\n\n const judgment = [\n ActivityApprovalJudgment.Escalated,\n ActivityApprovalJudgment.Delegated,\n ActivityApprovalJudgment.Approved,\n ActivityApprovalJudgment.Rejected\n ]\n\n const [items, total] = await getQueryBuilderFromListParams({\n repository: getRepository(ActivityApproval),\n params,\n domain,\n alias: 'ap',\n searchables: ['name', 'description'],\n filtersMap: {\n name: {\n relationColumn: 'activityThread.activityInstance',\n columnName: 'name'\n },\n description: {\n relationColumn: 'activityThread.activityInstance',\n columnName: 'description'\n },\n priority: {\n relationColumn: 'activityThread.activityInstance',\n columnName: 'priority'\n },\n dueAt: {\n relationColumn: 'activityThread.activityInstance',\n columnName: 'dueAt'\n }\n }\n })\n .andWhere('ap.judgment NOT IN (:...judgment)', { judgment })\n .andWhere('ap.approver = :user', { user: user.id })\n .getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => ActivityThread)\n async activityThread(@Root() activityApproval: ActivityApproval): Promise<ActivityThread> {\n return await getRepository(ActivityThread).findOneBy({ id: activityApproval.activityThreadId })\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() activityApproval: ActivityApproval): Promise<Domain> {\n return await getRepository(Domain).findOneBy({ id: activityApproval.domainId })\n }\n\n @FieldResolver(type => User)\n async approver(@Root() activityApproval: ActivityApproval): Promise<User> {\n return await getRepository(User).findOneBy({ id: activityApproval.approverId })\n }\n\n @FieldResolver(type => User)\n async updater(@Root() activityApproval: ActivityApproval): Promise<User> {\n return await getRepository(User).findOneBy({ id: activityApproval.updaterId })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() activityApproval: ActivityApproval): Promise<User> {\n return await getRepository(User).findOneBy({ id: activityApproval.creatorId })\n }\n\n @FieldResolver(type => User)\n async terminator(@Root() activityApproval: ActivityApproval): Promise<User> {\n return await getRepository(User).findOneBy({ id: activityApproval.terminatorId })\n }\n}\n"]}
1
+ {"version":3,"file":"activity-approval-query.js","sourceRoot":"","sources":["../../../server/service/activity-approval/activity-approval-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx, Directive } from 'type-graphql'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { ActivityThread } from '../activity-thread/activity-thread'\nimport { ActivityApproval, ActivityApprovalJudgment } from './activity-approval'\nimport { ActivityApprovalList } from './activity-approval-type'\n\n@Resolver(ActivityApproval)\nexport class ActivityApprovalQuery {\n @Query(returns => ActivityApproval!, { nullable: true, description: 'To fetch a ActivityApproval' })\n async activityApproval(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<ActivityApproval> {\n const { domain } = context.state\n\n return await getRepository(ActivityApproval).findOne({\n where: { domain: { id: domain.id }, id }\n })\n }\n\n @Query(returns => ActivityApprovalList, { description: 'To fetch multiple ActivityApprovals' })\n async activityApprovals(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<ActivityApprovalList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: getRepository(ActivityApproval),\n searchables: ['name', 'description']\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @Query(returns => ActivityApprovalList, { description: 'To fetch the list of work results I need to review' })\n async approvalPendingList(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<ActivityApprovalList> {\n var { domain, user } = context.state\n\n const judgment = [\n ActivityApprovalJudgment.Escalated,\n ActivityApprovalJudgment.Delegated,\n ActivityApprovalJudgment.Approved,\n ActivityApprovalJudgment.Rejected\n ]\n\n const [items, total] = await getQueryBuilderFromListParams({\n repository: getRepository(ActivityApproval),\n params,\n domain,\n alias: 'ap',\n searchables: ['name', 'description'],\n filtersMap: {\n name: {\n relationColumn: 'activityThread.activityInstance',\n columnName: 'name'\n },\n description: {\n relationColumn: 'activityThread.activityInstance',\n columnName: 'description'\n },\n priority: {\n relationColumn: 'activityThread.activityInstance',\n columnName: 'priority'\n },\n dueAt: {\n relationColumn: 'activityThread.activityInstance',\n columnName: 'dueAt'\n }\n }\n })\n .andWhere('ap.judgment NOT IN (:...judgment)', { judgment })\n .andWhere('ap.approver = :user', { user: user.id })\n .getManyAndCount()\n\n return { items, total }\n }\n\n @Query(returns => ActivityApprovalList, {\n description: 'To fetch the approvals(ActivityApprovals) which has done by me'\n })\n async approvalDoneList(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<ActivityApprovalList> {\n var { domain, user } = context.state\n\n const judgment = [\n ActivityApprovalJudgment.Escalated,\n ActivityApprovalJudgment.Delegated,\n ActivityApprovalJudgment.Approved,\n ActivityApprovalJudgment.Rejected\n ]\n\n const [items, total] = await getQueryBuilderFromListParams({\n repository: getRepository(ActivityApproval),\n params,\n domain,\n alias: 'ap',\n searchables: ['name', 'description'],\n filtersMap: {\n name: {\n relationColumn: 'activityThread.activityInstance',\n columnName: 'name'\n },\n description: {\n relationColumn: 'activityThread.activityInstance',\n columnName: 'description'\n },\n priority: {\n relationColumn: 'activityThread.activityInstance',\n columnName: 'priority'\n },\n dueAt: {\n relationColumn: 'activityThread.activityInstance',\n columnName: 'dueAt'\n }\n }\n })\n .andWhere('ap.judgment IN (:...judgment)', { judgment })\n .andWhere('ap.approver = :user', { user: user.id })\n .getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => ActivityThread)\n async activityThread(@Root() activityApproval: ActivityApproval): Promise<ActivityThread> {\n return await getRepository(ActivityThread).findOneBy({ id: activityApproval.activityThreadId })\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() activityApproval: ActivityApproval): Promise<Domain> {\n return await getRepository(Domain).findOneBy({ id: activityApproval.domainId })\n }\n\n @FieldResolver(type => User)\n async approver(@Root() activityApproval: ActivityApproval): Promise<User> {\n return await getRepository(User).findOneBy({ id: activityApproval.approverId })\n }\n\n @FieldResolver(type => User)\n async updater(@Root() activityApproval: ActivityApproval): Promise<User> {\n return await getRepository(User).findOneBy({ id: activityApproval.updaterId })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() activityApproval: ActivityApproval): Promise<User> {\n return await getRepository(User).findOneBy({ id: activityApproval.creatorId })\n }\n\n @FieldResolver(type => User)\n async terminator(@Root() activityApproval: ActivityApproval): Promise<User> {\n return await getRepository(User).findOneBy({ id: activityApproval.terminatorId })\n }\n}\n"]}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var ActivityStatsQuery_1;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ActivityStatsQuery = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const type_graphql_1 = require("type-graphql");
7
+ const shell_1 = require("@things-factory/shell");
8
+ const activity_stats_type_1 = require("./activity-stats-type");
9
+ const activity_thread_1 = require("../activity-thread/activity-thread");
10
+ const activity_approval_1 = require("../activity-approval/activity-approval");
11
+ let ActivityStatsQuery = ActivityStatsQuery_1 = class ActivityStatsQuery {
12
+ async activityEvents(from, to, context) {
13
+ const { domain, user } = context.state;
14
+ if (!from) {
15
+ const beginOfToday = new Date();
16
+ beginOfToday.setHours(0, 0, 0, 0);
17
+ from = beginOfToday.toISOString().split('T').join(' ');
18
+ }
19
+ if (!to) {
20
+ const endOfToday = new Date();
21
+ endOfToday.setDate(endOfToday.getDate() + 1);
22
+ endOfToday.setHours(0, 0, 0, 0);
23
+ to = endOfToday.toISOString().split('T').join(' ');
24
+ }
25
+ const status = [activity_thread_1.ActivityThreadStatus.Ended, activity_thread_1.ActivityThreadStatus.Aborted];
26
+ var params = { filters: [{ name: 'terminatedAt', operator: 'between', value: [from, to] }] };
27
+ var doneItems = await (0, shell_1.getQueryBuilderFromListParams)({
28
+ repository: (0, shell_1.getRepository)(activity_thread_1.ActivityThread),
29
+ params,
30
+ domain,
31
+ alias: 'at'
32
+ })
33
+ .leftJoinAndSelect('at.activityInstance', 'ai')
34
+ .andWhere('at.state IN (:...status)', { status })
35
+ .andWhere('at.assignee = :user', { user: user.id })
36
+ .getMany();
37
+ const activityThreadDoneEvents = doneItems.map(({ id, activityInstance, terminatedAt }) => {
38
+ return {
39
+ id,
40
+ name: activityInstance.name,
41
+ date: terminatedAt,
42
+ priority: activityInstance.priority,
43
+ state: activity_stats_type_1.ActivityEventStatus.Done,
44
+ type: 'activity-thread'
45
+ };
46
+ });
47
+ const judgment = [
48
+ activity_approval_1.ActivityApprovalJudgment.Escalated,
49
+ activity_approval_1.ActivityApprovalJudgment.Delegated,
50
+ activity_approval_1.ActivityApprovalJudgment.Approved,
51
+ activity_approval_1.ActivityApprovalJudgment.Rejected
52
+ ];
53
+ const approvalDoneItems = await (0, shell_1.getQueryBuilderFromListParams)({
54
+ repository: (0, shell_1.getRepository)(activity_approval_1.ActivityApproval),
55
+ params,
56
+ domain,
57
+ alias: 'ap'
58
+ })
59
+ .leftJoinAndSelect('ap.activityThread', 'at')
60
+ .leftJoinAndSelect('at.activityInstance', 'ai')
61
+ .andWhere('ap.judgment IN (:...judgment)', { judgment })
62
+ .andWhere('ap.approver = :user', { user: user.id })
63
+ .getMany();
64
+ const activityApprovalDoneEvents = approvalDoneItems.map(({ id, activityThread, terminatedAt, judgment }) => {
65
+ const activityInstance = activityThread.activityInstance;
66
+ return {
67
+ id,
68
+ name: activityInstance.name,
69
+ date: terminatedAt,
70
+ priority: activityInstance.priority,
71
+ state: judgment == activity_approval_1.ActivityApprovalJudgment.Approved || activity_approval_1.ActivityApprovalJudgment.Escalated
72
+ ? activity_stats_type_1.ActivityEventStatus.Approved
73
+ : activity_stats_type_1.ActivityEventStatus.Rejected,
74
+ type: 'activity-approval'
75
+ };
76
+ });
77
+ return [...activityThreadDoneEvents, ...activityApprovalDoneEvents];
78
+ }
79
+ };
80
+ tslib_1.__decorate([
81
+ (0, type_graphql_1.Query)(returns => [activity_stats_type_1.ActivityEvent], { description: 'To fetch activity events by period' }),
82
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('from')),
83
+ tslib_1.__param(1, (0, type_graphql_1.Arg)('to')),
84
+ tslib_1.__param(2, (0, type_graphql_1.Ctx)()),
85
+ tslib_1.__metadata("design:type", Function),
86
+ tslib_1.__metadata("design:paramtypes", [String, String, Object]),
87
+ tslib_1.__metadata("design:returntype", Promise)
88
+ ], ActivityStatsQuery.prototype, "activityEvents", null);
89
+ ActivityStatsQuery = ActivityStatsQuery_1 = tslib_1.__decorate([
90
+ (0, type_graphql_1.Resolver)(ActivityStatsQuery_1)
91
+ ], ActivityStatsQuery);
92
+ exports.ActivityStatsQuery = ActivityStatsQuery;
93
+ //# sourceMappingURL=activity-stats-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity-stats-query.js","sourceRoot":"","sources":["../../../server/service/activity-stats/activity-stats-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx, Directive } from 'type-graphql'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { ActivityEvent, ActivityEventStatus } from './activity-stats-type'\nimport { ActivityThread, ActivityThreadStatus } from '../activity-thread/activity-thread'\nimport { ActivityApproval, ActivityApprovalJudgment } from '../activity-approval/activity-approval'\n\n@Resolver(ActivityStatsQuery)\nexport class ActivityStatsQuery {\n @Query(returns => [ActivityEvent], { description: 'To fetch activity events by period' })\n async activityEvents(\n @Arg('from') from: string,\n @Arg('to') to: string,\n @Ctx() context: ResolverContext\n ): Promise<ActivityEvent[]> {\n const { domain, user } = context.state\n\n if (!from) {\n const beginOfToday = new Date()\n beginOfToday.setHours(0, 0, 0, 0)\n from = beginOfToday.toISOString().split('T').join(' ')\n }\n\n if (!to) {\n const endOfToday = new Date()\n endOfToday.setDate(endOfToday.getDate() + 1)\n endOfToday.setHours(0, 0, 0, 0)\n to = endOfToday.toISOString().split('T').join(' ')\n }\n\n const status = [ActivityThreadStatus.Ended, ActivityThreadStatus.Aborted]\n\n var params = { filters: [{ name: 'terminatedAt', operator: 'between', value: [from, to] }] }\n\n var doneItems = await getQueryBuilderFromListParams({\n repository: getRepository(ActivityThread),\n params,\n domain,\n alias: 'at'\n })\n .leftJoinAndSelect('at.activityInstance', 'ai')\n .andWhere('at.state IN (:...status)', { status })\n .andWhere('at.assignee = :user', { user: user.id })\n .getMany()\n\n const activityThreadDoneEvents = doneItems.map(({ id, activityInstance, terminatedAt }) => {\n return {\n id,\n name: activityInstance.name,\n date: terminatedAt,\n priority: activityInstance.priority,\n state: ActivityEventStatus.Done,\n type: 'activity-thread'\n }\n })\n\n const judgment = [\n ActivityApprovalJudgment.Escalated,\n ActivityApprovalJudgment.Delegated,\n ActivityApprovalJudgment.Approved,\n ActivityApprovalJudgment.Rejected\n ]\n\n const approvalDoneItems = await getQueryBuilderFromListParams({\n repository: getRepository(ActivityApproval),\n params,\n domain,\n alias: 'ap'\n })\n .leftJoinAndSelect('ap.activityThread', 'at')\n .leftJoinAndSelect('at.activityInstance', 'ai')\n .andWhere('ap.judgment IN (:...judgment)', { judgment })\n .andWhere('ap.approver = :user', { user: user.id })\n .getMany()\n\n const activityApprovalDoneEvents = approvalDoneItems.map(({ id, activityThread, terminatedAt, judgment }) => {\n const activityInstance = activityThread.activityInstance\n\n return {\n id,\n name: activityInstance.name,\n date: terminatedAt,\n priority: activityInstance.priority,\n state:\n judgment == ActivityApprovalJudgment.Approved || ActivityApprovalJudgment.Escalated\n ? ActivityEventStatus.Approved\n : ActivityEventStatus.Rejected,\n type: 'activity-approval'\n }\n })\n\n return [...activityThreadDoneEvents, ...activityApprovalDoneEvents]\n }\n}\n"]}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ActivityEvent = exports.ActivityEventStatus = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const type_graphql_1 = require("type-graphql");
6
+ var ActivityEventStatus;
7
+ (function (ActivityEventStatus) {
8
+ ActivityEventStatus["Done"] = "done";
9
+ ActivityEventStatus["Pending"] = "pending";
10
+ ActivityEventStatus["Approved"] = "approved";
11
+ ActivityEventStatus["Rejected"] = "rejected";
12
+ })(ActivityEventStatus = exports.ActivityEventStatus || (exports.ActivityEventStatus = {}));
13
+ (0, type_graphql_1.registerEnumType)(ActivityEventStatus, {
14
+ name: 'ActivityEventStatus',
15
+ description: 'state enumeration of a Activity Event'
16
+ });
17
+ let ActivityEvent = class ActivityEvent {
18
+ };
19
+ tslib_1.__decorate([
20
+ (0, type_graphql_1.Field)({ nullable: true }),
21
+ tslib_1.__metadata("design:type", String)
22
+ ], ActivityEvent.prototype, "id", void 0);
23
+ tslib_1.__decorate([
24
+ (0, type_graphql_1.Field)({ nullable: true }),
25
+ tslib_1.__metadata("design:type", String)
26
+ ], ActivityEvent.prototype, "name", void 0);
27
+ tslib_1.__decorate([
28
+ (0, type_graphql_1.Field)({ nullable: true }),
29
+ tslib_1.__metadata("design:type", String)
30
+ ], ActivityEvent.prototype, "type", void 0);
31
+ tslib_1.__decorate([
32
+ (0, type_graphql_1.Field)({ nullable: true }),
33
+ tslib_1.__metadata("design:type", Number)
34
+ ], ActivityEvent.prototype, "priority", void 0);
35
+ tslib_1.__decorate([
36
+ (0, type_graphql_1.Field)({ nullable: true }),
37
+ tslib_1.__metadata("design:type", String)
38
+ ], ActivityEvent.prototype, "state", void 0);
39
+ tslib_1.__decorate([
40
+ (0, type_graphql_1.Field)({ nullable: true }),
41
+ tslib_1.__metadata("design:type", Date)
42
+ ], ActivityEvent.prototype, "date", void 0);
43
+ ActivityEvent = tslib_1.__decorate([
44
+ (0, type_graphql_1.ObjectType)()
45
+ ], ActivityEvent);
46
+ exports.ActivityEvent = ActivityEvent;
47
+ //# sourceMappingURL=activity-stats-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity-stats-type.js","sourceRoot":"","sources":["../../../server/service/activity-stats/activity-stats-type.ts"],"names":[],"mappings":";;;;AAAA,+CAA2E;AAE3E,IAAY,mBAKX;AALD,WAAY,mBAAmB;IAC7B,oCAAa,CAAA;IACb,0CAAmB,CAAA;IACnB,4CAAqB,CAAA;IACrB,4CAAqB,CAAA;AACvB,CAAC,EALW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAK9B;AAED,IAAA,+BAAgB,EAAC,mBAAmB,EAAE;IACpC,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,uCAAuC;CACrD,CAAC,CAAA;AAGK,IAAM,aAAa,GAAnB,MAAM,aAAa;CAkBzB,CAAA;AAjBC;IAAC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yCACf;AAEX;IAAC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CACb;AAEb;IAAC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CACb;AAEb;IAAC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CACT;AAEjB;IAAC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACC;AAE3B;IAAC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACnB,IAAI;2CAAA;AAjBA,aAAa;IADzB,IAAA,yBAAU,GAAE;GACA,aAAa,CAkBzB;AAlBY,sCAAa","sourcesContent":["import { ObjectType, Field, Int, ID, registerEnumType } from 'type-graphql'\n\nexport enum ActivityEventStatus {\n Done = 'done',\n Pending = 'pending',\n Approved = 'approved',\n Rejected = 'rejected'\n}\n\nregisterEnumType(ActivityEventStatus, {\n name: 'ActivityEventStatus',\n description: 'state enumeration of a Activity Event'\n})\n\n@ObjectType()\nexport class ActivityEvent {\n @Field({ nullable: true })\n id?: string\n\n @Field({ nullable: true })\n name?: string\n\n @Field({ nullable: true })\n type?: string\n\n @Field({ nullable: true })\n priority?: number\n\n @Field({ nullable: true })\n state?: ActivityEventStatus\n\n @Field({ nullable: true })\n date?: Date\n}\n"]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolvers = void 0;
4
+ const activity_stats_query_1 = require("./activity-stats-query");
5
+ exports.resolvers = [activity_stats_query_1.ActivityStatsQuery];
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/activity-stats/index.ts"],"names":[],"mappings":";;;AAAA,iEAA2D;AAE9C,QAAA,SAAS,GAAG,CAAC,yCAAkB,CAAC,CAAA","sourcesContent":["import { ActivityStatsQuery } from './activity-stats-query'\n\nexport const resolvers = [ActivityStatsQuery]\n"]}
@@ -20,12 +20,7 @@ let ActivitySummaryQuery = class ActivitySummaryQuery {
20
20
  repository: (0, shell_1.getRepository)(activity_thread_1.ActivityThread),
21
21
  params: {},
22
22
  domain,
23
- alias: 'at',
24
- searchables: ['name', 'description'],
25
- filtersMap: {
26
- name: { columnName: 'name', relationColumn: 'activityInstance' },
27
- description: { columnName: 'description', relationColumn: 'activityInstance' }
28
- }
23
+ alias: 'at'
29
24
  })
30
25
  .andWhere('at.state NOT IN (:...status)', { status })
31
26
  .andWhere('at.assignee = :user', { user: user.id })
@@ -43,18 +38,7 @@ let ActivitySummaryQuery = class ActivitySummaryQuery {
43
38
  repository: (0, shell_1.getRepository)(activity_approval_1.ActivityApproval),
44
39
  params: {},
45
40
  domain,
46
- alias: 'ap',
47
- searchables: ['name', 'description'],
48
- filtersMap: {
49
- name: {
50
- relationColumn: 'activityThread.activityInstance',
51
- columnName: 'name'
52
- },
53
- description: {
54
- relationColumn: 'activityThread.activityInstance',
55
- columnName: 'description'
56
- }
57
- }
41
+ alias: 'ap'
58
42
  })
59
43
  .andWhere('ap.judgment NOT IN (:...judgment)', { judgment })
60
44
  .andWhere('ap.approver = :user', { user: user.id })
@@ -81,8 +65,7 @@ let ActivitySummaryQuery = class ActivitySummaryQuery {
81
65
  repository: (0, shell_1.getRepository)(activity_instance_1.ActivityInstance),
82
66
  params: {},
83
67
  domain,
84
- alias: 'ai',
85
- searchables: ['name', 'description']
68
+ alias: 'ai'
86
69
  })
87
70
  .leftJoinAndSelect('ai.activityThreads', 'threads', 'threads.assignee = :user', { user: user.id })
88
71
  .andWhere('ai.state IN (:...status)', {
@@ -100,8 +83,7 @@ let ActivitySummaryQuery = class ActivitySummaryQuery {
100
83
  repository: (0, shell_1.getRepository)(activity_instance_1.ActivityInstance),
101
84
  params: {},
102
85
  domain,
103
- alias: 'ai',
104
- searchables: ['name', 'description']
86
+ alias: 'ai'
105
87
  })
106
88
  .andWhere('ai.state IN (:...status)', { status })
107
89
  .andWhere('ai.creator = :user', { user: user.id })
@@ -1 +1 @@
1
- {"version":3,"file":"activity-summary-query.js","sourceRoot":"","sources":["../../../server/service/activity-summary/activity-summary-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'\n\nimport { User } from '@things-factory/auth-base'\nimport { getQueryBuilderFromListParams, getRepository } from '@things-factory/shell'\n\nimport { ActivitySummary } from './activity-summary'\nimport { ActivityThread, ActivityThreadStatus } from '../activity-thread/activity-thread'\nimport { ActivityApproval, ActivityApprovalJudgment } from '../activity-approval/activity-approval'\nimport { ActivityInstance, ActivityInstanceStatus } from '../activity-instance/activity-instance'\n\n@Resolver(ActivitySummary)\nexport class ActivitySummaryQuery {\n @Query(returns => ActivitySummary!, { nullable: true, description: 'To fetch a Activity Summary' })\n async activitySummary(@Ctx() context: ResolverContext): Promise<ActivitySummary> {\n return {}\n }\n\n @FieldResolver(type => Number)\n async numberOfToDos(@Root() activitySummary: ActivitySummary, @Ctx() context: ResolverContext): Promise<number> {\n var { domain, user } = context.state\n\n const status = [ActivityThreadStatus.Ended, ActivityThreadStatus.Aborted]\n\n return await getQueryBuilderFromListParams({\n repository: getRepository(ActivityThread),\n params: {},\n domain,\n alias: 'at',\n searchables: ['name', 'description'],\n filtersMap: {\n name: { columnName: 'name', relationColumn: 'activityInstance' },\n description: { columnName: 'description', relationColumn: 'activityInstance' }\n }\n })\n .andWhere('at.state NOT IN (:...status)', { status })\n .andWhere('at.assignee = :user', { user: user.id })\n .getCount()\n }\n\n @FieldResolver(type => Number)\n async numberOfApprovalPendings(\n @Root() activitySummary: ActivitySummary,\n @Ctx() context: ResolverContext\n ): Promise<number> {\n var { domain, user } = context.state\n\n const judgment = [\n ActivityApprovalJudgment.Escalated,\n ActivityApprovalJudgment.Delegated,\n ActivityApprovalJudgment.Approved,\n ActivityApprovalJudgment.Rejected\n ]\n\n return await getQueryBuilderFromListParams({\n repository: getRepository(ActivityApproval),\n params: {},\n domain,\n alias: 'ap',\n searchables: ['name', 'description'],\n filtersMap: {\n name: {\n relationColumn: 'activityThread.activityInstance',\n columnName: 'name'\n },\n description: {\n relationColumn: 'activityThread.activityInstance',\n columnName: 'description'\n }\n }\n })\n .andWhere('ap.judgment NOT IN (:...judgment)', { judgment })\n .andWhere('ap.approver = :user', { user: user.id })\n .getCount()\n }\n\n @FieldResolver(type => Number)\n async numberOfPicks(@Root() activitySummary: ActivitySummary, @Ctx() context: ResolverContext): Promise<number> {\n var { domain, user } = context.state\n\n /* \n activity-instance 중에서 아직 created 상태이면서, \n activity-instance의 assigneeRole 이 지정되지 않았거나,\n assigneeRole이 지정되었으면 그 Role에 내가 해당된 경우이면서,\n 나는 아직 해당 activity-instance의 thread를 할당받지 않은 경우에 해당하는\n activity-instance 리스트를 모두 가져오는 쿼리이다.\n */\n\n user = await getRepository(User).findOne({\n where: { id: user.id },\n relations: ['roles']\n })\n const roles = user.roles.filter(role => role.domainId === domain.id).map(role => role.id)\n\n if (!roles.length) {\n return 0\n }\n\n return await getQueryBuilderFromListParams({\n repository: getRepository(ActivityInstance),\n params: {},\n domain,\n alias: 'ai',\n searchables: ['name', 'description']\n })\n .leftJoinAndSelect('ai.activityThreads', 'threads', 'threads.assignee = :user', { user: user.id })\n .andWhere('ai.state IN (:...status)', {\n status: [ActivityInstanceStatus.Posted, ActivityInstanceStatus.PendingAssignment]\n })\n .andWhere('ai.assigneeRole IN (:...roles)', { roles })\n .andWhere('threads.id IS NULL') /* 이미 내가 할당된 경우는 제외한다. */\n .getCount()\n }\n\n @FieldResolver(type => Number)\n async numberOfDrafts(@Root() activitySummary: ActivitySummary, @Ctx() context: ResolverContext): Promise<number> {\n var { domain, user } = context.state\n\n /* 생성자가 자신이면서, 아직 Draft 상태인 activity-instance 리스트만 반환 */\n const status = [ActivityInstanceStatus.Draft]\n\n return await getQueryBuilderFromListParams({\n repository: getRepository(ActivityInstance),\n params: {},\n domain,\n alias: 'ai',\n searchables: ['name', 'description']\n })\n .andWhere('ai.state IN (:...status)', { status })\n .andWhere('ai.creator = :user', { user: user.id })\n .getCount()\n }\n}\n"]}
1
+ {"version":3,"file":"activity-summary-query.js","sourceRoot":"","sources":["../../../server/service/activity-summary/activity-summary-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'\n\nimport { User } from '@things-factory/auth-base'\nimport { getQueryBuilderFromListParams, getRepository } from '@things-factory/shell'\n\nimport { ActivitySummary } from './activity-summary'\nimport { ActivityThread, ActivityThreadStatus } from '../activity-thread/activity-thread'\nimport { ActivityApproval, ActivityApprovalJudgment } from '../activity-approval/activity-approval'\nimport { ActivityInstance, ActivityInstanceStatus } from '../activity-instance/activity-instance'\n\n@Resolver(ActivitySummary)\nexport class ActivitySummaryQuery {\n @Query(returns => ActivitySummary!, { nullable: true, description: 'To fetch a Activity Summary' })\n async activitySummary(@Ctx() context: ResolverContext): Promise<ActivitySummary> {\n return {}\n }\n\n @FieldResolver(type => Number)\n async numberOfToDos(@Root() activitySummary: ActivitySummary, @Ctx() context: ResolverContext): Promise<number> {\n var { domain, user } = context.state\n\n const status = [ActivityThreadStatus.Ended, ActivityThreadStatus.Aborted]\n\n return await getQueryBuilderFromListParams({\n repository: getRepository(ActivityThread),\n params: {},\n domain,\n alias: 'at'\n })\n .andWhere('at.state NOT IN (:...status)', { status })\n .andWhere('at.assignee = :user', { user: user.id })\n .getCount()\n }\n\n @FieldResolver(type => Number)\n async numberOfApprovalPendings(\n @Root() activitySummary: ActivitySummary,\n @Ctx() context: ResolverContext\n ): Promise<number> {\n var { domain, user } = context.state\n\n const judgment = [\n ActivityApprovalJudgment.Escalated,\n ActivityApprovalJudgment.Delegated,\n ActivityApprovalJudgment.Approved,\n ActivityApprovalJudgment.Rejected\n ]\n\n return await getQueryBuilderFromListParams({\n repository: getRepository(ActivityApproval),\n params: {},\n domain,\n alias: 'ap'\n })\n .andWhere('ap.judgment NOT IN (:...judgment)', { judgment })\n .andWhere('ap.approver = :user', { user: user.id })\n .getCount()\n }\n\n @FieldResolver(type => Number)\n async numberOfPicks(@Root() activitySummary: ActivitySummary, @Ctx() context: ResolverContext): Promise<number> {\n var { domain, user } = context.state\n\n /* \n activity-instance 중에서 아직 created 상태이면서, \n activity-instance의 assigneeRole 이 지정되지 않았거나,\n assigneeRole이 지정되었으면 그 Role에 내가 해당된 경우이면서,\n 나는 아직 해당 activity-instance의 thread를 할당받지 않은 경우에 해당하는\n activity-instance 리스트를 모두 가져오는 쿼리이다.\n */\n\n user = await getRepository(User).findOne({\n where: { id: user.id },\n relations: ['roles']\n })\n const roles = user.roles.filter(role => role.domainId === domain.id).map(role => role.id)\n\n if (!roles.length) {\n return 0\n }\n\n return await getQueryBuilderFromListParams({\n repository: getRepository(ActivityInstance),\n params: {},\n domain,\n alias: 'ai'\n })\n .leftJoinAndSelect('ai.activityThreads', 'threads', 'threads.assignee = :user', { user: user.id })\n .andWhere('ai.state IN (:...status)', {\n status: [ActivityInstanceStatus.Posted, ActivityInstanceStatus.PendingAssignment]\n })\n .andWhere('ai.assigneeRole IN (:...roles)', { roles })\n .andWhere('threads.id IS NULL') /* 이미 내가 할당된 경우는 제외한다. */\n .getCount()\n }\n\n @FieldResolver(type => Number)\n async numberOfDrafts(@Root() activitySummary: ActivitySummary, @Ctx() context: ResolverContext): Promise<number> {\n var { domain, user } = context.state\n\n /* 생성자가 자신이면서, 아직 Draft 상태인 activity-instance 리스트만 반환 */\n const status = [ActivityInstanceStatus.Draft]\n\n return await getQueryBuilderFromListParams({\n repository: getRepository(ActivityInstance),\n params: {},\n domain,\n alias: 'ai'\n })\n .andWhere('ai.state IN (:...status)', { status })\n .andWhere('ai.creator = :user', { user: user.id })\n .getCount()\n }\n}\n"]}
@@ -11,6 +11,7 @@ tslib_1.__exportStar(require("./activity/activity"), exports);
11
11
  tslib_1.__exportStar(require("./installable-activity/installable-activity"), exports);
12
12
  tslib_1.__exportStar(require("./activity-summary/activity-summary"), exports);
13
13
  /* IMPORT ENTITIES AND RESOLVERS */
14
+ const activity_stats_1 = require("./activity-stats");
14
15
  const activity_approval_1 = require("./activity-approval");
15
16
  const activity_1 = require("./activity");
16
17
  const activity_instance_1 = require("./activity-instance");
@@ -38,6 +39,7 @@ exports.subscribers = [
38
39
  exports.schema = {
39
40
  resolverClasses: [
40
41
  /* RESOLVER CLASSES */
42
+ ...activity_stats_1.resolvers,
41
43
  ...activity_approval_1.resolvers,
42
44
  ...activity_1.resolvers,
43
45
  ...activity_instance_1.resolvers,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/service/index.ts"],"names":[],"mappings":";;;;AAAA,yBAAyB;AACzB,gFAAqD;AACrD,4EAAiD;AACjD,gFAAqD;AACrD,gFAAqD;AACrD,8DAAmC;AACnC,sFAA2D;AAC3D,8EAAmD;AAEnD,mCAAmC;AACnC,2DAI4B;AAC5B,yCAImB;AACnB,2DAI4B;AAC5B,2DAAkH;AAClH,uDAI0B;AAC1B,iEAG+B;AAC/B,yDAA+G;AAElG,QAAA,QAAQ,GAAG;IACtB,cAAc;IACd,GAAG,4BAAwB;IAC3B,GAAG,mBAAgB;IACnB,GAAG,4BAAwB;IAC3B,GAAG,4BAAwB;IAC3B,GAAG,0BAAsB;IACzB,GAAG,+BAA2B;IAC9B,GAAG,2BAAuB;CAC3B,CAAA;AAEY,QAAA,WAAW,GAAG;IACzB,iBAAiB;IACjB,GAAG,+BAA2B;IAC9B,GAAG,+BAA2B;IAC9B,GAAG,sBAAmB;IACtB,GAAG,6BAAyB;CAC7B,CAAA;AAEY,QAAA,MAAM,GAAG;IACpB,eAAe,EAAE;QACf,sBAAsB;QACtB,GAAG,6BAAyB;QAC5B,GAAG,oBAAiB;QACpB,GAAG,6BAAyB;QAC5B,GAAG,6BAAyB;QAC5B,GAAG,2BAAuB;QAC1B,GAAG,gCAA4B;QAC/B,GAAG,4BAAwB;KAC5B;CACF,CAAA","sourcesContent":["/* EXPORT ENTITY TYPES */\nexport * from './activity-approval/activity-approval'\nexport * from './activity-thread/activity-thread'\nexport * from './activity-template/activity-template'\nexport * from './activity-instance/activity-instance'\nexport * from './activity/activity'\nexport * from './installable-activity/installable-activity'\nexport * from './activity-summary/activity-summary'\n\n/* IMPORT ENTITIES AND RESOLVERS */\nimport {\n entities as ActivityApprovalEntities,\n resolvers as ActivityApprovalResolvers,\n subscribers as ActivityApprovalSubscribers\n} from './activity-approval'\nimport {\n entities as ActivityEntities,\n resolvers as ActivityResolvers,\n subscribers as ActivitySubscribers\n} from './activity'\nimport {\n entities as ActivityInstanceEntities,\n resolvers as ActivityInstanceResolvers,\n subscribers as ActivityInstanceSubscribers\n} from './activity-instance'\nimport { entities as ActivityTemplateEntities, resolvers as ActivityTemplateResolvers } from './activity-template'\nimport {\n entities as ActivityThreadEntities,\n resolvers as ActivityThreadResolvers,\n subscribers as ActivityThreadSubscribers\n} from './activity-thread'\nimport {\n entities as InstallableActivityEntities,\n resolvers as InstallableActivityResolvers\n} from './installable-activity'\nimport { entities as ActivitySummaryEntities, resolvers as ActivitySummaryResolvers } from './activity-summary'\n\nexport const entities = [\n /* ENTITIES */\n ...ActivityApprovalEntities,\n ...ActivityEntities,\n ...ActivityInstanceEntities,\n ...ActivityTemplateEntities,\n ...ActivityThreadEntities,\n ...InstallableActivityEntities,\n ...ActivitySummaryEntities\n]\n\nexport const subscribers = [\n /* SUBSCRIBERS */\n ...ActivityApprovalSubscribers,\n ...ActivityInstanceSubscribers,\n ...ActivitySubscribers,\n ...ActivityThreadSubscribers\n]\n\nexport const schema = {\n resolverClasses: [\n /* RESOLVER CLASSES */\n ...ActivityApprovalResolvers,\n ...ActivityResolvers,\n ...ActivityInstanceResolvers,\n ...ActivityTemplateResolvers,\n ...ActivityThreadResolvers,\n ...InstallableActivityResolvers,\n ...ActivitySummaryResolvers\n ]\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/service/index.ts"],"names":[],"mappings":";;;;AAAA,yBAAyB;AACzB,gFAAqD;AACrD,4EAAiD;AACjD,gFAAqD;AACrD,gFAAqD;AACrD,8DAAmC;AACnC,sFAA2D;AAC3D,8EAAmD;AAEnD,mCAAmC;AACnC,qDAAsE;AACtE,2DAI4B;AAC5B,yCAImB;AACnB,2DAI4B;AAC5B,2DAAkH;AAClH,uDAI0B;AAC1B,iEAG+B;AAC/B,yDAA+G;AAElG,QAAA,QAAQ,GAAG;IACtB,cAAc;IACd,GAAG,4BAAwB;IAC3B,GAAG,mBAAgB;IACnB,GAAG,4BAAwB;IAC3B,GAAG,4BAAwB;IAC3B,GAAG,0BAAsB;IACzB,GAAG,+BAA2B;IAC9B,GAAG,2BAAuB;CAC3B,CAAA;AAEY,QAAA,WAAW,GAAG;IACzB,iBAAiB;IACjB,GAAG,+BAA2B;IAC9B,GAAG,+BAA2B;IAC9B,GAAG,sBAAmB;IACtB,GAAG,6BAAyB;CAC7B,CAAA;AAEY,QAAA,MAAM,GAAG;IACpB,eAAe,EAAE;QACf,sBAAsB;QACtB,GAAG,0BAAsB;QACzB,GAAG,6BAAyB;QAC5B,GAAG,oBAAiB;QACpB,GAAG,6BAAyB;QAC5B,GAAG,6BAAyB;QAC5B,GAAG,2BAAuB;QAC1B,GAAG,gCAA4B;QAC/B,GAAG,4BAAwB;KAC5B;CACF,CAAA","sourcesContent":["/* EXPORT ENTITY TYPES */\nexport * from './activity-approval/activity-approval'\nexport * from './activity-thread/activity-thread'\nexport * from './activity-template/activity-template'\nexport * from './activity-instance/activity-instance'\nexport * from './activity/activity'\nexport * from './installable-activity/installable-activity'\nexport * from './activity-summary/activity-summary'\n\n/* IMPORT ENTITIES AND RESOLVERS */\nimport { resolvers as ActivityStatsResolvers } from './activity-stats'\nimport {\n entities as ActivityApprovalEntities,\n resolvers as ActivityApprovalResolvers,\n subscribers as ActivityApprovalSubscribers\n} from './activity-approval'\nimport {\n entities as ActivityEntities,\n resolvers as ActivityResolvers,\n subscribers as ActivitySubscribers\n} from './activity'\nimport {\n entities as ActivityInstanceEntities,\n resolvers as ActivityInstanceResolvers,\n subscribers as ActivityInstanceSubscribers\n} from './activity-instance'\nimport { entities as ActivityTemplateEntities, resolvers as ActivityTemplateResolvers } from './activity-template'\nimport {\n entities as ActivityThreadEntities,\n resolvers as ActivityThreadResolvers,\n subscribers as ActivityThreadSubscribers\n} from './activity-thread'\nimport {\n entities as InstallableActivityEntities,\n resolvers as InstallableActivityResolvers\n} from './installable-activity'\nimport { entities as ActivitySummaryEntities, resolvers as ActivitySummaryResolvers } from './activity-summary'\n\nexport const entities = [\n /* ENTITIES */\n ...ActivityApprovalEntities,\n ...ActivityEntities,\n ...ActivityInstanceEntities,\n ...ActivityTemplateEntities,\n ...ActivityThreadEntities,\n ...InstallableActivityEntities,\n ...ActivitySummaryEntities\n]\n\nexport const subscribers = [\n /* SUBSCRIBERS */\n ...ActivityApprovalSubscribers,\n ...ActivityInstanceSubscribers,\n ...ActivitySubscribers,\n ...ActivityThreadSubscribers\n]\n\nexport const schema = {\n resolverClasses: [\n /* RESOLVER CLASSES */\n ...ActivityStatsResolvers,\n ...ActivityApprovalResolvers,\n ...ActivityResolvers,\n ...ActivityInstanceResolvers,\n ...ActivityTemplateResolvers,\n ...ActivityThreadResolvers,\n ...InstallableActivityResolvers,\n ...ActivitySummaryResolvers\n ]\n}\n"]}