underpost 2.8.878 → 2.8.882

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/.env.development +35 -3
  2. package/.env.production +40 -3
  3. package/.env.test +35 -3
  4. package/.github/workflows/release.cd.yml +3 -3
  5. package/README.md +20 -2
  6. package/bin/deploy.js +40 -0
  7. package/cli.md +3 -1
  8. package/conf.js +29 -3
  9. package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
  10. package/manifests/deployment/dd-test-development/deployment.yaml +6 -6
  11. package/package.json +1 -2
  12. package/src/api/document/document.controller.js +66 -0
  13. package/src/api/document/document.model.js +51 -0
  14. package/src/api/document/document.router.js +24 -0
  15. package/src/api/document/document.service.js +133 -0
  16. package/src/cli/deploy.js +1 -1
  17. package/src/cli/index.js +2 -0
  18. package/src/cli/repository.js +2 -0
  19. package/src/cli/run.js +27 -1
  20. package/src/client/Default.index.js +46 -1
  21. package/src/client/components/core/Account.js +8 -1
  22. package/src/client/components/core/AgGrid.js +18 -9
  23. package/src/client/components/core/Auth.js +258 -89
  24. package/src/client/components/core/BtnIcon.js +13 -3
  25. package/src/client/components/core/Content.js +2 -1
  26. package/src/client/components/core/CssCore.js +40 -27
  27. package/src/client/components/core/Docs.js +189 -88
  28. package/src/client/components/core/Input.js +34 -19
  29. package/src/client/components/core/LoadingAnimation.js +5 -10
  30. package/src/client/components/core/Modal.js +280 -123
  31. package/src/client/components/core/ObjectLayerEngine.js +470 -104
  32. package/src/client/components/core/ObjectLayerEngineModal.js +1 -0
  33. package/src/client/components/core/Panel.js +9 -2
  34. package/src/client/components/core/PanelForm.js +234 -76
  35. package/src/client/components/core/Router.js +15 -15
  36. package/src/client/components/core/ToolTip.js +83 -19
  37. package/src/client/components/core/Translate.js +1 -1
  38. package/src/client/components/core/VanillaJs.js +7 -3
  39. package/src/client/components/core/windowGetDimensions.js +202 -0
  40. package/src/client/components/default/MenuDefault.js +105 -41
  41. package/src/client/components/default/RoutesDefault.js +2 -0
  42. package/src/client/services/default/default.management.js +1 -0
  43. package/src/client/services/document/document.service.js +97 -0
  44. package/src/client/services/file/file.service.js +2 -0
  45. package/src/client/ssr/Render.js +1 -1
  46. package/src/client/ssr/head/DefaultScripts.js +2 -0
  47. package/src/client/ssr/head/Seo.js +1 -0
  48. package/src/index.js +1 -1
  49. package/src/mailer/EmailRender.js +1 -1
  50. package/src/server/auth.js +68 -17
  51. package/src/server/client-build.js +2 -3
  52. package/src/server/client-formatted.js +40 -12
  53. package/src/server/conf.js +5 -1
  54. package/src/server/crypto.js +195 -76
  55. package/src/server/object-layer.js +196 -0
  56. package/src/server/peer.js +47 -5
  57. package/src/server/process.js +85 -1
  58. package/src/server/runtime.js +23 -23
  59. package/src/server/ssr.js +52 -10
  60. package/src/server/valkey.js +89 -1
  61. package/test/crypto.test.js +117 -0
package/.env.development CHANGED
@@ -1,13 +1,45 @@
1
1
  DEPLOY_ID=dd-default
2
- DEFAULT_DEPLOY_ID=dd-default
3
2
  NODE_ENV=development
4
3
  PORT=4000
5
4
  JWT_SECRET=test
6
5
  REFRESH_EXPIRE_MINUTES=5
7
6
  ACCESS_EXPIRE_MINUTES=1440
8
7
  NODE_OPTIONS=--max-old-space-size=8192
9
- BASE_API=api
8
+ TIME_ZONE=changethis
9
+ GITHUB_TOKEN=changethis
10
+ GITHUB_USERNAME=changethis
11
+ GITHUB_BACKUP_REPO=changethis
12
+ GITHUB_DNS_REPO=changethis
13
+ DEFAULT_DEPLOY_ID=dd-default
10
14
  DEFAULT_DEPLOY_HOST=default.net
11
15
  DEFAULT_DEPLOY_PATH=/
16
+ MARIADB_HOST=changethis
17
+ MARIADB_USER=changethis
18
+ MARIADB_PASSWORD=changethis
19
+ DD_LAMPP_TEST_DB_0=changethis
20
+ WIFI=changethis
21
+ ROUTER=changethis
22
+ CLOUDINARY_CLOUD_NAME=changethis
23
+ CLOUDINARY_API_KEY=changethis
24
+ CLOUDINARY_API_SECRET=changethis
25
+ DB_PG_MAAS_NAME=changethis
26
+ DB_PG_MAAS_PASS=changethis
27
+ DB_PG_MAAS_USER=changethis
28
+ DB_PG_MAAS_HOST=127.0.0.1
29
+ DB_PG_MAAS_PORT=5432
30
+ MAAS_ADMIN_USERNAME=changethis
31
+ MAAS_API_KEY=changethis
32
+ MAAS_ADMIN_EMAIL=admin@default.net
33
+ MAAS_ADMIN_PASS=changethis
34
+ TFTP_ROOT=changethis
35
+ NETMASK=255.255.255.0
36
+ RPI4_INTERFACE_NAME=changethis
37
+ RPI4_IP=192.168.1.192
38
+ MAAS_DNS=8.8.8.8
39
+ MAAS_NTP_SERVER=changethis
40
+ NFS_EXPORT_PATH=changethis
41
+ RPI4_MAC_ADDRESS=changethis
42
+ NVIDIA_API_KEY=changethis
12
43
  DEFAULT_ADMIN_EMAIL=admin@default.net
13
- DEFAULT_ADMIN_PASSWORD=changethis
44
+ DEFAULT_ADMIN_PASSWORD=changethis
45
+ BASE_API=api
package/.env.production CHANGED
@@ -1,13 +1,50 @@
1
1
  DEPLOY_ID=dd-default
2
- DEFAULT_DEPLOY_ID=dd-default
3
2
  NODE_ENV=production
4
3
  PORT=3000
5
4
  JWT_SECRET=test
6
5
  REFRESH_EXPIRE_MINUTES=5
7
6
  ACCESS_EXPIRE_MINUTES=1440
8
7
  NODE_OPTIONS=--max-old-space-size=8192
9
- BASE_API=api
8
+ TIME_ZONE=changethis
9
+ GITHUB_TOKEN=changethis
10
+ GITHUB_USERNAME=changethis
11
+ GITHUB_BACKUP_REPO=changethis
12
+ GITHUB_DNS_REPO=changethis
13
+ DEFAULT_DEPLOY_ID=dd-default
10
14
  DEFAULT_DEPLOY_HOST=default.net
11
15
  DEFAULT_DEPLOY_PATH=/
16
+ MARIADB_HOST=changethis
17
+ MARIADB_USER=changethis
18
+ MARIADB_PASSWORD=changethis
19
+ DD_LAMPP_TEST_DB_0=changethis
20
+ WIFI=changethis
21
+ ROUTER=changethis
22
+ CLOUDINARY_CLOUD_NAME=changethis
23
+ CLOUDINARY_API_KEY=changethis
24
+ CLOUDINARY_API_SECRET=changethis
25
+ DB_PG_MAAS_NAME=changethis
26
+ DB_PG_MAAS_PASS=changethis
27
+ DB_PG_MAAS_USER=changethis
28
+ DB_PG_MAAS_HOST=127.0.0.1
29
+ DB_PG_MAAS_PORT=5432
30
+ MAAS_ADMIN_USERNAME=changethis
31
+ MAAS_API_KEY=changethis
32
+ MAAS_ADMIN_EMAIL=admin@default.net
33
+ MAAS_ADMIN_PASS=changethis
34
+ TFTP_ROOT=changethis
35
+ NETMASK=255.255.255.0
36
+ RPI4_INTERFACE_NAME=changethis
37
+ RPI4_IP=192.168.1.192
38
+ MAAS_DNS=8.8.8.8
39
+ MAAS_NTP_SERVER=changethis
40
+ NFS_EXPORT_PATH=changethis
41
+ RPI4_MAC_ADDRESS=changethis
42
+ NVIDIA_API_KEY=changethis
12
43
  DEFAULT_ADMIN_EMAIL=admin@default.net
13
- DEFAULT_ADMIN_PASSWORD=changethis
44
+ DEFAULT_ADMIN_PASSWORD=changethis
45
+ DEFAULT_SSH_USER=changethis
46
+ DEFAULT_SSH_HOST=changethis
47
+ DEFAULT_SSH_KEY_PATH=changethis
48
+ BASE_API=api
49
+ CERTBOT_LIVE_PATH=changethis
50
+ CERTBOT_LIVE_PATH_WINDOWS=changethis
package/.env.test CHANGED
@@ -1,13 +1,45 @@
1
1
  DEPLOY_ID=dd-default
2
- DEFAULT_DEPLOY_ID=dd-default
3
2
  NODE_ENV=test
4
3
  PORT=5000
5
4
  JWT_SECRET=test
6
5
  REFRESH_EXPIRE_MINUTES=5
7
6
  ACCESS_EXPIRE_MINUTES=1440
8
7
  NODE_OPTIONS=--max-old-space-size=8192
9
- BASE_API=api
8
+ TIME_ZONE=changethis
9
+ GITHUB_TOKEN=changethis
10
+ GITHUB_USERNAME=changethis
11
+ GITHUB_BACKUP_REPO=changethis
12
+ GITHUB_DNS_REPO=changethis
13
+ DEFAULT_DEPLOY_ID=dd-default
10
14
  DEFAULT_DEPLOY_HOST=default.net
11
15
  DEFAULT_DEPLOY_PATH=/
16
+ MARIADB_HOST=changethis
17
+ MARIADB_USER=changethis
18
+ MARIADB_PASSWORD=changethis
19
+ DD_LAMPP_TEST_DB_0=changethis
20
+ WIFI=changethis
21
+ ROUTER=changethis
22
+ CLOUDINARY_CLOUD_NAME=changethis
23
+ CLOUDINARY_API_KEY=changethis
24
+ CLOUDINARY_API_SECRET=changethis
25
+ DB_PG_MAAS_NAME=changethis
26
+ DB_PG_MAAS_PASS=changethis
27
+ DB_PG_MAAS_USER=changethis
28
+ DB_PG_MAAS_HOST=127.0.0.1
29
+ DB_PG_MAAS_PORT=5432
30
+ MAAS_ADMIN_USERNAME=changethis
31
+ MAAS_API_KEY=changethis
32
+ MAAS_ADMIN_EMAIL=admin@default.net
33
+ MAAS_ADMIN_PASS=changethis
34
+ TFTP_ROOT=changethis
35
+ NETMASK=255.255.255.0
36
+ RPI4_INTERFACE_NAME=changethis
37
+ RPI4_IP=192.168.1.192
38
+ MAAS_DNS=8.8.8.8
39
+ MAAS_NTP_SERVER=changethis
40
+ NFS_EXPORT_PATH=changethis
41
+ RPI4_MAC_ADDRESS=changethis
42
+ NVIDIA_API_KEY=changethis
12
43
  DEFAULT_ADMIN_EMAIL=admin@default.net
13
- DEFAULT_ADMIN_PASSWORD=changethis
44
+ DEFAULT_ADMIN_PASSWORD=changethis
45
+ BASE_API=api
@@ -2,7 +2,7 @@ name: CD | Release deployment | remote ssh
2
2
 
3
3
  on:
4
4
  workflow_run:
5
- workflows: ["CI | Publish npm package"]
5
+ workflows: ['CI | Publish npm package']
6
6
  types:
7
7
  - completed
8
8
 
@@ -31,7 +31,7 @@ jobs:
31
31
  cd /home/dd/engine
32
32
  npm install -g underpost
33
33
  underpost run secret
34
- node bin run --dev pull
34
+ underpost run pull
35
35
  underpost run secret
36
- underpost run underpost-config
36
+ underpost cmt . --empty ci docker-image-engine
37
37
  underpost run ssh-deploy engine-test
package/README.md CHANGED
@@ -50,6 +50,15 @@
50
50
 
51
51
 
52
52
 
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
53
62
 
54
63
 
55
64
 
@@ -63,7 +72,7 @@
63
72
  <!-- badges -->
64
73
 
65
74
 
66
- [![Node.js CI](https://github.com/underpostnet/engine/actions/workflows/docker-image.ci.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/docker-image.yml) [![Test](https://github.com/underpostnet/engine/actions/workflows/coverall.ci.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/coverall.yml) [![Downloads](https://img.shields.io/npm/dm/underpost.svg)](https://www.npmjs.com/package/underpost) [![Socket Badge](https://socket.dev/api/badge/npm/package/underpost/2.8.878)](https://socket.dev/npm/package/underpost/overview/2.8.878) [![Coverage Status](https://coveralls.io/repos/github/underpostnet/engine/badge.svg?branch=master)](https://coveralls.io/github/underpostnet/engine?branch=master) [![Version](https://img.shields.io/npm/v/underpost.svg)](https://www.npmjs.org/package/underpost) [![License](https://img.shields.io/npm/l/underpost.svg)](https://www.npmjs.com/package/underpost)
75
+ [![Node.js CI](https://github.com/underpostnet/engine/actions/workflows/docker-image.ci.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/docker-image.yml) [![Test](https://github.com/underpostnet/engine/actions/workflows/coverall.ci.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/coverall.yml) [![Downloads](https://img.shields.io/npm/dm/underpost.svg)](https://www.npmjs.com/package/underpost) [![Socket Badge](https://socket.dev/api/badge/npm/package/underpost/2.8.882)](https://socket.dev/npm/package/underpost/overview/2.8.882) [![Coverage Status](https://coveralls.io/repos/github/underpostnet/engine/badge.svg?branch=master)](https://coveralls.io/github/underpostnet/engine?branch=master) [![Version](https://img.shields.io/npm/v/underpost.svg)](https://www.npmjs.org/package/underpost) [![License](https://img.shields.io/npm/l/underpost.svg)](https://www.npmjs.com/package/underpost)
67
76
 
68
77
 
69
78
  <!-- end-badges -->
@@ -102,6 +111,15 @@
102
111
 
103
112
 
104
113
 
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+
122
+
105
123
 
106
124
 
107
125
 
@@ -156,7 +174,7 @@ Run dev client server
156
174
  npm run dev
157
175
  ```
158
176
  <!-- -->
159
- ## underpost ci/cd cli v2.8.878
177
+ ## underpost ci/cd cli v2.8.882
160
178
 
161
179
  ### Usage: `underpost [options] [command]`
162
180
  ```
package/bin/deploy.js CHANGED
@@ -469,6 +469,7 @@ try {
469
469
  shellExec(`node bin new --deploy-id dd-default`);
470
470
  console.log(fs.existsSync(`./engine-private/conf/dd-default`));
471
471
  shellExec(`sudo rm -rf ./engine-private/conf/dd-default`);
472
+ shellExec(`node bin/deploy build-env`);
472
473
  break;
473
474
  }
474
475
 
@@ -535,6 +536,45 @@ ${shellExec(`git log | grep Author: | sort -u`, { stdout: true }).split(`\n`).jo
535
536
 
536
537
  break;
537
538
  }
539
+ case 'build-env': {
540
+ const buildEnv = (privateEnvPath, originEnv, env) => {
541
+ const privateEnv = dotenv.parse(fs.readFileSync(privateEnvPath, 'utf8'));
542
+ for (const key of Object.keys(privateEnv)) {
543
+ if (key in env) {
544
+ console.warn(`Key ${key} already exists in origin env`);
545
+ continue;
546
+ }
547
+ if (key in originEnv) {
548
+ console.warn(`Key ${key} already exists in origin env`);
549
+ env[key] = originEnv[key];
550
+ continue;
551
+ }
552
+ env[key] =
553
+ `${key}`.toUpperCase().match('API') ||
554
+ `${key}`.toUpperCase().match('KEY') ||
555
+ `${key}`.toUpperCase().match('SECRET') ||
556
+ `${key}`.toUpperCase().match('TOKEN') ||
557
+ `${key}`.toUpperCase().match('PASSWORD') ||
558
+ `${key}`.toUpperCase().match('MAC')
559
+ ? 'changethis'
560
+ : isNaN(parseFloat(privateEnv[key]))
561
+ ? `${privateEnv[key]}`.match(`@`)
562
+ ? 'admin@default.net'
563
+ : 'changethis'
564
+ : privateEnv[key];
565
+ }
566
+ return env;
567
+ };
568
+ for (let envPath of ['.env.development', '.env.production', '.env.test']) {
569
+ const originEnv = dotenv.parse(fs.readFileSync(`./${envPath}`, 'utf8'));
570
+
571
+ let env = {};
572
+ env = buildEnv(`./engine-private/conf/dd-cron/${envPath}`, originEnv, env);
573
+ env = buildEnv(`./engine-private/conf/dd-core/${envPath}`, originEnv, env);
574
+ writeEnv(envPath, env);
575
+ }
576
+ break;
577
+ }
538
578
 
539
579
  case 'update-default-conf': {
540
580
  const defaultServer = DefaultConf.server['default.net']['/'];
package/cli.md CHANGED
@@ -1,4 +1,4 @@
1
- ## underpost ci/cd cli v2.8.878
1
+ ## underpost ci/cd cli v2.8.882
2
2
 
3
3
  ### Usage: `underpost [options] [command]`
4
4
  ```
@@ -619,6 +619,8 @@ Options:
619
619
  --image-name <image-name> Optional: Specifies the image name for test execution.
620
620
  --container-name <container-name> Optional: Specifies the container name for test execution.
621
621
  --namespace <namespace> Optional: Specifies the namespace for test execution.
622
+ --kubeadm Flag to indicate Kubeadm cluster type context
623
+ --k3s Flag to indicate K3s cluster type context
622
624
  -h, --help display help for command
623
625
 
624
626
  ```
package/conf.js CHANGED
@@ -64,6 +64,7 @@ const DefaultConf = /**/ {
64
64
  '404',
65
65
  '500',
66
66
  'Pagination',
67
+ 'windowGetDimensions',
67
68
  ],
68
69
  default: [
69
70
  'MenuDefault',
@@ -92,6 +93,16 @@ const DefaultConf = /**/ {
92
93
  { path: '/default-management', client: 'Default', ssr: 'Default' },
93
94
  { client: 'Default', ssr: 'Default', path: '/404', title: '404 Not Found' },
94
95
  { client: 'Default', ssr: 'Default', path: '/500', title: '500 Server Error' },
96
+ {
97
+ path: '/blog',
98
+ client: 'Default',
99
+ ssr: 'Default',
100
+ },
101
+ {
102
+ path: '/chat',
103
+ client: 'Default',
104
+ ssr: 'Default',
105
+ },
95
106
  ],
96
107
  dists: [
97
108
  {
@@ -108,7 +119,22 @@ const DefaultConf = /**/ {
108
119
  import_name_build: '/dist/sortablejs/sortable.complete.esm.js',
109
120
  },
110
121
  { folder: './node_modules/validator', public_folder: '/dist/validator' },
111
- { folder: './node_modules/@loadingio/css-spinner/entries', public_folder: '/dist/loadingio' },
122
+ {
123
+ folder: './node_modules/easymde/dist',
124
+ public_folder: '/dist/easymde',
125
+ },
126
+ {
127
+ folder: './node_modules/marked/lib',
128
+ public_folder: '/dist/marked',
129
+ import_name: 'marked',
130
+ import_name_build: '/dist/marked/marked.esm.js',
131
+ },
132
+ {
133
+ folder: './node_modules/vanilla-jsoneditor/standalone.js',
134
+ public_folder: '/dist/vanilla-jsoneditor/standalone.js',
135
+ import_name: 'vanilla-jsoneditor',
136
+ import_name_build: '/dist/vanilla-jsoneditor/standalone.js',
137
+ },
112
138
  {
113
139
  import_name: 'ag-grid-community',
114
140
  import_name_build: '/dist/ag-grid-community/ag-grid-community.min.js',
@@ -125,7 +151,7 @@ const DefaultConf = /**/ {
125
151
  },
126
152
  { folder: './node_modules/peerjs/dist', public_folder: '/dist/peerjs' },
127
153
  ],
128
- services: ['default', 'core', 'user', 'test', 'file'],
154
+ services: ['default', 'core', 'user', 'test', 'file', 'document'],
129
155
  },
130
156
  },
131
157
  ssr: {
@@ -145,7 +171,7 @@ const DefaultConf = /**/ {
145
171
  '/': {
146
172
  client: 'default',
147
173
  runtime: 'nodejs',
148
- apis: ['default', 'core', 'user', 'test', 'file'],
174
+ apis: ['default', 'core', 'user', 'test', 'file', 'document'],
149
175
  origins: [],
150
176
  minifyBuild: false,
151
177
  iconsBuild: false,
@@ -17,7 +17,7 @@ spec:
17
17
  spec:
18
18
  containers:
19
19
  - name: dd-default-development-blue
20
- image: localhost/rockylinux9-underpost:v2.8.878
20
+ image: localhost/rockylinux9-underpost:v2.8.882
21
21
  # resources:
22
22
  # requests:
23
23
  # memory: "124Ki"
@@ -100,7 +100,7 @@ spec:
100
100
  spec:
101
101
  containers:
102
102
  - name: dd-default-development-green
103
- image: localhost/rockylinux9-underpost:v2.8.878
103
+ image: localhost/rockylinux9-underpost:v2.8.882
104
104
  # resources:
105
105
  # requests:
106
106
  # memory: "124Ki"
@@ -17,13 +17,13 @@ spec:
17
17
  spec:
18
18
  containers:
19
19
  - name: dd-test-development-blue
20
- image: localhost/rockylinux9-underpost:v2.8.878
20
+ image: localhost/rockylinux9-underpost:v2.8.882
21
21
  # resources:
22
22
  # requests:
23
- # memory: "94Ki"
23
+ # memory: "96294Ki"
24
24
  # cpu: "75m"
25
25
  # limits:
26
- # memory: "1504Ki"
26
+ # memory: "1540709Ki"
27
27
  # cpu: "1200m"
28
28
  command:
29
29
  - /bin/sh
@@ -104,13 +104,13 @@ spec:
104
104
  spec:
105
105
  containers:
106
106
  - name: dd-test-development-green
107
- image: localhost/rockylinux9-underpost:v2.8.878
107
+ image: localhost/rockylinux9-underpost:v2.8.882
108
108
  # resources:
109
109
  # requests:
110
- # memory: "94Ki"
110
+ # memory: "96294Ki"
111
111
  # cpu: "75m"
112
112
  # limits:
113
- # memory: "1504Ki"
113
+ # memory: "1540709Ki"
114
114
  # cpu: "1200m"
115
115
  command:
116
116
  - /bin/sh
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "type": "module",
3
3
  "main": "src/index.js",
4
4
  "name": "underpost",
5
- "version": "2.8.878",
5
+ "version": "2.8.882",
6
6
  "description": "pwa api rest template",
7
7
  "scripts": {
8
8
  "start": "env-cmd -f .env.production node --max-old-space-size=8192 src/server",
@@ -51,7 +51,6 @@
51
51
  "dependencies": {
52
52
  "@fortawesome/fontawesome-free": "^6.4.2",
53
53
  "@fullcalendar/rrule": "^6.1.15",
54
- "@loadingio/css-spinner": "^2.0.2",
55
54
  "@neodrag/vanilla": "^2.0.3",
56
55
  "adm-zip": "^0.5.10",
57
56
  "ag-grid-community": "^31.3.4",
@@ -0,0 +1,66 @@
1
+ import { loggerFactory } from '../../server/logger.js';
2
+ import { DocumentService } from './document.service.js';
3
+ const logger = loggerFactory(import.meta);
4
+
5
+ const DocumentController = {
6
+ post: async (req, res, options) => {
7
+ try {
8
+ return res.status(200).json({
9
+ status: 'success',
10
+ data: await DocumentService.post(req, res, options),
11
+ });
12
+ } catch (error) {
13
+ logger.error(error, error.stack);
14
+ return res.status(400).json({
15
+ status: 'error',
16
+ message: error.message,
17
+ });
18
+ }
19
+ },
20
+ get: async (req, res, options) => {
21
+ try {
22
+ return res.status(200).json({
23
+ status: 'success',
24
+ data: await DocumentService.get(req, res, options),
25
+ });
26
+ } catch (error) {
27
+ logger.error(error, error.stack);
28
+ return res.status(400).json({
29
+ status: 'error',
30
+ message: error.message,
31
+ });
32
+ }
33
+ },
34
+ delete: async (req, res, options) => {
35
+ try {
36
+ const result = await DocumentService.delete(req, res, options);
37
+ return res.status(200).json({
38
+ status: 'success',
39
+ data: result,
40
+ });
41
+ } catch (error) {
42
+ logger.error(error, error.stack);
43
+ return res.status(400).json({
44
+ status: 'error',
45
+ message: error.message,
46
+ });
47
+ }
48
+ },
49
+ put: async (req, res, options) => {
50
+ try {
51
+ const result = await DocumentService.put(req, res, options);
52
+ return res.status(200).json({
53
+ status: 'success',
54
+ data: result,
55
+ });
56
+ } catch (error) {
57
+ logger.error(error, error.stack);
58
+ return res.status(400).json({
59
+ status: 'error',
60
+ message: error.message,
61
+ });
62
+ }
63
+ },
64
+ };
65
+
66
+ export { DocumentController };
@@ -0,0 +1,51 @@
1
+ import { Schema, model, Types } from 'mongoose';
2
+
3
+ // https://mongoosejs.com/docs/2.7.x/docs/schematypes.html
4
+
5
+ const DocumentSchema = new Schema(
6
+ {
7
+ userId: {
8
+ type: Schema.Types.ObjectId,
9
+ ref: 'User',
10
+ },
11
+ location: { type: String },
12
+ title: { type: String },
13
+ tags: [{ type: String }],
14
+ fileId: {
15
+ type: Schema.Types.ObjectId,
16
+ ref: 'File',
17
+ },
18
+ mdFileId: {
19
+ type: Schema.Types.ObjectId,
20
+ ref: 'File',
21
+ },
22
+ },
23
+ {
24
+ timestamps: true,
25
+ },
26
+ );
27
+
28
+ const DocumentModel = model('Document', DocumentSchema);
29
+
30
+ const ProviderSchema = DocumentSchema;
31
+
32
+ const DocumentDto = {
33
+ populate: {
34
+ file: () => {
35
+ return {
36
+ path: 'fileId',
37
+ model: 'File',
38
+ select: '_id name mimetype',
39
+ };
40
+ },
41
+ user: () => {
42
+ return {
43
+ path: 'userId',
44
+ model: 'User',
45
+ select: '_id email username',
46
+ };
47
+ },
48
+ },
49
+ };
50
+
51
+ export { DocumentSchema, DocumentModel, ProviderSchema, DocumentDto };
@@ -0,0 +1,24 @@
1
+ import { loggerFactory } from '../../server/logger.js';
2
+ import { DocumentController } from './document.controller.js';
3
+ import express from 'express';
4
+ import fs from 'fs-extra';
5
+ const logger = loggerFactory(import.meta);
6
+
7
+ const DocumentRouter = (options) => {
8
+ const router = express.Router();
9
+ const authMiddleware = options.authMiddleware;
10
+ router.post(`/:id`, authMiddleware, async (req, res) => await DocumentController.post(req, res, options));
11
+ router.post(`/`, authMiddleware, async (req, res) => await DocumentController.post(req, res, options));
12
+ router.get(`/public`, async (req, res) => await DocumentController.get(req, res, options));
13
+ router.get(`/:id`, authMiddleware, async (req, res) => await DocumentController.get(req, res, options));
14
+ router.get(`/`, authMiddleware, async (req, res) => await DocumentController.get(req, res, options));
15
+ router.put(`/:id`, authMiddleware, async (req, res) => await DocumentController.put(req, res, options));
16
+ router.put(`/`, authMiddleware, async (req, res) => await DocumentController.put(req, res, options));
17
+ router.delete(`/:id`, authMiddleware, async (req, res) => await DocumentController.delete(req, res, options));
18
+ router.delete(`/`, authMiddleware, async (req, res) => await DocumentController.delete(req, res, options));
19
+ return router;
20
+ };
21
+
22
+ const ApiRouter = DocumentRouter;
23
+
24
+ export { ApiRouter, DocumentRouter };