@things-factory/dataset 6.0.0-alpha.6 → 6.0.0-alpha.7

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 (63) hide show
  1. package/README.md +23 -19
  2. package/assets/diagram.jpg +0 -0
  3. package/client/pages/data-archive/data-archive-list-page.js +290 -0
  4. package/client/pages/data-archive/data-archive-request-popup.js +180 -0
  5. package/client/pages/data-key-set/data-key-set-list-page.js +1 -1
  6. package/client/pages/data-report/data-report-list-page.js +2 -2
  7. package/client/pages/data-set/data-set-list-page.js +1 -1
  8. package/client/route.js +4 -0
  9. package/config/config.development.js +11 -0
  10. package/config/config.production.js +11 -0
  11. package/dist-server/controllers/jasper-report.js +4 -4
  12. package/dist-server/controllers/jasper-report.js.map +1 -1
  13. package/dist-server/controllers/shiny-report.js +4 -7
  14. package/dist-server/controllers/shiny-report.js.map +1 -1
  15. package/dist-server/routes.js.map +1 -1
  16. package/dist-server/service/data-archive/data-archive-mutation.js +227 -0
  17. package/dist-server/service/data-archive/data-archive-mutation.js.map +1 -0
  18. package/dist-server/service/data-archive/data-archive-query.js +83 -0
  19. package/dist-server/service/data-archive/data-archive-query.js.map +1 -0
  20. package/dist-server/service/data-archive/data-archive-type.js +74 -0
  21. package/dist-server/service/data-archive/data-archive-type.js.map +1 -0
  22. package/dist-server/service/data-archive/data-archive.js +79 -0
  23. package/dist-server/service/data-archive/data-archive.js.map +1 -0
  24. package/dist-server/service/data-archive/index.js +9 -0
  25. package/dist-server/service/data-archive/index.js.map +1 -0
  26. package/dist-server/service/data-set/data-set-mutation.js +1 -1
  27. package/dist-server/service/data-set/data-set-mutation.js.map +1 -1
  28. package/dist-server/service/index.js +5 -2
  29. package/dist-server/service/index.js.map +1 -1
  30. package/dist-server/tsconfig.tsbuildinfo +1 -1
  31. package/dist-server/utils/config-resolver.js +33 -0
  32. package/dist-server/utils/config-resolver.js.map +1 -0
  33. package/dist-server/utils/index.js +5 -0
  34. package/dist-server/utils/index.js.map +1 -0
  35. package/helps/dataset/data-archive.md +9 -0
  36. package/helps/dataset/data-entry-list.md +2 -0
  37. package/helps/dataset/data-key-set.md +10 -0
  38. package/helps/dataset/data-ooc.md +11 -0
  39. package/helps/dataset/data-report-list.md +4 -0
  40. package/helps/dataset/data-sample-search.md +2 -0
  41. package/helps/dataset/data-sample.md +11 -0
  42. package/helps/dataset/data-sensor.md +13 -0
  43. package/helps/dataset/data-set.md +28 -0
  44. package/helps/dataset/ui/data-item-list.md +19 -0
  45. package/helps/dataset/ui/data-key-item-list.md +2 -0
  46. package/package.json +7 -7
  47. package/server/controllers/jasper-report.ts +5 -4
  48. package/server/controllers/shiny-report.ts +4 -7
  49. package/server/routes.ts +1 -0
  50. package/server/service/data-archive/data-archive-mutation.ts +282 -0
  51. package/server/service/data-archive/data-archive-query.ts +55 -0
  52. package/server/service/data-archive/data-archive-type.ts +49 -0
  53. package/server/service/data-archive/data-archive.ts +69 -0
  54. package/server/service/data-archive/index.ts +6 -0
  55. package/server/service/data-set/data-set-mutation.ts +1 -1
  56. package/server/service/index.ts +5 -2
  57. package/server/utils/config-resolver.ts +29 -0
  58. package/server/utils/index.ts +1 -0
  59. package/things-factory.config.js +4 -0
  60. package/translations/en.json +18 -3
  61. package/translations/ko.json +15 -1
  62. package/translations/ms.json +1 -0
  63. package/translations/zh.json +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"jasper-report.js","sourceRoot":"","sources":["../../server/controllers/jasper-report.ts"],"names":[],"mappings":"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","sourcesContent":["import FormData from 'form-data'\nimport fetch from 'node-fetch'\n\nimport { STORAGE } from '@things-factory/attachment-base'\nimport { AthenaController } from '@things-factory/aws-base'\nimport { config } from '@things-factory/env'\n\nconst dataReportConfig = config.get('dataReport')\nconst {\n jasper: {\n endpoint: { protocol: PROTOCOL, host: HOST, port: PORT },\n datasource: { database: DATABASE }\n }\n} = dataReportConfig || {\n jasper: {\n endpoint: {},\n datasource: {}\n }\n}\n\nfunction transformValuesToRows(queryResult) {\n var parseData = []\n let index = 1\n for (let i = 0; i < queryResult.Items.length; i++) {\n var j = 0\n const data = JSON.parse(queryResult.Items[i].data)\n const spec = JSON.parse(queryResult.Items[i].spec)\n\n for (let key in data) {\n if (Array.isArray(data[key])) {\n for (j = 0; j < data[key].length; j++) {\n for (let specKey in spec) {\n if (key === specKey) {\n parseData.push({\n item: spec[specKey].name,\n index: index + j,\n value: String(data[key][j])\n })\n }\n }\n }\n } else {\n parseData.push({\n item: key,\n index,\n value: String(data[key])\n })\n }\n }\n if (j !== 0) {\n index = index + j\n } else {\n index = index + 1\n }\n }\n}\n\n/** @todo considering trasformation in lambda, as massive dataset */\nfunction pivotData(rows) {\n let parsedData = []\n let index = 1\n for (let i = 0; i < rows.length; i++) {\n let j = 0\n const data = JSON.parse(rows[i].data)\n const spec = JSON.parse(rows[i].spec)\n\n for (let key in data) {\n /** @todo rule to display or not, about unspecified spec */\n const value = data[key]\n !spec[key]?.hidden &&\n parsedData.push({\n item: spec[key]?.name || key,\n index,\n value: Array.isArray(value) ? value.join(', ') : value\n })\n }\n if (j !== 0) {\n index = index + j\n } else {\n index = index + 1\n }\n }\n\n return parsedData\n}\n\nfunction parseJsonDataField(rows) {\n let parsedData = []\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i]\n const data = JSON.parse(row.data)\n for (let key in data) {\n if (Array.isArray(data[key])) {\n data[key] = data[key].toString()\n }\n }\n delete row.data\n parsedData.push({ ...row, ...data })\n }\n\n return parsedData\n}\n\nconst athenaClient = new AthenaController()\n\nasync function queryAthena(params) {\n const { table, domain, datasetId, startDate, endDate, workShift, timezone } = params\n const queryData = {\n sql: `SELECT ds.name, ds.description, ds.data, dsh.data_items as spec, ds.workdate, ds.workshift,\n DATE_FORMAT(\n FROM_UNIXTIME(collected_at / 1000 / 1000) AT TIME ZONE '${timezone || 'UTC'}', \n '%Y-%m-%d %H:%i:%s'\n ) AS dscollected_at\n FROM ${table} ds\n JOIN data_set_histories dsh \n ON (ds.datasetid = dsh.original_id\n and ds.data_set_version = dsh.version)\n WHERE ds.domain='${domain}' \n AND ds.datasetid = '${datasetId}'\n AND ds.workdate >= '${startDate}'\n AND ds.workdate <= '${endDate}'\n ${workShift ? \"AND ds.workshift = '\" + workShift + \"'\" : ''}\n ORDER BY ds.collected_at`,\n db: DATABASE\n }\n // and json_extract_scalar(data, '$.dauid') = 'A8032AD81730'\n\n return await athenaClient.query(queryData)\n}\n\nexport async function renderJasperReport(context: any) {\n const {\n state: { domain },\n query\n } = context\n\n const template = await STORAGE.readFile(query['reportTemplate'] || 'dynamic_header_sample.jrxml', 'utf-8')\n let templateType = query['templateType'] || 'crosstab'\n let parsedData = []\n\n // @todo: get dataset timezone\n /**\n * const variables = await gql(dataSet(id:${dataSetId}) {\n * name, description, partition_keys, timezone\n * })\n */\n\n query['domain'] = domain?.subdomain\n query['timezone'] = domain?.timezone\n const queryResult = await queryAthena(query)\n const rows = queryResult.Items\n\n if (!rows.length) {\n return '<h3>Not found result.</h3>'\n } else {\n const firstRow = rows[0]\n // uses the first row values as data-set has no history data.\n const parameters = {\n name: firstRow.name,\n description: firstRow.description,\n ...query\n }\n\n if (templateType === 'crosstab') {\n parsedData = pivotData(rows)\n } else {\n parsedData = parseJsonDataField(rows)\n }\n\n const formData = new FormData()\n formData.append('template', template)\n formData.append('jsonString', JSON.stringify(parsedData))\n formData.append('parameters', JSON.stringify(parameters))\n\n const { reportView } = query\n const subpath = reportView ? reportView.split('/').filter(x => x).join('/') : ''\n const reportUrl = `${PROTOCOL || 'http'}://${HOST}:${PORT}/${subpath}`\n const response = await fetch(reportUrl, {\n method: 'POST',\n body: formData\n })\n\n return await response.text()\n }\n}\n"]}
1
+ {"version":3,"file":"jasper-report.js","sourceRoot":"","sources":["../../server/controllers/jasper-report.ts"],"names":[],"mappings":"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","sourcesContent":["import FormData from 'form-data'\nimport fetch from 'node-fetch'\n\nimport { getEndpointUrl } from '../utils/config-resolver'\n\nimport { STORAGE } from '@things-factory/attachment-base'\nimport { AthenaController } from '@things-factory/aws-base'\nimport { config } from '@things-factory/env'\n\nconst dataReportConfig = config.get('dataReport')\nconst {\n jasper: {\n endpoint: ENDPOINT,\n datasource: { database: DATABASE }\n }\n} = dataReportConfig || {\n jasper: {\n endpoint: {},\n datasource: {}\n }\n}\n\nfunction transformValuesToRows(queryResult) {\n var parseData = []\n let index = 1\n for (let i = 0; i < queryResult.Items.length; i++) {\n var j = 0\n const data = JSON.parse(queryResult.Items[i].data)\n const spec = JSON.parse(queryResult.Items[i].spec)\n\n for (let key in data) {\n if (Array.isArray(data[key])) {\n for (j = 0; j < data[key].length; j++) {\n for (let specKey in spec) {\n if (key === specKey) {\n parseData.push({\n item: spec[specKey].name,\n index: index + j,\n value: String(data[key][j])\n })\n }\n }\n }\n } else {\n parseData.push({\n item: key,\n index,\n value: String(data[key])\n })\n }\n }\n if (j !== 0) {\n index = index + j\n } else {\n index = index + 1\n }\n }\n}\n\n/** @todo considering trasformation in lambda, as massive dataset */\nfunction pivotData(rows) {\n let parsedData = []\n let index = 1\n for (let i = 0; i < rows.length; i++) {\n let j = 0\n const data = JSON.parse(rows[i].data)\n const spec = JSON.parse(rows[i].spec)\n\n for (let key in data) {\n /** @todo rule to display or not, about unspecified spec */\n const value = data[key]\n !spec[key]?.hidden &&\n parsedData.push({\n item: spec[key]?.name || key,\n index,\n value: Array.isArray(value) ? value.join(', ') : value\n })\n }\n if (j !== 0) {\n index = index + j\n } else {\n index = index + 1\n }\n }\n\n return parsedData\n}\n\nfunction parseJsonDataField(rows) {\n let parsedData = []\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i]\n const data = JSON.parse(row.data)\n for (let key in data) {\n if (Array.isArray(data[key])) {\n data[key] = data[key].toString()\n }\n }\n delete row.data\n parsedData.push({ ...row, ...data })\n }\n\n return parsedData\n}\n\nconst athenaClient = new AthenaController()\n\nasync function queryAthena(params) {\n const { table, domain, datasetId, startDate, endDate, workShift, timezone } = params\n const queryData = {\n sql: `SELECT ds.name, ds.description, ds.data, dsh.data_items as spec, ds.workdate, ds.workshift,\n DATE_FORMAT(\n FROM_UNIXTIME(collected_at / 1000 / 1000) AT TIME ZONE '${timezone || 'UTC'}', \n '%Y-%m-%d %H:%i:%s'\n ) AS dscollected_at\n FROM ${table} ds\n JOIN data_set_histories dsh \n ON (ds.datasetid = dsh.original_id\n and ds.data_set_version = dsh.version)\n WHERE ds.domain='${domain}' \n AND ds.datasetid = '${datasetId}'\n AND ds.workdate >= '${startDate}'\n AND ds.workdate <= '${endDate}'\n ${workShift ? \"AND ds.workshift = '\" + workShift + \"'\" : ''}\n ORDER BY ds.collected_at`,\n db: DATABASE\n }\n // and json_extract_scalar(data, '$.dauid') = 'A8032AD81730'\n\n return await athenaClient.query(queryData)\n}\n\nexport async function renderJasperReport(context: any) {\n const {\n state: { domain },\n query\n } = context\n\n const template = await STORAGE.readFile(query['reportTemplate'] || 'dynamic_header_sample.jrxml', 'utf-8')\n let templateType = query['templateType'] || 'crosstab'\n let parsedData = []\n\n // @todo: get dataset timezone\n /**\n * const variables = await gql(dataSet(id:${dataSetId}) {\n * name, description, partition_keys, timezone\n * })\n */\n\n query['domain'] = domain?.subdomain\n query['timezone'] = domain?.timezone\n const queryResult = await queryAthena(query)\n const rows = queryResult.Items\n\n if (!rows.length) {\n return '<h3>Not found result.</h3>'\n } else {\n const firstRow = rows[0]\n // uses the first row values as data-set has no history data.\n const parameters = {\n name: firstRow.name,\n description: firstRow.description,\n ...query\n }\n\n if (templateType === 'crosstab') {\n parsedData = pivotData(rows)\n } else {\n parsedData = parseJsonDataField(rows)\n }\n\n const formData = new FormData()\n formData.append('template', template)\n formData.append('jsonString', JSON.stringify(parsedData))\n formData.append('parameters', JSON.stringify(parameters))\n\n const { reportView } = query\n const url = getEndpointUrl(ENDPOINT, reportView)\n const response = await fetch(url, {\n method: 'POST',\n body: formData\n })\n\n return await response.text()\n }\n}\n"]}
@@ -2,10 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.renderShinyReport = void 0;
4
4
  const env_1 = require("@things-factory/env");
5
+ const config_resolver_1 = require("../utils/config-resolver");
5
6
  const querystring = require('querystring');
6
7
  const debug = require('debug')('things-factory:dataset:shiny-report');
7
8
  const dataReportConfig = env_1.config.get('dataReport');
8
- const { shiny: { endpoint: { protocol: PROTOCOL, host: HOST, port: PORT }, datasource: { database: DATABASE } } } = Object.assign({
9
+ const { shiny: { endpoint: ENDPOINT, datasource: { database: DATABASE } } } = Object.assign({
9
10
  shiny: {
10
11
  endpoint: {},
11
12
  datasource: {}
@@ -23,17 +24,13 @@ async function renderShinyReport(context) {
23
24
  // ...{ database: DATABASE,
24
25
  // domain: domain?.subdomain }
25
26
  // })
26
- const protocol = `${PROTOCOL || 'http'}://`;
27
- const host = `${HOST}:${PORT}/`;
28
27
  const subpath = (query === null || query === void 0 ? void 0 : query.reportView) || '';
29
28
  if (!subpath) {
30
29
  return context.body = '';
31
30
  }
32
- // filter not empty and join '/'
33
- const url = host.split('/').concat(subpath.split('/'))
34
- .filter(x => x).join('/');
31
+ const url = (0, config_resolver_1.getEndpointUrl)(ENDPOINT, subpath);
35
32
  // const reportUrl = `${protocol}${url}/?params=${jsonParams}`
36
- const reportUrl = `${protocol}${url}/?${urlParams}`;
33
+ const reportUrl = `${url}/?${urlParams}`;
37
34
  response.redirect(reportUrl);
38
35
  }
39
36
  catch (ex) {
@@ -1 +1 @@
1
- {"version":3,"file":"shiny-report.js","sourceRoot":"","sources":["../../server/controllers/shiny-report.ts"],"names":[],"mappings":";;;AAEA,6CAA4C;AAE5C,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;AAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,qCAAqC,CAAC,CAAA;AACrE,MAAM,gBAAgB,GAAG,YAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;AACjD,MAAM,EACJ,KAAK,EAAE,EACL,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EACxD,UAAU,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EACnC,EACF,GAAG,MAAM,CAAC,MAAM,CAAC;IAChB,KAAK,EAAE;QACL,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE;KACf;CAAC,EAAE,gBAAgB,CAAC,CAAA;AAGhB,KAAK,UAAU,iBAAiB,CAAC,OAAY;IAClD,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAA;IAEhC,IAAI;QACF,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAC7E,MAAM,EACJ,KAAK,EAAE,EAAE,MAAM,EAAE,EACjB,KAAK,EACL,QAAQ,GACT,GAAG,OAAO,CAAA;QAEX,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,+BACrC,KAAK,IACF,KAAK,GACL,EAAE,QAAQ,EAAE,QAAQ;YACvB,MAAM,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,EAAE,EAC3B,CAAA;QAEF,uCAAuC;QACvC,eAAe;QACf,+BAA+B;QAC/B,gCAAgC;QAChC,KAAK;QAEL,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,MAAM,KAAK,CAAA;QAC3C,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,CAAA;QAC/B,MAAM,OAAO,GAAG,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,KAAI,EAAE,CAAA;QAEvC,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,OAAO,CAAC,IAAI,GAAG,EAAE,CAAA;SACzB;QAED,gCAAgC;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;aACnD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC3B,8DAA8D;QAC9D,MAAM,SAAS,GAAG,GAAG,QAAQ,GAAG,GAAG,KAAK,SAAS,EAAE,CAAA;QAEnD,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;KAC7B;IAAC,OAAM,EAAE,EAAE;QACV,OAAO,CAAC,IAAI,GAAG,UAAU,EAAE,CAAC,OAAO,QAAQ,CAAA;KAC5C;AAEH,CAAC;AA3CD,8CA2CC","sourcesContent":["import FormData from 'form-data'\nimport fetch from 'node-fetch'\nimport { config } from '@things-factory/env'\n\nconst querystring = require('querystring')\nconst debug = require('debug')('things-factory:dataset:shiny-report')\nconst dataReportConfig = config.get('dataReport')\nconst {\n shiny: {\n endpoint: { protocol: PROTOCOL, host: HOST, port: PORT },\n datasource: { database: DATABASE }\n }\n} = Object.assign({\n shiny: {\n endpoint: {},\n datasource: {}\n }}, dataReportConfig)\n\n\nexport async function renderShinyReport(context: any) {\n debug('render:context', context)\n \n try {\n const { access_token: token } = querystring.parse(context.header.cookie, ';')\n const {\n state: { domain },\n query,\n response,\n } = context\n \n const urlParams = querystring.stringify({ \n token,\n ...query, \n ...{ database: DATABASE, \n domain: domain?.subdomain }\n })\n \n // const jsonParams = JSON.stringify({ \n // ...query, \n // ...{ database: DATABASE, \n // domain: domain?.subdomain }\n // })\n \n const protocol = `${PROTOCOL || 'http'}://`\n const host = `${HOST}:${PORT}/`\n const subpath = query?.reportView || ''\n\n if (!subpath) {\n return context.body = ''\n }\n\n // filter not empty and join '/'\n const url = host.split('/').concat(subpath.split('/'))\n .filter(x => x).join('/')\n // const reportUrl = `${protocol}${url}/?params=${jsonParams}`\n const reportUrl = `${protocol}${url}/?${urlParams}`\n\n response.redirect(reportUrl)\n } catch(ex) {\n context.body = `Error: ${ex.message} || ''`\n }\n \n}\n"]}
1
+ {"version":3,"file":"shiny-report.js","sourceRoot":"","sources":["../../server/controllers/shiny-report.ts"],"names":[],"mappings":";;;AAEA,6CAA4C;AAC5C,8DAAyD;AAEzD,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;AAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,qCAAqC,CAAC,CAAA;AACrE,MAAM,gBAAgB,GAAG,YAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;AACjD,MAAM,EACJ,KAAK,EAAE,EACL,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EACnC,EACF,GAAG,MAAM,CAAC,MAAM,CAAC;IAChB,KAAK,EAAE;QACL,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE;KACf;CAAC,EAAE,gBAAgB,CAAC,CAAA;AAGhB,KAAK,UAAU,iBAAiB,CAAC,OAAY;IAClD,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAA;IAEhC,IAAI;QACF,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAC7E,MAAM,EACJ,KAAK,EAAE,EAAE,MAAM,EAAE,EACjB,KAAK,EACL,QAAQ,GACT,GAAG,OAAO,CAAA;QAEX,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,+BACrC,KAAK,IACF,KAAK,GACL,EAAE,QAAQ,EAAE,QAAQ;YACvB,MAAM,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,EAAE,EAC3B,CAAA;QAEF,uCAAuC;QACvC,eAAe;QACf,+BAA+B;QAC/B,gCAAgC;QAChC,KAAK;QAEL,MAAM,OAAO,GAAG,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,KAAI,EAAE,CAAA;QAEvC,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,OAAO,CAAC,IAAI,GAAG,EAAE,CAAA;SACzB;QAED,MAAM,GAAG,GAAG,IAAA,gCAAc,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC7C,8DAA8D;QAC9D,MAAM,SAAS,GAAG,GAAG,GAAG,KAAK,SAAS,EAAE,CAAA;QAExC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;KAC7B;IAAC,OAAM,EAAE,EAAE;QACV,OAAO,CAAC,IAAI,GAAG,UAAU,EAAE,CAAC,OAAO,QAAQ,CAAA;KAC5C;AAEH,CAAC;AAvCD,8CAuCC","sourcesContent":["import FormData from 'form-data'\nimport fetch from 'node-fetch'\nimport { config } from '@things-factory/env'\nimport { getEndpointUrl } from '../utils/config-resolver'\n\nconst querystring = require('querystring')\nconst debug = require('debug')('things-factory:dataset:shiny-report')\nconst dataReportConfig = config.get('dataReport')\nconst {\n shiny: {\n endpoint: ENDPOINT,\n datasource: { database: DATABASE }\n }\n} = Object.assign({\n shiny: {\n endpoint: {},\n datasource: {}\n }}, dataReportConfig)\n\n\nexport async function renderShinyReport(context: any) {\n debug('render:context', context)\n \n try {\n const { access_token: token } = querystring.parse(context.header.cookie, ';')\n const {\n state: { domain },\n query,\n response,\n } = context\n \n const urlParams = querystring.stringify({ \n token,\n ...query, \n ...{ database: DATABASE, \n domain: domain?.subdomain }\n })\n \n // const jsonParams = JSON.stringify({ \n // ...query, \n // ...{ database: DATABASE, \n // domain: domain?.subdomain }\n // })\n \n const subpath = query?.reportView || ''\n\n if (!subpath) {\n return context.body = ''\n }\n\n const url = getEndpointUrl(ENDPOINT, subpath)\n // const reportUrl = `${protocol}${url}/?params=${jsonParams}`\n const reportUrl = `${url}/?${urlParams}`\n\n response.redirect(reportUrl)\n } catch(ex) {\n context.body = `Error: ${ex.message} || ''`\n }\n \n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"routes.js","sourceRoot":"","sources":["../server/routes.ts"],"names":[],"mappings":"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","sourcesContent":["import { getConnection } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\n\nimport { createDataSample } from './controllers/create-data-sample'\nimport { renderJasperReport } from './controllers/jasper-report'\nimport { renderShinyReport } from './controllers/shiny-report'\nimport { DataSensor } from './service/data-sensor/data-sensor'\n\nprocess.on('bootstrap-module-global-public-route' as any, (app, globalPublicRouter) => {\n /*\n * can add global public routes to application (auth not required, tenancy not required)\n *\n * ex) routes.get('/path', async(context, next) => {})\n * ex) routes.post('/path', async(context, next) => {})\n */\n\n globalPublicRouter.post('/sensor-data', async (context, next) => {\n // 데이타 검증\n const { deviceId, data, rawData, timestamp = Date.now() } = context.request.body\n if (!deviceId || !data) {\n throw new Error(`deviceId(${deviceId}) and data(${JSON.stringify(data)}) properties are mandatory`)\n }\n\n // make new data-sample\n await getConnection().transaction(async tx => {\n // find sensor through deviceId\n const sensor = await tx.getRepository(DataSensor).findOne({\n where: { deviceId },\n relations: ['domain', 'appliance', 'dataSet']\n })\n\n if (!sensor) {\n throw new Error(`Sensor having given deviceId(${deviceId}) not found`)\n }\n\n if (!sensor.active) {\n throw new Error(`State of the sensor given deviceId(${deviceId}) is not active`)\n }\n\n if (!sensor.appliance) {\n throw new Error(`Appliance of the sensor given deviceId(${deviceId}) is not set up`)\n }\n\n if (!sensor.dataSet) {\n throw new Error(`DataSet of the sensor given deviceId(${deviceId}) is not set up`)\n }\n\n const domain = sensor.domain\n const dataSet = sensor.dataSet\n const user: User = await tx.getRepository(User).findOne({\n where: {\n reference: sensor.appliance.id,\n userType: 'appliance'\n }\n })\n\n return await createDataSample(\n {\n dataSet,\n data,\n rawData,\n source: deviceId,\n collectedAt: new Date(timestamp)\n },\n { state: { domain, user, tx } }\n )\n })\n\n context.status = 200\n })\n})\n\nprocess.on('bootstrap-module-global-private-route' as any, (app, globalPrivateRouter) => {\n /*\n * can add global private routes to application (auth required, tenancy not required)\n */\n})\n\nprocess.on('bootstrap-module-domain-public-route' as any, (app, domainPublicRouter) => {\n /*\n * can add domain public routes to application (auth not required, tenancy required)\n */\n})\n\nprocess.on('bootstrap-module-domain-private-route' as any, (app, domainPrivateRouter) => {\n /*\n * can add domain private routes to application (auth required, tenancy required)\n */\n domainPrivateRouter.get('/data-report/jasper', async (context, next) => {\n context.body = await renderJasperReport(context)\n })\n\n domainPrivateRouter.get('/data-report/shiny', async (context, next) => {\n await renderShinyReport(context)\n })\n\n domainPrivateRouter.get('/data-report/:reportType', async (context, next) => {\n let { reportType } = context.params\n context.body = `${reportType} Not Implemented.`\n })\n})\n"]}
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../server/routes.ts"],"names":[],"mappings":"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","sourcesContent":["import { getConnection } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\n\nimport { createDataSample } from './controllers/create-data-sample'\nimport { renderJasperReport } from './controllers/jasper-report'\nimport { renderShinyReport } from './controllers/shiny-report'\nimport { DataSensor } from './service/data-sensor/data-sensor'\n\nprocess.on('bootstrap-module-global-public-route' as any, (app, globalPublicRouter) => {\n /*\n * can add global public routes to application (auth not required, tenancy not required)\n *\n * ex) routes.get('/path', async(context, next) => {})\n * ex) routes.post('/path', async(context, next) => {})\n */\n\n globalPublicRouter.post('/sensor-data', async (context, next) => {\n // 데이타 검증\n const { deviceId, data, rawData, timestamp = Date.now() } = context.request.body\n if (!deviceId || !data) {\n throw new Error(`deviceId(${deviceId}) and data(${JSON.stringify(data)}) properties are mandatory`)\n }\n\n // make new data-sample\n await getConnection().transaction(async tx => {\n // find sensor through deviceId\n const sensor = await tx.getRepository(DataSensor).findOne({\n where: { deviceId },\n relations: ['domain', 'appliance', 'dataSet']\n })\n\n if (!sensor) {\n throw new Error(`Sensor having given deviceId(${deviceId}) not found`)\n }\n\n if (!sensor.active) {\n throw new Error(`State of the sensor given deviceId(${deviceId}) is not active`)\n }\n\n if (!sensor.appliance) {\n throw new Error(`Appliance of the sensor given deviceId(${deviceId}) is not set up`)\n }\n\n if (!sensor.dataSet) {\n throw new Error(`DataSet of the sensor given deviceId(${deviceId}) is not set up`)\n }\n\n const domain = sensor.domain\n const dataSet = sensor.dataSet\n const user: User = await tx.getRepository(User).findOne({\n where: {\n reference: sensor.appliance.id,\n userType: 'appliance'\n }\n })\n\n return await createDataSample(\n {\n dataSet,\n data,\n rawData,\n source: deviceId,\n collectedAt: new Date(timestamp)\n },\n { state: { domain, user, tx } }\n )\n })\n\n context.status = 200\n })\n})\n\nprocess.on('bootstrap-module-global-private-route' as any, (app, globalPrivateRouter) => {\n /*\n * can add global private routes to application (auth required, tenancy not required)\n */\n})\n\nprocess.on('bootstrap-module-domain-public-route' as any, (app, domainPublicRouter) => {\n /*\n * can add domain public routes to application (auth not required, tenancy required)\n */\n})\n\nprocess.on('bootstrap-module-domain-private-route' as any, (app, domainPrivateRouter) => {\n /*\n * can add domain private routes to application (auth required, tenancy required)\n */\n domainPrivateRouter.get('/data-report/jasper', async (context, next) => {\n context.body = await renderJasperReport(context)\n })\n\n domainPrivateRouter.get('/data-report/shiny', async (context, next) => {\n await renderShinyReport(context)\n })\n\n domainPrivateRouter.get('/data-report/:reportType', async (context, next) => {\n let { reportType } = context.params\n context.body = `${reportType} Not Implemented.`\n })\n \n})\n"]}
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataArchiveMutation = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const i18next_1 = tslib_1.__importDefault(require("i18next"));
6
+ const node_fetch_1 = tslib_1.__importDefault(require("node-fetch"));
7
+ const type_graphql_1 = require("type-graphql");
8
+ const typeorm_1 = require("typeorm");
9
+ const config_resolver_1 = require("../../utils/config-resolver");
10
+ const data_archive_1 = require("./data-archive");
11
+ const data_archive_type_1 = require("./data-archive-type");
12
+ const { config } = require('@things-factory/env');
13
+ const crypto = require('crypto');
14
+ let DataArchiveMutation = class DataArchiveMutation {
15
+ /**
16
+ * It may use 'func-[dev]-data-set-download' in https://github.com/operatochef/serverless
17
+ * This function requests athena query and save the result as csv.gz in s3
18
+ */
19
+ async generatePresignedUrl(patch, context) {
20
+ const { domain, user, tx, notify, lng } = context.state;
21
+ // const dataArchiveRepo = tx.getRepository(DataArchive)
22
+ const t = i18next_1.default.getFixedT(lng, 'translations');
23
+ const { dataset: { endpoint, datasource: { database } } } = config.get('dataArchive');
24
+ const body = JSON.stringify(Object.assign({ domain: domain === null || domain === void 0 ? void 0 : domain.subdomain, database }, patch === null || patch === void 0 ? void 0 : patch.requestParams));
25
+ const url = (0, config_resolver_1.getEndpointUrl)(endpoint);
26
+ const fetched = await (0, node_fetch_1.default)(`${url}`, {
27
+ method: 'POST',
28
+ headers: { 'Content-Type': 'application/json' },
29
+ body
30
+ });
31
+ const message = {
32
+ receivers: [user.email],
33
+ mode: 'in-app',
34
+ title: '',
35
+ body: '',
36
+ url: ''
37
+ };
38
+ if (fetched.ok) {
39
+ const response = await fetched.json();
40
+ patch.downloadUrl = response['presignedUrl'];
41
+ patch.status = 'done';
42
+ message['title'] = t('title.data-archive downloads ready');
43
+ message['url'] = patch.downloadUrl;
44
+ }
45
+ else {
46
+ const error = await fetched.text();
47
+ console.log(error);
48
+ patch.status = 'error';
49
+ message['title'] = t('title.data-archive request failed');
50
+ // may not user-friendly message
51
+ message['body'] = error;
52
+ }
53
+ const result = await this.updateDataArchive(patch.id, patch, context);
54
+ notify && notify(message);
55
+ return result;
56
+ }
57
+ async createDataArchive(dataArchive, context) {
58
+ const { domain, user, tx } = context.state;
59
+ const dataArchiveRepo = tx.getRepository(data_archive_1.DataArchive);
60
+ const result = await dataArchiveRepo.save(Object.assign(Object.assign({}, dataArchive), { domain, creator: user, updater: user }));
61
+ return result;
62
+ }
63
+ async updateDataArchive(id, patch, context) {
64
+ const { domain, user, tx } = context.state;
65
+ const dataArchiveRepo = tx.getRepository(data_archive_1.DataArchive);
66
+ const dataArchive = await dataArchiveRepo.findOne({
67
+ where: { domain: { id: domain.id }, id },
68
+ relations: ['domain', 'creator', 'updater']
69
+ });
70
+ const result = await dataArchiveRepo.save(Object.assign(Object.assign(Object.assign({}, dataArchive), patch), { updater: user }));
71
+ return result;
72
+ }
73
+ async updateMultipleDataArchive(patches, context) {
74
+ const { domain, user, tx } = context.state;
75
+ const dataArchiveRepo = tx.getRepository(data_archive_1.DataArchive);
76
+ let results = [];
77
+ const _createRecords = patches.filter((patch) => patch.cuFlag.toUpperCase() === '+');
78
+ const _updateRecords = patches.filter((patch) => patch.cuFlag.toUpperCase() === 'M');
79
+ if (_createRecords.length > 0) {
80
+ const cuFlag = '+';
81
+ for (let i = 0; i < _createRecords.length; i++) {
82
+ const newRecord = _createRecords[i];
83
+ const result = await dataArchiveRepo.save(Object.assign(Object.assign({}, newRecord), { domain, creator: user, updater: user }));
84
+ results.push(Object.assign(Object.assign({}, result), { cuFlag }));
85
+ }
86
+ }
87
+ if (_updateRecords.length > 0) {
88
+ const cuFlag = 'M';
89
+ for (let i = 0; i < _updateRecords.length; i++) {
90
+ const newRecord = _updateRecords[i];
91
+ const dataArchive = await dataArchiveRepo.findOne(newRecord.id, {
92
+ relations: ['domain', 'creator', 'updater']
93
+ });
94
+ const result = await dataArchiveRepo.save(Object.assign(Object.assign(Object.assign({}, dataArchive), newRecord), { updater: user }));
95
+ results.push(Object.assign(Object.assign({}, result), { cuFlag }));
96
+ }
97
+ }
98
+ return results;
99
+ }
100
+ async deleteDataArchive(id, context) {
101
+ const { domain, tx } = context.state;
102
+ await tx.getRepository(data_archive_1.DataArchive).delete({ domain, id });
103
+ return true;
104
+ }
105
+ async deleteDataArchives(ids, context) {
106
+ const { domain, tx } = context.state;
107
+ await tx.getRepository(data_archive_1.DataArchive).delete({
108
+ domain,
109
+ id: (0, typeorm_1.In)(ids)
110
+ });
111
+ return true;
112
+ }
113
+ async importDataArchives(dataArchives, context) {
114
+ const { domain, tx } = context.state;
115
+ const dataArchiveRepo = tx.getRepository(data_archive_1.DataArchive);
116
+ await Promise.all(dataArchives.map(async (dataArchive) => {
117
+ const createdDataArchive = await dataArchiveRepo.save(Object.assign({ domain }, dataArchive));
118
+ }));
119
+ return true;
120
+ }
121
+ async copyDataArchives(ids, context) {
122
+ const { domain, user, tx } = context.state;
123
+ const dataArchiveRepo = tx.getRepository(data_archive_1.DataArchive);
124
+ const originals = await dataArchiveRepo.find({
125
+ where: {
126
+ id: (0, typeorm_1.In)(ids),
127
+ domain: { id: domain.id }
128
+ },
129
+ relations: ['domain']
130
+ });
131
+ if (originals.length == 0) {
132
+ return [];
133
+ }
134
+ var newCopys = originals.map(dataArchive => {
135
+ let dataArchiveId = crypto.randomUUID();
136
+ return Object.assign(Object.assign({}, dataArchive), { id: dataArchiveId, domain, creator: user, updater: user, updatedAt: undefined, createdAt: undefined });
137
+ });
138
+ var copiedDataArchives = await dataArchiveRepo.save(newCopys);
139
+ return copiedDataArchives;
140
+ }
141
+ };
142
+ tslib_1.__decorate([
143
+ (0, type_graphql_1.Directive)('@privilege(category: "data-archive", privilege: "mutation", domainOwnerGranted: true)'),
144
+ (0, type_graphql_1.Directive)('@transaction'),
145
+ (0, type_graphql_1.Mutation)(returns => data_archive_1.DataArchive, { description: 'To create new DataArchive' }),
146
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('patch')),
147
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
148
+ tslib_1.__metadata("design:type", Function),
149
+ tslib_1.__metadata("design:paramtypes", [data_archive_type_1.DataArchivePatch, Object]),
150
+ tslib_1.__metadata("design:returntype", Promise)
151
+ ], DataArchiveMutation.prototype, "generatePresignedUrl", null);
152
+ tslib_1.__decorate([
153
+ (0, type_graphql_1.Directive)('@privilege(category: "data-archive", privilege: "mutation", domainOwnerGranted: true)'),
154
+ (0, type_graphql_1.Directive)('@transaction'),
155
+ (0, type_graphql_1.Mutation)(returns => data_archive_1.DataArchive, { description: 'To create new DataArchive' }),
156
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('dataArchive')),
157
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
158
+ tslib_1.__metadata("design:type", Function),
159
+ tslib_1.__metadata("design:paramtypes", [data_archive_type_1.NewDataArchive, Object]),
160
+ tslib_1.__metadata("design:returntype", Promise)
161
+ ], DataArchiveMutation.prototype, "createDataArchive", null);
162
+ tslib_1.__decorate([
163
+ (0, type_graphql_1.Directive)('@privilege(category: "data-archive", privilege: "mutation", domainOwnerGranted: true)'),
164
+ (0, type_graphql_1.Directive)('@transaction'),
165
+ (0, type_graphql_1.Mutation)(returns => data_archive_1.DataArchive, { description: 'To modify DataArchive information' }),
166
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
167
+ tslib_1.__param(1, (0, type_graphql_1.Arg)('patch')),
168
+ tslib_1.__param(2, (0, type_graphql_1.Ctx)()),
169
+ tslib_1.__metadata("design:type", Function),
170
+ tslib_1.__metadata("design:paramtypes", [String, data_archive_type_1.DataArchivePatch, Object]),
171
+ tslib_1.__metadata("design:returntype", Promise)
172
+ ], DataArchiveMutation.prototype, "updateDataArchive", null);
173
+ tslib_1.__decorate([
174
+ (0, type_graphql_1.Directive)('@privilege(category: "data-archive", privilege: "mutation", domainOwnerGranted: true)'),
175
+ (0, type_graphql_1.Directive)('@transaction'),
176
+ (0, type_graphql_1.Mutation)(returns => [data_archive_1.DataArchive], { description: "To modify multiple DataArchives' information" }),
177
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('patches', type => [data_archive_type_1.DataArchivePatch])),
178
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
179
+ tslib_1.__metadata("design:type", Function),
180
+ tslib_1.__metadata("design:paramtypes", [Array, Object]),
181
+ tslib_1.__metadata("design:returntype", Promise)
182
+ ], DataArchiveMutation.prototype, "updateMultipleDataArchive", null);
183
+ tslib_1.__decorate([
184
+ (0, type_graphql_1.Directive)('@privilege(category: "data-archive", privilege: "mutation", domainOwnerGranted: true)'),
185
+ (0, type_graphql_1.Directive)('@transaction'),
186
+ (0, type_graphql_1.Mutation)(returns => Boolean, { description: 'To delete DataArchive' }),
187
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
188
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
189
+ tslib_1.__metadata("design:type", Function),
190
+ tslib_1.__metadata("design:paramtypes", [String, Object]),
191
+ tslib_1.__metadata("design:returntype", Promise)
192
+ ], DataArchiveMutation.prototype, "deleteDataArchive", null);
193
+ tslib_1.__decorate([
194
+ (0, type_graphql_1.Directive)('@privilege(category: "data-archive", privilege: "mutation", domainOwnerGranted: true)'),
195
+ (0, type_graphql_1.Directive)('@transaction'),
196
+ (0, type_graphql_1.Mutation)(returns => Boolean, { description: 'To delete multiple dataArchives' }),
197
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('ids', type => [String])),
198
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
199
+ tslib_1.__metadata("design:type", Function),
200
+ tslib_1.__metadata("design:paramtypes", [Array, Object]),
201
+ tslib_1.__metadata("design:returntype", Promise)
202
+ ], DataArchiveMutation.prototype, "deleteDataArchives", null);
203
+ tslib_1.__decorate([
204
+ (0, type_graphql_1.Directive)('@privilege(category: "data-archive", privilege: "mutation", domainOwnerGranted: true)'),
205
+ (0, type_graphql_1.Directive)('@transaction'),
206
+ (0, type_graphql_1.Mutation)(returns => Boolean, { description: 'To import multiple data-archives' }),
207
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('dataArchives', type => [data_archive_type_1.DataArchivePatch])),
208
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
209
+ tslib_1.__metadata("design:type", Function),
210
+ tslib_1.__metadata("design:paramtypes", [Array, Object]),
211
+ tslib_1.__metadata("design:returntype", Promise)
212
+ ], DataArchiveMutation.prototype, "importDataArchives", null);
213
+ tslib_1.__decorate([
214
+ (0, type_graphql_1.Directive)('@privilege(category: "data-archive", privilege: "mutation", domainOwnerGranted: true)'),
215
+ (0, type_graphql_1.Directive)('@transaction'),
216
+ (0, type_graphql_1.Mutation)(returns => [data_archive_1.DataArchive], { description: 'To copy multiple data-archives' }),
217
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('ids', type => [String])),
218
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
219
+ tslib_1.__metadata("design:type", Function),
220
+ tslib_1.__metadata("design:paramtypes", [Array, Object]),
221
+ tslib_1.__metadata("design:returntype", Promise)
222
+ ], DataArchiveMutation.prototype, "copyDataArchives", null);
223
+ DataArchiveMutation = tslib_1.__decorate([
224
+ (0, type_graphql_1.Resolver)(data_archive_1.DataArchive)
225
+ ], DataArchiveMutation);
226
+ exports.DataArchiveMutation = DataArchiveMutation;
227
+ //# sourceMappingURL=data-archive-mutation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-archive-mutation.js","sourceRoot":"","sources":["../../../server/service/data-archive/data-archive-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import i18next from 'i18next'\nimport fetch from 'node-fetch'\nimport {\n Arg,\n Ctx,\n Directive,\n Mutation,\n Resolver\n} from 'type-graphql'\nimport { In } from 'typeorm'\n\nimport { getEndpointUrl } from '../../utils/config-resolver'\nimport { DataArchive } from './data-archive'\nimport {\n DataArchivePatch,\n NewDataArchive\n} from './data-archive-type'\n\nconst { config } = require('@things-factory/env')\nconst crypto = require('crypto')\n\n@Resolver(DataArchive)\nexport class DataArchiveMutation {\n /**\n * It may use 'func-[dev]-data-set-download' in https://github.com/operatochef/serverless\n * This function requests athena query and save the result as csv.gz in s3\n */\n @Directive('@privilege(category: \"data-archive\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => DataArchive, { description: 'To create new DataArchive' })\n async generatePresignedUrl(\n @Arg('patch') patch: DataArchivePatch,\n @Ctx() context: ResolverContext\n ): Promise<DataArchive> {\n const { domain, user, tx, notify, lng } = context.state\n // const dataArchiveRepo = tx.getRepository(DataArchive)\n const t = i18next.getFixedT(lng, 'translations')\n const {\n dataset: {\n endpoint,\n datasource: { database }\n }\n } = config.get('dataArchive')\n\n const body = JSON.stringify({\n domain: domain?.subdomain,\n database,\n ...patch?.requestParams\n })\n\n const url = getEndpointUrl(endpoint)\n\n const fetched = await fetch(`${url}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body\n })\n\n const message = {\n receivers: [user.email],\n mode: 'in-app',\n title: '',\n body: '',\n url: ''\n }\n\n if (fetched.ok) {\n const response = await fetched.json()\n patch.downloadUrl = response['presignedUrl']\n patch.status = 'done'\n\n message['title'] = t('title.data-archive downloads ready')\n message['url'] = patch.downloadUrl\n } else {\n const error = await fetched.text()\n console.log(error)\n patch.status = 'error'\n\n message['title'] = t('title.data-archive request failed')\n // may not user-friendly message\n message['body'] = error\n }\n\n const result = await this.updateDataArchive(patch.id, patch, context)\n\n notify && notify(message)\n\n return result\n }\n\n @Directive('@privilege(category: \"data-archive\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => DataArchive, { description: 'To create new DataArchive' })\n async createDataArchive(\n @Arg('dataArchive') dataArchive: NewDataArchive,\n @Ctx() context: ResolverContext\n ): Promise<DataArchive> {\n const { domain, user, tx } = context.state\n const dataArchiveRepo = tx.getRepository(DataArchive)\n\n const result = await dataArchiveRepo.save({\n ...dataArchive,\n domain,\n creator: user,\n updater: user\n })\n\n return result\n }\n\n @Directive('@privilege(category: \"data-archive\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => DataArchive, { description: 'To modify DataArchive information' })\n async updateDataArchive(\n @Arg('id') id: string,\n @Arg('patch') patch: DataArchivePatch,\n @Ctx() context: ResolverContext\n ): Promise<DataArchive> {\n const { domain, user, tx } = context.state\n const dataArchiveRepo = tx.getRepository(DataArchive)\n\n const dataArchive = await dataArchiveRepo.findOne({\n where: { domain: { id: domain.id }, id },\n relations: ['domain', 'creator', 'updater']\n })\n\n const result = await dataArchiveRepo.save({\n ...dataArchive,\n ...patch,\n updater: user\n })\n\n return result\n }\n\n @Directive('@privilege(category: \"data-archive\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => [DataArchive], { description: \"To modify multiple DataArchives' information\" })\n async updateMultipleDataArchive(\n @Arg('patches', type => [DataArchivePatch]) patches: DataArchivePatch[],\n @Ctx() context: any\n ): Promise<DataArchive[]> {\n const { domain, user, tx } = context.state\n const dataArchiveRepo = tx.getRepository(DataArchive)\n\n let results = []\n const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')\n const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')\n\n if (_createRecords.length > 0) {\n const cuFlag = '+'\n for (let i = 0; i < _createRecords.length; i++) {\n const newRecord = _createRecords[i]\n\n const result = await dataArchiveRepo.save({\n ...newRecord,\n domain,\n creator: user,\n updater: user\n })\n\n results.push({\n ...result,\n cuFlag\n })\n }\n }\n\n if (_updateRecords.length > 0) {\n const cuFlag = 'M'\n for (let i = 0; i < _updateRecords.length; i++) {\n const newRecord = _updateRecords[i]\n const dataArchive = await dataArchiveRepo.findOne(newRecord.id, {\n relations: ['domain', 'creator', 'updater']\n })\n\n const result = await dataArchiveRepo.save({\n ...dataArchive,\n ...newRecord,\n updater: user\n })\n\n results.push({\n ...result,\n cuFlag\n })\n }\n }\n\n return results\n }\n\n @Directive('@privilege(category: \"data-archive\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To delete DataArchive' })\n async deleteDataArchive(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(DataArchive).delete({ domain, id })\n return true\n }\n\n @Directive('@privilege(category: \"data-archive\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To delete multiple dataArchives' })\n async deleteDataArchives(\n @Arg('ids', type => [String]) ids: string[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(DataArchive).delete({\n domain,\n id: In(ids)\n })\n\n return true\n }\n\n @Directive('@privilege(category: \"data-archive\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To import multiple data-archives' })\n async importDataArchives(\n @Arg('dataArchives', type => [DataArchivePatch]) dataArchives: DataArchive[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx } = context.state\n const dataArchiveRepo = tx.getRepository(DataArchive)\n\n await Promise.all(\n dataArchives.map(async (dataArchive: DataArchive) => {\n const createdDataArchive: DataArchive = await dataArchiveRepo.save({\n domain,\n ...dataArchive\n })\n })\n )\n\n return true\n }\n\n @Directive('@privilege(category: \"data-archive\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => [DataArchive], { description: 'To copy multiple data-archives' })\n async copyDataArchives(\n @Arg('ids', type => [String]) ids: string[],\n @Ctx() context: ResolverContext\n ): Promise<DataArchive[]> {\n const { domain, user, tx } = context.state\n const dataArchiveRepo = tx.getRepository(DataArchive)\n\n const originals = await dataArchiveRepo.find({\n where: {\n id: In(ids),\n domain: { id: domain.id }\n },\n relations: ['domain']\n })\n\n if (originals.length == 0) {\n return []\n }\n\n var newCopys = originals.map(dataArchive => {\n let dataArchiveId = crypto.randomUUID()\n\n return {\n ...dataArchive,\n id: dataArchiveId,\n domain,\n creator: user,\n updater: user,\n updatedAt: undefined,\n createdAt: undefined\n }\n })\n\n var copiedDataArchives = await dataArchiveRepo.save(newCopys)\n\n return copiedDataArchives\n }\n}\n"]}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataArchiveQuery = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const type_graphql_1 = require("type-graphql");
6
+ const auth_base_1 = require("@things-factory/auth-base");
7
+ const shell_1 = require("@things-factory/shell");
8
+ const data_archive_1 = require("./data-archive");
9
+ const data_archive_type_1 = require("./data-archive-type");
10
+ var parser = require('cron-parser');
11
+ let DataArchiveQuery = class DataArchiveQuery {
12
+ async dataArchive(id, context) {
13
+ const { domain } = context.state;
14
+ return await (0, shell_1.getRepository)(data_archive_1.DataArchive).findOne({
15
+ where: { domain: { id: domain.id }, id }
16
+ });
17
+ }
18
+ async dataArchives(params, context) {
19
+ const { domain } = context.state;
20
+ const queryBuilder = (0, shell_1.getQueryBuilderFromListParams)({
21
+ repository: (0, shell_1.getRepository)(data_archive_1.DataArchive),
22
+ params,
23
+ domain,
24
+ alias: 'dataArchive',
25
+ searchables: []
26
+ });
27
+ const [items, total] = await queryBuilder.getManyAndCount();
28
+ return { items, total };
29
+ }
30
+ async domain(dataArchive) {
31
+ return await (0, shell_1.getRepository)(shell_1.Domain).findOneBy({ id: dataArchive.domainId });
32
+ }
33
+ async updater(dataArchive) {
34
+ return await (0, shell_1.getRepository)(auth_base_1.User).findOneBy({ id: dataArchive.updaterId });
35
+ }
36
+ async creator(dataArchive) {
37
+ return await (0, shell_1.getRepository)(auth_base_1.User).findOneBy({ id: dataArchive.creatorId });
38
+ }
39
+ };
40
+ tslib_1.__decorate([
41
+ (0, type_graphql_1.Directive)('@privilege(category: "data-archive", privilege: "query", domainOwnerGranted: true)'),
42
+ (0, type_graphql_1.Query)(returns => data_archive_1.DataArchive, { description: 'To fetch a DataArchive' }),
43
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
44
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
45
+ tslib_1.__metadata("design:type", Function),
46
+ tslib_1.__metadata("design:paramtypes", [String, Object]),
47
+ tslib_1.__metadata("design:returntype", Promise)
48
+ ], DataArchiveQuery.prototype, "dataArchive", null);
49
+ tslib_1.__decorate([
50
+ (0, type_graphql_1.Directive)('@privilege(category: "data-archive", privilege: "query", domainOwnerGranted: true)'),
51
+ (0, type_graphql_1.Query)(returns => data_archive_type_1.DataArchiveList, { description: 'To fetch multiple DataArchives' }),
52
+ tslib_1.__param(0, (0, type_graphql_1.Args)()),
53
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
54
+ tslib_1.__metadata("design:type", Function),
55
+ tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
56
+ tslib_1.__metadata("design:returntype", Promise)
57
+ ], DataArchiveQuery.prototype, "dataArchives", null);
58
+ tslib_1.__decorate([
59
+ (0, type_graphql_1.FieldResolver)(type => shell_1.Domain),
60
+ tslib_1.__param(0, (0, type_graphql_1.Root)()),
61
+ tslib_1.__metadata("design:type", Function),
62
+ tslib_1.__metadata("design:paramtypes", [data_archive_1.DataArchive]),
63
+ tslib_1.__metadata("design:returntype", Promise)
64
+ ], DataArchiveQuery.prototype, "domain", null);
65
+ tslib_1.__decorate([
66
+ (0, type_graphql_1.FieldResolver)(type => auth_base_1.User),
67
+ tslib_1.__param(0, (0, type_graphql_1.Root)()),
68
+ tslib_1.__metadata("design:type", Function),
69
+ tslib_1.__metadata("design:paramtypes", [data_archive_1.DataArchive]),
70
+ tslib_1.__metadata("design:returntype", Promise)
71
+ ], DataArchiveQuery.prototype, "updater", null);
72
+ tslib_1.__decorate([
73
+ (0, type_graphql_1.FieldResolver)(type => auth_base_1.User),
74
+ tslib_1.__param(0, (0, type_graphql_1.Root)()),
75
+ tslib_1.__metadata("design:type", Function),
76
+ tslib_1.__metadata("design:paramtypes", [data_archive_1.DataArchive]),
77
+ tslib_1.__metadata("design:returntype", Promise)
78
+ ], DataArchiveQuery.prototype, "creator", null);
79
+ DataArchiveQuery = tslib_1.__decorate([
80
+ (0, type_graphql_1.Resolver)(data_archive_1.DataArchive)
81
+ ], DataArchiveQuery);
82
+ exports.DataArchiveQuery = DataArchiveQuery;
83
+ //# sourceMappingURL=data-archive-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-archive-query.js","sourceRoot":"","sources":["../../../server/service/data-archive/data-archive-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'\n\nimport { Role, User } from '@things-factory/auth-base'\nimport { Domain, getQueryBuilderFromListParams, ListParam, getRepository } from '@things-factory/shell'\n\nimport { DataArchive } from './data-archive'\nimport { DataArchiveList } from './data-archive-type'\n\nvar parser = require('cron-parser')\n\n@Resolver(DataArchive)\nexport class DataArchiveQuery {\n @Directive('@privilege(category: \"data-archive\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => DataArchive, { description: 'To fetch a DataArchive' })\n async dataArchive(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<DataArchive> {\n const { domain } = context.state\n\n return await getRepository(DataArchive).findOne({\n where: { domain: { id: domain.id }, id }\n })\n }\n\n @Directive('@privilege(category: \"data-archive\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => DataArchiveList, { description: 'To fetch multiple DataArchives' })\n async dataArchives(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<DataArchiveList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n repository: getRepository(DataArchive),\n params,\n domain,\n alias: 'dataArchive',\n searchables: []\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() dataArchive: DataArchive): Promise<Domain> {\n return await getRepository(Domain).findOneBy({ id: dataArchive.domainId })\n }\n\n @FieldResolver(type => User)\n async updater(@Root() dataArchive: DataArchive): Promise<User> {\n return await getRepository(User).findOneBy({ id: dataArchive.updaterId })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() dataArchive: DataArchive): Promise<User> {\n return await getRepository(User).findOneBy({ id: dataArchive.creatorId })\n }\n}\n"]}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataArchiveList = exports.DataArchivePatch = exports.NewDataArchive = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const type_graphql_1 = require("type-graphql");
6
+ const data_archive_1 = require("./data-archive");
7
+ const shell_1 = require("@things-factory/shell");
8
+ let NewDataArchive = class NewDataArchive {
9
+ };
10
+ tslib_1.__decorate([
11
+ (0, type_graphql_1.Field)({ nullable: true }),
12
+ tslib_1.__metadata("design:type", String)
13
+ ], NewDataArchive.prototype, "type", void 0);
14
+ tslib_1.__decorate([
15
+ (0, type_graphql_1.Field)(type => shell_1.ScalarObject, { nullable: true }),
16
+ tslib_1.__metadata("design:type", Object)
17
+ ], NewDataArchive.prototype, "requestParams", void 0);
18
+ tslib_1.__decorate([
19
+ (0, type_graphql_1.Field)({ nullable: true }),
20
+ tslib_1.__metadata("design:type", String)
21
+ ], NewDataArchive.prototype, "downloadUrl", void 0);
22
+ tslib_1.__decorate([
23
+ (0, type_graphql_1.Field)({ nullable: true }),
24
+ tslib_1.__metadata("design:type", String)
25
+ ], NewDataArchive.prototype, "status", void 0);
26
+ NewDataArchive = tslib_1.__decorate([
27
+ (0, type_graphql_1.InputType)()
28
+ ], NewDataArchive);
29
+ exports.NewDataArchive = NewDataArchive;
30
+ let DataArchivePatch = class DataArchivePatch {
31
+ };
32
+ tslib_1.__decorate([
33
+ (0, type_graphql_1.Field)(type => type_graphql_1.ID, { nullable: true }),
34
+ tslib_1.__metadata("design:type", String)
35
+ ], DataArchivePatch.prototype, "id", void 0);
36
+ tslib_1.__decorate([
37
+ (0, type_graphql_1.Field)({ nullable: true }),
38
+ tslib_1.__metadata("design:type", String)
39
+ ], DataArchivePatch.prototype, "type", void 0);
40
+ tslib_1.__decorate([
41
+ (0, type_graphql_1.Field)(type => shell_1.ScalarObject, { nullable: true }),
42
+ tslib_1.__metadata("design:type", Object)
43
+ ], DataArchivePatch.prototype, "requestParams", void 0);
44
+ tslib_1.__decorate([
45
+ (0, type_graphql_1.Field)({ nullable: true }),
46
+ tslib_1.__metadata("design:type", String)
47
+ ], DataArchivePatch.prototype, "downloadUrl", void 0);
48
+ tslib_1.__decorate([
49
+ (0, type_graphql_1.Field)({ nullable: true }),
50
+ tslib_1.__metadata("design:type", String)
51
+ ], DataArchivePatch.prototype, "status", void 0);
52
+ tslib_1.__decorate([
53
+ (0, type_graphql_1.Field)({ nullable: true }),
54
+ tslib_1.__metadata("design:type", String)
55
+ ], DataArchivePatch.prototype, "cuFlag", void 0);
56
+ DataArchivePatch = tslib_1.__decorate([
57
+ (0, type_graphql_1.InputType)()
58
+ ], DataArchivePatch);
59
+ exports.DataArchivePatch = DataArchivePatch;
60
+ let DataArchiveList = class DataArchiveList {
61
+ };
62
+ tslib_1.__decorate([
63
+ (0, type_graphql_1.Field)(type => [data_archive_1.DataArchive]),
64
+ tslib_1.__metadata("design:type", Array)
65
+ ], DataArchiveList.prototype, "items", void 0);
66
+ tslib_1.__decorate([
67
+ (0, type_graphql_1.Field)(type => type_graphql_1.Int),
68
+ tslib_1.__metadata("design:type", Number)
69
+ ], DataArchiveList.prototype, "total", void 0);
70
+ DataArchiveList = tslib_1.__decorate([
71
+ (0, type_graphql_1.ObjectType)()
72
+ ], DataArchiveList);
73
+ exports.DataArchiveList = DataArchiveList;
74
+ //# sourceMappingURL=data-archive-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-archive-type.js","sourceRoot":"","sources":["../../../server/service/data-archive/data-archive-type.ts"],"names":[],"mappings":";;;;AAAA,+CAAoE;AACpE,iDAA4C;AAC5C,iDAA+D;AAG/D,IAAa,cAAc,GAA3B,MAAa,cAAc;CAa1B,CAAA;AAXC;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACY;AAGtC;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,oBAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDACV;AAGtC;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;mDACN;AAGpB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8CACX;AAXJ,cAAc;IAD1B,IAAA,wBAAS,GAAE;GACC,cAAc,CAa1B;AAbY,wCAAc;AAgB3B,IAAa,gBAAgB,GAA7B,MAAa,gBAAgB;CAkB5B,CAAA;AAhBC;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CAC3B;AAGX;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8CACY;AAGtC;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,oBAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;uDACV;AAGtC;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDACN;AAGpB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;gDACX;AAGf;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;gDACZ;AAjBH,gBAAgB;IAD5B,IAAA,wBAAS,GAAE;GACC,gBAAgB,CAkB5B;AAlBY,4CAAgB;AAqB7B,IAAa,eAAe,GAA5B,MAAa,eAAe;CAM3B,CAAA;AAJC;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,0BAAW,CAAC,CAAC;;8CACT;AAGpB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,kBAAG,CAAC;;8CACN;AALF,eAAe;IAD3B,IAAA,yBAAU,GAAE;GACA,eAAe,CAM3B;AANY,0CAAe","sourcesContent":["import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'\nimport { DataArchive } from './data-archive'\nimport { ObjectRef, ScalarObject } from '@things-factory/shell'\n\n@InputType()\nexport class NewDataArchive {\n @Field({ nullable: true })\n type?: 'manual' | 'automatic' | string\n \n @Field(type => ScalarObject, { nullable: true })\n requestParams?: { [key: string]: any }\n\n @Field({ nullable: true })\n downloadUrl?: string\n\n @Field({ nullable: true })\n status?: string\n\n}\n\n@InputType()\nexport class DataArchivePatch {\n @Field(type => ID, { nullable: true })\n id?: string\n\n @Field({ nullable: true })\n type?: 'manual' | 'automatic' | string\n\n @Field(type => ScalarObject, { nullable: true })\n requestParams?: { [key: string]: any }\n\n @Field({ nullable: true })\n downloadUrl?: string\n\n @Field({ nullable: true })\n status?: string\n\n @Field({ nullable: true })\n cuFlag: string\n}\n\n@ObjectType()\nexport class DataArchiveList {\n @Field(type => [DataArchive])\n items: DataArchive[]\n\n @Field(type => Int)\n total: number\n}\n"]}