@futdevpro/nts-dynamo 1.15.15 → 1.15.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.c8rc.json +26 -26
- package/.copilot/patterns.json +7 -7
- package/.cursor/rules/__assistant_guide.mdc +30 -30
- package/.cursor/rules/_ag_backend-structure.mdc +85 -85
- package/.cursor/rules/_ag_backend.mdc +16 -16
- package/.cursor/rules/_ag_frontend-structure.mdc +86 -86
- package/.cursor/rules/_ag_frontend.mdc +39 -39
- package/.cursor/rules/_ag_import-rules.mdc +44 -44
- package/.cursor/rules/_ag_naming.mdc +115 -115
- package/.cursor/rules/_ag_should-be.mdc +6 -6
- package/.cursor/rules/ai_development_guide.md +60 -60
- package/.cursor/rules/cursor-rules.md +160 -160
- package/.cursor/rules/default-command.mdc +464 -464
- package/.cursor/rules/error_code_pattern.md +39 -39
- package/.cursor/rules/saved rule mcp server use.md +15 -15
- package/.dynamo/version-bump.config.json +5 -0
- package/.github/workflows/main.yml +426 -393
- package/.husky/pre-commit +1 -0
- package/.vscode/settings.json +10 -10
- package/HOWTO.md +15 -15
- package/LICENSE +21 -21
- package/__documentations/2026-04-28-logs-module.md +49 -0
- package/__documentations/nts-integration-tests-2026-03-17.md +26 -26
- package/_specifications/BACKLOG.md +50 -50
- package/_specifications/TODO.md +15 -15
- package/_specifications/agent.md +138 -138
- package/eslint.config.js +3 -3
- package/nodemon.json +24 -24
- package/package.json +343 -362
- package/pipeline.cicd.config.json +152 -0
- package/scripts/run-coverage-tests.js +28 -28
- package/spec/support/helpers/spec-reporter-loader.js +359 -359
- package/spec/support/helpers/ts-node-helper.js +93 -93
- package/spec/support/jasmine.coverage.json +24 -24
- package/spec/support/jasmine.json +24 -24
- package/src/_collections/archive.util.spec.ts +57 -57
- package/src/_collections/archive.util.ts +18 -18
- package/src/_collections/atlas-default-db-options.const.ts +9 -9
- package/src/_collections/default-fallback-cache-max-age.const.spec.ts +11 -11
- package/src/_collections/default-fallback-cache-max-age.const.ts +2 -2
- package/src/_collections/default-not-found-page.const.spec.ts +19 -19
- package/src/_collections/default-not-found-page.const.ts +22 -22
- package/src/_collections/default-socket-path.const.spec.ts +12 -12
- package/src/_collections/default-socket-path.const.ts +2 -2
- package/src/_collections/get-environment-settings.util.spec.ts +210 -210
- package/src/_collections/get-environment-settings.util.ts +48 -48
- package/src/_collections/sample.env +21 -21
- package/src/_collections/star.controller.spec.ts +224 -224
- package/src/_collections/star.controller.ts +129 -129
- package/src/_enums/data-model-type.enum.ts +14 -14
- package/src/_enums/data-service-function.enum.ts +24 -24
- package/src/_enums/predefined-data-types.enum.ts +16 -16
- package/src/_enums/route-security.enum.ts +12 -12
- package/src/_models/control-models/api-call-params.control-model.spec.ts +152 -152
- package/src/_models/control-models/api-call-params.control-model.ts +142 -142
- package/src/_models/control-models/app-ext-system-controls.control-model.spec.ts +52 -52
- package/src/_models/control-models/app-ext-system-controls.control-model.ts +9 -9
- package/src/_models/control-models/app-params.control-model.spec.ts +225 -225
- package/src/_models/control-models/app-params.control-model.ts +136 -136
- package/src/_models/control-models/app-system-controls.control-model.spec.ts +31 -31
- package/src/_models/control-models/app-system-controls.control-model.ts +9 -9
- package/src/_models/control-models/endpoint-params.control-model.spec.ts +578 -578
- package/src/_models/control-models/endpoint-params.control-model.ts +526 -526
- package/src/_models/control-models/http-settings.control-model.spec.ts +77 -77
- package/src/_models/control-models/http-settings.control-model.ts +37 -37
- package/src/_models/control-models/system-control.control-model.spec.ts +27 -27
- package/src/_models/control-models/system-control.control-model.ts +12 -12
- package/src/_models/interfaces/certification-settings.interface.ts +7 -7
- package/src/_models/interfaces/environment-settings.interface.ts +59 -59
- package/src/_models/interfaces/global-log-settings.interface.ts +108 -108
- package/src/_models/interfaces/global-service-settings.interface.ts +47 -47
- package/src/_models/interfaces/routing-module-settings.interface.ts +21 -21
- package/src/_models/interfaces/static-client-settings.interface.spec.ts +29 -29
- package/src/_models/interfaces/static-client-settings.interface.ts +28 -28
- package/src/_models/types/db-update.type.ts +100 -100
- package/src/_modules/ai/_models/ai-input-interfaces.ts +117 -117
- package/src/_modules/ai/_models/ai-test-generation-result.interface.ts +16 -16
- package/src/_modules/ai/_modules/anthropic/_services/aai-user-key.control-service.ts +138 -138
- package/src/_modules/ai/_modules/anthropic/index.ts +5 -5
- package/src/_modules/ai/_modules/document-ai/_collections/dai-chunking.util.spec.ts +242 -242
- package/src/_modules/ai/_modules/document-ai/_collections/dai-chunking.util.ts +639 -639
- package/src/_modules/ai/_modules/document-ai/_collections/dai-document.util.spec.ts +209 -209
- package/src/_modules/ai/_modules/document-ai/_collections/dai-document.util.ts +85 -85
- package/src/_modules/ai/_modules/document-ai/_enums/dai-compare-result-type.enum.ts +7 -7
- package/src/_modules/ai/_modules/document-ai/_models/data-models/dai-doc-chunk.data-model.ts +146 -146
- package/src/_modules/ai/_modules/document-ai/_models/data-models/dai-doc-page.data-model.ts +162 -162
- package/src/_modules/ai/_modules/document-ai/_models/data-models/dai-document.data-model.ts +99 -99
- package/src/_modules/ai/_modules/document-ai/_models/interfaces/dai-doc-chunk-compare-result.interface.ts +18 -18
- package/src/_modules/ai/_modules/document-ai/_models/interfaces/dai-doc-page-compare-result.interface.ts +19 -19
- package/src/_modules/ai/_modules/document-ai/_models/interfaces/dai-document-compare-result.interface.ts +25 -25
- package/src/_modules/ai/_modules/document-ai/index.ts +28 -28
- package/src/_modules/ai/_modules/fdp-ai/_services/fdpai-user-key.control-service.ts +189 -189
- package/src/_modules/ai/_modules/fdp-ai/index.ts +5 -5
- package/src/_modules/ai/_modules/open-ai/_collections/oai-global-settings.const.ts +9 -9
- package/src/_modules/ai/_modules/open-ai/_collections/oai-llm-predefined-requests-hu.conts.ts +82 -82
- package/src/_modules/ai/_modules/open-ai/_collections/oai-llm-predefined-requests.conts.ts +75 -75
- package/src/_modules/ai/_modules/open-ai/_enums/oai-gpt-message-role.enum.ts +45 -45
- package/src/_modules/ai/_modules/open-ai/_models/interfaces/oai-global-settings.interface.ts +7 -7
- package/src/_modules/ai/_modules/open-ai/_models/interfaces/oai-gpt-message.interface.ts +7 -7
- package/src/_modules/ai/_modules/open-ai/_models/interfaces/oai-llm-predefined-requests.interface.ts +57 -57
- package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-doc-chunk-data.service.ts +292 -292
- package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-document.data-service.spec.ts +342 -342
- package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-vector-data.service.spec.ts +550 -550
- package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-vector-data.service.ts +630 -630
- package/src/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.spec.ts +240 -240
- package/src/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.ts +98 -98
- package/src/_modules/ai/_modules/open-ai/_services/oai-llm-chat.service-base.spec.ts +462 -462
- package/src/_modules/ai/_modules/open-ai/_services/oai-llm-chat.service-base.ts +615 -615
- package/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.spec.ts +437 -437
- package/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.ts +833 -833
- package/src/_modules/ai/_modules/open-ai/_services/oai-user-key.control-service.ts +157 -157
- package/src/_modules/ai/_services/ai-embedding.service-base.spec.ts +98 -98
- package/src/_modules/ai/_services/ai-embedding.service-base.ts +48 -48
- package/src/_modules/ai/_services/ai-llm-chat.service-base.spec.ts +229 -229
- package/src/_modules/ai/_services/ai-llm-chat.service-base.ts +68 -68
- package/src/_modules/ai/_services/ai-llm.service-base.spec.ts +250 -250
- package/src/_modules/ai/_services/ai-llm.service-base.ts +332 -332
- package/src/_modules/ai/_services/ai-provider.service-base.spec.ts +79 -79
- package/src/_modules/ai/_services/ai-provider.service-base.ts +29 -29
- package/src/_modules/ai/_services/ai-user-key.service-base.ts +59 -59
- package/src/_modules/ai/index.ts +13 -13
- package/src/_modules/assistant/_collections/ass-global-settings.const.ts +13 -13
- package/src/_modules/assistant/_collections/ass.util.spec.ts +176 -176
- package/src/_modules/assistant/_collections/ass.util.ts +50 -50
- package/src/_modules/assistant/_models/ass-global-settings.interface.ts +15 -15
- package/src/_modules/assistant/_services/ass-io.control-service.spec.ts +140 -140
- package/src/_modules/assistant/_services/ass-main.control-service.spec.ts +192 -192
- package/src/_modules/assistant/_services/ass-main.control-service.ts +107 -107
- package/src/_modules/bot/_collections/bot-default-commands.const.ts +12 -12
- package/src/_modules/bot/_collections/bot-global-settings.const.ts +39 -39
- package/src/_modules/bot/_models/bot-channel-wrapper.interface.ts +62 -62
- package/src/_modules/bot/_models/bot-command.interface.ts +8 -8
- package/src/_modules/bot/_models/bot-global-settings.interface.ts +96 -96
- package/src/_modules/bot/_models/bot-last-mention-date.interface.ts +6 -6
- package/src/_modules/bot/_models/bot-last-message-date.interface.ts +5 -5
- package/src/_modules/bot/_models/bot-user-wrapper.interface.ts +41 -41
- package/src/_modules/bot/_modules/discord-bot/_models/dib-platform.types.ts +9 -9
- package/src/_modules/bot/_modules/discord-bot/_services/dib-messaging-provider.control-service.spec.ts +431 -431
- package/src/_modules/bot/_modules/dynamo-bot/_collections/dyb-operations.util.spec.ts +160 -160
- package/src/_modules/bot/_modules/dynamo-bot/_collections/dyb-operations.util.ts +55 -55
- package/src/_modules/bot/_modules/dynamo-bot/_models/dyb-platform.types.ts +15 -15
- package/src/_modules/bot/_modules/dynamo-bot/_services/dyb-messaging-provider.control-service.spec.ts +374 -374
- package/src/_modules/bot/_modules/dynamo-bot/_services/dyb-messaging-provider.control-service.ts +447 -447
- package/src/_modules/bot/_modules/dynamo-bot/index.ts +15 -15
- package/src/_modules/bot/_modules/slack-bot/_models/slb-platform.types.ts +9 -9
- package/src/_modules/bot/_modules/slack-bot/_services/slb-messaging-provider.control-service.spec.ts +344 -344
- package/src/_modules/bot/_modules/slack-bot/_services/slb-messaging-provider.control-service.ts +197 -197
- package/src/_modules/bot/_modules/teams-bot/_models/teb-platform.types.ts +9 -9
- package/src/_modules/bot/_modules/teams-bot/_services/teb-messaging-provider.control-service.spec.ts +345 -345
- package/src/_modules/bot/_modules/teams-bot/_services/teb-messaging-provider.control-service.ts +197 -197
- package/src/_modules/bot/_services/bot-commands.control-service.spec.ts +116 -116
- package/src/_modules/bot/_services/bot-io.control-service.spec.ts +285 -285
- package/src/_modules/bot/_services/bot-main.control-service.spec.ts +208 -208
- package/src/_modules/bot/_services/bot-messaging-provider.service-base.spec.ts +349 -349
- package/src/_modules/bot/_services/bot-routines.control-service.spec.ts +111 -111
- package/src/_modules/custom-data/custom-data.controller.spec.ts +49 -49
- package/src/_modules/custom-data/custom-data.controller.ts +67 -67
- package/src/_modules/custom-data/custom-data.data-service.spec.ts +54 -54
- package/src/_modules/custom-data/custom-data.data-service.ts +21 -21
- package/src/_modules/custom-data/get-custom-data-routing-module.util.spec.ts +28 -28
- package/src/_modules/custom-data/get-custom-data-routing-module.util.ts +24 -24
- package/src/_modules/custom-data/index.ts +9 -9
- package/src/_modules/defaults/_collections/default-endpoints.util.ts +487 -487
- package/src/_modules/defaults/_models/default-user.data-model.ts +72 -72
- package/src/_modules/defaults/_services/default-auth.service.spec.ts +269 -269
- package/src/_modules/defaults/_services/default-auth.service.ts +177 -177
- package/src/_modules/defaults/_services/default-socket-events.service.spec.ts +42 -42
- package/src/_modules/defaults/_services/default-socket-events.service.ts +61 -61
- package/src/_modules/defaults/_services/default-user.data-service.spec.ts +187 -187
- package/src/_modules/defaults/_services/default-user.data-service.ts +98 -98
- package/src/_modules/defaults/index.ts +17 -17
- package/src/_modules/discord-assistant/_collections/dias-global-settings.const.ts +19 -19
- package/src/_modules/discord-assistant/_collections/dias.util.spec.ts +366 -366
- package/src/_modules/discord-assistant/_collections/dias.util.ts +132 -132
- package/src/_modules/discord-assistant/_models/dias-global-settings.interface.ts +19 -19
- package/src/_modules/discord-assistant/_models/dias-knowledge.data-model.ts +52 -52
- package/src/_modules/discord-assistant/_services/dias-chunk.data-service.ts +177 -177
- package/src/_modules/discord-assistant/_services/dias-io.control-service.spec.ts +108 -108
- package/src/_modules/discord-assistant/_services/dias-io.control-service.ts +69 -69
- package/src/_modules/discord-assistant/_services/dias-main.control-service.spec.ts +22 -22
- package/src/_modules/discord-assistant/_services/dias-main.control-service.ts +27 -27
- package/src/_modules/discord-assistant/_services/dias.service-base.spec.ts +195 -195
- package/src/_modules/discord-assistant/_services/dias.service-base.ts +76 -76
- package/src/_modules/discord-assistant/index.ts +38 -38
- package/src/_modules/discord-assistant-voiced/_services/dias-discord-bot.control-service.spec.ts +34 -34
- package/src/_modules/discord-assistant-voiced/_services/dias-discord-bot.control-service.ts +11 -11
- package/src/_modules/discord-assistant-voiced/index.ts +36 -36
- package/src/_modules/discord-bot/_collections/dibo-default-commands.const.ts +16 -16
- package/src/_modules/discord-bot/_collections/dibo-global-settings.conts.ts +55 -55
- package/src/_modules/discord-bot/_collections/dibo-operations.util.spec.ts +214 -214
- package/src/_modules/discord-bot/_collections/dibo-operations.util.ts +387 -387
- package/src/_modules/discord-bot/_models/dibo-command.interface.ts +12 -12
- package/src/_modules/discord-bot/_models/dibo-global-settings.interface.ts +98 -98
- package/src/_modules/discord-bot/_models/dibo-last-mention-date.inteface.ts +7 -7
- package/src/_modules/discord-bot/_models/dibo-last-message-date.interface.ts +6 -6
- package/src/_modules/discord-bot/_services/dibo-commands.control-service.spec.ts +154 -154
- package/src/_modules/discord-bot/_services/dibo-commands.control-service.ts +153 -153
- package/src/_modules/discord-bot/_services/dibo-io.control-service.spec.ts +264 -264
- package/src/_modules/discord-bot/_services/dibo-io.control-service.ts +306 -306
- package/src/_modules/discord-bot/_services/dibo-main.control-service.spec.ts +408 -408
- package/src/_modules/discord-bot/_services/dibo-main.control-service.ts +487 -487
- package/src/_modules/discord-bot/_services/dibo-routines.control-service.spec.ts +105 -105
- package/src/_modules/discord-bot/index.ts +36 -36
- package/src/_modules/local-vector-search/_enums/lvs-search-mode.enum.ts +19 -19
- package/src/_modules/local-vector-search/_models/lvs-search-result.interface.ts +17 -17
- package/src/_modules/local-vector-search/_services/lvs-doc-chunk-data.service.spec.ts +418 -418
- package/src/_modules/local-vector-search/_services/lvs-doc-chunk-data.service.ts +276 -276
- package/src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.spec.ts +345 -345
- package/src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.ts +330 -330
- package/src/_modules/local-vector-search/_services/lvs-vector-pool.control-service.spec.ts +393 -393
- package/src/_modules/local-vector-search/_services/lvs-vector-pool.control-service.ts +220 -220
- package/src/_modules/local-vector-search/index.ts +11 -11
- package/src/_modules/messaging/README.md +354 -354
- package/src/_modules/messaging/_collections/get-messaging-routing-module.util.ts +26 -26
- package/src/_modules/messaging/_collections/msg-global-settings.const.ts +22 -22
- package/src/_modules/messaging/_collections/msg.util.spec.ts +226 -226
- package/src/_modules/messaging/_models/msg-global-settings.interface.ts +37 -37
- package/src/_modules/messaging/_services/msg-conversation.data-service.ts +146 -146
- package/src/_modules/messaging/_services/msg-events.service.spec.ts +219 -219
- package/src/_modules/messaging/_services/msg-events.service.ts +267 -267
- package/src/_modules/messaging/_services/msg-integration.control-service.ts +179 -179
- package/src/_modules/messaging/_services/msg-main.control-service.spec.ts +147 -147
- package/src/_modules/messaging/_services/msg-main.control-service.ts +571 -571
- package/src/_modules/messaging/_services/msg-message.data-service.ts +129 -129
- package/src/_modules/messaging/_services/msg.controller.spec.ts +201 -201
- package/src/_modules/messaging/index.ts +30 -30
- package/src/_modules/mock/app-extended-server.mock.ts +201 -201
- package/src/_modules/mock/app-integration-test.mock.ts +51 -51
- package/src/_modules/mock/app-params.mock.spec.ts +21 -21
- package/src/_modules/mock/app-params.mock.ts +9 -9
- package/src/_modules/mock/app-server.mock.ts +188 -188
- package/src/_modules/mock/auth-service.mock.spec.ts +47 -47
- package/src/_modules/mock/auth-service.mock.ts +28 -28
- package/src/_modules/mock/controller.mock.spec.ts +26 -26
- package/src/_modules/mock/controller.mock.ts +16 -16
- package/src/_modules/mock/data-model.mock.spec.ts +111 -111
- package/src/_modules/mock/data-model.mock.ts +82 -82
- package/src/_modules/mock/email-service-collection.mock.spec.ts +24 -24
- package/src/_modules/mock/email-service-collection.mock.ts +15 -15
- package/src/_modules/mock/email-service.mock.spec.ts +17 -17
- package/src/_modules/mock/email-service.mock.ts +20 -20
- package/src/_modules/mock/email-template.mock.html +14 -14
- package/src/_modules/mock/endpoint.mock.ts +91 -91
- package/src/_modules/mock/socket-client.mock.spec.ts +40 -40
- package/src/_modules/mock/socket-client.mock.ts +45 -45
- package/src/_modules/mock/socket-server.mock.spec.ts +44 -44
- package/src/_modules/mock/socket-server.mock.ts +46 -46
- package/src/_modules/oauth2/_routes/oauth2.controller.spec.ts +107 -107
- package/src/_modules/oauth2/_routes/oauth2.controller.ts +98 -98
- package/src/_modules/oauth2/_services/oauth2.auth-service.spec.ts +254 -254
- package/src/_modules/oauth2/_services/oauth2.auth-service.ts +232 -232
- package/src/_modules/oauth2/_services/oauth2.control-service.spec.ts +585 -585
- package/src/_modules/oauth2/_services/oauth2.control-service.ts +653 -653
- package/src/_modules/oauth2/index.ts +17 -17
- package/src/_modules/server/errors/errors.control-service.spec.ts +230 -230
- package/src/_modules/server/errors/errors.control-service.ts +69 -69
- package/src/_modules/server/errors/errors.controller.spec.ts +165 -165
- package/src/_modules/server/errors/errors.controller.ts +270 -270
- package/src/_modules/server/errors/errors.data-service.spec.ts +355 -355
- package/src/_modules/server/index.ts +30 -30
- package/src/_modules/server/server-status/server-status-snapshot.control-service.spec.ts +70 -70
- package/src/_modules/server/server-status/server-status-snapshot.control-service.ts +17 -17
- package/src/_modules/server/server-status/server-status-snapshot.data-service.spec.ts +77 -77
- package/src/_modules/server/server-status/server-status-snapshot.data-service.ts +37 -37
- package/src/_modules/server/server-status/server-status.control-service.spec.ts +516 -516
- package/src/_modules/server/server-status/server-status.control-service.ts +336 -336
- package/src/_modules/server/server-status/server-status.controller.spec.ts +156 -156
- package/src/_modules/server/server-status/server-status.controller.ts +131 -131
- package/src/_modules/socket/_enums/socket-security.enum.ts +11 -11
- package/src/_modules/socket/_models/socket-client-service-params.control-model.spec.ts +32 -32
- package/src/_modules/socket/_models/socket-client-service-params.control-model.ts +22 -22
- package/src/_modules/socket/_models/socket-presence.control-model.spec.ts +164 -164
- package/src/_modules/socket/_models/socket-presence.control-model.ts +210 -210
- package/src/_modules/socket/_models/socket-server-service-params.control-model.spec.ts +46 -46
- package/src/_modules/socket/_models/socket-server-service-params.control-model.ts +22 -22
- package/src/_modules/socket/_services/socket-client.service.spec.ts +15 -15
- package/src/_modules/socket/_services/socket-client.service.ts +260 -260
- package/src/_modules/socket/_services/socket-server.service.spec.ts +11 -11
- package/src/_modules/socket/app-extended.integration.spec.ts +85 -85
- package/src/_modules/socket/app-extended.server.ts +630 -630
- package/src/_modules/socket/index.ts +42 -42
- package/src/_modules/test/get-test-routing-module.util.spec.ts +28 -28
- package/src/_modules/test/get-test-routing-module.util.ts +23 -23
- package/src/_modules/test/index.ts +11 -11
- package/src/_modules/test/test.controller.spec.ts +72 -72
- package/src/_modules/test/test.controller.ts +115 -115
- package/src/_modules/usage/get-usage-routing-module.util.ts +22 -22
- package/src/_modules/usage/index.ts +15 -15
- package/src/_modules/usage/usage.controller.spec.ts +81 -81
- package/src/_modules/usage/usage.controller.ts +126 -126
- package/src/_modules/usage/usage.data-service.spec.ts +332 -332
- package/src/_modules/usage/usage.data-service.ts +185 -185
- package/src/_services/base/api.service-base.spec.ts +125 -125
- package/src/_services/base/api.service-base.ts +74 -74
- package/src/_services/base/archive-data.service.spec.ts +196 -196
- package/src/_services/base/archive-data.service.ts +216 -216
- package/src/_services/base/data.service.spec.ts +493 -493
- package/src/_services/base/data.service.ts +2525 -2525
- package/src/_services/base/db.service.spec.ts +73 -73
- package/src/_services/base/db.service.ts +1575 -1575
- package/src/_services/base/singleton.service-base.spec.ts +28 -28
- package/src/_services/base/singleton.service-base.ts +24 -24
- package/src/_services/base/singleton.service.spec.ts +114 -114
- package/src/_services/base/singleton.service.ts +38 -38
- package/src/_services/core/api.service.spec.ts +140 -140
- package/src/_services/core/auth.service.spec.ts +159 -159
- package/src/_services/core/auth.service.ts +174 -174
- package/src/_services/core/email.service.spec.ts +85 -85
- package/src/_services/core/email.service.ts +742 -742
- package/src/_services/core/global.service.spec.ts +275 -275
- package/src/_services/core/global.service.ts +461 -461
- package/src/_services/core/service-collection.service.spec.ts +46 -46
- package/src/_services/core/service-collection.service.ts +6 -6
- package/src/_services/route/controller.service.spec.ts +53 -53
- package/src/_services/route/controller.service.ts +148 -148
- package/src/_services/route/routing-module.service.spec.ts +98 -98
- package/src/_services/route/routing-module.service.ts +330 -330
- package/src/_services/shared.static-service.spec.ts +99 -99
- package/src/_services/shared.static-service.ts +78 -78
- package/src/index.ts +94 -94
- package/tsconfig.app.json +12 -12
- package/tsconfig.json +42 -42
- package/build/_modules/logs/get-logs-routing-module.util.d.ts +0 -19
- package/build/_modules/logs/get-logs-routing-module.util.d.ts.map +0 -1
- package/build/_modules/logs/get-logs-routing-module.util.js +0 -32
- package/build/_modules/logs/get-logs-routing-module.util.js.map +0 -1
- package/build/_modules/logs/index.d.ts +0 -4
- package/build/_modules/logs/index.d.ts.map +0 -1
- package/build/_modules/logs/index.js +0 -10
- package/build/_modules/logs/index.js.map +0 -1
- package/build/_modules/logs/log-buffer.service.d.ts +0 -38
- package/build/_modules/logs/log-buffer.service.d.ts.map +0 -1
- package/build/_modules/logs/log-buffer.service.js +0 -97
- package/build/_modules/logs/log-buffer.service.js.map +0 -1
- package/build/_modules/logs/logs.controller.d.ts +0 -27
- package/build/_modules/logs/logs.controller.d.ts.map +0 -1
- package/build/_modules/logs/logs.controller.js +0 -90
- package/build/_modules/logs/logs.controller.js.map +0 -1
- package/build/_modules/logs/logs.service.d.ts +0 -40
- package/build/_modules/logs/logs.service.d.ts.map +0 -1
- package/build/_modules/logs/logs.service.js +0 -97
- package/build/_modules/logs/logs.service.js.map +0 -1
- package/src/_modules/logs/get-logs-routing-module.util.ts +0 -36
- package/src/_modules/logs/index.ts +0 -3
- package/src/_modules/logs/log-buffer.service.ts +0 -101
- package/src/_modules/logs/logs.controller.ts +0 -109
- package/src/_modules/logs/logs.service.ts +0 -100
|
@@ -1,487 +1,487 @@
|
|
|
1
|
-
import { Request, Response } from 'express';
|
|
2
|
-
|
|
3
|
-
import { DyFM_Error, DyFM_HttpCallType, DyFM_Metadata, DyFM_SearchResult, DyFM_StringCase } from '@futdevpro/fsm-dynamo';
|
|
4
|
-
|
|
5
|
-
import { DyNTS_DataService } from '../../../_services/base/data.service';
|
|
6
|
-
import { DyNTS_Endpoint_Params } from '../../../_models/control-models/endpoint-params.control-model';
|
|
7
|
-
import { DyNTS_global_settings } from '../../../_collections/global-settings.const';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Alapértelmezett endpoint-ok létrehozásához használt utility class.
|
|
11
|
-
* Az Organizer Modules mintáját követve generálja a standard CRUD endpoint-okat.
|
|
12
|
-
*
|
|
13
|
-
* @see {@link DyNTS_Controller} - A controller-ben használható a setupEndpoints metódusban
|
|
14
|
-
*/
|
|
15
|
-
export class DyNTS_DefaultEndpoints_Util {
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* GET endpoint létrehozása egy adott ID alapján történő adatlekéréshez.
|
|
19
|
-
*
|
|
20
|
-
* @param set.entityName - Az entitás neve (pl. "Task", "Note"),
|
|
21
|
-
* ebből generálódik az endpoint neve és az ID paraméter neve
|
|
22
|
-
* @param set.dataServiceClass - A DataService osztály konstruktora
|
|
23
|
-
* @param set.endpointPath - Az endpoint path (pl. '/:userId/task/get/:taskId')
|
|
24
|
-
* @param set.authService - Az auth service, amely tartalmazza az
|
|
25
|
-
* authenticate_tokenSelf metódust
|
|
26
|
-
* @param set.idParamName - Az ID paraméter neve a request-ben
|
|
27
|
-
* (opcionális, alapértelmezetten: {entityName.toLowerCase()}Id)
|
|
28
|
-
* @returns DyNTS_Endpoint_Params instance a GET endpoint-hoz
|
|
29
|
-
*
|
|
30
|
-
* @example
|
|
31
|
-
* ```typescript
|
|
32
|
-
* const getEndpoint = DyNTS_DefaultEndpoints_Util.getGetEndpoint({
|
|
33
|
-
* entityName: 'Task',
|
|
34
|
-
* dataServiceClass: Task_DataService,
|
|
35
|
-
* endpointPath: FDP_organizerApiEnv_endpoints.tasks.task.getTask,
|
|
36
|
-
* authService: this.auth_CS,
|
|
37
|
-
* });
|
|
38
|
-
* ```
|
|
39
|
-
*/
|
|
40
|
-
static getGetEndpoint<T_Data extends DyFM_Metadata>(
|
|
41
|
-
set: {
|
|
42
|
-
entityName: string;
|
|
43
|
-
dataServiceClass: new (set: { data?: T_Data; issuer: string }) => DyNTS_DataService<T_Data>;
|
|
44
|
-
endpointPath: string;
|
|
45
|
-
authService: { authenticate_tokenSelf: (req: Request, res: Response) => Promise<void> };
|
|
46
|
-
idParamName?: string;
|
|
47
|
-
}
|
|
48
|
-
): DyNTS_Endpoint_Params {
|
|
49
|
-
const idParamName: string = set.idParamName ?? `${set.entityName.toLowerCase()}Id`;
|
|
50
|
-
const endpointName: string = `get${set.entityName}`;
|
|
51
|
-
|
|
52
|
-
if (!set.endpointPath.includes(`:${idParamName}`)) {
|
|
53
|
-
throw new DyFM_Error({
|
|
54
|
-
status: 406,
|
|
55
|
-
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DEU-GE0`,
|
|
56
|
-
message: `endpoint path does not contain the ID parameter: ${idParamName}`,
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if (!set.endpointPath.includes(`:userId`)) {
|
|
61
|
-
throw new DyFM_Error({
|
|
62
|
-
status: 406,
|
|
63
|
-
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DEU-GME0`,
|
|
64
|
-
message: `endpoint path does not contain the user ID parameter: userId`,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
return new DyNTS_Endpoint_Params({
|
|
69
|
-
name: endpointName,
|
|
70
|
-
type: DyFM_HttpCallType.get,
|
|
71
|
-
endpoint: set.endpointPath,
|
|
72
|
-
preProcesses: [set.authService.authenticate_tokenSelf],
|
|
73
|
-
tasks: [
|
|
74
|
-
async (req: Request, res: Response, issuer: string): Promise<void> => {
|
|
75
|
-
const dataService: DyNTS_DataService<T_Data> = new set.dataServiceClass({
|
|
76
|
-
issuer: issuer,
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
const data: T_Data = await dataService.getDataById(req.params[idParamName]);
|
|
80
|
-
|
|
81
|
-
res.send(dataService.getProvidedData(data));
|
|
82
|
-
},
|
|
83
|
-
],
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
static getGetMyEndpoint<T_Data extends DyFM_Metadata>(
|
|
88
|
-
set: {
|
|
89
|
-
entityName: string;
|
|
90
|
-
dataServiceClass: new (set: { data?: T_Data; issuer: string }) => DyNTS_DataService<T_Data>;
|
|
91
|
-
endpointPath: string;
|
|
92
|
-
authService: { authenticate_tokenSelf: (req: Request, res: Response) => Promise<void> };
|
|
93
|
-
}
|
|
94
|
-
): DyNTS_Endpoint_Params {
|
|
95
|
-
const endpointName: string = `getMy${set.entityName}s`;
|
|
96
|
-
|
|
97
|
-
if (!set.endpointPath.includes(`:userId`)) {
|
|
98
|
-
throw new DyFM_Error({
|
|
99
|
-
status: 406,
|
|
100
|
-
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DEU-GME0`,
|
|
101
|
-
message: `endpoint path does not contain the user ID parameter: userId`,
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
return new DyNTS_Endpoint_Params({
|
|
106
|
-
name: endpointName,
|
|
107
|
-
type: DyFM_HttpCallType.get,
|
|
108
|
-
endpoint: set.endpointPath,
|
|
109
|
-
preProcesses: [set.authService.authenticate_tokenSelf],
|
|
110
|
-
tasks: [
|
|
111
|
-
async (req: Request, res: Response, issuer: string): Promise<void> => {
|
|
112
|
-
const dataService: DyNTS_DataService<T_Data> = new set.dataServiceClass({
|
|
113
|
-
issuer: issuer,
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
const dataList: T_Data[] = await dataService.getDataListByDependencyId({ userId: req.params.userId });
|
|
117
|
-
|
|
118
|
-
res.send(dataService.getProvidedDataList(dataList));
|
|
119
|
-
},
|
|
120
|
-
],
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* POST endpoint létrehozása adatok kereséséhez.
|
|
126
|
-
*
|
|
127
|
-
* @param set.entityName - Az entitás neve (pl. "Task", "Note"),
|
|
128
|
-
* ebből generálódik az endpoint neve
|
|
129
|
-
* @param set.dataServiceClass - A DataService osztály konstruktora
|
|
130
|
-
* @param set.endpointPath - Az endpoint path (pl. '/:userId/tasks/search')
|
|
131
|
-
* @param set.authService - Az auth service, amely tartalmazza az
|
|
132
|
-
* authenticate_tokenSelf metódust
|
|
133
|
-
* @returns DyNTS_Endpoint_Params instance a POST search endpoint-hoz
|
|
134
|
-
*
|
|
135
|
-
* @example
|
|
136
|
-
* ```typescript
|
|
137
|
-
* const searchEndpoint = DyNTS_DefaultEndpoints_Util.getSearchEndpoint({
|
|
138
|
-
* entityName: 'Task',
|
|
139
|
-
* dataServiceClass: Task_DataService,
|
|
140
|
-
* endpointPath: FDP_organizerApiEnv_endpoints.tasks.task.searchTasks,
|
|
141
|
-
* authService: this.auth_CS,
|
|
142
|
-
* });
|
|
143
|
-
* ```
|
|
144
|
-
*/
|
|
145
|
-
static getSearchEndpoint<T_Data extends DyFM_Metadata>(
|
|
146
|
-
set: {
|
|
147
|
-
entityName: string;
|
|
148
|
-
dataServiceClass: new (set: { data?: T_Data; issuer: string }) => DyNTS_DataService<T_Data>;
|
|
149
|
-
endpointPath: string;
|
|
150
|
-
authService: { authenticate_tokenSelf: (req: Request, res: Response) => Promise<void> };
|
|
151
|
-
}
|
|
152
|
-
): DyNTS_Endpoint_Params {
|
|
153
|
-
const endpointName: string = `search${set.entityName}s`;
|
|
154
|
-
|
|
155
|
-
if (!set.endpointPath.includes(`:userId`)) {
|
|
156
|
-
throw new DyFM_Error({
|
|
157
|
-
status: 406,
|
|
158
|
-
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DEU-SE0`,
|
|
159
|
-
message: `endpoint path does not contain the user ID parameter: userId`,
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
return new DyNTS_Endpoint_Params({
|
|
164
|
-
name: endpointName,
|
|
165
|
-
type: DyFM_HttpCallType.post,
|
|
166
|
-
endpoint: set.endpointPath,
|
|
167
|
-
preProcesses: [set.authService.authenticate_tokenSelf],
|
|
168
|
-
tasks: [
|
|
169
|
-
async (req: Request, res: Response, issuer: string): Promise<void> => {
|
|
170
|
-
const dataService: DyNTS_DataService<T_Data> = new set.dataServiceClass({
|
|
171
|
-
issuer: issuer,
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
const searchResults: DyFM_SearchResult<T_Data> = await dataService.searchData(req.body);
|
|
175
|
-
|
|
176
|
-
searchResults.results = dataService.getProvidedDataList(searchResults.results);
|
|
177
|
-
|
|
178
|
-
res.send(searchResults);
|
|
179
|
-
},
|
|
180
|
-
],
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* POST endpoint létrehozása adatok módosításához vagy létrehozásához.
|
|
186
|
-
* A modify végpontok mindig create végpontok is egyben.
|
|
187
|
-
*
|
|
188
|
-
* @param set.entityName - Az entitás neve (pl. "Task", "Note"),
|
|
189
|
-
* ebből generálódik az endpoint neve
|
|
190
|
-
* @param set.dataServiceClass - A DataService osztály konstruktora
|
|
191
|
-
* @param set.endpointPath - Az endpoint path (pl. '/:userId/task/modify')
|
|
192
|
-
* @param set.authService - Az auth service, amely tartalmazza az
|
|
193
|
-
* authenticate_tokenSelf metódust
|
|
194
|
-
* @returns DyNTS_Endpoint_Params instance a POST modify endpoint-hoz
|
|
195
|
-
*
|
|
196
|
-
* @example
|
|
197
|
-
* ```typescript
|
|
198
|
-
* const modifyEndpoint = DyNTS_DefaultEndpoints_Util.getModifyEndpoint({
|
|
199
|
-
* entityName: 'Task',
|
|
200
|
-
* dataServiceClass: Task_DataService,
|
|
201
|
-
* endpointPath: FDP_organizerApiEnv_endpoints.tasks.task.modifyTask,
|
|
202
|
-
* authService: this.auth_CS,
|
|
203
|
-
* });
|
|
204
|
-
* ```
|
|
205
|
-
*/
|
|
206
|
-
static getModifyEndpoint<T_Data extends DyFM_Metadata>(
|
|
207
|
-
set: {
|
|
208
|
-
entityName: string;
|
|
209
|
-
dataServiceClass: new (set: { data?: T_Data; issuer: string }) => DyNTS_DataService<T_Data>;
|
|
210
|
-
endpointPath: string;
|
|
211
|
-
authService: { authenticate_tokenSelf: (req: Request, res: Response) => Promise<void> };
|
|
212
|
-
}
|
|
213
|
-
): DyNTS_Endpoint_Params {
|
|
214
|
-
const endpointName: string = `modify${set.entityName}`;
|
|
215
|
-
|
|
216
|
-
if (!set.endpointPath.includes(`:userId`)) {
|
|
217
|
-
throw new DyFM_Error({
|
|
218
|
-
status: 406,
|
|
219
|
-
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DEU-ME0`,
|
|
220
|
-
message: `endpoint path does not contain the user ID parameter: userId`,
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
return new DyNTS_Endpoint_Params({
|
|
225
|
-
name: endpointName,
|
|
226
|
-
type: DyFM_HttpCallType.post,
|
|
227
|
-
endpoint: set.endpointPath,
|
|
228
|
-
preProcesses: [set.authService.authenticate_tokenSelf],
|
|
229
|
-
tasks: [
|
|
230
|
-
async (req: Request, res: Response, issuer: string): Promise<void> => {
|
|
231
|
-
const dataService: DyNTS_DataService<T_Data> = new set.dataServiceClass({
|
|
232
|
-
issuer: issuer,
|
|
233
|
-
});
|
|
234
|
-
|
|
235
|
-
const data: T_Data = await dataService.saveData(req.body);
|
|
236
|
-
|
|
237
|
-
res.send(dataService.getProvidedData(data));
|
|
238
|
-
},
|
|
239
|
-
],
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
/**
|
|
244
|
-
* DELETE endpoint létrehozása egy adott ID alapján történő adattörléshez.
|
|
245
|
-
*
|
|
246
|
-
* @param set.entityName - Az entitás neve (pl. "Task", "Note"),
|
|
247
|
-
* ebből generálódik az endpoint neve és az ID paraméter neve
|
|
248
|
-
* @param set.dataServiceClass - A DataService osztály konstruktora
|
|
249
|
-
* @param set.endpointPath - Az endpoint path (pl. '/:userId/task/delete/:taskId')
|
|
250
|
-
* @param set.authService - Az auth service, amely tartalmazza az
|
|
251
|
-
* authenticate_tokenSelf metódust
|
|
252
|
-
* @param set.idParamName - Az ID paraméter neve a request-ben
|
|
253
|
-
* (opcionális, alapértelmezetten: {entityName.toLowerCase()}Id)
|
|
254
|
-
* @returns DyNTS_Endpoint_Params instance a DELETE endpoint-hoz
|
|
255
|
-
*
|
|
256
|
-
* @example
|
|
257
|
-
* ```typescript
|
|
258
|
-
* const deleteEndpoint = DyNTS_DefaultEndpoints_Util.getDeleteEndpoint({
|
|
259
|
-
* entityName: 'Task',
|
|
260
|
-
* dataServiceClass: Task_DataService,
|
|
261
|
-
* endpointPath: FDP_organizerApiEnv_endpoints.tasks.task.deleteTask,
|
|
262
|
-
* authService: this.auth_CS,
|
|
263
|
-
* });
|
|
264
|
-
* ```
|
|
265
|
-
*/
|
|
266
|
-
static getDeleteEndpoint<T_Data extends DyFM_Metadata>(
|
|
267
|
-
set: {
|
|
268
|
-
entityName: string;
|
|
269
|
-
dataServiceClass: new (set: { data?: T_Data; issuer: string }) => DyNTS_DataService<T_Data>;
|
|
270
|
-
endpointPath: string;
|
|
271
|
-
authService: { authenticate_tokenSelf: (req: Request, res: Response) => Promise<void> };
|
|
272
|
-
idParamName?: string;
|
|
273
|
-
}
|
|
274
|
-
): DyNTS_Endpoint_Params {
|
|
275
|
-
const idParamName: string = set.idParamName ?? `${set.entityName.toLowerCase()}Id`;
|
|
276
|
-
const endpointName: string = `delete${set.entityName}`;
|
|
277
|
-
|
|
278
|
-
// Ellenőrizzük a casing-ignore módon, hogy az endpoint path tartalmazza-e az ID paramétert
|
|
279
|
-
if (!DyFM_StringCase.includesIgnoreCase(set.endpointPath, idParamName)) {
|
|
280
|
-
throw new DyFM_Error({
|
|
281
|
-
status: 406,
|
|
282
|
-
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DEU-DE0`,
|
|
283
|
-
message: `endpoint path does not contain the ID parameter: ${idParamName}`,
|
|
284
|
-
});
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
if (!set.endpointPath.includes(`:userId`)) {
|
|
288
|
-
throw new DyFM_Error({
|
|
289
|
-
status: 406,
|
|
290
|
-
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DEU-DE0`,
|
|
291
|
-
message: `endpoint path does not contain the user ID parameter: userId`,
|
|
292
|
-
});
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
return new DyNTS_Endpoint_Params({
|
|
296
|
-
name: endpointName,
|
|
297
|
-
type: DyFM_HttpCallType.delete,
|
|
298
|
-
endpoint: set.endpointPath,
|
|
299
|
-
preProcesses: [set.authService.authenticate_tokenSelf],
|
|
300
|
-
tasks: [
|
|
301
|
-
async (req: Request, res: Response, issuer: string): Promise<void> => {
|
|
302
|
-
const dataService: DyNTS_DataService<T_Data> = new set.dataServiceClass({
|
|
303
|
-
issuer: issuer,
|
|
304
|
-
});
|
|
305
|
-
|
|
306
|
-
await dataService.deleteData(req.params[idParamName]);
|
|
307
|
-
|
|
308
|
-
res.send({ result: 'deleted' });
|
|
309
|
-
},
|
|
310
|
-
],
|
|
311
|
-
});
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
/**
|
|
315
|
-
* PATCH endpoint létrehozása részleges adatmódosításhoz.
|
|
316
|
-
* A PATCH endpoint csak a megadott mezőket módosítja, nem cseréli le az egész objektumot.
|
|
317
|
-
*
|
|
318
|
-
* @param set.entityName - Az entitás neve (pl. "Task", "Note"),
|
|
319
|
-
* ebből generálódik az endpoint neve
|
|
320
|
-
* @param set.dataServiceClass - A DataService osztály konstruktora
|
|
321
|
-
* @param set.endpointPath - Az endpoint path (pl. '/:userId/task/patch')
|
|
322
|
-
* @param set.authService - Az auth service, amely tartalmazza az
|
|
323
|
-
* authenticate_tokenSelf metódust
|
|
324
|
-
* @returns DyNTS_Endpoint_Params instance a PATCH endpoint-hoz
|
|
325
|
-
*
|
|
326
|
-
* @example
|
|
327
|
-
* ```typescript
|
|
328
|
-
* const patchEndpoint = DyNTS_DefaultEndpoints_Util.getPatchEndpoint({
|
|
329
|
-
* entityName: 'Task',
|
|
330
|
-
* dataServiceClass: Task_DataService,
|
|
331
|
-
* endpointPath: '/:userId/task/patch',
|
|
332
|
-
* authService: this.auth_CS,
|
|
333
|
-
* });
|
|
334
|
-
* ```
|
|
335
|
-
*/
|
|
336
|
-
static getPatchEndpoint<T_Data extends DyFM_Metadata>(
|
|
337
|
-
set: {
|
|
338
|
-
entityName: string;
|
|
339
|
-
dataServiceClass: new (set: { data?: T_Data; issuer: string }) => DyNTS_DataService<T_Data>;
|
|
340
|
-
endpointPath: string;
|
|
341
|
-
authService: { authenticate_tokenSelf: (req: Request, res: Response) => Promise<void> };
|
|
342
|
-
}
|
|
343
|
-
): DyNTS_Endpoint_Params {
|
|
344
|
-
const endpointName: string = `patch${set.entityName}`;
|
|
345
|
-
|
|
346
|
-
if (!set.endpointPath.includes(`:userId`)) {
|
|
347
|
-
throw new DyFM_Error({
|
|
348
|
-
status: 406,
|
|
349
|
-
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DEU-PE0`,
|
|
350
|
-
message: `endpoint path does not contain the user ID parameter: userId`,
|
|
351
|
-
});
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
return new DyNTS_Endpoint_Params({
|
|
355
|
-
name: endpointName,
|
|
356
|
-
type: DyFM_HttpCallType.patch,
|
|
357
|
-
endpoint: set.endpointPath,
|
|
358
|
-
preProcesses: [set.authService.authenticate_tokenSelf],
|
|
359
|
-
tasks: [
|
|
360
|
-
async (req: Request, res: Response, issuer: string): Promise<void> => {
|
|
361
|
-
const dataService: DyNTS_DataService<T_Data> = new set.dataServiceClass({
|
|
362
|
-
issuer: issuer,
|
|
363
|
-
});
|
|
364
|
-
|
|
365
|
-
const data: T_Data = await dataService.patchData(req.body);
|
|
366
|
-
|
|
367
|
-
res.send(dataService.getProvidedData(data));
|
|
368
|
-
},
|
|
369
|
-
],
|
|
370
|
-
});
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
/**
|
|
374
|
-
* Összes alapértelmezett endpoint létrehozása egy lépésben.
|
|
375
|
-
* Visszaadja a GET, SEARCH, MODIFY, PATCH és DELETE endpoint-okat egy tömbben.
|
|
376
|
-
*
|
|
377
|
-
* @param set.entityName - Az entitás neve (pl. "Task", "Note")
|
|
378
|
-
* @param set.dataServiceClass - A DataService osztály konstruktora
|
|
379
|
-
* @param set.endpoints - Az endpoint path-ek objektuma
|
|
380
|
-
* @param set.endpoints.get - GET endpoint path
|
|
381
|
-
* @param set.endpoints.search - SEARCH endpoint path
|
|
382
|
-
* @param set.endpoints.modify - MODIFY endpoint path
|
|
383
|
-
* @param set.endpoints.patch - PATCH endpoint path (opcionális)
|
|
384
|
-
* @param set.endpoints.delete - DELETE endpoint path
|
|
385
|
-
* @param set.authService - Az auth service, amely tartalmazza az
|
|
386
|
-
* authenticate_tokenSelf metódust
|
|
387
|
-
* @param set.idParamName - Az ID paraméter neve a request-ben
|
|
388
|
-
* (opcionális, alapértelmezetten: {entityName.toLowerCase()}Id)
|
|
389
|
-
* @returns DyNTS_Endpoint_Params tömb az összes alapértelmezett endpoint-tal
|
|
390
|
-
*
|
|
391
|
-
* @example
|
|
392
|
-
* ```typescript
|
|
393
|
-
* setupEndpoints(): void {
|
|
394
|
-
* this.endpoints = [
|
|
395
|
-
* ...DyNTS_DefaultEndpoints_Util.getAllDefaultEndpoints({
|
|
396
|
-
* entityName: 'Task',
|
|
397
|
-
* dataServiceClass: Task_DataService,
|
|
398
|
-
* endpoints: {
|
|
399
|
-
* get: FDP_organizerApiEnv_endpoints.tasks.task.getTask,
|
|
400
|
-
* search: FDP_organizerApiEnv_endpoints.tasks.task.searchTasks,
|
|
401
|
-
* modify: FDP_organizerApiEnv_endpoints.tasks.task.modifyTask,
|
|
402
|
-
* patch: '/:userId/task/patch',
|
|
403
|
-
* delete: FDP_organizerApiEnv_endpoints.tasks.task.deleteTask,
|
|
404
|
-
* },
|
|
405
|
-
* authService: this.auth_CS,
|
|
406
|
-
* }),
|
|
407
|
-
* ];
|
|
408
|
-
* }
|
|
409
|
-
* ```
|
|
410
|
-
*/
|
|
411
|
-
static getAllDefaultEndpoints<T_Data extends DyFM_Metadata>(
|
|
412
|
-
set: {
|
|
413
|
-
entityName: string;
|
|
414
|
-
dataServiceClass: new (set: { data?: T_Data; issuer: string }) => DyNTS_DataService<T_Data>;
|
|
415
|
-
endpoints: {
|
|
416
|
-
get?: string;
|
|
417
|
-
getMy?: string;
|
|
418
|
-
search?: string;
|
|
419
|
-
modify: string;
|
|
420
|
-
patch?: string;
|
|
421
|
-
delete?: string;
|
|
422
|
-
};
|
|
423
|
-
authService: { authenticate_tokenSelf: (req: Request, res: Response) => Promise<void> };
|
|
424
|
-
idParamName?: string;
|
|
425
|
-
}
|
|
426
|
-
): DyNTS_Endpoint_Params[] {
|
|
427
|
-
const endpoints: DyNTS_Endpoint_Params[] = [];
|
|
428
|
-
|
|
429
|
-
if (set.endpoints.get) {
|
|
430
|
-
endpoints.push(this.getGetEndpoint<T_Data>({
|
|
431
|
-
entityName: set.entityName,
|
|
432
|
-
dataServiceClass: set.dataServiceClass,
|
|
433
|
-
endpointPath: set.endpoints.get,
|
|
434
|
-
authService: set.authService,
|
|
435
|
-
idParamName: set.idParamName,
|
|
436
|
-
}));
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
if (set.endpoints.getMy) {
|
|
440
|
-
endpoints.push(this.getGetMyEndpoint<T_Data>({
|
|
441
|
-
entityName: set.entityName,
|
|
442
|
-
dataServiceClass: set.dataServiceClass,
|
|
443
|
-
endpointPath: set.endpoints.getMy,
|
|
444
|
-
authService: set.authService,
|
|
445
|
-
}));
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
if (set.endpoints.search) {
|
|
449
|
-
endpoints.push(this.getSearchEndpoint<T_Data>({
|
|
450
|
-
entityName: set.entityName,
|
|
451
|
-
dataServiceClass: set.dataServiceClass,
|
|
452
|
-
endpointPath: set.endpoints.search,
|
|
453
|
-
authService: set.authService,
|
|
454
|
-
}));
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
if (set.endpoints.modify) {
|
|
458
|
-
endpoints.push(this.getModifyEndpoint<T_Data>({
|
|
459
|
-
entityName: set.entityName,
|
|
460
|
-
dataServiceClass: set.dataServiceClass,
|
|
461
|
-
endpointPath: set.endpoints.modify,
|
|
462
|
-
authService: set.authService,
|
|
463
|
-
}));
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
if (set.endpoints.patch) {
|
|
467
|
-
endpoints.push(this.getPatchEndpoint<T_Data>({
|
|
468
|
-
entityName: set.entityName,
|
|
469
|
-
dataServiceClass: set.dataServiceClass,
|
|
470
|
-
endpointPath: set.endpoints.patch,
|
|
471
|
-
authService: set.authService,
|
|
472
|
-
}));
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
if (set.endpoints.delete) {
|
|
476
|
-
endpoints.push(this.getDeleteEndpoint<T_Data>({
|
|
477
|
-
entityName: set.entityName,
|
|
478
|
-
dataServiceClass: set.dataServiceClass,
|
|
479
|
-
endpointPath: set.endpoints.delete,
|
|
480
|
-
authService: set.authService,
|
|
481
|
-
idParamName: set.idParamName,
|
|
482
|
-
}));
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
return endpoints;
|
|
486
|
-
}
|
|
487
|
-
}
|
|
1
|
+
import { Request, Response } from 'express';
|
|
2
|
+
|
|
3
|
+
import { DyFM_Error, DyFM_HttpCallType, DyFM_Metadata, DyFM_SearchResult, DyFM_StringCase } from '@futdevpro/fsm-dynamo';
|
|
4
|
+
|
|
5
|
+
import { DyNTS_DataService } from '../../../_services/base/data.service';
|
|
6
|
+
import { DyNTS_Endpoint_Params } from '../../../_models/control-models/endpoint-params.control-model';
|
|
7
|
+
import { DyNTS_global_settings } from '../../../_collections/global-settings.const';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Alapértelmezett endpoint-ok létrehozásához használt utility class.
|
|
11
|
+
* Az Organizer Modules mintáját követve generálja a standard CRUD endpoint-okat.
|
|
12
|
+
*
|
|
13
|
+
* @see {@link DyNTS_Controller} - A controller-ben használható a setupEndpoints metódusban
|
|
14
|
+
*/
|
|
15
|
+
export class DyNTS_DefaultEndpoints_Util {
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* GET endpoint létrehozása egy adott ID alapján történő adatlekéréshez.
|
|
19
|
+
*
|
|
20
|
+
* @param set.entityName - Az entitás neve (pl. "Task", "Note"),
|
|
21
|
+
* ebből generálódik az endpoint neve és az ID paraméter neve
|
|
22
|
+
* @param set.dataServiceClass - A DataService osztály konstruktora
|
|
23
|
+
* @param set.endpointPath - Az endpoint path (pl. '/:userId/task/get/:taskId')
|
|
24
|
+
* @param set.authService - Az auth service, amely tartalmazza az
|
|
25
|
+
* authenticate_tokenSelf metódust
|
|
26
|
+
* @param set.idParamName - Az ID paraméter neve a request-ben
|
|
27
|
+
* (opcionális, alapértelmezetten: {entityName.toLowerCase()}Id)
|
|
28
|
+
* @returns DyNTS_Endpoint_Params instance a GET endpoint-hoz
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* const getEndpoint = DyNTS_DefaultEndpoints_Util.getGetEndpoint({
|
|
33
|
+
* entityName: 'Task',
|
|
34
|
+
* dataServiceClass: Task_DataService,
|
|
35
|
+
* endpointPath: FDP_organizerApiEnv_endpoints.tasks.task.getTask,
|
|
36
|
+
* authService: this.auth_CS,
|
|
37
|
+
* });
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
static getGetEndpoint<T_Data extends DyFM_Metadata>(
|
|
41
|
+
set: {
|
|
42
|
+
entityName: string;
|
|
43
|
+
dataServiceClass: new (set: { data?: T_Data; issuer: string }) => DyNTS_DataService<T_Data>;
|
|
44
|
+
endpointPath: string;
|
|
45
|
+
authService: { authenticate_tokenSelf: (req: Request, res: Response) => Promise<void> };
|
|
46
|
+
idParamName?: string;
|
|
47
|
+
}
|
|
48
|
+
): DyNTS_Endpoint_Params {
|
|
49
|
+
const idParamName: string = set.idParamName ?? `${set.entityName.toLowerCase()}Id`;
|
|
50
|
+
const endpointName: string = `get${set.entityName}`;
|
|
51
|
+
|
|
52
|
+
if (!set.endpointPath.includes(`:${idParamName}`)) {
|
|
53
|
+
throw new DyFM_Error({
|
|
54
|
+
status: 406,
|
|
55
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DEU-GE0`,
|
|
56
|
+
message: `endpoint path does not contain the ID parameter: ${idParamName}`,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (!set.endpointPath.includes(`:userId`)) {
|
|
61
|
+
throw new DyFM_Error({
|
|
62
|
+
status: 406,
|
|
63
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DEU-GME0`,
|
|
64
|
+
message: `endpoint path does not contain the user ID parameter: userId`,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return new DyNTS_Endpoint_Params({
|
|
69
|
+
name: endpointName,
|
|
70
|
+
type: DyFM_HttpCallType.get,
|
|
71
|
+
endpoint: set.endpointPath,
|
|
72
|
+
preProcesses: [set.authService.authenticate_tokenSelf],
|
|
73
|
+
tasks: [
|
|
74
|
+
async (req: Request, res: Response, issuer: string): Promise<void> => {
|
|
75
|
+
const dataService: DyNTS_DataService<T_Data> = new set.dataServiceClass({
|
|
76
|
+
issuer: issuer,
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
const data: T_Data = await dataService.getDataById(req.params[idParamName]);
|
|
80
|
+
|
|
81
|
+
res.send(dataService.getProvidedData(data));
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
static getGetMyEndpoint<T_Data extends DyFM_Metadata>(
|
|
88
|
+
set: {
|
|
89
|
+
entityName: string;
|
|
90
|
+
dataServiceClass: new (set: { data?: T_Data; issuer: string }) => DyNTS_DataService<T_Data>;
|
|
91
|
+
endpointPath: string;
|
|
92
|
+
authService: { authenticate_tokenSelf: (req: Request, res: Response) => Promise<void> };
|
|
93
|
+
}
|
|
94
|
+
): DyNTS_Endpoint_Params {
|
|
95
|
+
const endpointName: string = `getMy${set.entityName}s`;
|
|
96
|
+
|
|
97
|
+
if (!set.endpointPath.includes(`:userId`)) {
|
|
98
|
+
throw new DyFM_Error({
|
|
99
|
+
status: 406,
|
|
100
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DEU-GME0`,
|
|
101
|
+
message: `endpoint path does not contain the user ID parameter: userId`,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return new DyNTS_Endpoint_Params({
|
|
106
|
+
name: endpointName,
|
|
107
|
+
type: DyFM_HttpCallType.get,
|
|
108
|
+
endpoint: set.endpointPath,
|
|
109
|
+
preProcesses: [set.authService.authenticate_tokenSelf],
|
|
110
|
+
tasks: [
|
|
111
|
+
async (req: Request, res: Response, issuer: string): Promise<void> => {
|
|
112
|
+
const dataService: DyNTS_DataService<T_Data> = new set.dataServiceClass({
|
|
113
|
+
issuer: issuer,
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
const dataList: T_Data[] = await dataService.getDataListByDependencyId({ userId: req.params.userId });
|
|
117
|
+
|
|
118
|
+
res.send(dataService.getProvidedDataList(dataList));
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* POST endpoint létrehozása adatok kereséséhez.
|
|
126
|
+
*
|
|
127
|
+
* @param set.entityName - Az entitás neve (pl. "Task", "Note"),
|
|
128
|
+
* ebből generálódik az endpoint neve
|
|
129
|
+
* @param set.dataServiceClass - A DataService osztály konstruktora
|
|
130
|
+
* @param set.endpointPath - Az endpoint path (pl. '/:userId/tasks/search')
|
|
131
|
+
* @param set.authService - Az auth service, amely tartalmazza az
|
|
132
|
+
* authenticate_tokenSelf metódust
|
|
133
|
+
* @returns DyNTS_Endpoint_Params instance a POST search endpoint-hoz
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* ```typescript
|
|
137
|
+
* const searchEndpoint = DyNTS_DefaultEndpoints_Util.getSearchEndpoint({
|
|
138
|
+
* entityName: 'Task',
|
|
139
|
+
* dataServiceClass: Task_DataService,
|
|
140
|
+
* endpointPath: FDP_organizerApiEnv_endpoints.tasks.task.searchTasks,
|
|
141
|
+
* authService: this.auth_CS,
|
|
142
|
+
* });
|
|
143
|
+
* ```
|
|
144
|
+
*/
|
|
145
|
+
static getSearchEndpoint<T_Data extends DyFM_Metadata>(
|
|
146
|
+
set: {
|
|
147
|
+
entityName: string;
|
|
148
|
+
dataServiceClass: new (set: { data?: T_Data; issuer: string }) => DyNTS_DataService<T_Data>;
|
|
149
|
+
endpointPath: string;
|
|
150
|
+
authService: { authenticate_tokenSelf: (req: Request, res: Response) => Promise<void> };
|
|
151
|
+
}
|
|
152
|
+
): DyNTS_Endpoint_Params {
|
|
153
|
+
const endpointName: string = `search${set.entityName}s`;
|
|
154
|
+
|
|
155
|
+
if (!set.endpointPath.includes(`:userId`)) {
|
|
156
|
+
throw new DyFM_Error({
|
|
157
|
+
status: 406,
|
|
158
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DEU-SE0`,
|
|
159
|
+
message: `endpoint path does not contain the user ID parameter: userId`,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
return new DyNTS_Endpoint_Params({
|
|
164
|
+
name: endpointName,
|
|
165
|
+
type: DyFM_HttpCallType.post,
|
|
166
|
+
endpoint: set.endpointPath,
|
|
167
|
+
preProcesses: [set.authService.authenticate_tokenSelf],
|
|
168
|
+
tasks: [
|
|
169
|
+
async (req: Request, res: Response, issuer: string): Promise<void> => {
|
|
170
|
+
const dataService: DyNTS_DataService<T_Data> = new set.dataServiceClass({
|
|
171
|
+
issuer: issuer,
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
const searchResults: DyFM_SearchResult<T_Data> = await dataService.searchData(req.body);
|
|
175
|
+
|
|
176
|
+
searchResults.results = dataService.getProvidedDataList(searchResults.results);
|
|
177
|
+
|
|
178
|
+
res.send(searchResults);
|
|
179
|
+
},
|
|
180
|
+
],
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* POST endpoint létrehozása adatok módosításához vagy létrehozásához.
|
|
186
|
+
* A modify végpontok mindig create végpontok is egyben.
|
|
187
|
+
*
|
|
188
|
+
* @param set.entityName - Az entitás neve (pl. "Task", "Note"),
|
|
189
|
+
* ebből generálódik az endpoint neve
|
|
190
|
+
* @param set.dataServiceClass - A DataService osztály konstruktora
|
|
191
|
+
* @param set.endpointPath - Az endpoint path (pl. '/:userId/task/modify')
|
|
192
|
+
* @param set.authService - Az auth service, amely tartalmazza az
|
|
193
|
+
* authenticate_tokenSelf metódust
|
|
194
|
+
* @returns DyNTS_Endpoint_Params instance a POST modify endpoint-hoz
|
|
195
|
+
*
|
|
196
|
+
* @example
|
|
197
|
+
* ```typescript
|
|
198
|
+
* const modifyEndpoint = DyNTS_DefaultEndpoints_Util.getModifyEndpoint({
|
|
199
|
+
* entityName: 'Task',
|
|
200
|
+
* dataServiceClass: Task_DataService,
|
|
201
|
+
* endpointPath: FDP_organizerApiEnv_endpoints.tasks.task.modifyTask,
|
|
202
|
+
* authService: this.auth_CS,
|
|
203
|
+
* });
|
|
204
|
+
* ```
|
|
205
|
+
*/
|
|
206
|
+
static getModifyEndpoint<T_Data extends DyFM_Metadata>(
|
|
207
|
+
set: {
|
|
208
|
+
entityName: string;
|
|
209
|
+
dataServiceClass: new (set: { data?: T_Data; issuer: string }) => DyNTS_DataService<T_Data>;
|
|
210
|
+
endpointPath: string;
|
|
211
|
+
authService: { authenticate_tokenSelf: (req: Request, res: Response) => Promise<void> };
|
|
212
|
+
}
|
|
213
|
+
): DyNTS_Endpoint_Params {
|
|
214
|
+
const endpointName: string = `modify${set.entityName}`;
|
|
215
|
+
|
|
216
|
+
if (!set.endpointPath.includes(`:userId`)) {
|
|
217
|
+
throw new DyFM_Error({
|
|
218
|
+
status: 406,
|
|
219
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DEU-ME0`,
|
|
220
|
+
message: `endpoint path does not contain the user ID parameter: userId`,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
return new DyNTS_Endpoint_Params({
|
|
225
|
+
name: endpointName,
|
|
226
|
+
type: DyFM_HttpCallType.post,
|
|
227
|
+
endpoint: set.endpointPath,
|
|
228
|
+
preProcesses: [set.authService.authenticate_tokenSelf],
|
|
229
|
+
tasks: [
|
|
230
|
+
async (req: Request, res: Response, issuer: string): Promise<void> => {
|
|
231
|
+
const dataService: DyNTS_DataService<T_Data> = new set.dataServiceClass({
|
|
232
|
+
issuer: issuer,
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
const data: T_Data = await dataService.saveData(req.body);
|
|
236
|
+
|
|
237
|
+
res.send(dataService.getProvidedData(data));
|
|
238
|
+
},
|
|
239
|
+
],
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* DELETE endpoint létrehozása egy adott ID alapján történő adattörléshez.
|
|
245
|
+
*
|
|
246
|
+
* @param set.entityName - Az entitás neve (pl. "Task", "Note"),
|
|
247
|
+
* ebből generálódik az endpoint neve és az ID paraméter neve
|
|
248
|
+
* @param set.dataServiceClass - A DataService osztály konstruktora
|
|
249
|
+
* @param set.endpointPath - Az endpoint path (pl. '/:userId/task/delete/:taskId')
|
|
250
|
+
* @param set.authService - Az auth service, amely tartalmazza az
|
|
251
|
+
* authenticate_tokenSelf metódust
|
|
252
|
+
* @param set.idParamName - Az ID paraméter neve a request-ben
|
|
253
|
+
* (opcionális, alapértelmezetten: {entityName.toLowerCase()}Id)
|
|
254
|
+
* @returns DyNTS_Endpoint_Params instance a DELETE endpoint-hoz
|
|
255
|
+
*
|
|
256
|
+
* @example
|
|
257
|
+
* ```typescript
|
|
258
|
+
* const deleteEndpoint = DyNTS_DefaultEndpoints_Util.getDeleteEndpoint({
|
|
259
|
+
* entityName: 'Task',
|
|
260
|
+
* dataServiceClass: Task_DataService,
|
|
261
|
+
* endpointPath: FDP_organizerApiEnv_endpoints.tasks.task.deleteTask,
|
|
262
|
+
* authService: this.auth_CS,
|
|
263
|
+
* });
|
|
264
|
+
* ```
|
|
265
|
+
*/
|
|
266
|
+
static getDeleteEndpoint<T_Data extends DyFM_Metadata>(
|
|
267
|
+
set: {
|
|
268
|
+
entityName: string;
|
|
269
|
+
dataServiceClass: new (set: { data?: T_Data; issuer: string }) => DyNTS_DataService<T_Data>;
|
|
270
|
+
endpointPath: string;
|
|
271
|
+
authService: { authenticate_tokenSelf: (req: Request, res: Response) => Promise<void> };
|
|
272
|
+
idParamName?: string;
|
|
273
|
+
}
|
|
274
|
+
): DyNTS_Endpoint_Params {
|
|
275
|
+
const idParamName: string = set.idParamName ?? `${set.entityName.toLowerCase()}Id`;
|
|
276
|
+
const endpointName: string = `delete${set.entityName}`;
|
|
277
|
+
|
|
278
|
+
// Ellenőrizzük a casing-ignore módon, hogy az endpoint path tartalmazza-e az ID paramétert
|
|
279
|
+
if (!DyFM_StringCase.includesIgnoreCase(set.endpointPath, idParamName)) {
|
|
280
|
+
throw new DyFM_Error({
|
|
281
|
+
status: 406,
|
|
282
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DEU-DE0`,
|
|
283
|
+
message: `endpoint path does not contain the ID parameter: ${idParamName}`,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
if (!set.endpointPath.includes(`:userId`)) {
|
|
288
|
+
throw new DyFM_Error({
|
|
289
|
+
status: 406,
|
|
290
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DEU-DE0`,
|
|
291
|
+
message: `endpoint path does not contain the user ID parameter: userId`,
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
return new DyNTS_Endpoint_Params({
|
|
296
|
+
name: endpointName,
|
|
297
|
+
type: DyFM_HttpCallType.delete,
|
|
298
|
+
endpoint: set.endpointPath,
|
|
299
|
+
preProcesses: [set.authService.authenticate_tokenSelf],
|
|
300
|
+
tasks: [
|
|
301
|
+
async (req: Request, res: Response, issuer: string): Promise<void> => {
|
|
302
|
+
const dataService: DyNTS_DataService<T_Data> = new set.dataServiceClass({
|
|
303
|
+
issuer: issuer,
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
await dataService.deleteData(req.params[idParamName]);
|
|
307
|
+
|
|
308
|
+
res.send({ result: 'deleted' });
|
|
309
|
+
},
|
|
310
|
+
],
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* PATCH endpoint létrehozása részleges adatmódosításhoz.
|
|
316
|
+
* A PATCH endpoint csak a megadott mezőket módosítja, nem cseréli le az egész objektumot.
|
|
317
|
+
*
|
|
318
|
+
* @param set.entityName - Az entitás neve (pl. "Task", "Note"),
|
|
319
|
+
* ebből generálódik az endpoint neve
|
|
320
|
+
* @param set.dataServiceClass - A DataService osztály konstruktora
|
|
321
|
+
* @param set.endpointPath - Az endpoint path (pl. '/:userId/task/patch')
|
|
322
|
+
* @param set.authService - Az auth service, amely tartalmazza az
|
|
323
|
+
* authenticate_tokenSelf metódust
|
|
324
|
+
* @returns DyNTS_Endpoint_Params instance a PATCH endpoint-hoz
|
|
325
|
+
*
|
|
326
|
+
* @example
|
|
327
|
+
* ```typescript
|
|
328
|
+
* const patchEndpoint = DyNTS_DefaultEndpoints_Util.getPatchEndpoint({
|
|
329
|
+
* entityName: 'Task',
|
|
330
|
+
* dataServiceClass: Task_DataService,
|
|
331
|
+
* endpointPath: '/:userId/task/patch',
|
|
332
|
+
* authService: this.auth_CS,
|
|
333
|
+
* });
|
|
334
|
+
* ```
|
|
335
|
+
*/
|
|
336
|
+
static getPatchEndpoint<T_Data extends DyFM_Metadata>(
|
|
337
|
+
set: {
|
|
338
|
+
entityName: string;
|
|
339
|
+
dataServiceClass: new (set: { data?: T_Data; issuer: string }) => DyNTS_DataService<T_Data>;
|
|
340
|
+
endpointPath: string;
|
|
341
|
+
authService: { authenticate_tokenSelf: (req: Request, res: Response) => Promise<void> };
|
|
342
|
+
}
|
|
343
|
+
): DyNTS_Endpoint_Params {
|
|
344
|
+
const endpointName: string = `patch${set.entityName}`;
|
|
345
|
+
|
|
346
|
+
if (!set.endpointPath.includes(`:userId`)) {
|
|
347
|
+
throw new DyFM_Error({
|
|
348
|
+
status: 406,
|
|
349
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-DEU-PE0`,
|
|
350
|
+
message: `endpoint path does not contain the user ID parameter: userId`,
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
return new DyNTS_Endpoint_Params({
|
|
355
|
+
name: endpointName,
|
|
356
|
+
type: DyFM_HttpCallType.patch,
|
|
357
|
+
endpoint: set.endpointPath,
|
|
358
|
+
preProcesses: [set.authService.authenticate_tokenSelf],
|
|
359
|
+
tasks: [
|
|
360
|
+
async (req: Request, res: Response, issuer: string): Promise<void> => {
|
|
361
|
+
const dataService: DyNTS_DataService<T_Data> = new set.dataServiceClass({
|
|
362
|
+
issuer: issuer,
|
|
363
|
+
});
|
|
364
|
+
|
|
365
|
+
const data: T_Data = await dataService.patchData(req.body);
|
|
366
|
+
|
|
367
|
+
res.send(dataService.getProvidedData(data));
|
|
368
|
+
},
|
|
369
|
+
],
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* Összes alapértelmezett endpoint létrehozása egy lépésben.
|
|
375
|
+
* Visszaadja a GET, SEARCH, MODIFY, PATCH és DELETE endpoint-okat egy tömbben.
|
|
376
|
+
*
|
|
377
|
+
* @param set.entityName - Az entitás neve (pl. "Task", "Note")
|
|
378
|
+
* @param set.dataServiceClass - A DataService osztály konstruktora
|
|
379
|
+
* @param set.endpoints - Az endpoint path-ek objektuma
|
|
380
|
+
* @param set.endpoints.get - GET endpoint path
|
|
381
|
+
* @param set.endpoints.search - SEARCH endpoint path
|
|
382
|
+
* @param set.endpoints.modify - MODIFY endpoint path
|
|
383
|
+
* @param set.endpoints.patch - PATCH endpoint path (opcionális)
|
|
384
|
+
* @param set.endpoints.delete - DELETE endpoint path
|
|
385
|
+
* @param set.authService - Az auth service, amely tartalmazza az
|
|
386
|
+
* authenticate_tokenSelf metódust
|
|
387
|
+
* @param set.idParamName - Az ID paraméter neve a request-ben
|
|
388
|
+
* (opcionális, alapértelmezetten: {entityName.toLowerCase()}Id)
|
|
389
|
+
* @returns DyNTS_Endpoint_Params tömb az összes alapértelmezett endpoint-tal
|
|
390
|
+
*
|
|
391
|
+
* @example
|
|
392
|
+
* ```typescript
|
|
393
|
+
* setupEndpoints(): void {
|
|
394
|
+
* this.endpoints = [
|
|
395
|
+
* ...DyNTS_DefaultEndpoints_Util.getAllDefaultEndpoints({
|
|
396
|
+
* entityName: 'Task',
|
|
397
|
+
* dataServiceClass: Task_DataService,
|
|
398
|
+
* endpoints: {
|
|
399
|
+
* get: FDP_organizerApiEnv_endpoints.tasks.task.getTask,
|
|
400
|
+
* search: FDP_organizerApiEnv_endpoints.tasks.task.searchTasks,
|
|
401
|
+
* modify: FDP_organizerApiEnv_endpoints.tasks.task.modifyTask,
|
|
402
|
+
* patch: '/:userId/task/patch',
|
|
403
|
+
* delete: FDP_organizerApiEnv_endpoints.tasks.task.deleteTask,
|
|
404
|
+
* },
|
|
405
|
+
* authService: this.auth_CS,
|
|
406
|
+
* }),
|
|
407
|
+
* ];
|
|
408
|
+
* }
|
|
409
|
+
* ```
|
|
410
|
+
*/
|
|
411
|
+
static getAllDefaultEndpoints<T_Data extends DyFM_Metadata>(
|
|
412
|
+
set: {
|
|
413
|
+
entityName: string;
|
|
414
|
+
dataServiceClass: new (set: { data?: T_Data; issuer: string }) => DyNTS_DataService<T_Data>;
|
|
415
|
+
endpoints: {
|
|
416
|
+
get?: string;
|
|
417
|
+
getMy?: string;
|
|
418
|
+
search?: string;
|
|
419
|
+
modify: string;
|
|
420
|
+
patch?: string;
|
|
421
|
+
delete?: string;
|
|
422
|
+
};
|
|
423
|
+
authService: { authenticate_tokenSelf: (req: Request, res: Response) => Promise<void> };
|
|
424
|
+
idParamName?: string;
|
|
425
|
+
}
|
|
426
|
+
): DyNTS_Endpoint_Params[] {
|
|
427
|
+
const endpoints: DyNTS_Endpoint_Params[] = [];
|
|
428
|
+
|
|
429
|
+
if (set.endpoints.get) {
|
|
430
|
+
endpoints.push(this.getGetEndpoint<T_Data>({
|
|
431
|
+
entityName: set.entityName,
|
|
432
|
+
dataServiceClass: set.dataServiceClass,
|
|
433
|
+
endpointPath: set.endpoints.get,
|
|
434
|
+
authService: set.authService,
|
|
435
|
+
idParamName: set.idParamName,
|
|
436
|
+
}));
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
if (set.endpoints.getMy) {
|
|
440
|
+
endpoints.push(this.getGetMyEndpoint<T_Data>({
|
|
441
|
+
entityName: set.entityName,
|
|
442
|
+
dataServiceClass: set.dataServiceClass,
|
|
443
|
+
endpointPath: set.endpoints.getMy,
|
|
444
|
+
authService: set.authService,
|
|
445
|
+
}));
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
if (set.endpoints.search) {
|
|
449
|
+
endpoints.push(this.getSearchEndpoint<T_Data>({
|
|
450
|
+
entityName: set.entityName,
|
|
451
|
+
dataServiceClass: set.dataServiceClass,
|
|
452
|
+
endpointPath: set.endpoints.search,
|
|
453
|
+
authService: set.authService,
|
|
454
|
+
}));
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
if (set.endpoints.modify) {
|
|
458
|
+
endpoints.push(this.getModifyEndpoint<T_Data>({
|
|
459
|
+
entityName: set.entityName,
|
|
460
|
+
dataServiceClass: set.dataServiceClass,
|
|
461
|
+
endpointPath: set.endpoints.modify,
|
|
462
|
+
authService: set.authService,
|
|
463
|
+
}));
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
if (set.endpoints.patch) {
|
|
467
|
+
endpoints.push(this.getPatchEndpoint<T_Data>({
|
|
468
|
+
entityName: set.entityName,
|
|
469
|
+
dataServiceClass: set.dataServiceClass,
|
|
470
|
+
endpointPath: set.endpoints.patch,
|
|
471
|
+
authService: set.authService,
|
|
472
|
+
}));
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
if (set.endpoints.delete) {
|
|
476
|
+
endpoints.push(this.getDeleteEndpoint<T_Data>({
|
|
477
|
+
entityName: set.entityName,
|
|
478
|
+
dataServiceClass: set.dataServiceClass,
|
|
479
|
+
endpointPath: set.endpoints.delete,
|
|
480
|
+
authService: set.authService,
|
|
481
|
+
idParamName: set.idParamName,
|
|
482
|
+
}));
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
return endpoints;
|
|
486
|
+
}
|
|
487
|
+
}
|