@futdevpro/nts-dynamo 1.15.13 → 1.15.15
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/.vscode/settings.json +10 -10
- package/HOWTO.md +15 -15
- package/LICENSE +21 -21
- package/__documentations/nts-integration-tests-2026-03-17.md +26 -26
- package/_specifications/BACKLOG.md +50 -22
- package/_specifications/TODO.md +15 -15
- package/_specifications/agent.md +138 -138
- package/build/_collections/global-settings.const.d.ts.map +1 -1
- package/build/_collections/global-settings.const.js +4 -0
- package/build/_collections/global-settings.const.js.map +1 -1
- package/build/_models/interfaces/global-log-settings.interface.d.ts +11 -0
- package/build/_models/interfaces/global-log-settings.interface.d.ts.map +1 -1
- package/build/_modules/logs/get-logs-routing-module.util.d.ts +19 -0
- package/build/_modules/logs/get-logs-routing-module.util.d.ts.map +1 -0
- package/build/_modules/logs/get-logs-routing-module.util.js +32 -0
- package/build/_modules/logs/get-logs-routing-module.util.js.map +1 -0
- package/build/_modules/logs/index.d.ts +4 -0
- package/build/_modules/logs/index.d.ts.map +1 -0
- package/build/_modules/logs/index.js +10 -0
- package/build/_modules/logs/index.js.map +1 -0
- package/build/_modules/logs/log-buffer.service.d.ts +38 -0
- package/build/_modules/logs/log-buffer.service.d.ts.map +1 -0
- package/build/_modules/logs/log-buffer.service.js +97 -0
- package/build/_modules/logs/log-buffer.service.js.map +1 -0
- package/build/_modules/logs/logs.controller.d.ts +27 -0
- package/build/_modules/logs/logs.controller.d.ts.map +1 -0
- package/build/_modules/logs/logs.controller.js +90 -0
- package/build/_modules/logs/logs.controller.js.map +1 -0
- package/build/_modules/logs/logs.service.d.ts +40 -0
- package/build/_modules/logs/logs.service.d.ts.map +1 -0
- package/build/_modules/logs/logs.service.js +97 -0
- package/build/_modules/logs/logs.service.js.map +1 -0
- package/build/_modules/server/errors/errors.data-service.d.ts.map +1 -1
- package/build/_modules/server/errors/errors.data-service.js +2 -1
- package/build/_modules/server/errors/errors.data-service.js.map +1 -1
- package/eslint.config.js +3 -3
- package/nodemon.json +24 -24
- package/package.json +362 -353
- 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/global-settings.const.ts +5 -0
- 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 -96
- 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/logs/get-logs-routing-module.util.ts +36 -0
- package/src/_modules/logs/index.ts +3 -0
- package/src/_modules/logs/log-buffer.service.ts +101 -0
- package/src/_modules/logs/logs.controller.ts +109 -0
- package/src/_modules/logs/logs.service.ts +100 -0
- 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/errors/errors.data-service.ts +2 -1
- 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
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
import {
|
|
2
|
-
DyFM_Error, DyFM_HttpCallType,
|
|
3
|
-
DyFM_Log,
|
|
4
|
-
} from '@futdevpro/fsm-dynamo';
|
|
5
|
-
import { DyNTS_AuthService } from '../core/auth.service';
|
|
6
|
-
import { DyNTS_SingletonService } from './singleton.service';
|
|
7
|
-
import { DyNTS_ApiService } from '../core/api.service';
|
|
8
|
-
import { DyNTS_ApiCall_Params, DyNTS_global_settings } from '../..';
|
|
9
|
-
|
|
10
|
-
export abstract class DyNTS_ApiService_Base extends DyNTS_SingletonService {
|
|
11
|
-
|
|
12
|
-
/* protected abstract readonly auth_CS: DyNTS_AuthService */
|
|
13
|
-
|
|
14
|
-
/* abstract get token(): string; */
|
|
15
|
-
|
|
16
|
-
/* abstract get env(): { baseUrl: string, test: string }; */
|
|
17
|
-
abstract get baseUrl(): string;
|
|
18
|
-
abstract get testEndpoint(): string;
|
|
19
|
-
abstract get connectingSystemName(): string;
|
|
20
|
-
|
|
21
|
-
async runApiCallWithAvailabilityCheck<T>(
|
|
22
|
-
apiCall: () => Promise<T>,
|
|
23
|
-
issuer: string
|
|
24
|
-
): Promise<T> {
|
|
25
|
-
try {
|
|
26
|
-
return await apiCall();
|
|
27
|
-
} catch (error) {
|
|
28
|
-
await this.checkServerAvailability(issuer);
|
|
29
|
-
|
|
30
|
-
throw error;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
async checkServerAvailability(issuer: string): Promise<void> {
|
|
35
|
-
try {
|
|
36
|
-
await this.testGet(issuer);
|
|
37
|
-
} catch (error) {
|
|
38
|
-
throw new DyFM_Error({
|
|
39
|
-
...this.getDefaultErrorSettings(
|
|
40
|
-
'checkServerAvailability',
|
|
41
|
-
new Error(
|
|
42
|
-
`${this.connectingSystemName} server is not available` +
|
|
43
|
-
`\n baseUrl: ${this.baseUrl}`
|
|
44
|
-
),
|
|
45
|
-
issuer
|
|
46
|
-
),
|
|
47
|
-
userMessage: `${this.connectingSystemName} server is not available`,
|
|
48
|
-
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-ASB-CSA0`,
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
async testGet(issuer: string): Promise<void> {
|
|
54
|
-
if (!this.testEndpoint) {
|
|
55
|
-
throw new DyFM_Error({
|
|
56
|
-
...this.getDefaultErrorSettings(
|
|
57
|
-
'testGet',
|
|
58
|
-
new Error(`testEndpoint is not set for ${this.connectingSystemName}`),
|
|
59
|
-
issuer
|
|
60
|
-
),
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
await DyNTS_ApiService.startApiCall<void>(
|
|
65
|
-
new DyNTS_ApiCall_Params({
|
|
66
|
-
name: `${this.connectingSystemName} testGet`,
|
|
67
|
-
type: DyFM_HttpCallType.get,
|
|
68
|
-
baseUrl: this.baseUrl,
|
|
69
|
-
endpoint: this.testEndpoint,
|
|
70
|
-
}),
|
|
71
|
-
);
|
|
72
|
-
|
|
73
|
-
DyFM_Log.success(`${this.connectingSystemName} is available`);
|
|
74
|
-
}
|
|
1
|
+
import {
|
|
2
|
+
DyFM_Error, DyFM_HttpCallType,
|
|
3
|
+
DyFM_Log,
|
|
4
|
+
} from '@futdevpro/fsm-dynamo';
|
|
5
|
+
import { DyNTS_AuthService } from '../core/auth.service';
|
|
6
|
+
import { DyNTS_SingletonService } from './singleton.service';
|
|
7
|
+
import { DyNTS_ApiService } from '../core/api.service';
|
|
8
|
+
import { DyNTS_ApiCall_Params, DyNTS_global_settings } from '../..';
|
|
9
|
+
|
|
10
|
+
export abstract class DyNTS_ApiService_Base extends DyNTS_SingletonService {
|
|
11
|
+
|
|
12
|
+
/* protected abstract readonly auth_CS: DyNTS_AuthService */
|
|
13
|
+
|
|
14
|
+
/* abstract get token(): string; */
|
|
15
|
+
|
|
16
|
+
/* abstract get env(): { baseUrl: string, test: string }; */
|
|
17
|
+
abstract get baseUrl(): string;
|
|
18
|
+
abstract get testEndpoint(): string;
|
|
19
|
+
abstract get connectingSystemName(): string;
|
|
20
|
+
|
|
21
|
+
async runApiCallWithAvailabilityCheck<T>(
|
|
22
|
+
apiCall: () => Promise<T>,
|
|
23
|
+
issuer: string
|
|
24
|
+
): Promise<T> {
|
|
25
|
+
try {
|
|
26
|
+
return await apiCall();
|
|
27
|
+
} catch (error) {
|
|
28
|
+
await this.checkServerAvailability(issuer);
|
|
29
|
+
|
|
30
|
+
throw error;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async checkServerAvailability(issuer: string): Promise<void> {
|
|
35
|
+
try {
|
|
36
|
+
await this.testGet(issuer);
|
|
37
|
+
} catch (error) {
|
|
38
|
+
throw new DyFM_Error({
|
|
39
|
+
...this.getDefaultErrorSettings(
|
|
40
|
+
'checkServerAvailability',
|
|
41
|
+
new Error(
|
|
42
|
+
`${this.connectingSystemName} server is not available` +
|
|
43
|
+
`\n baseUrl: ${this.baseUrl}`
|
|
44
|
+
),
|
|
45
|
+
issuer
|
|
46
|
+
),
|
|
47
|
+
userMessage: `${this.connectingSystemName} server is not available`,
|
|
48
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-ASB-CSA0`,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
async testGet(issuer: string): Promise<void> {
|
|
54
|
+
if (!this.testEndpoint) {
|
|
55
|
+
throw new DyFM_Error({
|
|
56
|
+
...this.getDefaultErrorSettings(
|
|
57
|
+
'testGet',
|
|
58
|
+
new Error(`testEndpoint is not set for ${this.connectingSystemName}`),
|
|
59
|
+
issuer
|
|
60
|
+
),
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
await DyNTS_ApiService.startApiCall<void>(
|
|
65
|
+
new DyNTS_ApiCall_Params({
|
|
66
|
+
name: `${this.connectingSystemName} testGet`,
|
|
67
|
+
type: DyFM_HttpCallType.get,
|
|
68
|
+
baseUrl: this.baseUrl,
|
|
69
|
+
endpoint: this.testEndpoint,
|
|
70
|
+
}),
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
DyFM_Log.success(`${this.connectingSystemName} is available`);
|
|
74
|
+
}
|
|
75
75
|
}
|
|
@@ -1,196 +1,196 @@
|
|
|
1
|
-
|
|
2
|
-
import { DyNTS_ArchiveDataService } from './archive-data.service';
|
|
3
|
-
import { DyFM_DataModel_Params, DyFM_Metadata, DyFM_Error } from '@futdevpro/fsm-dynamo';
|
|
4
|
-
import { DyNTS_GlobalService } from '../core/global.service';
|
|
5
|
-
import { DyNTS_DBService } from './db.service';
|
|
6
|
-
import { DyNTS_getArchivedDBName } from '../../_collections/archive.util';
|
|
7
|
-
|
|
8
|
-
class TestMetadata extends DyFM_Metadata {
|
|
9
|
-
name: string;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
describe('| DyNTS_ArchiveDataService', () => {
|
|
13
|
-
let mockDataParams: DyFM_DataModel_Params<TestMetadata>;
|
|
14
|
-
let mockOriginalDBService: jasmine.SpyObj<DyNTS_DBService<TestMetadata>>;
|
|
15
|
-
let mockArchivedDBService: jasmine.SpyObj<DyNTS_DBService<TestMetadata>>;
|
|
16
|
-
|
|
17
|
-
beforeEach(() => {
|
|
18
|
-
mockDataParams = {
|
|
19
|
-
dataName: 'test_data',
|
|
20
|
-
addArchive: true,
|
|
21
|
-
constructed: () => true,
|
|
22
|
-
properties: {},
|
|
23
|
-
} as any;
|
|
24
|
-
|
|
25
|
-
mockOriginalDBService = jasmine.createSpyObj<DyNTS_DBService<TestMetadata>>('OriginalDBService', [
|
|
26
|
-
'getDataById',
|
|
27
|
-
'trueDeleteDataById',
|
|
28
|
-
]);
|
|
29
|
-
|
|
30
|
-
mockArchivedDBService = jasmine.createSpyObj<DyNTS_DBService<TestMetadata>>('ArchivedDBService', [
|
|
31
|
-
'createData',
|
|
32
|
-
'getDataById',
|
|
33
|
-
]);
|
|
34
|
-
|
|
35
|
-
spyOn(DyNTS_GlobalService, 'getDBService').and.returnValue(mockOriginalDBService);
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
it('| should throw error when addArchive is missing from dataParams', () => {
|
|
39
|
-
const dataParamsWithoutArchive = {
|
|
40
|
-
...mockDataParams,
|
|
41
|
-
addArchive: false,
|
|
42
|
-
} as any;
|
|
43
|
-
|
|
44
|
-
const data = new TestMetadata();
|
|
45
|
-
|
|
46
|
-
expect(() => {
|
|
47
|
-
new DyNTS_ArchiveDataService(data, dataParamsWithoutArchive, 'issuer-123');
|
|
48
|
-
}).toThrowError('addArchive is missing from dataParams!');
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
it('| should create service with archived data name', () => {
|
|
52
|
-
const data = new TestMetadata();
|
|
53
|
-
|
|
54
|
-
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
55
|
-
|
|
56
|
-
expect(service).toBeInstanceOf(DyNTS_ArchiveDataService);
|
|
57
|
-
expect(service.originalDBService).toBe(mockOriginalDBService);
|
|
58
|
-
expect(service.dataParams.dataName).toBe('test_data_archived');
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
describe('| archiveDataById', () => {
|
|
62
|
-
it('| should throw error when id is missing', async () => {
|
|
63
|
-
const data = new TestMetadata();
|
|
64
|
-
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
65
|
-
|
|
66
|
-
await expectAsync(
|
|
67
|
-
service.archiveDataById('')
|
|
68
|
-
).toBeRejected();
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
it('| should throw error when data not found', async () => {
|
|
72
|
-
const data = new TestMetadata();
|
|
73
|
-
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
74
|
-
mockOriginalDBService.getDataById.and.returnValue(Promise.resolve(null));
|
|
75
|
-
|
|
76
|
-
await expectAsync(
|
|
77
|
-
service.archiveDataById('non-existent-id')
|
|
78
|
-
).toBeRejected();
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
it('| should archive data when found', async () => {
|
|
82
|
-
const data = new TestMetadata({ _id: 'test-id' });
|
|
83
|
-
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
84
|
-
mockOriginalDBService.getDataById.and.returnValue(Promise.resolve(data));
|
|
85
|
-
mockOriginalDBService.trueDeleteDataById.and.returnValue(Promise.resolve());
|
|
86
|
-
spyOn(service, 'archiveData').and.returnValue(Promise.resolve(data));
|
|
87
|
-
|
|
88
|
-
const result = await service.archiveDataById('test-id');
|
|
89
|
-
|
|
90
|
-
expect(mockOriginalDBService.getDataById).toHaveBeenCalledWith('test-id');
|
|
91
|
-
expect(service.archiveData).toHaveBeenCalledWith(data);
|
|
92
|
-
expect(result).toBe(data);
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
describe('| getDataByOriginalId', () => {
|
|
97
|
-
it('| should find data by original id', async () => {
|
|
98
|
-
const data = new TestMetadata();
|
|
99
|
-
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
100
|
-
const archivedData = new TestMetadata({ _originalId: 'original-id' });
|
|
101
|
-
spyOn(service, 'findData').and.returnValue(Promise.resolve(archivedData));
|
|
102
|
-
|
|
103
|
-
const result = await service.getDataByOriginalId('original-id');
|
|
104
|
-
|
|
105
|
-
expect(service.findData).toHaveBeenCalled();
|
|
106
|
-
expect(result).toBe(archivedData);
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
it('| should throw error on find failure', async () => {
|
|
110
|
-
const data = new TestMetadata();
|
|
111
|
-
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
112
|
-
spyOn(service, 'findData').and.returnValue(Promise.reject(new Error('Find failed')));
|
|
113
|
-
|
|
114
|
-
await expectAsync(
|
|
115
|
-
service.getDataByOriginalId('original-id')
|
|
116
|
-
).toBeRejected();
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
describe('| archiveData', () => {
|
|
121
|
-
it('| should throw error when originalId already exists', async () => {
|
|
122
|
-
const data = new TestMetadata({ _id: 'test-id', _originalId: 'existing-original-id' } as TestMetadata);
|
|
123
|
-
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
124
|
-
|
|
125
|
-
await expectAsync(
|
|
126
|
-
service.archiveData(data)
|
|
127
|
-
).toBeRejected();
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
it('| should throw error when data is already archived', async () => {
|
|
131
|
-
const data = new TestMetadata({ _id: 'test-id', _archived: new Date() } as TestMetadata);
|
|
132
|
-
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
133
|
-
|
|
134
|
-
await expectAsync(
|
|
135
|
-
service.archiveData(data)
|
|
136
|
-
).toBeRejected();
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
it('| should throw error when id is missing', async () => {
|
|
140
|
-
const data = new TestMetadata();
|
|
141
|
-
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
142
|
-
|
|
143
|
-
await expectAsync(
|
|
144
|
-
service.archiveData(data)
|
|
145
|
-
).toBeRejected();
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
it('| should archive data successfully', async () => {
|
|
149
|
-
const data = new TestMetadata({ _id: 'test-id' });
|
|
150
|
-
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
151
|
-
mockOriginalDBService.trueDeleteDataById.and.returnValue(Promise.resolve());
|
|
152
|
-
spyOn(service, 'saveData').and.returnValue(Promise.resolve(data));
|
|
153
|
-
|
|
154
|
-
const result = await service.archiveData(data);
|
|
155
|
-
|
|
156
|
-
expect(mockOriginalDBService.trueDeleteDataById).toHaveBeenCalledWith('test-id');
|
|
157
|
-
expect(data._originalId).toBe('test-id');
|
|
158
|
-
expect(data._archived).toBeInstanceOf(Date);
|
|
159
|
-
expect(data._id).toBeUndefined();
|
|
160
|
-
expect(service.saveData).toHaveBeenCalled();
|
|
161
|
-
expect(result).toBe(data);
|
|
162
|
-
});
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
describe('| saveData', () => {
|
|
166
|
-
it('| should throw error when originalId is missing', async () => {
|
|
167
|
-
const data = new TestMetadata();
|
|
168
|
-
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
169
|
-
|
|
170
|
-
await expectAsync(
|
|
171
|
-
service.saveData(data)
|
|
172
|
-
).toBeRejected();
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
it('| should throw error when data is not archived', async () => {
|
|
176
|
-
const data = new TestMetadata({ _originalId: 'original-id' } as TestMetadata);
|
|
177
|
-
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
178
|
-
|
|
179
|
-
await expectAsync(
|
|
180
|
-
service.saveData(data)
|
|
181
|
-
).toBeRejected();
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
it('| should save archived data successfully', async () => {
|
|
185
|
-
const data = new TestMetadata({ _originalId: 'original-id', _archived: new Date() } as TestMetadata);
|
|
186
|
-
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
187
|
-
const parentSaveDataSpy = spyOn(Object.getPrototypeOf(DyNTS_ArchiveDataService.prototype), 'saveData').and.returnValue(Promise.resolve(data));
|
|
188
|
-
|
|
189
|
-
const result = await service.saveData(data);
|
|
190
|
-
|
|
191
|
-
expect(parentSaveDataSpy).toHaveBeenCalled();
|
|
192
|
-
expect(result).toBe(data);
|
|
193
|
-
});
|
|
194
|
-
});
|
|
195
|
-
});
|
|
196
|
-
|
|
1
|
+
|
|
2
|
+
import { DyNTS_ArchiveDataService } from './archive-data.service';
|
|
3
|
+
import { DyFM_DataModel_Params, DyFM_Metadata, DyFM_Error } from '@futdevpro/fsm-dynamo';
|
|
4
|
+
import { DyNTS_GlobalService } from '../core/global.service';
|
|
5
|
+
import { DyNTS_DBService } from './db.service';
|
|
6
|
+
import { DyNTS_getArchivedDBName } from '../../_collections/archive.util';
|
|
7
|
+
|
|
8
|
+
class TestMetadata extends DyFM_Metadata {
|
|
9
|
+
name: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
describe('| DyNTS_ArchiveDataService', () => {
|
|
13
|
+
let mockDataParams: DyFM_DataModel_Params<TestMetadata>;
|
|
14
|
+
let mockOriginalDBService: jasmine.SpyObj<DyNTS_DBService<TestMetadata>>;
|
|
15
|
+
let mockArchivedDBService: jasmine.SpyObj<DyNTS_DBService<TestMetadata>>;
|
|
16
|
+
|
|
17
|
+
beforeEach(() => {
|
|
18
|
+
mockDataParams = {
|
|
19
|
+
dataName: 'test_data',
|
|
20
|
+
addArchive: true,
|
|
21
|
+
constructed: () => true,
|
|
22
|
+
properties: {},
|
|
23
|
+
} as any;
|
|
24
|
+
|
|
25
|
+
mockOriginalDBService = jasmine.createSpyObj<DyNTS_DBService<TestMetadata>>('OriginalDBService', [
|
|
26
|
+
'getDataById',
|
|
27
|
+
'trueDeleteDataById',
|
|
28
|
+
]);
|
|
29
|
+
|
|
30
|
+
mockArchivedDBService = jasmine.createSpyObj<DyNTS_DBService<TestMetadata>>('ArchivedDBService', [
|
|
31
|
+
'createData',
|
|
32
|
+
'getDataById',
|
|
33
|
+
]);
|
|
34
|
+
|
|
35
|
+
spyOn(DyNTS_GlobalService, 'getDBService').and.returnValue(mockOriginalDBService);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('| should throw error when addArchive is missing from dataParams', () => {
|
|
39
|
+
const dataParamsWithoutArchive = {
|
|
40
|
+
...mockDataParams,
|
|
41
|
+
addArchive: false,
|
|
42
|
+
} as any;
|
|
43
|
+
|
|
44
|
+
const data = new TestMetadata();
|
|
45
|
+
|
|
46
|
+
expect(() => {
|
|
47
|
+
new DyNTS_ArchiveDataService(data, dataParamsWithoutArchive, 'issuer-123');
|
|
48
|
+
}).toThrowError('addArchive is missing from dataParams!');
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('| should create service with archived data name', () => {
|
|
52
|
+
const data = new TestMetadata();
|
|
53
|
+
|
|
54
|
+
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
55
|
+
|
|
56
|
+
expect(service).toBeInstanceOf(DyNTS_ArchiveDataService);
|
|
57
|
+
expect(service.originalDBService).toBe(mockOriginalDBService);
|
|
58
|
+
expect(service.dataParams.dataName).toBe('test_data_archived');
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
describe('| archiveDataById', () => {
|
|
62
|
+
it('| should throw error when id is missing', async () => {
|
|
63
|
+
const data = new TestMetadata();
|
|
64
|
+
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
65
|
+
|
|
66
|
+
await expectAsync(
|
|
67
|
+
service.archiveDataById('')
|
|
68
|
+
).toBeRejected();
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it('| should throw error when data not found', async () => {
|
|
72
|
+
const data = new TestMetadata();
|
|
73
|
+
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
74
|
+
mockOriginalDBService.getDataById.and.returnValue(Promise.resolve(null));
|
|
75
|
+
|
|
76
|
+
await expectAsync(
|
|
77
|
+
service.archiveDataById('non-existent-id')
|
|
78
|
+
).toBeRejected();
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it('| should archive data when found', async () => {
|
|
82
|
+
const data = new TestMetadata({ _id: 'test-id' });
|
|
83
|
+
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
84
|
+
mockOriginalDBService.getDataById.and.returnValue(Promise.resolve(data));
|
|
85
|
+
mockOriginalDBService.trueDeleteDataById.and.returnValue(Promise.resolve());
|
|
86
|
+
spyOn(service, 'archiveData').and.returnValue(Promise.resolve(data));
|
|
87
|
+
|
|
88
|
+
const result = await service.archiveDataById('test-id');
|
|
89
|
+
|
|
90
|
+
expect(mockOriginalDBService.getDataById).toHaveBeenCalledWith('test-id');
|
|
91
|
+
expect(service.archiveData).toHaveBeenCalledWith(data);
|
|
92
|
+
expect(result).toBe(data);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
describe('| getDataByOriginalId', () => {
|
|
97
|
+
it('| should find data by original id', async () => {
|
|
98
|
+
const data = new TestMetadata();
|
|
99
|
+
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
100
|
+
const archivedData = new TestMetadata({ _originalId: 'original-id' });
|
|
101
|
+
spyOn(service, 'findData').and.returnValue(Promise.resolve(archivedData));
|
|
102
|
+
|
|
103
|
+
const result = await service.getDataByOriginalId('original-id');
|
|
104
|
+
|
|
105
|
+
expect(service.findData).toHaveBeenCalled();
|
|
106
|
+
expect(result).toBe(archivedData);
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
it('| should throw error on find failure', async () => {
|
|
110
|
+
const data = new TestMetadata();
|
|
111
|
+
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
112
|
+
spyOn(service, 'findData').and.returnValue(Promise.reject(new Error('Find failed')));
|
|
113
|
+
|
|
114
|
+
await expectAsync(
|
|
115
|
+
service.getDataByOriginalId('original-id')
|
|
116
|
+
).toBeRejected();
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
describe('| archiveData', () => {
|
|
121
|
+
it('| should throw error when originalId already exists', async () => {
|
|
122
|
+
const data = new TestMetadata({ _id: 'test-id', _originalId: 'existing-original-id' } as TestMetadata);
|
|
123
|
+
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
124
|
+
|
|
125
|
+
await expectAsync(
|
|
126
|
+
service.archiveData(data)
|
|
127
|
+
).toBeRejected();
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
it('| should throw error when data is already archived', async () => {
|
|
131
|
+
const data = new TestMetadata({ _id: 'test-id', _archived: new Date() } as TestMetadata);
|
|
132
|
+
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
133
|
+
|
|
134
|
+
await expectAsync(
|
|
135
|
+
service.archiveData(data)
|
|
136
|
+
).toBeRejected();
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
it('| should throw error when id is missing', async () => {
|
|
140
|
+
const data = new TestMetadata();
|
|
141
|
+
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
142
|
+
|
|
143
|
+
await expectAsync(
|
|
144
|
+
service.archiveData(data)
|
|
145
|
+
).toBeRejected();
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
it('| should archive data successfully', async () => {
|
|
149
|
+
const data = new TestMetadata({ _id: 'test-id' });
|
|
150
|
+
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
151
|
+
mockOriginalDBService.trueDeleteDataById.and.returnValue(Promise.resolve());
|
|
152
|
+
spyOn(service, 'saveData').and.returnValue(Promise.resolve(data));
|
|
153
|
+
|
|
154
|
+
const result = await service.archiveData(data);
|
|
155
|
+
|
|
156
|
+
expect(mockOriginalDBService.trueDeleteDataById).toHaveBeenCalledWith('test-id');
|
|
157
|
+
expect(data._originalId).toBe('test-id');
|
|
158
|
+
expect(data._archived).toBeInstanceOf(Date);
|
|
159
|
+
expect(data._id).toBeUndefined();
|
|
160
|
+
expect(service.saveData).toHaveBeenCalled();
|
|
161
|
+
expect(result).toBe(data);
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
describe('| saveData', () => {
|
|
166
|
+
it('| should throw error when originalId is missing', async () => {
|
|
167
|
+
const data = new TestMetadata();
|
|
168
|
+
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
169
|
+
|
|
170
|
+
await expectAsync(
|
|
171
|
+
service.saveData(data)
|
|
172
|
+
).toBeRejected();
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
it('| should throw error when data is not archived', async () => {
|
|
176
|
+
const data = new TestMetadata({ _originalId: 'original-id' } as TestMetadata);
|
|
177
|
+
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
178
|
+
|
|
179
|
+
await expectAsync(
|
|
180
|
+
service.saveData(data)
|
|
181
|
+
).toBeRejected();
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
it('| should save archived data successfully', async () => {
|
|
185
|
+
const data = new TestMetadata({ _originalId: 'original-id', _archived: new Date() } as TestMetadata);
|
|
186
|
+
const service = new DyNTS_ArchiveDataService(data, mockDataParams, 'issuer-123');
|
|
187
|
+
const parentSaveDataSpy = spyOn(Object.getPrototypeOf(DyNTS_ArchiveDataService.prototype), 'saveData').and.returnValue(Promise.resolve(data));
|
|
188
|
+
|
|
189
|
+
const result = await service.saveData(data);
|
|
190
|
+
|
|
191
|
+
expect(parentSaveDataSpy).toHaveBeenCalled();
|
|
192
|
+
expect(result).toBe(data);
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
|