@things-factory/dataset 5.0.0-alpha.39 → 5.0.0-alpha.41

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 (32) hide show
  1. package/client/pages/data-ooc/data-ooc-list-page.js +43 -48
  2. package/client/pages/data-report/data-report-list-page.js +3 -3
  3. package/client/pages/data-report/jasper-report-oocs-page.js +115 -0
  4. package/client/pages/data-report/jasper-report-samples-page.js +115 -0
  5. package/client/pages/data-sample/data-sample-list-page.js +43 -48
  6. package/client/pages/data-sensor/data-sensor-list-page.js +37 -53
  7. package/client/pages/data-set/data-set-list-page.js +28 -43
  8. package/client/route.js +8 -0
  9. package/config/config.development.js +13 -0
  10. package/config/config.production.js +1 -0
  11. package/dist-server/controllers/jasper-report.js +129 -0
  12. package/dist-server/controllers/jasper-report.js.map +1 -0
  13. package/dist-server/routes.js +4 -0
  14. package/dist-server/routes.js.map +1 -1
  15. package/dist-server/service/data-set/data-set-mutation.js +27 -4
  16. package/dist-server/service/data-set/data-set-mutation.js.map +1 -1
  17. package/dist-server/service/data-set/data-set-query.js +23 -0
  18. package/dist-server/service/data-set/data-set-query.js.map +1 -1
  19. package/dist-server/service/data-set/data-set-type.js +13 -4
  20. package/dist-server/service/data-set/data-set-type.js.map +1 -1
  21. package/dist-server/service/data-set/data-set.js +4 -0
  22. package/dist-server/service/data-set/data-set.js.map +1 -1
  23. package/package.json +17 -16
  24. package/server/controllers/jasper-report.ts +130 -0
  25. package/server/routes.ts +4 -0
  26. package/server/service/data-set/data-set-mutation.ts +41 -4
  27. package/server/service/data-set/data-set-query.ts +21 -0
  28. package/server/service/data-set/data-set-type.ts +7 -0
  29. package/server/service/data-set/data-set.ts +3 -0
  30. package/things-factory.config.js +8 -0
  31. package/translations/en.json +1 -0
  32. package/translations/ko.json +1 -0
@@ -155,6 +155,10 @@ __decorate([
155
155
  (0, type_graphql_1.Field)({ nullable: true }),
156
156
  __metadata("design:type", String)
157
157
  ], DataSet.prototype, "reportView", void 0);
158
+ __decorate([
159
+ (0, type_graphql_1.Field)({ nullable: true }),
160
+ __metadata("design:type", String)
161
+ ], DataSet.prototype, "reportTemplate", void 0);
158
162
  __decorate([
159
163
  (0, typeorm_1.Column)({
160
164
  nullable: true
@@ -1 +1 @@
1
- {"version":3,"file":"data-set.js","sourceRoot":"","sources":["../../../server/service/data-set/data-set.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,+CAAsE;AACtE,qCAUgB;AAEhB,yDAAsD;AACtD,iDAA4D;AAE5D,sDAAiD;AAEjD,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,2CAAuB,CAAA;IACvB,mCAAe,CAAA;IACf,iCAAa,CAAA;IACb,4CAAwB,CAAA;AAC1B,CAAC,EALW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAK3B;AAED,IAAA,+BAAgB,EAAC,gBAAgB,EAAE;IACjC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,qCAAqC;CACnD,CAAC,CAAA;AAEF,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,6CAAuB,CAAA;IACvB,qCAAe,CAAA;IACf,mCAAa,CAAA;IACb,8CAAwB,CAAA;AAC1B,CAAC,EALW,kBAAkB,GAAlB,0BAAkB,KAAlB,0BAAkB,QAK7B;AAED,IAAA,+BAAgB,EAAC,kBAAkB,EAAE;IACnC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,uCAAuC;CACrD,CAAC,CAAA;AAEF,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B,4CAAuB,CAAA;IACvB,oCAAe,CAAA;IACf,kCAAa,CAAA;IACb,6CAAwB,CAAA;AAC1B,CAAC,EALW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAK5B;AAED,IAAA,+BAAgB,EAAC,iBAAiB,EAAE;IAClC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,sCAAsC;CACpD,CAAC,CAAA;AAKF,IAAa,OAAO,GAApB,MAAa,OAAO;CA2InB,CAAA;AAxIC;IAFC,IAAA,gCAAsB,EAAC,MAAM,CAAC;IAC9B,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAE,CAAC;;mCACC;AAInB;IAFC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,cAAM,CAAC;IACzB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;kDACjB,cAAM,oBAAN,cAAM;uCAAA;AAGf;IADC,IAAA,oBAAU,EAAC,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;;yCAChC;AAIjB;IAFC,IAAA,gBAAM,GAAE;IACR,IAAA,oBAAK,GAAE;;qCACI;AAMZ;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACN;AAMpB;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;uCACV;AAMhB;IAJC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE;QACvB,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;kDAC5B,gBAAI,oBAAJ,gBAAI;0CAAA;AAGhB;IADC,IAAA,oBAAU,EAAC,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;;4CAChC;AAMpB;IAJC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE;QACvB,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;kDACtB,gBAAI,oBAAJ,gBAAI;gDAAA;AAGtB;IADC,IAAA,oBAAU,EAAC,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC;;kDAChC;AAM1B;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qCACY;AAMtC;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0CACE;AAM5B;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0CACR;AAMlB;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACM;AAMhC;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACN;AAMpB;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CACI;AAM9B;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CACP;AAMnB;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;wCACV;AAIhB;IAFC,IAAA,gBAAM,EAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACzC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,oBAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;kDAChC,oBAAY,oBAAZ,oBAAY;8CAAA;AAI5B;IAFC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,oBAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;IACzD,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,oBAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0CACzB;AAMrB;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yCACT;AAMjB;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yCACT;AAIjB;IAFC,IAAA,0BAAgB,GAAE;IAClB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BACd,IAAI;0CAAA;AAIhB;IAFC,IAAA,0BAAgB,GAAE;IAClB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BACd,IAAI;0CAAA;AAMhB;IAJC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE;QACvB,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;kDAChB,gBAAI,oBAAJ,gBAAI;wCAAA;AAGd;IADC,IAAA,oBAAU,EAAC,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;;0CAChC;AAMlB;IAJC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE;QACvB,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;kDAChB,gBAAI,oBAAJ,gBAAI;wCAAA;AAGd;IADC,IAAA,oBAAU,EAAC,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;;0CAChC;AA1IP,OAAO;IAHnB,IAAA,gBAAM,GAAE;IACR,IAAA,eAAK,EAAC,eAAe,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC9F,IAAA,yBAAU,EAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC;GACrC,OAAO,CA2InB;AA3IY,0BAAO"}
1
+ {"version":3,"file":"data-set.js","sourceRoot":"","sources":["../../../server/service/data-set/data-set.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,+CAAsE;AACtE,qCAUgB;AAEhB,yDAAsD;AACtD,iDAA4D;AAE5D,sDAAiD;AAEjD,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,2CAAuB,CAAA;IACvB,mCAAe,CAAA;IACf,iCAAa,CAAA;IACb,4CAAwB,CAAA;AAC1B,CAAC,EALW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAK3B;AAED,IAAA,+BAAgB,EAAC,gBAAgB,EAAE;IACjC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,qCAAqC;CACnD,CAAC,CAAA;AAEF,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,6CAAuB,CAAA;IACvB,qCAAe,CAAA;IACf,mCAAa,CAAA;IACb,8CAAwB,CAAA;AAC1B,CAAC,EALW,kBAAkB,GAAlB,0BAAkB,KAAlB,0BAAkB,QAK7B;AAED,IAAA,+BAAgB,EAAC,kBAAkB,EAAE;IACnC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,uCAAuC;CACrD,CAAC,CAAA;AAEF,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B,4CAAuB,CAAA;IACvB,oCAAe,CAAA;IACf,kCAAa,CAAA;IACb,6CAAwB,CAAA;AAC1B,CAAC,EALW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAK5B;AAED,IAAA,+BAAgB,EAAC,iBAAiB,EAAE;IAClC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,sCAAsC;CACpD,CAAC,CAAA;AAKF,IAAa,OAAO,GAApB,MAAa,OAAO;CA8InB,CAAA;AA3IC;IAFC,IAAA,gCAAsB,EAAC,MAAM,CAAC;IAC9B,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAE,CAAC;;mCACC;AAInB;IAFC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,cAAM,CAAC;IACzB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;kDACjB,cAAM,oBAAN,cAAM;uCAAA;AAGf;IADC,IAAA,oBAAU,EAAC,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;;yCAChC;AAIjB;IAFC,IAAA,gBAAM,GAAE;IACR,IAAA,oBAAK,GAAE;;qCACI;AAMZ;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACN;AAMpB;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;uCACV;AAMhB;IAJC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE;QACvB,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;kDAC5B,gBAAI,oBAAJ,gBAAI;0CAAA;AAGhB;IADC,IAAA,oBAAU,EAAC,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;;4CAChC;AAMpB;IAJC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE;QACvB,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;kDACtB,gBAAI,oBAAJ,gBAAI;gDAAA;AAGtB;IADC,IAAA,oBAAU,EAAC,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC;;kDAChC;AAM1B;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qCACY;AAMtC;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0CACE;AAM5B;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0CACR;AAMlB;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACM;AAMhC;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACN;AAMpB;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CACI;AAM9B;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CACP;AAGnB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CACH;AAMvB;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;wCACV;AAIhB;IAFC,IAAA,gBAAM,EAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACzC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,oBAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;kDAChC,oBAAY,oBAAZ,oBAAY;8CAAA;AAI5B;IAFC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,oBAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;IACzD,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,oBAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0CACzB;AAMrB;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yCACT;AAMjB;IAJC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yCACT;AAIjB;IAFC,IAAA,0BAAgB,GAAE;IAClB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BACd,IAAI;0CAAA;AAIhB;IAFC,IAAA,0BAAgB,GAAE;IAClB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BACd,IAAI;0CAAA;AAMhB;IAJC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE;QACvB,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;kDAChB,gBAAI,oBAAJ,gBAAI;wCAAA;AAGd;IADC,IAAA,oBAAU,EAAC,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;;0CAChC;AAMlB;IAJC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE;QACvB,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;kDAChB,gBAAI,oBAAJ,gBAAI;wCAAA;AAGd;IADC,IAAA,oBAAU,EAAC,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;;0CAChC;AA7IP,OAAO;IAHnB,IAAA,gBAAM,GAAE;IACR,IAAA,eAAK,EAAC,eAAe,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC9F,IAAA,yBAAU,EAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC;GACrC,OAAO,CA8InB;AA9IY,0BAAO"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/dataset",
3
- "version": "5.0.0-alpha.39",
3
+ "version": "5.0.0-alpha.41",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
@@ -24,22 +24,23 @@
24
24
  "migration:create": "node ../../node_modules/typeorm/cli.js migration:create -d ./server/migrations"
25
25
  },
26
26
  "dependencies": {
27
- "@operato/app": "1.0.0-beta.5",
28
- "@operato/data-grist": "1.0.0-beta.5",
29
- "@operato/dataset": "1.0.0-beta.5",
30
- "@operato/graphql": "1.0.0-beta.5",
31
- "@operato/i18n": "1.0.0-beta.5",
32
- "@operato/layout": "1.0.0-beta.5",
33
- "@operato/shell": "1.0.0-beta.5",
34
- "@operato/styles": "1.0.0-beta.5",
35
- "@operato/utils": "1.0.0-beta.5",
36
- "@things-factory/auth-base": "^5.0.0-alpha.39",
37
- "@things-factory/board-service": "^5.0.0-alpha.39",
38
- "@things-factory/env": "^5.0.0-alpha.39",
39
- "@things-factory/shell": "^5.0.0-alpha.39",
40
- "@things-factory/work-shift": "^5.0.0-alpha.39",
27
+ "@operato/app": "1.0.0-beta.9",
28
+ "@operato/data-grist": "1.0.0-beta.9",
29
+ "@operato/dataset": "1.0.0-beta.9",
30
+ "@operato/graphql": "1.0.0-beta.9",
31
+ "@operato/i18n": "1.0.0-beta.9",
32
+ "@operato/layout": "1.0.0-beta.9",
33
+ "@operato/shell": "1.0.0-beta.9",
34
+ "@operato/styles": "1.0.0-beta.9",
35
+ "@operato/utils": "1.0.0-beta.9",
36
+ "@things-factory/auth-base": "^5.0.0-alpha.41",
37
+ "@things-factory/aws-base": "^5.0.0-alpha.41",
38
+ "@things-factory/board-service": "^5.0.0-alpha.41",
39
+ "@things-factory/env": "^5.0.0-alpha.41",
40
+ "@things-factory/shell": "^5.0.0-alpha.41",
41
+ "@things-factory/work-shift": "^5.0.0-alpha.41",
41
42
  "cron-parser": "^4.3.0",
42
43
  "moment-timezone": "^0.5.34"
43
44
  },
44
- "gitHead": "23e58562a4724f157c3bc492cdedb7e32efee6a1"
45
+ "gitHead": "f9ba0b3b997862b3d01c5b25338ce221d71f4fd7"
45
46
  }
@@ -0,0 +1,130 @@
1
+ import FormData from 'form-data'
2
+ import fetch from 'node-fetch'
3
+
4
+ import { STORAGE } from '@things-factory/attachment-base'
5
+ import { AthenaController } from '@things-factory/aws-base'
6
+ import { config } from '@things-factory/env'
7
+
8
+ const dataReportConfig = config.get('dataReport')
9
+ const { jasper: { endpoint: { protocol, host, port }, datasource: { database } } } = dataReportConfig
10
+
11
+ /** author: ywnam123 */
12
+ function transformValuesToRows(queryResult) {
13
+ var parseData = []
14
+ let index = 1
15
+ for (let i = 0; i < queryResult.Items.length; i++) {
16
+ var j = 0
17
+ const data = JSON.parse(queryResult.Items[i].data)
18
+ const spec = JSON.parse(queryResult.Items[i].spec)
19
+
20
+ for (let key in data) {
21
+ if (Array.isArray(data[key])) {
22
+ for (j = 0; j < data[key].length; j++) {
23
+ for (let specKey in spec) {
24
+ if (key === specKey) {
25
+ parseData.push({
26
+ item: spec[specKey].name,
27
+ index: index + j,
28
+ value: String(data[key][j])
29
+ })
30
+ }
31
+ }
32
+ }
33
+ } else {
34
+ parseData.push({
35
+ item: key,
36
+ index,
37
+ value: String(data[key])
38
+ })
39
+ }
40
+ }
41
+ if (j !== 0) {
42
+ index = index + j
43
+ } else {
44
+ index = index + 1
45
+ }
46
+ }
47
+ }
48
+
49
+ /** @todo considering trasformation in lambda, as massive dataset */
50
+ function pivotData(rows) {
51
+ var parseData = []
52
+ let index = 1
53
+ for (let i = 0; i < rows.length; i++) {
54
+ var j = 0
55
+ const data = JSON.parse(rows[i].data)
56
+ const spec = JSON.parse(rows[i].spec)
57
+
58
+ for (let key in data) {
59
+ /** @todo rule to display or not, about unspecified spec */
60
+ const value = data[key]
61
+ !(spec[key]?.hidden) && parseData.push({
62
+ item: spec[key]?.name || key,
63
+ index,
64
+ value: Array.isArray(value) ? value.join(', ') : value
65
+ })
66
+ }
67
+ if (j !== 0) {
68
+ index = index + j
69
+ } else {
70
+ index = index + 1
71
+ }
72
+ }
73
+
74
+ return parseData
75
+ }
76
+
77
+ const athenaClient = new AthenaController()
78
+ async function queryAthena(params) {
79
+ const queryData = {
80
+ sql: `select data, spec, from_unixtime(collected_at/1000/1000) collected_at
81
+ from ${params['table']}
82
+ where domain='${params['domain']}'
83
+ and datasetid = '${params['dataSetId']}'
84
+ and workdate >= '${params['fromWorkDate']}'
85
+ and workdate <= '${params['toWorkDate']}'
86
+ and workshift = '${params['workShift'] || 'NA'}'
87
+ order by collected_at`,
88
+ db: database
89
+ }
90
+ // and json_extract_scalar(data, '$.dauid') = 'A8032AD81730'
91
+
92
+ return await athenaClient.query(queryData)
93
+ }
94
+ export async function renderJasperReport(context: any) {
95
+ const { state: { domain }, query } = context
96
+ const template = await STORAGE.readFile(query['template'] || 'dynamic_header_sample.jrxml', 'utf-8')
97
+ let templateType = 'crosstab'
98
+ let parsedData = []
99
+
100
+ query['domain'] = domain?.subdomain
101
+ const queryResult = await queryAthena(query)
102
+ const rows = queryResult.Items
103
+
104
+ if (templateType === 'crosstab') {
105
+ parsedData = pivotData(rows)
106
+ } else {
107
+ /** unused */
108
+ for (let i = 0; i < rows.length; i++) {
109
+ const data = JSON.parse(rows[i].data)
110
+ for (let key in data) {
111
+ if (Array.isArray(data[key])) {
112
+ data[key] = data[key].toString()
113
+ }
114
+ }
115
+ parsedData.push(data)
116
+ }
117
+ }
118
+
119
+ const formData = new FormData()
120
+ formData.append('template', template)
121
+ formData.append('jsonString', JSON.stringify(parsedData))
122
+
123
+ const reportUrl = `${protocol || 'http'}://${host}:${port}/rest/report/show_html`
124
+ const response = await fetch(reportUrl, {
125
+ method: 'POST',
126
+ body: formData
127
+ })
128
+
129
+ return await response.text()
130
+ }
package/server/routes.ts CHANGED
@@ -3,6 +3,7 @@ import { getConnection } from 'typeorm'
3
3
  import { User } from '@things-factory/auth-base'
4
4
 
5
5
  import { createDataSample } from './controllers/create-data-sample'
6
+ import { renderJasperReport } from './controllers/jasper-report'
6
7
  import { DataSensor } from './service/data-sensor/data-sensor'
7
8
 
8
9
  const debug = require('debug')('things-factory:dataset:routes')
@@ -87,4 +88,7 @@ process.on('bootstrap-module-domain-private-route' as any, (app, domainPrivateRo
87
88
  /*
88
89
  * can add domain private routes to application (auth required, tenancy required)
89
90
  */
91
+ domainPrivateRouter.get('/data-report/jasper', async (context, next) => {
92
+ context.body = await renderJasperReport(context)
93
+ })
90
94
  })
@@ -3,6 +3,7 @@ import { EntityManager, In } from 'typeorm'
3
3
  import uuid from 'uuid/v4'
4
4
 
5
5
  import { Domain } from '@things-factory/shell'
6
+ import { createAttachment, deleteAttachmentsByRef } from '@things-factory/attachment-base'
6
7
 
7
8
  import { DataItem } from '../data-item/data-item'
8
9
  import { DataSet } from './data-set'
@@ -16,12 +17,16 @@ export class DataSetMutation {
16
17
  async createDataSet(@Arg('dataSet') dataSet: NewDataSet, @Ctx() context: any): Promise<DataSet> {
17
18
  const { domain, user, tx } = context.state
18
19
 
19
- return await tx.getRepository(DataSet).save({
20
+ const result = await tx.getRepository(DataSet).save({
20
21
  ...dataSet,
21
22
  domain,
22
23
  creator: user,
23
24
  updater: user
24
25
  })
26
+
27
+ await this._createAttachment(context, dataSet.reportTemplate, { refId: result.id, cuFlag: '+' })
28
+
29
+ return result
25
30
  }
26
31
 
27
32
  @Directive('@privilege(category: "data-set", privilege: "mutation", domainOwnerGranted: true)')
@@ -35,11 +40,15 @@ export class DataSetMutation {
35
40
  where: { domain, id }
36
41
  })
37
42
 
38
- return await repository.save({
43
+ const result = await repository.save({
39
44
  ...dataSet,
40
45
  ...patch,
41
46
  updater: user
42
47
  })
48
+
49
+ await this._createAttachment(context, dataSet.reportTemplate, { refId: result.id, cuFlag: 'M' })
50
+
51
+ return result
43
52
  }
44
53
 
45
54
  @Directive('@privilege(category: "data-set", privilege: "mutation", domainOwnerGranted: true)')
@@ -57,6 +66,7 @@ export class DataSetMutation {
57
66
  const dataSetRepo = tx.getRepository(DataSet)
58
67
 
59
68
  if (_createRecords.length > 0) {
69
+ const cuFlag = '+'
60
70
  for (let i = 0; i < _createRecords.length; i++) {
61
71
  const newRecord = _createRecords[i]
62
72
 
@@ -67,11 +77,14 @@ export class DataSetMutation {
67
77
  updater: user
68
78
  })
69
79
 
70
- results.push({ ...result, cuFlag: '+' })
80
+ await this._createAttachment(context, newRecord.reportTemplate, { refId: result.id, cuFlag })
81
+
82
+ results.push({ ...result, cuFlag })
71
83
  }
72
84
  }
73
85
 
74
86
  if (_updateRecords.length > 0) {
87
+ const cuFlag = 'M'
75
88
  for (let i = 0; i < _updateRecords.length; i++) {
76
89
  const newRecord = _updateRecords[i]
77
90
  const dataSet = await dataSetRepo.findOne(newRecord.id)
@@ -82,7 +95,9 @@ export class DataSetMutation {
82
95
  updater: user
83
96
  })
84
97
 
85
- results.push({ ...result, cuFlag: 'M' })
98
+ await this._createAttachment(context, newRecord.reportTemplate, { refId: result.id, cuFlag })
99
+
100
+ results.push({ ...result, cuFlag })
86
101
  }
87
102
  }
88
103
 
@@ -96,6 +111,7 @@ export class DataSetMutation {
96
111
  const { domain, tx } = context.state
97
112
 
98
113
  await tx.getRepository(DataSet).delete({ domain, id })
114
+ await deleteAttachmentsByRef(null, { refBys: [`report-${id}`] }, context)
99
115
  return true
100
116
  }
101
117
 
@@ -110,6 +126,8 @@ export class DataSetMutation {
110
126
  id: In(ids)
111
127
  })
112
128
 
129
+ await deleteAttachmentsByRef(null, { refBys: ids.map(id => `report-${id}`) } , context)
130
+
113
131
  return true
114
132
  }
115
133
 
@@ -203,4 +221,23 @@ export class DataSetMutation {
203
221
  return dataSet
204
222
  })
205
223
  }
224
+
225
+
226
+ async _createAttachment(context, attachment, { refId, cuFlag }) {
227
+ if (attachment) {
228
+ const attachmentRef = 'report-' + refId
229
+ cuFlag == 'M' && await deleteAttachmentsByRef(null, { refBys: [attachmentRef] }, context)
230
+ await createAttachment(
231
+ null,
232
+ {
233
+ attachment: {
234
+ file: attachment,
235
+ refBy: attachmentRef
236
+ }
237
+ },
238
+ context
239
+ )
240
+ }
241
+ }
206
242
  }
243
+
@@ -4,6 +4,7 @@ import { getRepository } from 'typeorm'
4
4
  import { Role, User } from '@things-factory/auth-base'
5
5
  import { Board } from '@things-factory/board-service'
6
6
  import { Domain, getQueryBuilderFromListParams, ListParam } from '@things-factory/shell'
7
+ import { Attachment } from '@things-factory/attachment-base'
7
8
 
8
9
  import { DataItem } from '../data-item/data-item'
9
10
  import { DataSample } from '../data-sample/data-sample'
@@ -52,6 +53,10 @@ export class DataSetQuery {
52
53
  })
53
54
  const roles = user.roles.filter(role => role.domainId === domain.id).map(role => role.id)
54
55
 
56
+ if (!roles.length) {
57
+ return { items: [], total: 0 }
58
+ }
59
+
55
60
  const queryBuilder = getQueryBuilderFromListParams({
56
61
  repository: getRepository(DataSet),
57
62
  params,
@@ -78,6 +83,10 @@ export class DataSetQuery {
78
83
  })
79
84
  const roles = user.roles.filter(role => role.domainId === domain.id).map(role => role.id)
80
85
 
86
+ if (!roles.length) {
87
+ return { items: [], total: 0 }
88
+ }
89
+
81
90
  const queryBuilder = getQueryBuilderFromListParams({
82
91
  repository: getRepository(DataSet),
83
92
  params,
@@ -183,4 +192,16 @@ export class DataSetQuery {
183
192
 
184
193
  return interval.prev().toDate()
185
194
  }
195
+
196
+ @FieldResolver(type => String)
197
+ async reportTemplate(@Root() dataset: DataSet): Promise<string | undefined> {
198
+ const attachment: Attachment = await getRepository(Attachment).findOne({
199
+ where: {
200
+ domain: dataset.domainId,
201
+ refBy: `report-${dataset.id}`
202
+ }
203
+ })
204
+
205
+ return attachment?.fullpath
206
+ }
186
207
  }
@@ -1,4 +1,5 @@
1
1
  import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
2
+ import { FileUpload, GraphQLUpload } from 'graphql-upload'
2
3
 
3
4
  import { ObjectRef, ScalarObject } from '@things-factory/shell'
4
5
 
@@ -53,6 +54,9 @@ export class NewDataSet {
53
54
 
54
55
  @Field({ nullable: true })
55
56
  reportView?: string
57
+
58
+ @Field(type => GraphQLUpload, { nullable: true })
59
+ reportTemplate?: FileUpload
56
60
  }
57
61
 
58
62
  @InputType()
@@ -108,6 +112,9 @@ export class DataSetPatch {
108
112
  @Field({ nullable: true })
109
113
  reportView?: string
110
114
 
115
+ @Field(type => GraphQLUpload, { nullable: true })
116
+ reportTemplate?: FileUpload
117
+
111
118
  @Field()
112
119
  cuFlag: string
113
120
  }
@@ -143,6 +143,9 @@ export class DataSet {
143
143
  @Field({ nullable: true })
144
144
  reportView?: string
145
145
 
146
+ @Field({ nullable: true })
147
+ reportTemplate?: string
148
+
146
149
  @Column({
147
150
  nullable: true
148
151
  })
@@ -27,6 +27,14 @@ export default {
27
27
  {
28
28
  tagname: 'data-report-list-page',
29
29
  page: 'data-report-list'
30
+ },
31
+ {
32
+ tagname: 'jasper-report-samples-page',
33
+ page: 'jasper-report-samples'
34
+ },
35
+ {
36
+ tagname: 'jasper-report-oocs-page',
37
+ page: 'jasper-report-oocs'
30
38
  }
31
39
  ],
32
40
  bootstrap
@@ -27,6 +27,7 @@
27
27
  "field.quota": "sampling #",
28
28
  "field.raw-data": "raw data",
29
29
  "field.ref-by": "ref. by",
30
+ "field.report-template": "report template",
30
31
  "field.report-type": "report type",
31
32
  "field.report-view": "report view",
32
33
  "field.serial-no": "serial #",
@@ -27,6 +27,7 @@
27
27
  "field.quota": "샘플수",
28
28
  "field.raw-data": "데이타 원본",
29
29
  "field.ref-by": "참조아이템",
30
+ "field.report-template": "리포트용 템플릿",
30
31
  "field.report-type": "리포트용 화면종류",
31
32
  "field.report-view": "리포트용 화면",
32
33
  "field.serial-no": "시리얼번호",