@things-factory/dataset 10.1.247 → 10.1.248
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.
- package/package.json +4 -4
- package/dist-client/activities/activity-data-collect-edit.d.ts +0 -26
- package/dist-client/activities/activity-data-collect-edit.js +0 -156
- package/dist-client/activities/activity-data-collect-edit.js.map +0 -1
- package/dist-client/activities/activity-data-collect-view.d.ts +0 -16
- package/dist-client/activities/activity-data-collect-view.js +0 -94
- package/dist-client/activities/activity-data-collect-view.js.map +0 -1
- package/dist-client/activities/activity-data-review-edit.d.ts +0 -20
- package/dist-client/activities/activity-data-review-edit.js +0 -300
- package/dist-client/activities/activity-data-review-edit.js.map +0 -1
- package/dist-client/activities/activity-data-review-view.d.ts +0 -16
- package/dist-client/activities/activity-data-review-view.js +0 -247
- package/dist-client/activities/activity-data-review-view.js.map +0 -1
- package/dist-client/activities/activity-ooc-resolve-edit.d.ts +0 -2
- package/dist-client/activities/activity-ooc-resolve-edit.js +0 -203
- package/dist-client/activities/activity-ooc-resolve-edit.js.map +0 -1
- package/dist-client/activities/activity-ooc-resolve-view.d.ts +0 -14
- package/dist-client/activities/activity-ooc-resolve-view.js +0 -154
- package/dist-client/activities/activity-ooc-resolve-view.js.map +0 -1
- package/dist-client/activities/activity-ooc-review-edit.d.ts +0 -3
- package/dist-client/activities/activity-ooc-review-edit.js +0 -197
- package/dist-client/activities/activity-ooc-review-edit.js.map +0 -1
- package/dist-client/activities/activity-ooc-review-view.d.ts +0 -1
- package/dist-client/activities/activity-ooc-review-view.js +0 -139
- package/dist-client/activities/activity-ooc-review-view.js.map +0 -1
- package/dist-client/bootstrap.d.ts +0 -10
- package/dist-client/bootstrap.js +0 -26
- package/dist-client/bootstrap.js.map +0 -1
- package/dist-client/components/checklist-entry-form.d.ts +0 -21
- package/dist-client/components/checklist-entry-form.js +0 -107
- package/dist-client/components/checklist-entry-form.js.map +0 -1
- package/dist-client/components/data-entry-form.d.ts +0 -21
- package/dist-client/components/data-entry-form.js +0 -107
- package/dist-client/components/data-entry-form.js.map +0 -1
- package/dist-client/index.d.ts +0 -1
- package/dist-client/index.js +0 -2
- package/dist-client/index.js.map +0 -1
- package/dist-client/pages/data-archive/data-archive-list-page.d.ts +0 -55
- package/dist-client/pages/data-archive/data-archive-list-page.js +0 -234
- package/dist-client/pages/data-archive/data-archive-list-page.js.map +0 -1
- package/dist-client/pages/data-archive/data-archive-request-popup.d.ts +0 -1
- package/dist-client/pages/data-archive/data-archive-request-popup.js +0 -160
- package/dist-client/pages/data-archive/data-archive-request-popup.js.map +0 -1
- package/dist-client/pages/data-entry/data-entry-list-page.d.ts +0 -31
- package/dist-client/pages/data-entry/data-entry-list-page.js +0 -383
- package/dist-client/pages/data-entry/data-entry-list-page.js.map +0 -1
- package/dist-client/pages/data-key-set/data-key-item-list.d.ts +0 -19
- package/dist-client/pages/data-key-set/data-key-item-list.js +0 -183
- package/dist-client/pages/data-key-set/data-key-item-list.js.map +0 -1
- package/dist-client/pages/data-key-set/data-key-set-importer.d.ts +0 -10
- package/dist-client/pages/data-key-set/data-key-set-importer.js +0 -93
- package/dist-client/pages/data-key-set/data-key-set-importer.js.map +0 -1
- package/dist-client/pages/data-key-set/data-key-set-list-page.d.ts +0 -56
- package/dist-client/pages/data-key-set/data-key-set-list-page.js +0 -335
- package/dist-client/pages/data-key-set/data-key-set-list-page.js.map +0 -1
- package/dist-client/pages/data-ooc/data-ooc-list-page.d.ts +0 -67
- package/dist-client/pages/data-ooc/data-ooc-list-page.js +0 -484
- package/dist-client/pages/data-ooc/data-ooc-list-page.js.map +0 -1
- package/dist-client/pages/data-ooc/data-ooc-page.d.ts +0 -18
- package/dist-client/pages/data-ooc/data-ooc-page.js +0 -166
- package/dist-client/pages/data-ooc/data-ooc-page.js.map +0 -1
- package/dist-client/pages/data-ooc/data-ooc-view.d.ts +0 -19
- package/dist-client/pages/data-ooc/data-ooc-view.js +0 -234
- package/dist-client/pages/data-ooc/data-ooc-view.js.map +0 -1
- package/dist-client/pages/data-ooc/data-oocs-page.d.ts +0 -18
- package/dist-client/pages/data-ooc/data-oocs-page.js +0 -198
- package/dist-client/pages/data-ooc/data-oocs-page.js.map +0 -1
- package/dist-client/pages/data-report/data-report-embed-page.d.ts +0 -36
- package/dist-client/pages/data-report/data-report-embed-page.js +0 -104
- package/dist-client/pages/data-report/data-report-embed-page.js.map +0 -1
- package/dist-client/pages/data-report/data-report-list-page.d.ts +0 -30
- package/dist-client/pages/data-report/data-report-list-page.js +0 -370
- package/dist-client/pages/data-report/data-report-list-page.js.map +0 -1
- package/dist-client/pages/data-report/data-report-samples-page.d.ts +0 -26
- package/dist-client/pages/data-report/data-report-samples-page.js +0 -151
- package/dist-client/pages/data-report/data-report-samples-page.js.map +0 -1
- package/dist-client/pages/data-report/jasper-report-oocs-page.d.ts +0 -2
- package/dist-client/pages/data-report/jasper-report-oocs-page.js +0 -104
- package/dist-client/pages/data-report/jasper-report-oocs-page.js.map +0 -1
- package/dist-client/pages/data-report/jasper-report-samples-crosstab-page.d.ts +0 -2
- package/dist-client/pages/data-report/jasper-report-samples-crosstab-page.js +0 -104
- package/dist-client/pages/data-report/jasper-report-samples-crosstab-page.js.map +0 -1
- package/dist-client/pages/data-report/jasper-report-samples-page.d.ts +0 -2
- package/dist-client/pages/data-report/jasper-report-samples-page.js +0 -104
- package/dist-client/pages/data-report/jasper-report-samples-page.js.map +0 -1
- package/dist-client/pages/data-sample/data-sample-list-page.d.ts +0 -62
- package/dist-client/pages/data-sample/data-sample-list-page.js +0 -372
- package/dist-client/pages/data-sample/data-sample-list-page.js.map +0 -1
- package/dist-client/pages/data-sample/data-sample-page.d.ts +0 -17
- package/dist-client/pages/data-sample/data-sample-page.js +0 -57
- package/dist-client/pages/data-sample/data-sample-page.js.map +0 -1
- package/dist-client/pages/data-sample/data-sample-search-page.d.ts +0 -51
- package/dist-client/pages/data-sample/data-sample-search-page.js +0 -364
- package/dist-client/pages/data-sample/data-sample-search-page.js.map +0 -1
- package/dist-client/pages/data-sample/data-sample-view.d.ts +0 -23
- package/dist-client/pages/data-sample/data-sample-view.js +0 -309
- package/dist-client/pages/data-sample/data-sample-view.js.map +0 -1
- package/dist-client/pages/data-sample/data-samples-page.d.ts +0 -21
- package/dist-client/pages/data-sample/data-samples-page.js +0 -247
- package/dist-client/pages/data-sample/data-samples-page.js.map +0 -1
- package/dist-client/pages/data-sensor/data-sensor-list-page.d.ts +0 -50
- package/dist-client/pages/data-sensor/data-sensor-list-page.js +0 -395
- package/dist-client/pages/data-sensor/data-sensor-list-page.js.map +0 -1
- package/dist-client/pages/data-set/data-item-list.d.ts +0 -1
- package/dist-client/pages/data-set/data-item-list.js +0 -321
- package/dist-client/pages/data-set/data-item-list.js.map +0 -1
- package/dist-client/pages/data-set/data-set-importer.d.ts +0 -11
- package/dist-client/pages/data-set/data-set-importer.js +0 -96
- package/dist-client/pages/data-set/data-set-importer.js.map +0 -1
- package/dist-client/pages/data-set/data-set-list-page.d.ts +0 -77
- package/dist-client/pages/data-set/data-set-list-page.js +0 -1065
- package/dist-client/pages/data-set/data-set-list-page.js.map +0 -1
- package/dist-client/pages/data-summary/data-summary-list-page.d.ts +0 -51
- package/dist-client/pages/data-summary/data-summary-list-page.js +0 -308
- package/dist-client/pages/data-summary/data-summary-list-page.js.map +0 -1
- package/dist-client/pages/data-summary/data-summary-period-page.d.ts +0 -73
- package/dist-client/pages/data-summary/data-summary-period-page.js +0 -413
- package/dist-client/pages/data-summary/data-summary-period-page.js.map +0 -1
- package/dist-client/pages/data-summary/data-summary-search-page.d.ts +0 -70
- package/dist-client/pages/data-summary/data-summary-search-page.js +0 -360
- package/dist-client/pages/data-summary/data-summary-search-page.js.map +0 -1
- package/dist-client/pages/data-summary/data-summary-view.d.ts +0 -1
- package/dist-client/pages/data-summary/data-summary-view.js +0 -114
- package/dist-client/pages/data-summary/data-summary-view.js.map +0 -1
- package/dist-client/pages/sure-to.d.ts +0 -1
- package/dist-client/pages/sure-to.js +0 -10
- package/dist-client/pages/sure-to.js.map +0 -1
- package/dist-client/route.d.ts +0 -1
- package/dist-client/route.js +0 -71
- package/dist-client/route.js.map +0 -1
- package/dist-client/tsconfig.tsbuildinfo +0 -1
- package/dist-server/activities/activity-data-collect.d.ts +0 -42
- package/dist-server/activities/activity-data-collect.js +0 -89
- package/dist-server/activities/activity-data-collect.js.map +0 -1
- package/dist-server/activities/activity-data-review.d.ts +0 -42
- package/dist-server/activities/activity-data-review.js +0 -101
- package/dist-server/activities/activity-data-review.js.map +0 -1
- package/dist-server/activities/activity-ooc-resolve.d.ts +0 -42
- package/dist-server/activities/activity-ooc-resolve.js +0 -110
- package/dist-server/activities/activity-ooc-resolve.js.map +0 -1
- package/dist-server/activities/activity-ooc-review.d.ts +0 -42
- package/dist-server/activities/activity-ooc-review.js +0 -91
- package/dist-server/activities/activity-ooc-review.js.map +0 -1
- package/dist-server/activities/index.d.ts +0 -1
- package/dist-server/activities/index.js +0 -11
- package/dist-server/activities/index.js.map +0 -1
- package/dist-server/controllers/create-data-ooc.d.ts +0 -4
- package/dist-server/controllers/create-data-ooc.js +0 -73
- package/dist-server/controllers/create-data-ooc.js.map +0 -1
- package/dist-server/controllers/create-data-sample.d.ts +0 -3
- package/dist-server/controllers/create-data-sample.js +0 -341
- package/dist-server/controllers/create-data-sample.js.map +0 -1
- package/dist-server/controllers/data-use-case.d.ts +0 -36
- package/dist-server/controllers/data-use-case.js +0 -62
- package/dist-server/controllers/data-use-case.js.map +0 -1
- package/dist-server/controllers/finalize-data-collection.d.ts +0 -4
- package/dist-server/controllers/finalize-data-collection.js +0 -354
- package/dist-server/controllers/finalize-data-collection.js.map +0 -1
- package/dist-server/controllers/index.d.ts +0 -6
- package/dist-server/controllers/index.js +0 -10
- package/dist-server/controllers/index.js.map +0 -1
- package/dist-server/controllers/issue-data-collection-task.d.ts +0 -2
- package/dist-server/controllers/issue-data-collection-task.js +0 -64
- package/dist-server/controllers/issue-data-collection-task.js.map +0 -1
- package/dist-server/controllers/issue-ooc-resolve.d.ts +0 -3
- package/dist-server/controllers/issue-ooc-resolve.js +0 -55
- package/dist-server/controllers/issue-ooc-resolve.js.map +0 -1
- package/dist-server/controllers/issue-ooc-review.d.ts +0 -3
- package/dist-server/controllers/issue-ooc-review.js +0 -52
- package/dist-server/controllers/issue-ooc-review.js.map +0 -1
- package/dist-server/controllers/jasper-report.d.ts +0 -1
- package/dist-server/controllers/jasper-report.js +0 -166
- package/dist-server/controllers/jasper-report.js.map +0 -1
- package/dist-server/controllers/query-data-summary-by-period.d.ts +0 -3
- package/dist-server/controllers/query-data-summary-by-period.js +0 -163
- package/dist-server/controllers/query-data-summary-by-period.js.map +0 -1
- package/dist-server/controllers/shiny-report.d.ts +0 -1
- package/dist-server/controllers/shiny-report.js +0 -40
- package/dist-server/controllers/shiny-report.js.map +0 -1
- package/dist-server/engine/index.d.ts +0 -1
- package/dist-server/engine/index.js +0 -4
- package/dist-server/engine/index.js.map +0 -1
- package/dist-server/engine/task/create-data-sample.d.ts +0 -1
- package/dist-server/engine/task/create-data-sample.js +0 -81
- package/dist-server/engine/task/create-data-sample.js.map +0 -1
- package/dist-server/engine/task/index.d.ts +0 -2
- package/dist-server/engine/task/index.js +0 -5
- package/dist-server/engine/task/index.js.map +0 -1
- package/dist-server/engine/task/issue-collect-data.d.ts +0 -1
- package/dist-server/engine/task/issue-collect-data.js +0 -40
- package/dist-server/engine/task/issue-collect-data.js.map +0 -1
- package/dist-server/index.d.ts +0 -6
- package/dist-server/index.js +0 -10
- package/dist-server/index.js.map +0 -1
- package/dist-server/routes.d.ts +0 -1
- package/dist-server/routes.js +0 -152
- package/dist-server/routes.js.map +0 -1
- package/dist-server/service/data-archive/data-archive-mutation.d.ts +0 -16
- package/dist-server/service/data-archive/data-archive-mutation.js +0 -278
- package/dist-server/service/data-archive/data-archive-mutation.js.map +0 -1
- package/dist-server/service/data-archive/data-archive-query.d.ts +0 -11
- package/dist-server/service/data-archive/data-archive-query.js +0 -97
- package/dist-server/service/data-archive/data-archive-query.js.map +0 -1
- package/dist-server/service/data-archive/data-archive-type.d.ts +0 -23
- package/dist-server/service/data-archive/data-archive-type.js +0 -77
- package/dist-server/service/data-archive/data-archive-type.js.map +0 -1
- package/dist-server/service/data-archive/data-archive.d.ts +0 -19
- package/dist-server/service/data-archive/data-archive.js +0 -84
- package/dist-server/service/data-archive/data-archive.js.map +0 -1
- package/dist-server/service/data-archive/index.d.ts +0 -5
- package/dist-server/service/data-archive/index.js +0 -9
- package/dist-server/service/data-archive/index.js.map +0 -1
- package/dist-server/service/data-key-set/data-key-item-type.d.ts +0 -12
- package/dist-server/service/data-key-set/data-key-item-type.js +0 -52
- package/dist-server/service/data-key-set/data-key-item-type.js.map +0 -1
- package/dist-server/service/data-key-set/data-key-set-mutation.d.ts +0 -10
- package/dist-server/service/data-key-set/data-key-set-mutation.js +0 -203
- package/dist-server/service/data-key-set/data-key-set-mutation.js.map +0 -1
- package/dist-server/service/data-key-set/data-key-set-query.d.ts +0 -12
- package/dist-server/service/data-key-set/data-key-set-query.js +0 -117
- package/dist-server/service/data-key-set/data-key-set-query.js.map +0 -1
- package/dist-server/service/data-key-set/data-key-set-type.d.ts +0 -28
- package/dist-server/service/data-key-set/data-key-set-type.js +0 -106
- package/dist-server/service/data-key-set/data-key-set-type.js.map +0 -1
- package/dist-server/service/data-key-set/data-key-set.d.ts +0 -22
- package/dist-server/service/data-key-set/data-key-set.js +0 -104
- package/dist-server/service/data-key-set/data-key-set.js.map +0 -1
- package/dist-server/service/data-key-set/index.d.ts +0 -5
- package/dist-server/service/data-key-set/index.js +0 -9
- package/dist-server/service/data-key-set/index.js.map +0 -1
- package/dist-server/service/data-ooc/data-ooc-mutation.d.ts +0 -6
- package/dist-server/service/data-ooc/data-ooc-mutation.js +0 -96
- package/dist-server/service/data-ooc/data-ooc-mutation.js.map +0 -1
- package/dist-server/service/data-ooc/data-ooc-query.d.ts +0 -23
- package/dist-server/service/data-ooc/data-ooc-query.js +0 -209
- package/dist-server/service/data-ooc/data-ooc-query.js.map +0 -1
- package/dist-server/service/data-ooc/data-ooc-subscription.d.ts +0 -12
- package/dist-server/service/data-ooc/data-ooc-subscription.js +0 -64
- package/dist-server/service/data-ooc/data-ooc-subscription.js.map +0 -1
- package/dist-server/service/data-ooc/data-ooc-type.d.ts +0 -27
- package/dist-server/service/data-ooc/data-ooc-type.js +0 -111
- package/dist-server/service/data-ooc/data-ooc-type.js.map +0 -1
- package/dist-server/service/data-ooc/data-ooc.d.ts +0 -63
- package/dist-server/service/data-ooc/data-ooc.js +0 -310
- package/dist-server/service/data-ooc/data-ooc.js.map +0 -1
- package/dist-server/service/data-ooc/index.d.ts +0 -6
- package/dist-server/service/data-ooc/index.js +0 -10
- package/dist-server/service/data-ooc/index.js.map +0 -1
- package/dist-server/service/data-sample/data-sample-mutation.d.ts +0 -5
- package/dist-server/service/data-sample/data-sample-mutation.js +0 -30
- package/dist-server/service/data-sample/data-sample-mutation.js.map +0 -1
- package/dist-server/service/data-sample/data-sample-query.d.ts +0 -22
- package/dist-server/service/data-sample/data-sample-query.js +0 -274
- package/dist-server/service/data-sample/data-sample-query.js.map +0 -1
- package/dist-server/service/data-sample/data-sample-type.d.ts +0 -18
- package/dist-server/service/data-sample/data-sample-type.js +0 -68
- package/dist-server/service/data-sample/data-sample-type.js.map +0 -1
- package/dist-server/service/data-sample/data-sample.d.ts +0 -45
- package/dist-server/service/data-sample/data-sample.js +0 -226
- package/dist-server/service/data-sample/data-sample.js.map +0 -1
- package/dist-server/service/data-sample/index.d.ts +0 -5
- package/dist-server/service/data-sample/index.js +0 -9
- package/dist-server/service/data-sample/index.js.map +0 -1
- package/dist-server/service/data-sensor/data-sensor-mutation.d.ts +0 -9
- package/dist-server/service/data-sensor/data-sensor-mutation.js +0 -137
- package/dist-server/service/data-sensor/data-sensor-mutation.js.map +0 -1
- package/dist-server/service/data-sensor/data-sensor-query.d.ts +0 -16
- package/dist-server/service/data-sensor/data-sensor-query.js +0 -137
- package/dist-server/service/data-sensor/data-sensor-query.js.map +0 -1
- package/dist-server/service/data-sensor/data-sensor-type.d.ts +0 -42
- package/dist-server/service/data-sensor/data-sensor-type.js +0 -162
- package/dist-server/service/data-sensor/data-sensor-type.js.map +0 -1
- package/dist-server/service/data-sensor/data-sensor.d.ts +0 -33
- package/dist-server/service/data-sensor/data-sensor.js +0 -160
- package/dist-server/service/data-sensor/data-sensor.js.map +0 -1
- package/dist-server/service/data-sensor/index.d.ts +0 -5
- package/dist-server/service/data-sensor/index.js +0 -9
- package/dist-server/service/data-sensor/index.js.map +0 -1
- package/dist-server/service/data-set/data-item-type.d.ts +0 -321
- package/dist-server/service/data-set/data-item-type.js +0 -458
- package/dist-server/service/data-set/data-item-type.js.map +0 -1
- package/dist-server/service/data-set/data-set-mutation.d.ts +0 -20
- package/dist-server/service/data-set/data-set-mutation.js +0 -551
- package/dist-server/service/data-set/data-set-mutation.js.map +0 -1
- package/dist-server/service/data-set/data-set-query.d.ts +0 -39
- package/dist-server/service/data-set/data-set-query.js +0 -565
- package/dist-server/service/data-set/data-set-query.js.map +0 -1
- package/dist-server/service/data-set/data-set-type.d.ts +0 -75
- package/dist-server/service/data-set/data-set-type.js +0 -276
- package/dist-server/service/data-set/data-set-type.js.map +0 -1
- package/dist-server/service/data-set/data-set.d.ts +0 -96
- package/dist-server/service/data-set/data-set.js +0 -380
- package/dist-server/service/data-set/data-set.js.map +0 -1
- package/dist-server/service/data-set/index.d.ts +0 -5
- package/dist-server/service/data-set/index.js +0 -9
- package/dist-server/service/data-set/index.js.map +0 -1
- package/dist-server/service/data-set-history/data-set-history-query.d.ts +0 -21
- package/dist-server/service/data-set-history/data-set-history-query.js +0 -183
- package/dist-server/service/data-set-history/data-set-history-query.js.map +0 -1
- package/dist-server/service/data-set-history/data-set-history-type.d.ts +0 -5
- package/dist-server/service/data-set-history/data-set-history-type.js +0 -21
- package/dist-server/service/data-set-history/data-set-history-type.js.map +0 -1
- package/dist-server/service/data-set-history/data-set-history.d.ts +0 -53
- package/dist-server/service/data-set-history/data-set-history.js +0 -265
- package/dist-server/service/data-set-history/data-set-history.js.map +0 -1
- package/dist-server/service/data-set-history/event-subscriber.d.ts +0 -7
- package/dist-server/service/data-set-history/event-subscriber.js +0 -21
- package/dist-server/service/data-set-history/event-subscriber.js.map +0 -1
- package/dist-server/service/data-set-history/index.d.ts +0 -6
- package/dist-server/service/data-set-history/index.js +0 -10
- package/dist-server/service/data-set-history/index.js.map +0 -1
- package/dist-server/service/data-spec/data-spec-manager.d.ts +0 -10
- package/dist-server/service/data-spec/data-spec-manager.js +0 -20
- package/dist-server/service/data-spec/data-spec-manager.js.map +0 -1
- package/dist-server/service/data-spec/data-spec-query.d.ts +0 -5
- package/dist-server/service/data-spec/data-spec-query.js +0 -37
- package/dist-server/service/data-spec/data-spec-query.js.map +0 -1
- package/dist-server/service/data-spec/data-spec.d.ts +0 -19
- package/dist-server/service/data-spec/data-spec.js +0 -79
- package/dist-server/service/data-spec/data-spec.js.map +0 -1
- package/dist-server/service/data-spec/index.d.ts +0 -4
- package/dist-server/service/data-spec/index.js +0 -8
- package/dist-server/service/data-spec/index.js.map +0 -1
- package/dist-server/service/data-summary/data-summary-mutation.d.ts +0 -6
- package/dist-server/service/data-summary/data-summary-mutation.js +0 -76
- package/dist-server/service/data-summary/data-summary-mutation.js.map +0 -1
- package/dist-server/service/data-summary/data-summary-query.d.ts +0 -19
- package/dist-server/service/data-summary/data-summary-query.js +0 -237
- package/dist-server/service/data-summary/data-summary-query.js.map +0 -1
- package/dist-server/service/data-summary/data-summary-type.d.ts +0 -33
- package/dist-server/service/data-summary/data-summary-type.js +0 -139
- package/dist-server/service/data-summary/data-summary-type.js.map +0 -1
- package/dist-server/service/data-summary/data-summary.d.ts +0 -38
- package/dist-server/service/data-summary/data-summary.js +0 -202
- package/dist-server/service/data-summary/data-summary.js.map +0 -1
- package/dist-server/service/data-summary/index.d.ts +0 -6
- package/dist-server/service/data-summary/index.js +0 -10
- package/dist-server/service/data-summary/index.js.map +0 -1
- package/dist-server/service/index.d.ts +0 -14
- package/dist-server/service/index.js +0 -54
- package/dist-server/service/index.js.map +0 -1
- package/dist-server/tsconfig.tsbuildinfo +0 -1
- package/dist-server/utils/config-resolver.d.ts +0 -1
- package/dist-server/utils/config-resolver.js +0 -32
- package/dist-server/utils/config-resolver.js.map +0 -1
- package/dist-server/utils/index.d.ts +0 -2
- package/dist-server/utils/index.js +0 -6
- package/dist-server/utils/index.js.map +0 -1
- package/dist-server/utils/media-validation.d.ts +0 -51
- package/dist-server/utils/media-validation.js +0 -148
- package/dist-server/utils/media-validation.js.map +0 -1
|
@@ -1,354 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getDataFinalizeCrontabSchedule = getDataFinalizeCrontabSchedule;
|
|
4
|
-
exports.finalizeLatestDataCollection = finalizeLatestDataCollection;
|
|
5
|
-
exports.finalizeDataCollection = finalizeDataCollection;
|
|
6
|
-
const tslib_1 = require("tslib");
|
|
7
|
-
const statistics = require('simple-statistics');
|
|
8
|
-
const deepClone = require('lodash/cloneDeep');
|
|
9
|
-
const moment_timezone_1 = tslib_1.__importDefault(require("moment-timezone"));
|
|
10
|
-
const typeorm_1 = require("typeorm");
|
|
11
|
-
const shell_1 = require("@things-factory/shell");
|
|
12
|
-
const env_1 = require("@things-factory/env");
|
|
13
|
-
const work_shift_1 = require("@things-factory/work-shift");
|
|
14
|
-
const data_sample_js_1 = require("../service/data-sample/data-sample.js");
|
|
15
|
-
const data_set_js_1 = require("../service/data-set/data-set.js");
|
|
16
|
-
const data_summary_js_1 = require("../service/data-summary/data-summary.js");
|
|
17
|
-
const STAT_FUNCTION_MAP = {
|
|
18
|
-
sum: 'sum',
|
|
19
|
-
mean: 'mean',
|
|
20
|
-
stddev: 'standardDeviation',
|
|
21
|
-
variance: 'variance',
|
|
22
|
-
min: 'min',
|
|
23
|
-
max: 'max',
|
|
24
|
-
range: 'range',
|
|
25
|
-
median: 'median',
|
|
26
|
-
mode: 'mode'
|
|
27
|
-
};
|
|
28
|
-
const compareKeys = (dataKeyItems, summary, sample) => {
|
|
29
|
-
return dataKeyItems.every((item, index) => {
|
|
30
|
-
const prop = `key0${index + 1}`;
|
|
31
|
-
return sample[prop] === summary[prop];
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
|
-
const buildKeysFromSample = (dataKeyItems, sample) => {
|
|
35
|
-
return dataKeyItems.reduce((sum, item, index) => {
|
|
36
|
-
const prop = `key0${index + 1}`;
|
|
37
|
-
sum[prop] = sample[prop];
|
|
38
|
-
return sum;
|
|
39
|
-
}, {});
|
|
40
|
-
};
|
|
41
|
-
const buildKeySortingList = (dataKeyItems) => {
|
|
42
|
-
return dataKeyItems.reduce((sum, item, index) => {
|
|
43
|
-
const name = `key0${index + 1}`;
|
|
44
|
-
sum.push({ name, desc: true });
|
|
45
|
-
return sum;
|
|
46
|
-
}, []);
|
|
47
|
-
};
|
|
48
|
-
const calculateSummary = (dataItems, base) => {
|
|
49
|
-
return dataItems.reduce((summary, item) => {
|
|
50
|
-
const tag = item.tag;
|
|
51
|
-
const data = base[tag]
|
|
52
|
-
.flat(Infinity)
|
|
53
|
-
.map(Number)
|
|
54
|
-
.filter(item => !isNaN(item));
|
|
55
|
-
if (data.length > 0) {
|
|
56
|
-
try {
|
|
57
|
-
switch (item.stat) {
|
|
58
|
-
case 'range':
|
|
59
|
-
summary[tag] = statistics.max(data) - statistics.min(data);
|
|
60
|
-
break;
|
|
61
|
-
default:
|
|
62
|
-
const functionName = STAT_FUNCTION_MAP[item.stat];
|
|
63
|
-
summary[tag] = (functionName && statistics[functionName](data)) || '';
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
catch (err) {
|
|
67
|
-
summary[tag] = null;
|
|
68
|
-
console.error(err);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
summary[tag] = null;
|
|
73
|
-
}
|
|
74
|
-
return summary;
|
|
75
|
-
}, {});
|
|
76
|
-
};
|
|
77
|
-
const fillSummaryResult = (dataSummary, dataItems, base) => {
|
|
78
|
-
const summary = calculateSummary(dataItems, base);
|
|
79
|
-
dataSummary.summary = summary;
|
|
80
|
-
dataItems.slice(0, 4).forEach((dataItem, idx) => {
|
|
81
|
-
const value = Number(summary[dataItem.tag]);
|
|
82
|
-
dataSummary[`data0${idx + 1}`] = isNaN(value) ? null : value;
|
|
83
|
-
});
|
|
84
|
-
};
|
|
85
|
-
async function getLatestTimesForPeriod(periodType, context) {
|
|
86
|
-
const { domain } = context.state;
|
|
87
|
-
const now = (0, moment_timezone_1.default)();
|
|
88
|
-
if (periodType == data_set_js_1.DataSetSummaryPeriodType.Hour) {
|
|
89
|
-
const begin = now.clone().subtract(1, 'hour').startOf('hour');
|
|
90
|
-
const end = now.clone().startOf('hour');
|
|
91
|
-
const date = begin.clone().tz(domain.timezone);
|
|
92
|
-
return {
|
|
93
|
-
date: date.format('YYYY-MM-DD'),
|
|
94
|
-
period: date.format('HH'),
|
|
95
|
-
range: [begin.toDate(), end.toDate()]
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
else if (periodType == data_set_js_1.DataSetSummaryPeriodType.WorkShift) {
|
|
99
|
-
const { workDate, workShift, shiftRange } = await (0, work_shift_1.getLatestWorkDateAndShift)(domain, new Date());
|
|
100
|
-
return { date: workDate, period: workShift, range: shiftRange };
|
|
101
|
-
}
|
|
102
|
-
else if (periodType == data_set_js_1.DataSetSummaryPeriodType.WorkDate) {
|
|
103
|
-
const { workDate, dateRange } = await (0, work_shift_1.getLatestWorkDateAndShift)(domain, new Date());
|
|
104
|
-
return { date: workDate, range: dateRange };
|
|
105
|
-
}
|
|
106
|
-
else if (periodType == data_set_js_1.DataSetSummaryPeriodType.Day) {
|
|
107
|
-
const begin = now.clone().subtract(1, 'day').startOf('day');
|
|
108
|
-
const end = now.clone().startOf('day');
|
|
109
|
-
const date = begin.clone().tz(domain.timezone);
|
|
110
|
-
return {
|
|
111
|
-
date: date.format('YYYY-MM-DD'),
|
|
112
|
-
range: [begin.toDate(), end.toDate()]
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
async function getTimesForPeriod(periodType, date, period, context) {
|
|
117
|
-
const { domain } = context.state;
|
|
118
|
-
if (periodType == data_set_js_1.DataSetSummaryPeriodType.Hour) {
|
|
119
|
-
const theDate = moment_timezone_1.default.tz(`${date} ${period}:00:00`, 'YYYY-MM-DD HH:mm:ss', domain.timezone);
|
|
120
|
-
const begin = theDate.clone().startOf('hour').toDate();
|
|
121
|
-
const end = theDate.clone().add(+1, 'hour').startOf('hour').toDate();
|
|
122
|
-
return {
|
|
123
|
-
date,
|
|
124
|
-
period,
|
|
125
|
-
range: [begin, end]
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
else if (periodType == data_set_js_1.DataSetSummaryPeriodType.WorkShift) {
|
|
129
|
-
const range = await (0, work_shift_1.getDateRangeForWorkShift)(domain, date, period);
|
|
130
|
-
return { date, period, range };
|
|
131
|
-
}
|
|
132
|
-
else if (periodType == data_set_js_1.DataSetSummaryPeriodType.WorkDate) {
|
|
133
|
-
const range = await (0, work_shift_1.getDateRangeForWorkDate)(domain, date);
|
|
134
|
-
return { date, range };
|
|
135
|
-
}
|
|
136
|
-
else if (periodType == data_set_js_1.DataSetSummaryPeriodType.Day) {
|
|
137
|
-
const theDate = moment_timezone_1.default.tz(`${date} 00:00:00`, 'YYYY-MM-DD HH:mm:ss', domain.timezone);
|
|
138
|
-
const begin = theDate.clone().startOf('day').toDate();
|
|
139
|
-
const end = theDate.clone().add(1, 'day').startOf('day').toDate();
|
|
140
|
-
return {
|
|
141
|
-
date: (0, moment_timezone_1.default)(begin).tz(domain.timezone).format('YYYY-MM-DD'),
|
|
142
|
-
range: [begin, end]
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
async function getDataFinalizeCrontabSchedule(dataSet, context) {
|
|
147
|
-
const { domain, user, tx } = context.state;
|
|
148
|
-
try {
|
|
149
|
-
const { summaryPeriod } = dataSet;
|
|
150
|
-
if (summaryPeriod == data_set_js_1.DataSetSummaryPeriodType.Hour) {
|
|
151
|
-
return '0 5 * * * *';
|
|
152
|
-
}
|
|
153
|
-
else if (summaryPeriod == data_set_js_1.DataSetSummaryPeriodType.WorkShift) {
|
|
154
|
-
return await (0, work_shift_1.getSummaryScheduleForWorkShift)(domain);
|
|
155
|
-
}
|
|
156
|
-
else if (summaryPeriod == data_set_js_1.DataSetSummaryPeriodType.WorkDate) {
|
|
157
|
-
return await (0, work_shift_1.getSummaryScheduleForWorkDate)(domain);
|
|
158
|
-
}
|
|
159
|
-
else if (summaryPeriod == data_set_js_1.DataSetSummaryPeriodType.Day) {
|
|
160
|
-
return '0 10 0 * * *';
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
catch (err) {
|
|
164
|
-
console.error(err);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
async function finalizeLatestDataCollection(dataSetId, context) {
|
|
168
|
-
const { domain, user, tx } = context.state;
|
|
169
|
-
const domainIds = await (0, shell_1.getDomainIdsWithAncestors)(domain);
|
|
170
|
-
try {
|
|
171
|
-
const dataSet = await tx.getRepository(data_set_js_1.DataSet).findOne({
|
|
172
|
-
where: { domain: { id: (0, typeorm_1.In)(domainIds) }, id: dataSetId },
|
|
173
|
-
relations: ['dataKeySet']
|
|
174
|
-
});
|
|
175
|
-
const dataKeyItems = dataSet.dataKeySet?.dataKeyItems || [];
|
|
176
|
-
const dataItems = dataSet.dataItems.filter(item => item.stat);
|
|
177
|
-
const initialSummary = dataItems.reduce((sum, item) => {
|
|
178
|
-
sum[item.tag] = [];
|
|
179
|
-
return sum;
|
|
180
|
-
}, {});
|
|
181
|
-
const { date, period, range } = await getLatestTimesForPeriod(dataSet.summaryPeriod, context);
|
|
182
|
-
const limit = 100;
|
|
183
|
-
var page = 1;
|
|
184
|
-
var summaries = [];
|
|
185
|
-
var summary;
|
|
186
|
-
do {
|
|
187
|
-
const samples = await (0, shell_1.getQueryBuilderFromListParams)({
|
|
188
|
-
repository: tx.getRepository(data_sample_js_1.DataSample),
|
|
189
|
-
domain: undefined,
|
|
190
|
-
params: {
|
|
191
|
-
filters: [{ name: 'dataSetId', operator: 'eq', value: dataSetId }],
|
|
192
|
-
pagination: { page, limit },
|
|
193
|
-
sortings: [...buildKeySortingList(dataKeyItems), { name: 'collectedAt', desc: true }]
|
|
194
|
-
},
|
|
195
|
-
alias: 'datasample'
|
|
196
|
-
})
|
|
197
|
-
.andWhere('datasample.domain IN (:...ancestorDomainIds)', { ancestorDomainIds: domainIds })
|
|
198
|
-
// The 'Between' operator includes the 'to' time in the filtering, making it unsuitable for the desired use case.
|
|
199
|
-
// .andWhere({ collectedAt: Between.apply(null, range) })
|
|
200
|
-
.andWhere('datasample.collectedAt >= :from', { from: range[0] })
|
|
201
|
-
.andWhere('datasample.collectedAt < :to', { to: range[1] })
|
|
202
|
-
.getMany();
|
|
203
|
-
for (const sample of samples) {
|
|
204
|
-
if (!summary || !compareKeys(dataKeyItems, summary, sample)) {
|
|
205
|
-
if (summary) {
|
|
206
|
-
fillSummaryResult(summary, dataItems, summary.summary);
|
|
207
|
-
summaries.push(summary);
|
|
208
|
-
}
|
|
209
|
-
summary = {
|
|
210
|
-
domain,
|
|
211
|
-
name: dataSet.name,
|
|
212
|
-
description: dataSet.description,
|
|
213
|
-
date,
|
|
214
|
-
period,
|
|
215
|
-
dataSet,
|
|
216
|
-
...buildKeysFromSample(dataKeyItems, sample),
|
|
217
|
-
count: 0,
|
|
218
|
-
countOoc: 0,
|
|
219
|
-
countOos: 0,
|
|
220
|
-
summary: deepClone(initialSummary),
|
|
221
|
-
updater: user,
|
|
222
|
-
creator: user
|
|
223
|
-
};
|
|
224
|
-
}
|
|
225
|
-
summary.count++;
|
|
226
|
-
sample.ooc && summary.countOoc++;
|
|
227
|
-
sample.oos && summary.countOos++;
|
|
228
|
-
dataItems.forEach(item => {
|
|
229
|
-
summary.summary[item.tag].push(sample.data[item.tag]);
|
|
230
|
-
});
|
|
231
|
-
}
|
|
232
|
-
if (samples.length < limit) {
|
|
233
|
-
if (summary) {
|
|
234
|
-
fillSummaryResult(summary, dataItems, summary.summary);
|
|
235
|
-
summaries.push(summary);
|
|
236
|
-
}
|
|
237
|
-
break;
|
|
238
|
-
}
|
|
239
|
-
page++;
|
|
240
|
-
} while (true);
|
|
241
|
-
tx.getRepository(data_summary_js_1.DataSummary).upsert(summaries, [
|
|
242
|
-
'domain',
|
|
243
|
-
'dataSet',
|
|
244
|
-
'key01',
|
|
245
|
-
'key02',
|
|
246
|
-
'key03',
|
|
247
|
-
'key04',
|
|
248
|
-
'key05',
|
|
249
|
-
'date',
|
|
250
|
-
'period'
|
|
251
|
-
]);
|
|
252
|
-
return true;
|
|
253
|
-
}
|
|
254
|
-
catch (e) {
|
|
255
|
-
env_1.logger.error(e);
|
|
256
|
-
}
|
|
257
|
-
return false;
|
|
258
|
-
}
|
|
259
|
-
async function finalizeDataCollection(dataSetId, date, period, context) {
|
|
260
|
-
const { domain, user, tx } = context.state;
|
|
261
|
-
const domainIds = await (0, shell_1.getDomainIdsWithAncestors)(domain);
|
|
262
|
-
try {
|
|
263
|
-
const dataSet = dataSetId &&
|
|
264
|
-
(await tx.getRepository(data_set_js_1.DataSet).findOne({
|
|
265
|
-
where: { domain: { id: (0, typeorm_1.In)(domainIds) }, id: dataSetId },
|
|
266
|
-
relations: ['dataKeySet']
|
|
267
|
-
}));
|
|
268
|
-
const dataKeyItems = dataSet.dataKeySet?.dataKeyItems || [];
|
|
269
|
-
const dataItems = dataSet.dataItems.filter(item => item.stat);
|
|
270
|
-
const initialSummary = dataItems.reduce((sum, item) => {
|
|
271
|
-
sum[item.tag] = [];
|
|
272
|
-
return sum;
|
|
273
|
-
}, {});
|
|
274
|
-
const times = await getTimesForPeriod(dataSet.summaryPeriod, date, period, context);
|
|
275
|
-
const range = times.range;
|
|
276
|
-
period = times.period;
|
|
277
|
-
const limit = 100;
|
|
278
|
-
var page = 1;
|
|
279
|
-
var summaries = [];
|
|
280
|
-
var summary;
|
|
281
|
-
do {
|
|
282
|
-
const samples = await (0, shell_1.getQueryBuilderFromListParams)({
|
|
283
|
-
repository: tx.getRepository(data_sample_js_1.DataSample),
|
|
284
|
-
params: {
|
|
285
|
-
filters: [{ name: 'dataSetId', operator: 'eq', value: dataSetId }],
|
|
286
|
-
pagination: { page, limit },
|
|
287
|
-
sortings: [...buildKeySortingList(dataKeyItems), { name: 'collectedAt', desc: true }]
|
|
288
|
-
},
|
|
289
|
-
domain: undefined,
|
|
290
|
-
alias: 'datasample'
|
|
291
|
-
})
|
|
292
|
-
.andWhere('datasample.domain IN (:...ancestorDomainIds)', { ancestorDomainIds: domainIds })
|
|
293
|
-
// The 'Between' operator includes the 'to' time in the filtering, making it unsuitable for the desired use case.
|
|
294
|
-
// .andWhere({ collectedAt: Between.apply(null, range) })
|
|
295
|
-
.andWhere('datasample.collectedAt >= :from', { from: range[0] })
|
|
296
|
-
.andWhere('datasample.collectedAt < :to', { to: range[1] })
|
|
297
|
-
.getMany();
|
|
298
|
-
for (const sample of samples) {
|
|
299
|
-
if (!summary || !compareKeys(dataKeyItems, summary, sample)) {
|
|
300
|
-
if (summary) {
|
|
301
|
-
fillSummaryResult(summary, dataItems, summary.summary);
|
|
302
|
-
summaries.push(summary);
|
|
303
|
-
}
|
|
304
|
-
summary = {
|
|
305
|
-
domain,
|
|
306
|
-
name: dataSet.name,
|
|
307
|
-
description: dataSet.description,
|
|
308
|
-
date,
|
|
309
|
-
period,
|
|
310
|
-
dataSet,
|
|
311
|
-
...buildKeysFromSample(dataKeyItems, sample),
|
|
312
|
-
count: 0,
|
|
313
|
-
countOoc: 0,
|
|
314
|
-
countOos: 0,
|
|
315
|
-
summary: deepClone(initialSummary),
|
|
316
|
-
updater: user,
|
|
317
|
-
creator: user
|
|
318
|
-
};
|
|
319
|
-
}
|
|
320
|
-
summary.count++;
|
|
321
|
-
sample.ooc && summary.countOoc++;
|
|
322
|
-
sample.oos && summary.countOos++;
|
|
323
|
-
dataItems.forEach(item => {
|
|
324
|
-
summary.summary[item.tag].push(sample.data[item.tag]);
|
|
325
|
-
});
|
|
326
|
-
}
|
|
327
|
-
if (samples.length < limit) {
|
|
328
|
-
if (summary) {
|
|
329
|
-
fillSummaryResult(summary, dataItems, summary.summary);
|
|
330
|
-
summaries.push(summary);
|
|
331
|
-
}
|
|
332
|
-
break;
|
|
333
|
-
}
|
|
334
|
-
page++;
|
|
335
|
-
} while (true);
|
|
336
|
-
tx.getRepository(data_summary_js_1.DataSummary).upsert(summaries, [
|
|
337
|
-
'domain',
|
|
338
|
-
'dataSet',
|
|
339
|
-
'key01',
|
|
340
|
-
'key02',
|
|
341
|
-
'key03',
|
|
342
|
-
'key04',
|
|
343
|
-
'key05',
|
|
344
|
-
'date',
|
|
345
|
-
'period'
|
|
346
|
-
]);
|
|
347
|
-
return true;
|
|
348
|
-
}
|
|
349
|
-
catch (e) {
|
|
350
|
-
env_1.logger.error(e);
|
|
351
|
-
}
|
|
352
|
-
return false;
|
|
353
|
-
}
|
|
354
|
-
//# sourceMappingURL=finalize-data-collection.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"finalize-data-collection.js","sourceRoot":"","sources":["../../server/controllers/finalize-data-collection.ts"],"names":[],"mappings":"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","sourcesContent":["const statistics = require('simple-statistics')\nconst deepClone = require('lodash/cloneDeep')\n\nimport moment from 'moment-timezone'\nimport { In } from 'typeorm'\n\nimport { Sorting, getQueryBuilderFromListParams, getDomainIdsWithAncestors } from '@things-factory/shell'\nimport { logger } from '@things-factory/env'\nimport {\n getDateRangeForWorkDate,\n getDateRangeForWorkShift,\n getLatestWorkDateAndShift,\n getSummaryScheduleForWorkDate,\n getSummaryScheduleForWorkShift\n} from '@things-factory/work-shift'\n\nimport { DataSample } from '../service/data-sample/data-sample.js'\nimport { DataSet, DataSetSummaryPeriodType } from '../service/data-set/data-set.js'\n\nimport { DataSummary } from '../service/data-summary/data-summary.js'\nimport { DataKeyItem } from '../service/data-key-set/data-key-item-type.js'\n\nimport { DataItem } from '../service/data-set/data-item-type.js'\n\nconst STAT_FUNCTION_MAP = {\n sum: 'sum',\n mean: 'mean',\n stddev: 'standardDeviation',\n variance: 'variance',\n min: 'min',\n max: 'max',\n range: 'range',\n median: 'median',\n mode: 'mode'\n}\n\nconst compareKeys = (dataKeyItems: DataKeyItem[], summary: Partial<DataSummary>, sample: DataSample): boolean => {\n return dataKeyItems.every((item, index) => {\n const prop = `key0${index + 1}`\n return sample[prop] === summary[prop]\n })\n}\n\nconst buildKeysFromSample = (dataKeyItems: DataKeyItem[], sample: DataSample): Partial<DataSummary> => {\n return dataKeyItems.reduce((sum, item, index) => {\n const prop = `key0${index + 1}`\n sum[prop] = sample[prop]\n\n return sum\n }, {} as Partial<DataSummary>)\n}\n\nconst buildKeySortingList = (dataKeyItems: DataKeyItem[]): Sorting[] => {\n return dataKeyItems.reduce((sum, item, index) => {\n const name = `key0${index + 1}`\n sum.push({ name, desc: true })\n return sum\n }, [])\n}\n\nconst calculateSummary = (dataItems: DataItem[], base: { [tag: string]: any[] }) => {\n return dataItems.reduce((summary, item) => {\n const tag = item.tag\n\n const data = base[tag]\n .flat(Infinity)\n .map(Number)\n .filter(item => !isNaN(item))\n\n if (data.length > 0) {\n try {\n switch (item.stat) {\n case 'range':\n summary[tag] = statistics.max(data) - statistics.min(data)\n break\n\n default:\n const functionName = STAT_FUNCTION_MAP[item.stat]\n summary[tag] = (functionName && statistics[functionName](data)) || ''\n }\n } catch (err) {\n summary[tag] = null\n console.error(err)\n }\n } else {\n summary[tag] = null\n }\n\n return summary\n }, {})\n}\n\nconst fillSummaryResult = (\n dataSummary: Partial<DataSummary>,\n dataItems: DataItem[],\n base: { [tag: string]: any[] }\n): void => {\n const summary = calculateSummary(dataItems, base)\n\n dataSummary.summary = summary\n dataItems.slice(0, 4).forEach((dataItem, idx) => {\n const value = Number(summary[dataItem.tag])\n dataSummary[`data0${idx + 1}`] = isNaN(value) ? null : value\n })\n}\n\nasync function getLatestTimesForPeriod(\n periodType: DataSetSummaryPeriodType,\n context: ResolverContext\n): Promise<{ date?: string; period?: string; range: Date[] }> {\n const { domain } = context.state\n const now = moment()\n\n if (periodType == DataSetSummaryPeriodType.Hour) {\n const begin = now.clone().subtract(1, 'hour').startOf('hour')\n const end = now.clone().startOf('hour')\n const date = begin.clone().tz(domain.timezone)\n\n return {\n date: date.format('YYYY-MM-DD'),\n period: date.format('HH'),\n range: [begin.toDate(), end.toDate()]\n }\n } else if (periodType == DataSetSummaryPeriodType.WorkShift) {\n const { workDate, workShift, shiftRange } = await getLatestWorkDateAndShift(domain, new Date())\n\n return { date: workDate, period: workShift, range: shiftRange }\n } else if (periodType == DataSetSummaryPeriodType.WorkDate) {\n const { workDate, dateRange } = await getLatestWorkDateAndShift(domain, new Date())\n\n return { date: workDate, range: dateRange }\n } else if (periodType == DataSetSummaryPeriodType.Day) {\n const begin = now.clone().subtract(1, 'day').startOf('day')\n const end = now.clone().startOf('day')\n const date = begin.clone().tz(domain.timezone)\n\n return {\n date: date.format('YYYY-MM-DD'),\n range: [begin.toDate(), end.toDate()]\n }\n }\n}\n\nasync function getTimesForPeriod(\n periodType: DataSetSummaryPeriodType,\n date: string,\n period: string,\n context: ResolverContext\n): Promise<{ date?: string; period?: string; range: Date[] }> {\n const { domain } = context.state\n\n if (periodType == DataSetSummaryPeriodType.Hour) {\n const theDate = moment.tz(`${date} ${period}:00:00`, 'YYYY-MM-DD HH:mm:ss', domain.timezone)\n\n const begin = theDate.clone().startOf('hour').toDate()\n const end = theDate.clone().add(+1, 'hour').startOf('hour').toDate()\n\n return {\n date,\n period,\n range: [begin, end]\n }\n } else if (periodType == DataSetSummaryPeriodType.WorkShift) {\n const range = await getDateRangeForWorkShift(domain, date, period)\n\n return { date, period, range }\n } else if (periodType == DataSetSummaryPeriodType.WorkDate) {\n const range = await getDateRangeForWorkDate(domain, date)\n\n return { date, range }\n } else if (periodType == DataSetSummaryPeriodType.Day) {\n const theDate = moment.tz(`${date} 00:00:00`, 'YYYY-MM-DD HH:mm:ss', domain.timezone)\n\n const begin = theDate.clone().startOf('day').toDate()\n const end = theDate.clone().add(1, 'day').startOf('day').toDate()\n\n return {\n date: moment(begin).tz(domain.timezone).format('YYYY-MM-DD'),\n range: [begin, end]\n }\n }\n}\n\nexport async function getDataFinalizeCrontabSchedule(dataSet: DataSet, context: ResolverContext): Promise<string> {\n const { domain, user, tx } = context.state\n\n try {\n const { summaryPeriod } = dataSet\n\n if (summaryPeriod == DataSetSummaryPeriodType.Hour) {\n return '0 5 * * * *'\n } else if (summaryPeriod == DataSetSummaryPeriodType.WorkShift) {\n return await getSummaryScheduleForWorkShift(domain)\n } else if (summaryPeriod == DataSetSummaryPeriodType.WorkDate) {\n return await getSummaryScheduleForWorkDate(domain)\n } else if (summaryPeriod == DataSetSummaryPeriodType.Day) {\n return '0 10 0 * * *'\n }\n } catch (err) {\n console.error(err)\n }\n}\n\nexport async function finalizeLatestDataCollection(dataSetId: string, context: ResolverContext): Promise<boolean> {\n const { domain, user, tx } = context.state\n const domainIds = await getDomainIdsWithAncestors(domain)\n\n try {\n const dataSet = await tx.getRepository(DataSet).findOne({\n where: { domain: { id: In(domainIds) }, id: dataSetId },\n relations: ['dataKeySet']\n })\n\n const dataKeyItems = dataSet.dataKeySet?.dataKeyItems || []\n const dataItems = dataSet.dataItems.filter(item => item.stat)\n const initialSummary = dataItems.reduce((sum, item) => {\n sum[item.tag] = []\n return sum\n }, {})\n\n const { date, period, range } = await getLatestTimesForPeriod(dataSet.summaryPeriod, context)\n const limit = 100\n var page = 1\n\n var summaries: Partial<DataSummary>[] = []\n var summary: Partial<DataSummary>\n\n do {\n const samples = await getQueryBuilderFromListParams({\n repository: tx.getRepository(DataSample),\n domain: undefined,\n params: {\n filters: [{ name: 'dataSetId', operator: 'eq', value: dataSetId }],\n pagination: { page, limit },\n sortings: [...buildKeySortingList(dataKeyItems), { name: 'collectedAt', desc: true }]\n },\n alias: 'datasample'\n })\n .andWhere('datasample.domain IN (:...ancestorDomainIds)', { ancestorDomainIds: domainIds })\n // The 'Between' operator includes the 'to' time in the filtering, making it unsuitable for the desired use case.\n // .andWhere({ collectedAt: Between.apply(null, range) })\n .andWhere('datasample.collectedAt >= :from', { from: range[0] })\n .andWhere('datasample.collectedAt < :to', { to: range[1] })\n .getMany()\n\n for (const sample of samples) {\n if (!summary || !compareKeys(dataKeyItems, summary, sample)) {\n if (summary) {\n fillSummaryResult(summary, dataItems, summary.summary)\n summaries.push(summary)\n }\n\n summary = {\n domain,\n name: dataSet.name,\n description: dataSet.description,\n date,\n period,\n dataSet,\n ...buildKeysFromSample(dataKeyItems, sample),\n count: 0,\n countOoc: 0,\n countOos: 0,\n summary: deepClone(initialSummary),\n updater: user,\n creator: user\n }\n }\n\n summary.count++\n sample.ooc && summary.countOoc++\n sample.oos && summary.countOos++\n\n dataItems.forEach(item => {\n summary.summary[item.tag].push(sample.data[item.tag])\n })\n }\n\n if (samples.length < limit) {\n if (summary) {\n fillSummaryResult(summary, dataItems, summary.summary)\n summaries.push(summary)\n }\n break\n }\n\n page++\n } while (true)\n\n tx.getRepository(DataSummary).upsert(summaries, [\n 'domain',\n 'dataSet',\n 'key01',\n 'key02',\n 'key03',\n 'key04',\n 'key05',\n 'date',\n 'period'\n ])\n\n return true\n } catch (e) {\n logger.error(e)\n }\n\n return false\n}\n\nexport async function finalizeDataCollection(\n dataSetId: string,\n date: string,\n period: string,\n context: ResolverContext\n): Promise<boolean> {\n const { domain, user, tx } = context.state\n const domainIds = await getDomainIdsWithAncestors(domain)\n\n try {\n const dataSet =\n dataSetId &&\n (await tx.getRepository(DataSet).findOne({\n where: { domain: { id: In(domainIds) }, id: dataSetId },\n relations: ['dataKeySet']\n }))\n\n const dataKeyItems = dataSet.dataKeySet?.dataKeyItems || []\n const dataItems = dataSet.dataItems.filter(item => item.stat)\n const initialSummary = dataItems.reduce((sum, item) => {\n sum[item.tag] = []\n return sum\n }, {})\n\n const times = await getTimesForPeriod(dataSet.summaryPeriod, date, period, context)\n const range = times.range\n period = times.period\n\n const limit = 100\n var page = 1\n\n var summaries: Partial<DataSummary>[] = []\n var summary: Partial<DataSummary>\n\n do {\n const samples = await getQueryBuilderFromListParams({\n repository: tx.getRepository(DataSample),\n params: {\n filters: [{ name: 'dataSetId', operator: 'eq', value: dataSetId }],\n pagination: { page, limit },\n sortings: [...buildKeySortingList(dataKeyItems), { name: 'collectedAt', desc: true }]\n },\n domain: undefined,\n alias: 'datasample'\n })\n .andWhere('datasample.domain IN (:...ancestorDomainIds)', { ancestorDomainIds: domainIds })\n // The 'Between' operator includes the 'to' time in the filtering, making it unsuitable for the desired use case.\n // .andWhere({ collectedAt: Between.apply(null, range) })\n .andWhere('datasample.collectedAt >= :from', { from: range[0] })\n .andWhere('datasample.collectedAt < :to', { to: range[1] })\n .getMany()\n\n for (const sample of samples) {\n if (!summary || !compareKeys(dataKeyItems, summary, sample)) {\n if (summary) {\n fillSummaryResult(summary, dataItems, summary.summary)\n summaries.push(summary)\n }\n\n summary = {\n domain,\n name: dataSet.name,\n description: dataSet.description,\n date,\n period,\n dataSet,\n ...buildKeysFromSample(dataKeyItems, sample),\n count: 0,\n countOoc: 0,\n countOos: 0,\n summary: deepClone(initialSummary),\n updater: user,\n creator: user\n }\n }\n\n summary.count++\n sample.ooc && summary.countOoc++\n sample.oos && summary.countOos++\n\n dataItems.forEach(item => {\n summary.summary[item.tag].push(sample.data[item.tag])\n })\n }\n\n if (samples.length < limit) {\n if (summary) {\n fillSummaryResult(summary, dataItems, summary.summary)\n summaries.push(summary)\n }\n break\n }\n\n page++\n } while (true)\n\n tx.getRepository(DataSummary).upsert(summaries, [\n 'domain',\n 'dataSet',\n 'key01',\n 'key02',\n 'key03',\n 'key04',\n 'key05',\n 'date',\n 'period'\n ])\n\n return true\n } catch (e) {\n logger.error(e)\n }\n\n return false\n}\n"]}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const tslib_1 = require("tslib");
|
|
4
|
-
tslib_1.__exportStar(require("./create-data-sample.js"), exports);
|
|
5
|
-
tslib_1.__exportStar(require("./create-data-ooc.js"), exports);
|
|
6
|
-
tslib_1.__exportStar(require("./issue-ooc-review.js"), exports);
|
|
7
|
-
tslib_1.__exportStar(require("./issue-ooc-resolve.js"), exports);
|
|
8
|
-
tslib_1.__exportStar(require("./data-use-case.js"), exports);
|
|
9
|
-
tslib_1.__exportStar(require("./query-data-summary-by-period.js"), exports);
|
|
10
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/controllers/index.ts"],"names":[],"mappings":";;;AAAA,kEAAuC;AACvC,+DAAoC;AACpC,gEAAqC;AACrC,iEAAsC;AACtC,6DAAkC;AAClC,4EAAiD","sourcesContent":["export * from './create-data-sample.js'\nexport * from './create-data-ooc.js'\nexport * from './issue-ooc-review.js'\nexport * from './issue-ooc-resolve.js'\nexport * from './data-use-case.js'\nexport * from './query-data-summary-by-period.js'\n"]}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.issueDataCollectionTask = issueDataCollectionTask;
|
|
4
|
-
const typeorm_1 = require("typeorm");
|
|
5
|
-
const shell_1 = require("@things-factory/shell");
|
|
6
|
-
const worklist_1 = require("@things-factory/worklist");
|
|
7
|
-
const data_set_js_1 = require("../service/data-set/data-set.js");
|
|
8
|
-
async function issueDataCollectionTask(domainId, dataSetId, context) {
|
|
9
|
-
return await (0, shell_1.getDataSource)().transaction(async (tx) => {
|
|
10
|
-
const domain = await tx.getRepository(shell_1.Domain).findOneBy({ id: domainId });
|
|
11
|
-
if (!domain) {
|
|
12
|
-
throw new Error(`domain(${domainId}) not found`);
|
|
13
|
-
}
|
|
14
|
-
const domainIds = await (0, shell_1.getDomainIdsWithAncestors)(domain);
|
|
15
|
-
var dataSets = await tx.getRepository(data_set_js_1.DataSet).find({
|
|
16
|
-
where: {
|
|
17
|
-
domain: { id: (0, typeorm_1.In)(domainIds) },
|
|
18
|
-
id: dataSetId
|
|
19
|
-
},
|
|
20
|
-
relations: ['entryRole']
|
|
21
|
-
});
|
|
22
|
-
// ancestors 중 가장 가까운 도메인의 dataSet 선택 (closest-wins)
|
|
23
|
-
const dataSet = [...dataSets].sort((a, b) => domainIds.indexOf(a.domainId) - domainIds.indexOf(b.domainId))[0];
|
|
24
|
-
var activities = await tx.getRepository(worklist_1.Activity).find({
|
|
25
|
-
where: {
|
|
26
|
-
domain: { id: (0, typeorm_1.In)(domainIds) },
|
|
27
|
-
name: 'Collect Data'
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
const activity = [...activities].sort((a, b) => domainIds.indexOf(a.domainId) - domainIds.indexOf(b.domainId))[0];
|
|
31
|
-
if (activity) {
|
|
32
|
-
const { entryRole, timeLimit } = dataSet;
|
|
33
|
-
/* 해당 dataset에 대한 데이타 수집 태스크를 dataset entryRole에게 할당한다. */
|
|
34
|
-
if (entryRole) {
|
|
35
|
-
const activityInstance = {
|
|
36
|
-
name: `[Data 수집] ${dataSet.name}`,
|
|
37
|
-
description: dataSet.description,
|
|
38
|
-
activityId: activity.id,
|
|
39
|
-
dueAt: new Date(Date.now() + (timeLimit || activity.standardTime || 24 * 60 * 60) * 1000),
|
|
40
|
-
input: {
|
|
41
|
-
dataSetId: dataSet.id,
|
|
42
|
-
dataSetName: dataSet.name
|
|
43
|
-
},
|
|
44
|
-
assigneeRoles: [entryRole],
|
|
45
|
-
threadsMin: 1,
|
|
46
|
-
threadsMax: 1
|
|
47
|
-
};
|
|
48
|
-
context.state = {
|
|
49
|
-
...context.state,
|
|
50
|
-
domain,
|
|
51
|
-
tx
|
|
52
|
-
};
|
|
53
|
-
return await (0, worklist_1.issue)(activityInstance, context);
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
throw new Error(`Data Entry Role not set. So Data Collect Activity for ${dataSet.name}($dataSet.id) could not be issued.`);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
throw new Error(`Data Collect Activity is not installed.`);
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
//# sourceMappingURL=issue-data-collection-task.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"issue-data-collection-task.js","sourceRoot":"","sources":["../../server/controllers/issue-data-collection-task.ts"],"names":[],"mappings":"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","sourcesContent":["import { In } from 'typeorm'\n\nimport { Domain, getDataSource, getDomainIdsWithAncestors } from '@things-factory/shell'\nimport { Activity, ActivityInstance, issue } from '@things-factory/worklist'\n\nimport { DataSet } from '../service/data-set/data-set.js'\n\nexport async function issueDataCollectionTask(\n domainId: string,\n dataSetId: string,\n context: ResolverContext\n): Promise<ActivityInstance | void> {\n return 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 const domainIds = await getDomainIdsWithAncestors(domain)\n\n var dataSets = await tx.getRepository(DataSet).find({\n where: {\n domain: { id: In(domainIds) },\n id: dataSetId\n },\n relations: ['entryRole']\n })\n\n // ancestors 중 가장 가까운 도메인의 dataSet 선택 (closest-wins)\n const dataSet = [...dataSets].sort(\n (a, b) => domainIds.indexOf(a.domainId) - domainIds.indexOf(b.domainId)\n )[0]\n\n var activities = await tx.getRepository(Activity).find({\n where: {\n domain: { id: In(domainIds) },\n name: 'Collect Data'\n }\n })\n\n const activity = [...activities].sort(\n (a, b) => domainIds.indexOf(a.domainId) - domainIds.indexOf(b.domainId)\n )[0]\n\n if (activity) {\n const { entryRole, timeLimit } = dataSet\n\n /* 해당 dataset에 대한 데이타 수집 태스크를 dataset entryRole에게 할당한다. */\n if (entryRole) {\n const activityInstance = {\n name: `[Data 수집] ${dataSet.name}`,\n description: dataSet.description,\n activityId: activity.id,\n dueAt: new Date(Date.now() + (timeLimit || activity.standardTime || 24 * 60 * 60) * 1000),\n input: {\n dataSetId: dataSet.id,\n dataSetName: dataSet.name\n },\n assigneeRoles: [entryRole],\n threadsMin: 1,\n threadsMax: 1\n }\n\n context.state = {\n ...context.state,\n domain,\n tx\n }\n\n return await issue(activityInstance, context)\n } else {\n throw new Error(\n `Data Entry Role not set. So Data Collect Activity for ${dataSet.name}($dataSet.id) could not be issued.`\n )\n }\n } else {\n throw new Error(`Data Collect Activity is not installed.`)\n }\n })\n}\n"]}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.issueOocResolve = issueOocResolve;
|
|
4
|
-
const shell_1 = require("@things-factory/shell");
|
|
5
|
-
const typeorm_1 = require("typeorm");
|
|
6
|
-
const worklist_1 = require("@things-factory/worklist");
|
|
7
|
-
const issue_1 = require("@things-factory/worklist/issue");
|
|
8
|
-
const auth_base_1 = require("@things-factory/auth-base");
|
|
9
|
-
const data_ooc_js_1 = require("../service/data-ooc/data-ooc.js");
|
|
10
|
-
async function issueOocResolve(dataOoc, dataSet, correctiveInstruction, context) {
|
|
11
|
-
const { domain, user, tx } = context.state;
|
|
12
|
-
const { resolverRoleId, outlierApprovalLine } = dataSet;
|
|
13
|
-
const domainIds = await (0, shell_1.getDomainIdsWithAncestors)(domain);
|
|
14
|
-
var activities = await tx.getRepository(worklist_1.Activity).find({
|
|
15
|
-
where: {
|
|
16
|
-
domain: { id: (0, typeorm_1.In)(domainIds) },
|
|
17
|
-
name: 'OOC Resolve'
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
// ancestors 중 가장 가까운 도메인의 activity 가 우선 (closest-wins customization/override)
|
|
21
|
-
var activity = [...activities].sort((a, b) => domainIds.indexOf(a.domainId) - domainIds.indexOf(b.domainId))[0];
|
|
22
|
-
if (activity) {
|
|
23
|
-
const assigneeRole = resolverRoleId &&
|
|
24
|
-
(await tx.getRepository(auth_base_1.Role).findOneBy({
|
|
25
|
-
domain: { id: (0, typeorm_1.In)(domainIds) },
|
|
26
|
-
id: resolverRoleId
|
|
27
|
-
}));
|
|
28
|
-
/* 해당 dataset의 작업 담당자(resolverRole)에게 OOC 해결을 위한 태스크를 지시한다. */
|
|
29
|
-
if (assigneeRole) {
|
|
30
|
-
const activityInstance = {
|
|
31
|
-
name: `[OOC 조치] ${dataSet.name}`,
|
|
32
|
-
description: dataSet.description,
|
|
33
|
-
activityId: activity.id,
|
|
34
|
-
dueAt: new Date(Date.now() + (activity.standardTime || 24 * 60 * 60) * 1000),
|
|
35
|
-
input: {
|
|
36
|
-
dataOocId: dataOoc.id,
|
|
37
|
-
instruction: correctiveInstruction
|
|
38
|
-
},
|
|
39
|
-
assigneeRoles: [assigneeRole],
|
|
40
|
-
threadsMin: 1,
|
|
41
|
-
threadsMax: 1,
|
|
42
|
-
approvalLine: outlierApprovalLine
|
|
43
|
-
};
|
|
44
|
-
const resolveActivityInstance = await (0, issue_1.issue)(activityInstance, context);
|
|
45
|
-
await tx.getRepository(data_ooc_js_1.DataOoc).update({ id: dataOoc.id }, { resolveActivityInstance });
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
console.error(`Assignees are not set. So, Data OOC Resolve task for ${dataOoc.name}(${dataOoc.id}) could not be issued.`);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
console.error('OOC Resolve Activity not installed.');
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=issue-ooc-resolve.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"issue-ooc-resolve.js","sourceRoot":"","sources":["../../server/controllers/issue-ooc-resolve.ts"],"names":[],"mappings":";;AASA,0CAyDC;AAlED,iDAAiE;AACjE,qCAA4B;AAC5B,uDAAmD;AACnD,0DAAsD;AACtD,yDAAgD;AAEhD,iEAAyD;AAGlD,KAAK,UAAU,eAAe,CACnC,OAAgB,EAChB,OAAgB,EAChB,qBAA6B,EAC7B,OAAwB;IAExB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAC1C,MAAM,EAAE,cAAc,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAA;IACvD,MAAM,SAAS,GAAG,MAAM,IAAA,iCAAyB,EAAC,MAAM,CAAC,CAAA;IAEzD,IAAI,UAAU,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,mBAAQ,CAAC,CAAC,IAAI,CAAC;QACrD,KAAK,EAAE;YACL,MAAM,EAAE,EAAE,EAAE,EAAE,IAAA,YAAE,EAAC,SAAS,CAAC,EAAE;YAC7B,IAAI,EAAE,aAAa;SACpB;KACF,CAAC,CAAA;IAEF,8EAA8E;IAC9E,IAAI,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CACxE,CAAC,CAAC,CAAC,CAAA;IAEJ,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,YAAY,GAChB,cAAc;YACd,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,gBAAI,CAAC,CAAC,SAAS,CAAC;gBACtC,MAAM,EAAE,EAAE,EAAE,EAAE,IAAA,YAAE,EAAC,SAAS,CAAC,EAAE;gBAC7B,EAAE,EAAE,cAAc;aACnB,CAAC,CAAC,CAAA;QAEL,8DAA8D;QAC9D,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,gBAAgB,GAAG;gBACvB,IAAI,EAAE,YAAY,OAAO,CAAC,IAAI,EAAE;gBAChC,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,UAAU,EAAE,QAAQ,CAAC,EAAE;gBACvB,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,YAAY,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;gBAC5E,KAAK,EAAE;oBACL,SAAS,EAAE,OAAO,CAAC,EAAE;oBACrB,WAAW,EAAE,qBAAqB;iBACnC;gBACD,aAAa,EAAE,CAAC,YAAY,CAAC;gBAC7B,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,CAAC;gBACb,YAAY,EAAE,mBAAmB;aAClC,CAAA;YAED,MAAM,uBAAuB,GAAG,MAAM,IAAA,aAAK,EAAC,gBAAgB,EAAE,OAAO,CAAC,CAAA;YACtE,MAAM,EAAE,CAAC,aAAa,CAAC,qBAAO,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,uBAAuB,EAAE,CAAC,CAAA;QACzF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CACX,wDAAwD,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,wBAAwB,CAC3G,CAAA;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAA;IACtD,CAAC;AACH,CAAC","sourcesContent":["import { getDomainIdsWithAncestors } from '@things-factory/shell'\nimport { In } from 'typeorm'\nimport { Activity } from '@things-factory/worklist'\nimport { issue } from '@things-factory/worklist/issue'\nimport { Role } from '@things-factory/auth-base'\n\nimport { DataOoc } from '../service/data-ooc/data-ooc.js'\nimport { DataSet } from '../service/data-set/data-set.js'\n\nexport async function issueOocResolve(\n dataOoc: DataOoc,\n dataSet: DataSet,\n correctiveInstruction: string,\n context: ResolverContext\n): Promise<void> {\n const { domain, user, tx } = context.state\n const { resolverRoleId, outlierApprovalLine } = dataSet\n const domainIds = await getDomainIdsWithAncestors(domain)\n\n var activities = await tx.getRepository(Activity).find({\n where: {\n domain: { id: In(domainIds) },\n name: 'OOC Resolve'\n }\n })\n\n // ancestors 중 가장 가까운 도메인의 activity 가 우선 (closest-wins customization/override)\n var activity = [...activities].sort(\n (a, b) => domainIds.indexOf(a.domainId) - domainIds.indexOf(b.domainId)\n )[0]\n\n if (activity) {\n const assigneeRole =\n resolverRoleId &&\n (await tx.getRepository(Role).findOneBy({\n domain: { id: In(domainIds) },\n id: resolverRoleId\n }))\n\n /* 해당 dataset의 작업 담당자(resolverRole)에게 OOC 해결을 위한 태스크를 지시한다. */\n if (assigneeRole) {\n const activityInstance = {\n name: `[OOC 조치] ${dataSet.name}`,\n description: dataSet.description,\n activityId: activity.id,\n dueAt: new Date(Date.now() + (activity.standardTime || 24 * 60 * 60) * 1000),\n input: {\n dataOocId: dataOoc.id,\n instruction: correctiveInstruction\n },\n assigneeRoles: [assigneeRole],\n threadsMin: 1,\n threadsMax: 1,\n approvalLine: outlierApprovalLine\n }\n\n const resolveActivityInstance = await issue(activityInstance, context)\n await tx.getRepository(DataOoc).update({ id: dataOoc.id }, { resolveActivityInstance })\n } else {\n console.error(\n `Assignees are not set. So, Data OOC Resolve task for ${dataOoc.name}(${dataOoc.id}) could not be issued.`\n )\n }\n } else {\n console.error('OOC Resolve Activity not installed.')\n }\n}\n"]}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.issueOocReview = issueOocReview;
|
|
4
|
-
const shell_1 = require("@things-factory/shell");
|
|
5
|
-
const typeorm_1 = require("typeorm");
|
|
6
|
-
const auth_base_1 = require("@things-factory/auth-base");
|
|
7
|
-
const worklist_1 = require("@things-factory/worklist");
|
|
8
|
-
const issue_1 = require("@things-factory/worklist/issue");
|
|
9
|
-
const data_ooc_js_1 = require("../service/data-ooc/data-ooc.js");
|
|
10
|
-
async function issueOocReview(dataOoc, dataSet, context) {
|
|
11
|
-
const { domain, tx } = context.state;
|
|
12
|
-
const { collectedAt } = dataOoc;
|
|
13
|
-
const domainIds = await (0, shell_1.getDomainIdsWithAncestors)(domain);
|
|
14
|
-
var activities = await tx.getRepository(worklist_1.Activity).find({
|
|
15
|
-
where: {
|
|
16
|
-
domain: { id: (0, typeorm_1.In)(domainIds) },
|
|
17
|
-
name: 'OOC Review'
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
var activity = [...activities].sort((a, b) => domainIds.indexOf(a.domainId) - domainIds.indexOf(b.domainId))[0];
|
|
21
|
-
if (activity) {
|
|
22
|
-
const assigneeRole = dataSet.supervisoryRoleId &&
|
|
23
|
-
(await tx.getRepository(auth_base_1.Role).findOneBy({
|
|
24
|
-
domain: { id: (0, typeorm_1.In)(domainIds) },
|
|
25
|
-
id: dataSet.supervisoryRoleId
|
|
26
|
-
}));
|
|
27
|
-
if (assigneeRole) {
|
|
28
|
-
const activityInstance = {
|
|
29
|
-
name: `[OOC 검토] ${dataSet.name}`,
|
|
30
|
-
description: dataSet.description,
|
|
31
|
-
activityId: activity.id,
|
|
32
|
-
dueAt: new Date(collectedAt.getTime() + (activity.standardTime || 24 * 60 * 60) * 1000),
|
|
33
|
-
input: {
|
|
34
|
-
dataOocId: dataOoc.id
|
|
35
|
-
},
|
|
36
|
-
assigneeRoles: [assigneeRole],
|
|
37
|
-
threadsMin: 1,
|
|
38
|
-
threadsMax: 1,
|
|
39
|
-
approvalLine: []
|
|
40
|
-
};
|
|
41
|
-
const reviewActivityInstance = await (0, issue_1.issue)(activityInstance, context);
|
|
42
|
-
await tx.getRepository(data_ooc_js_1.DataOoc).update({ id: dataOoc.id }, { reviewActivityInstance });
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
console.error(`Assignees are not set. So Data OOC Review task for ${dataOoc.name}(${dataOoc.id}) could not be issued.`);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
console.warn('OOC Review Activity not installed.');
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=issue-ooc-review.js.map
|