@carlonicora/nestjs-neo4jsonapi 6.6.2 → 6.8.0
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/dist/agents/operator/controllers/operator.controller.d.ts.map +1 -1
- package/dist/agents/operator/controllers/operator.controller.js +3 -0
- package/dist/agents/operator/controllers/operator.controller.js.map +1 -1
- package/dist/bootstrap/app.module.factory.d.ts.map +1 -1
- package/dist/bootstrap/app.module.factory.js +10 -0
- package/dist/bootstrap/app.module.factory.js.map +1 -1
- package/dist/bootstrap/bootstrap.options.d.ts +34 -0
- package/dist/bootstrap/bootstrap.options.d.ts.map +1 -1
- package/dist/common/constants/core-module.ids.d.ts +40 -0
- package/dist/common/constants/core-module.ids.d.ts.map +1 -0
- package/dist/common/constants/core-module.ids.js +42 -0
- package/dist/common/constants/core-module.ids.js.map +1 -0
- package/dist/common/decorators/module.decorator.d.ts +19 -0
- package/dist/common/decorators/module.decorator.d.ts.map +1 -1
- package/dist/common/decorators/module.decorator.js +8 -2
- package/dist/common/decorators/module.decorator.js.map +1 -1
- package/dist/common/guards/jwt.auth.admin.guard.d.ts +3 -1
- package/dist/common/guards/jwt.auth.admin.guard.d.ts.map +1 -1
- package/dist/common/guards/jwt.auth.admin.guard.js +8 -2
- package/dist/common/guards/jwt.auth.admin.guard.js.map +1 -1
- package/dist/common/guards/jwt.auth.guard.d.ts +3 -1
- package/dist/common/guards/jwt.auth.guard.d.ts.map +1 -1
- package/dist/common/guards/jwt.auth.guard.js +8 -2
- package/dist/common/guards/jwt.auth.guard.js.map +1 -1
- package/dist/common/guards/jwt.auth.optional.guard.d.ts +3 -1
- package/dist/common/guards/jwt.auth.optional.guard.d.ts.map +1 -1
- package/dist/common/guards/jwt.auth.optional.guard.js +12 -3
- package/dist/common/guards/jwt.auth.optional.guard.js.map +1 -1
- package/dist/common/index.d.ts +1 -0
- package/dist/common/index.d.ts.map +1 -1
- package/dist/common/index.js +1 -0
- package/dist/common/index.js.map +1 -1
- package/dist/config/enums/queue.id.d.ts +1 -0
- package/dist/config/enums/queue.id.d.ts.map +1 -1
- package/dist/config/enums/queue.id.js +1 -0
- package/dist/config/enums/queue.id.js.map +1 -1
- package/dist/core/blocknote/services/blocknote.service.d.ts +25 -0
- package/dist/core/blocknote/services/blocknote.service.d.ts.map +1 -1
- package/dist/core/blocknote/services/blocknote.service.js +84 -0
- package/dist/core/blocknote/services/blocknote.service.js.map +1 -1
- package/dist/foundations/ai-connection/controllers/ai-connection.controller.d.ts.map +1 -1
- package/dist/foundations/ai-connection/controllers/ai-connection.controller.js +4 -0
- package/dist/foundations/ai-connection/controllers/ai-connection.controller.js.map +1 -1
- package/dist/foundations/analytics/controllers/analytics.admin.controller.d.ts.map +1 -1
- package/dist/foundations/analytics/controllers/analytics.admin.controller.js +3 -0
- package/dist/foundations/analytics/controllers/analytics.admin.controller.js.map +1 -1
- package/dist/foundations/analytics/controllers/analytics.controller.d.ts.map +1 -1
- package/dist/foundations/analytics/controllers/analytics.controller.js +3 -0
- package/dist/foundations/analytics/controllers/analytics.controller.js.map +1 -1
- package/dist/foundations/assistant/controllers/assistant.controller.d.ts.map +1 -1
- package/dist/foundations/assistant/controllers/assistant.controller.js +3 -0
- package/dist/foundations/assistant/controllers/assistant.controller.js.map +1 -1
- package/dist/foundations/assistant-action/controllers/assistant-action.controller.d.ts.map +1 -1
- package/dist/foundations/assistant-action/controllers/assistant-action.controller.js +3 -0
- package/dist/foundations/assistant-action/controllers/assistant-action.controller.js.map +1 -1
- package/dist/foundations/assistant-message/controllers/assistant-message.controller.d.ts.map +1 -1
- package/dist/foundations/assistant-message/controllers/assistant-message.controller.js +3 -0
- package/dist/foundations/assistant-message/controllers/assistant-message.controller.js.map +1 -1
- package/dist/foundations/audit/controllers/audit.controller.d.ts.map +1 -1
- package/dist/foundations/audit/controllers/audit.controller.js +3 -0
- package/dist/foundations/audit/controllers/audit.controller.js.map +1 -1
- package/dist/foundations/auth/controllers/auth.controller.d.ts.map +1 -1
- package/dist/foundations/auth/controllers/auth.controller.js +3 -0
- package/dist/foundations/auth/controllers/auth.controller.js.map +1 -1
- package/dist/foundations/blog/blog.constants.d.ts +17 -0
- package/dist/foundations/blog/blog.constants.d.ts.map +1 -0
- package/dist/foundations/blog/blog.constants.js +17 -0
- package/dist/foundations/blog/blog.constants.js.map +1 -0
- package/dist/foundations/blog/blog.module.d.ts +28 -0
- package/dist/foundations/blog/blog.module.d.ts.map +1 -0
- package/dist/foundations/blog/blog.module.js +143 -0
- package/dist/foundations/blog/blog.module.js.map +1 -0
- package/dist/foundations/blog/controllers/blog-category-translation.controller.d.ts +17 -0
- package/dist/foundations/blog/controllers/blog-category-translation.controller.d.ts.map +1 -0
- package/dist/foundations/blog/controllers/blog-category-translation.controller.js +81 -0
- package/dist/foundations/blog/controllers/blog-category-translation.controller.js.map +1 -0
- package/dist/foundations/blog/controllers/blog-category.controller.d.ts +24 -0
- package/dist/foundations/blog/controllers/blog-category.controller.d.ts.map +1 -0
- package/dist/foundations/blog/controllers/blog-category.controller.js +125 -0
- package/dist/foundations/blog/controllers/blog-category.controller.js.map +1 -0
- package/dist/foundations/blog/controllers/blog-post-translation.controller.d.ts +17 -0
- package/dist/foundations/blog/controllers/blog-post-translation.controller.d.ts.map +1 -0
- package/dist/foundations/blog/controllers/blog-post-translation.controller.js +81 -0
- package/dist/foundations/blog/controllers/blog-post-translation.controller.js.map +1 -0
- package/dist/foundations/blog/controllers/blog-post.controller.d.ts +28 -0
- package/dist/foundations/blog/controllers/blog-post.controller.d.ts.map +1 -0
- package/dist/foundations/blog/controllers/blog-post.controller.js +157 -0
- package/dist/foundations/blog/controllers/blog-post.controller.js.map +1 -0
- package/dist/foundations/blog/controllers/blog-settings.controller.d.ts +16 -0
- package/dist/foundations/blog/controllers/blog-settings.controller.d.ts.map +1 -0
- package/dist/foundations/blog/controllers/blog-settings.controller.js +73 -0
- package/dist/foundations/blog/controllers/blog-settings.controller.js.map +1 -0
- package/dist/foundations/blog/controllers/blog.public.controller.d.ts +26 -0
- package/dist/foundations/blog/controllers/blog.public.controller.d.ts.map +1 -0
- package/dist/foundations/blog/controllers/blog.public.controller.js +117 -0
- package/dist/foundations/blog/controllers/blog.public.controller.js.map +1 -0
- package/dist/foundations/blog/dtos/blog-category-translation.put.dto.d.ts +16 -0
- package/dist/foundations/blog/dtos/blog-category-translation.put.dto.d.ts.map +1 -0
- package/dist/foundations/blog/dtos/blog-category-translation.put.dto.js +62 -0
- package/dist/foundations/blog/dtos/blog-category-translation.put.dto.js.map +1 -0
- package/dist/foundations/blog/dtos/blog-category.dto.d.ts +11 -0
- package/dist/foundations/blog/dtos/blog-category.dto.d.ts.map +1 -0
- package/dist/foundations/blog/dtos/blog-category.dto.js +45 -0
- package/dist/foundations/blog/dtos/blog-category.dto.js.map +1 -0
- package/dist/foundations/blog/dtos/blog-category.post.dto.d.ts +16 -0
- package/dist/foundations/blog/dtos/blog-category.post.dto.d.ts.map +1 -0
- package/dist/foundations/blog/dtos/blog-category.post.dto.js +68 -0
- package/dist/foundations/blog/dtos/blog-category.post.dto.js.map +1 -0
- package/dist/foundations/blog/dtos/blog-category.put.dto.d.ts +21 -0
- package/dist/foundations/blog/dtos/blog-category.put.dto.d.ts.map +1 -0
- package/dist/foundations/blog/dtos/blog-category.put.dto.js +76 -0
- package/dist/foundations/blog/dtos/blog-category.put.dto.js.map +1 -0
- package/dist/foundations/blog/dtos/blog-post-translation.put.dto.d.ts +19 -0
- package/dist/foundations/blog/dtos/blog-post-translation.put.dto.d.ts.map +1 -0
- package/dist/foundations/blog/dtos/blog-post-translation.put.dto.js +73 -0
- package/dist/foundations/blog/dtos/blog-post-translation.put.dto.js.map +1 -0
- package/dist/foundations/blog/dtos/blog-post.dto.d.ts +11 -0
- package/dist/foundations/blog/dtos/blog-post.dto.d.ts.map +1 -0
- package/dist/foundations/blog/dtos/blog-post.dto.js +45 -0
- package/dist/foundations/blog/dtos/blog-post.dto.js.map +1 -0
- package/dist/foundations/blog/dtos/blog-post.post.dto.d.ts +27 -0
- package/dist/foundations/blog/dtos/blog-post.post.dto.d.ts.map +1 -0
- package/dist/foundations/blog/dtos/blog-post.post.dto.js +98 -0
- package/dist/foundations/blog/dtos/blog-post.post.dto.js.map +1 -0
- package/dist/foundations/blog/dtos/blog-post.put.dto.d.ts +30 -0
- package/dist/foundations/blog/dtos/blog-post.put.dto.d.ts.map +1 -0
- package/dist/foundations/blog/dtos/blog-post.put.dto.js +104 -0
- package/dist/foundations/blog/dtos/blog-post.put.dto.js.map +1 -0
- package/dist/foundations/blog/dtos/blog-settings.put.dto.d.ts +14 -0
- package/dist/foundations/blog/dtos/blog-settings.put.dto.d.ts.map +1 -0
- package/dist/foundations/blog/dtos/blog-settings.put.dto.js +52 -0
- package/dist/foundations/blog/dtos/blog-settings.put.dto.js.map +1 -0
- package/dist/foundations/blog/entities/blog-category-translation.d.ts +36 -0
- package/dist/foundations/blog/entities/blog-category-translation.d.ts.map +1 -0
- package/dist/foundations/blog/entities/blog-category-translation.js +70 -0
- package/dist/foundations/blog/entities/blog-category-translation.js.map +1 -0
- package/dist/foundations/blog/entities/blog-category-translation.meta.d.ts +3 -0
- package/dist/foundations/blog/entities/blog-category-translation.meta.d.ts.map +1 -0
- package/dist/foundations/blog/entities/blog-category-translation.meta.js +10 -0
- package/dist/foundations/blog/entities/blog-category-translation.meta.js.map +1 -0
- package/dist/foundations/blog/entities/blog-category.d.ts +35 -0
- package/dist/foundations/blog/entities/blog-category.d.ts.map +1 -0
- package/dist/foundations/blog/entities/blog-category.js +78 -0
- package/dist/foundations/blog/entities/blog-category.js.map +1 -0
- package/dist/foundations/blog/entities/blog-category.meta.d.ts +3 -0
- package/dist/foundations/blog/entities/blog-category.meta.d.ts.map +1 -0
- package/dist/foundations/blog/entities/blog-category.meta.js +10 -0
- package/dist/foundations/blog/entities/blog-category.meta.js.map +1 -0
- package/dist/foundations/blog/entities/blog-post-translation.d.ts +43 -0
- package/dist/foundations/blog/entities/blog-post-translation.d.ts.map +1 -0
- package/dist/foundations/blog/entities/blog-post-translation.js +91 -0
- package/dist/foundations/blog/entities/blog-post-translation.js.map +1 -0
- package/dist/foundations/blog/entities/blog-post-translation.meta.d.ts +3 -0
- package/dist/foundations/blog/entities/blog-post-translation.meta.d.ts.map +1 -0
- package/dist/foundations/blog/entities/blog-post-translation.meta.js +10 -0
- package/dist/foundations/blog/entities/blog-post-translation.meta.js.map +1 -0
- package/dist/foundations/blog/entities/blog-post.d.ts +63 -0
- package/dist/foundations/blog/entities/blog-post.d.ts.map +1 -0
- package/dist/foundations/blog/entities/blog-post.js +149 -0
- package/dist/foundations/blog/entities/blog-post.js.map +1 -0
- package/dist/foundations/blog/entities/blog-post.meta.d.ts +3 -0
- package/dist/foundations/blog/entities/blog-post.meta.d.ts.map +1 -0
- package/dist/foundations/blog/entities/blog-post.meta.js +10 -0
- package/dist/foundations/blog/entities/blog-post.meta.js.map +1 -0
- package/dist/foundations/blog/entities/blog-settings.d.ts +18 -0
- package/dist/foundations/blog/entities/blog-settings.d.ts.map +1 -0
- package/dist/foundations/blog/entities/blog-settings.js +26 -0
- package/dist/foundations/blog/entities/blog-settings.js.map +1 -0
- package/dist/foundations/blog/entities/blog-settings.meta.d.ts +3 -0
- package/dist/foundations/blog/entities/blog-settings.meta.d.ts.map +1 -0
- package/dist/foundations/blog/entities/blog-settings.meta.js +10 -0
- package/dist/foundations/blog/entities/blog-settings.meta.js.map +1 -0
- package/dist/foundations/blog/index.d.ts +34 -0
- package/dist/foundations/blog/index.d.ts.map +1 -0
- package/dist/foundations/blog/index.js +50 -0
- package/dist/foundations/blog/index.js.map +1 -0
- package/dist/foundations/blog/interfaces/blog.config.interface.d.ts +22 -0
- package/dist/foundations/blog/interfaces/blog.config.interface.d.ts.map +1 -0
- package/dist/foundations/blog/interfaces/blog.config.interface.js +10 -0
- package/dist/foundations/blog/interfaces/blog.config.interface.js.map +1 -0
- package/dist/foundations/blog/processors/blog.processor.d.ts +77 -0
- package/dist/foundations/blog/processors/blog.processor.d.ts.map +1 -0
- package/dist/foundations/blog/processors/blog.processor.js +404 -0
- package/dist/foundations/blog/processors/blog.processor.js.map +1 -0
- package/dist/foundations/blog/prompts/blog-summary.prompt.d.ts +6 -0
- package/dist/foundations/blog/prompts/blog-summary.prompt.d.ts.map +1 -0
- package/dist/foundations/blog/prompts/blog-summary.prompt.js +19 -0
- package/dist/foundations/blog/prompts/blog-summary.prompt.js.map +1 -0
- package/dist/foundations/blog/prompts/blog-translate.prompt.d.ts +7 -0
- package/dist/foundations/blog/prompts/blog-translate.prompt.d.ts.map +1 -0
- package/dist/foundations/blog/prompts/blog-translate.prompt.js +24 -0
- package/dist/foundations/blog/prompts/blog-translate.prompt.js.map +1 -0
- package/dist/foundations/blog/repositories/blog-category-translation.repository.d.ts +78 -0
- package/dist/foundations/blog/repositories/blog-category-translation.repository.d.ts.map +1 -0
- package/dist/foundations/blog/repositories/blog-category-translation.repository.js +199 -0
- package/dist/foundations/blog/repositories/blog-category-translation.repository.js.map +1 -0
- package/dist/foundations/blog/repositories/blog-category.repository.d.ts +56 -0
- package/dist/foundations/blog/repositories/blog-category.repository.d.ts.map +1 -0
- package/dist/foundations/blog/repositories/blog-category.repository.js +166 -0
- package/dist/foundations/blog/repositories/blog-category.repository.js.map +1 -0
- package/dist/foundations/blog/repositories/blog-post-translation.repository.d.ts +88 -0
- package/dist/foundations/blog/repositories/blog-post-translation.repository.d.ts.map +1 -0
- package/dist/foundations/blog/repositories/blog-post-translation.repository.js +220 -0
- package/dist/foundations/blog/repositories/blog-post-translation.repository.js.map +1 -0
- package/dist/foundations/blog/repositories/blog-post.repository.d.ts +118 -0
- package/dist/foundations/blog/repositories/blog-post.repository.d.ts.map +1 -0
- package/dist/foundations/blog/repositories/blog-post.repository.js +350 -0
- package/dist/foundations/blog/repositories/blog-post.repository.js.map +1 -0
- package/dist/foundations/blog/repositories/blog-settings.repository.d.ts +21 -0
- package/dist/foundations/blog/repositories/blog-settings.repository.d.ts.map +1 -0
- package/dist/foundations/blog/repositories/blog-settings.repository.js +60 -0
- package/dist/foundations/blog/repositories/blog-settings.repository.js.map +1 -0
- package/dist/foundations/blog/services/blog-category-translation.service.d.ts +37 -0
- package/dist/foundations/blog/services/blog-category-translation.service.d.ts.map +1 -0
- package/dist/foundations/blog/services/blog-category-translation.service.js +97 -0
- package/dist/foundations/blog/services/blog-category-translation.service.js.map +1 -0
- package/dist/foundations/blog/services/blog-category.service.d.ts +56 -0
- package/dist/foundations/blog/services/blog-category.service.d.ts.map +1 -0
- package/dist/foundations/blog/services/blog-category.service.js +164 -0
- package/dist/foundations/blog/services/blog-category.service.js.map +1 -0
- package/dist/foundations/blog/services/blog-post-translation.service.d.ts +44 -0
- package/dist/foundations/blog/services/blog-post-translation.service.d.ts.map +1 -0
- package/dist/foundations/blog/services/blog-post-translation.service.js +115 -0
- package/dist/foundations/blog/services/blog-post-translation.service.js.map +1 -0
- package/dist/foundations/blog/services/blog-post.service.d.ts +109 -0
- package/dist/foundations/blog/services/blog-post.service.d.ts.map +1 -0
- package/dist/foundations/blog/services/blog-post.service.js +276 -0
- package/dist/foundations/blog/services/blog-post.service.js.map +1 -0
- package/dist/foundations/blog/services/blog-queue.service.d.ts +36 -0
- package/dist/foundations/blog/services/blog-queue.service.d.ts.map +1 -0
- package/dist/foundations/blog/services/blog-queue.service.js +79 -0
- package/dist/foundations/blog/services/blog-queue.service.js.map +1 -0
- package/dist/foundations/blog/services/blog-settings.service.d.ts +21 -0
- package/dist/foundations/blog/services/blog-settings.service.d.ts.map +1 -0
- package/dist/foundations/blog/services/blog-settings.service.js +49 -0
- package/dist/foundations/blog/services/blog-settings.service.js.map +1 -0
- package/dist/foundations/blog/utils/reading-time.d.ts +5 -0
- package/dist/foundations/blog/utils/reading-time.d.ts.map +1 -0
- package/dist/foundations/blog/utils/reading-time.js +12 -0
- package/dist/foundations/blog/utils/reading-time.js.map +1 -0
- package/dist/foundations/blog/utils/slug.d.ts +12 -0
- package/dist/foundations/blog/utils/slug.d.ts.map +1 -0
- package/dist/foundations/blog/utils/slug.js +36 -0
- package/dist/foundations/blog/utils/slug.js.map +1 -0
- package/dist/foundations/chunk/controllers/chunk.controller.d.ts.map +1 -1
- package/dist/foundations/chunk/controllers/chunk.controller.js +3 -0
- package/dist/foundations/chunk/controllers/chunk.controller.js.map +1 -1
- package/dist/foundations/company/controllers/company.controller.d.ts.map +1 -1
- package/dist/foundations/company/controllers/company.controller.js +3 -0
- package/dist/foundations/company/controllers/company.controller.js.map +1 -1
- package/dist/foundations/content/controllers/content.controller.d.ts.map +1 -1
- package/dist/foundations/content/controllers/content.controller.js +3 -0
- package/dist/foundations/content/controllers/content.controller.js.map +1 -1
- package/dist/foundations/email-automation/controllers/email-automation-step.controller.d.ts.map +1 -1
- package/dist/foundations/email-automation/controllers/email-automation-step.controller.js +3 -0
- package/dist/foundations/email-automation/controllers/email-automation-step.controller.js.map +1 -1
- package/dist/foundations/email-automation/controllers/email-automation.controller.d.ts.map +1 -1
- package/dist/foundations/email-automation/controllers/email-automation.controller.js +3 -0
- package/dist/foundations/email-automation/controllers/email-automation.controller.js.map +1 -1
- package/dist/foundations/feature/controllers/feature.controller.d.ts.map +1 -1
- package/dist/foundations/feature/controllers/feature.controller.js +3 -0
- package/dist/foundations/feature/controllers/feature.controller.js.map +1 -1
- package/dist/foundations/foundations.modules.d.ts +8 -0
- package/dist/foundations/foundations.modules.d.ts.map +1 -1
- package/dist/foundations/foundations.modules.js +4 -1
- package/dist/foundations/foundations.modules.js.map +1 -1
- package/dist/foundations/handbook/controllers/handbook-thread.controller.d.ts.map +1 -1
- package/dist/foundations/handbook/controllers/handbook-thread.controller.js +3 -0
- package/dist/foundations/handbook/controllers/handbook-thread.controller.js.map +1 -1
- package/dist/foundations/handbook/controllers/handbook.controller.d.ts.map +1 -1
- package/dist/foundations/handbook/controllers/handbook.controller.js +3 -0
- package/dist/foundations/handbook/controllers/handbook.controller.js.map +1 -1
- package/dist/foundations/how-to/controllers/how-to.controller.d.ts.map +1 -1
- package/dist/foundations/how-to/controllers/how-to.controller.js +3 -0
- package/dist/foundations/how-to/controllers/how-to.controller.js.map +1 -1
- package/dist/foundations/index.d.ts +1 -0
- package/dist/foundations/index.d.ts.map +1 -1
- package/dist/foundations/index.js +1 -0
- package/dist/foundations/index.js.map +1 -1
- package/dist/foundations/keyconcept/controllers/keyconcept.controller.d.ts.map +1 -1
- package/dist/foundations/keyconcept/controllers/keyconcept.controller.js +3 -0
- package/dist/foundations/keyconcept/controllers/keyconcept.controller.js.map +1 -1
- package/dist/foundations/notification/controllers/notification.controller.d.ts.map +1 -1
- package/dist/foundations/notification/controllers/notification.controller.js +4 -0
- package/dist/foundations/notification/controllers/notification.controller.js.map +1 -1
- package/dist/foundations/oauth/controllers/oauth.authorize.controller.d.ts.map +1 -1
- package/dist/foundations/oauth/controllers/oauth.authorize.controller.js +4 -0
- package/dist/foundations/oauth/controllers/oauth.authorize.controller.js.map +1 -1
- package/dist/foundations/oauth/controllers/oauth.management.controller.d.ts.map +1 -1
- package/dist/foundations/oauth/controllers/oauth.management.controller.js +3 -0
- package/dist/foundations/oauth/controllers/oauth.management.controller.js.map +1 -1
- package/dist/foundations/push/controllers/push.controller.d.ts.map +1 -1
- package/dist/foundations/push/controllers/push.controller.js +3 -0
- package/dist/foundations/push/controllers/push.controller.js.map +1 -1
- package/dist/foundations/rbac/controllers/rbac-dev.controller.d.ts.map +1 -1
- package/dist/foundations/rbac/controllers/rbac-dev.controller.js +3 -0
- package/dist/foundations/rbac/controllers/rbac-dev.controller.js.map +1 -1
- package/dist/foundations/rbac/controllers/rbac-module-paths.controller.d.ts.map +1 -1
- package/dist/foundations/rbac/controllers/rbac-module-paths.controller.js +3 -0
- package/dist/foundations/rbac/controllers/rbac-module-paths.controller.js.map +1 -1
- package/dist/foundations/rbac/controllers/rbac.controller.d.ts.map +1 -1
- package/dist/foundations/rbac/controllers/rbac.controller.js +3 -0
- package/dist/foundations/rbac/controllers/rbac.controller.js.map +1 -1
- package/dist/foundations/rbac/index.d.ts +5 -0
- package/dist/foundations/rbac/index.d.ts.map +1 -1
- package/dist/foundations/rbac/index.js +12 -1
- package/dist/foundations/rbac/index.js.map +1 -1
- package/dist/foundations/rbac/rbac-permission.module.d.ts +4 -0
- package/dist/foundations/rbac/rbac-permission.module.d.ts.map +1 -1
- package/dist/foundations/rbac/rbac-permission.module.js +18 -2
- package/dist/foundations/rbac/rbac-permission.module.js.map +1 -1
- package/dist/foundations/rbac/rbac.tokens.d.ts +8 -0
- package/dist/foundations/rbac/rbac.tokens.d.ts.map +1 -1
- package/dist/foundations/rbac/rbac.tokens.js +9 -1
- package/dist/foundations/rbac/rbac.tokens.js.map +1 -1
- package/dist/foundations/rbac/repositories/rbac-permission.repository.d.ts +29 -1
- package/dist/foundations/rbac/repositories/rbac-permission.repository.d.ts.map +1 -1
- package/dist/foundations/rbac/repositories/rbac-permission.repository.js +73 -1
- package/dist/foundations/rbac/repositories/rbac-permission.repository.js.map +1 -1
- package/dist/foundations/rbac/services/module-permission-audit.service.d.ts +34 -0
- package/dist/foundations/rbac/services/module-permission-audit.service.d.ts.map +1 -0
- package/dist/foundations/rbac/services/module-permission-audit.service.js +137 -0
- package/dist/foundations/rbac/services/module-permission-audit.service.js.map +1 -0
- package/dist/foundations/rbac/services/module-permission.gate.d.ts +51 -0
- package/dist/foundations/rbac/services/module-permission.gate.d.ts.map +1 -0
- package/dist/foundations/rbac/services/module-permission.gate.js +108 -0
- package/dist/foundations/rbac/services/module-permission.gate.js.map +1 -0
- package/dist/foundations/rbac/services/module-permission.service.d.ts +34 -0
- package/dist/foundations/rbac/services/module-permission.service.d.ts.map +1 -0
- package/dist/foundations/rbac/services/module-permission.service.js +64 -0
- package/dist/foundations/rbac/services/module-permission.service.js.map +1 -0
- package/dist/foundations/rbac/services/rbac-permission.service.d.ts +10 -1
- package/dist/foundations/rbac/services/rbac-permission.service.d.ts.map +1 -1
- package/dist/foundations/rbac/services/rbac-permission.service.js +32 -2
- package/dist/foundations/rbac/services/rbac-permission.service.js.map +1 -1
- package/dist/foundations/rbac/services/rbac-reconciler.service.d.ts +11 -2
- package/dist/foundations/rbac/services/rbac-reconciler.service.d.ts.map +1 -1
- package/dist/foundations/rbac/services/rbac-reconciler.service.js +19 -6
- package/dist/foundations/rbac/services/rbac-reconciler.service.js.map +1 -1
- package/dist/foundations/referral/controllers/referral.controller.d.ts.map +1 -1
- package/dist/foundations/referral/controllers/referral.controller.js +3 -0
- package/dist/foundations/referral/controllers/referral.controller.js.map +1 -1
- package/dist/foundations/role/controllers/role.controller.d.ts.map +1 -1
- package/dist/foundations/role/controllers/role.controller.js +3 -0
- package/dist/foundations/role/controllers/role.controller.js.map +1 -1
- package/dist/foundations/role/controllers/role.user.controller.d.ts.map +1 -1
- package/dist/foundations/role/controllers/role.user.controller.js +3 -0
- package/dist/foundations/role/controllers/role.user.controller.js.map +1 -1
- package/dist/foundations/s3/controllers/s3.controller.d.ts.map +1 -1
- package/dist/foundations/s3/controllers/s3.controller.js +3 -0
- package/dist/foundations/s3/controllers/s3.controller.js.map +1 -1
- package/dist/foundations/stripe/controllers/billing.controller.d.ts.map +1 -1
- package/dist/foundations/stripe/controllers/billing.controller.js +4 -0
- package/dist/foundations/stripe/controllers/billing.controller.js.map +1 -1
- package/dist/foundations/stripe-customer/controllers/stripe-customer.controller.d.ts.map +1 -1
- package/dist/foundations/stripe-customer/controllers/stripe-customer.controller.js +3 -0
- package/dist/foundations/stripe-customer/controllers/stripe-customer.controller.js.map +1 -1
- package/dist/foundations/stripe-invoice/controllers/stripe-invoice.controller.d.ts.map +1 -1
- package/dist/foundations/stripe-invoice/controllers/stripe-invoice.controller.js +3 -0
- package/dist/foundations/stripe-invoice/controllers/stripe-invoice.controller.js.map +1 -1
- package/dist/foundations/stripe-price/controllers/stripe-price.controller.d.ts.map +1 -1
- package/dist/foundations/stripe-price/controllers/stripe-price.controller.js +3 -0
- package/dist/foundations/stripe-price/controllers/stripe-price.controller.js.map +1 -1
- package/dist/foundations/stripe-product/controllers/stripe-product.controller.d.ts.map +1 -1
- package/dist/foundations/stripe-product/controllers/stripe-product.controller.js +3 -0
- package/dist/foundations/stripe-product/controllers/stripe-product.controller.js.map +1 -1
- package/dist/foundations/stripe-promotion-code/controllers/stripe-promotion-code.controller.d.ts.map +1 -1
- package/dist/foundations/stripe-promotion-code/controllers/stripe-promotion-code.controller.js +4 -0
- package/dist/foundations/stripe-promotion-code/controllers/stripe-promotion-code.controller.js.map +1 -1
- package/dist/foundations/stripe-subscription/controllers/stripe-subscription.controller.d.ts.map +1 -1
- package/dist/foundations/stripe-subscription/controllers/stripe-subscription.controller.js +3 -0
- package/dist/foundations/stripe-subscription/controllers/stripe-subscription.controller.js.map +1 -1
- package/dist/foundations/stripe-usage/controllers/stripe-usage.controller.d.ts.map +1 -1
- package/dist/foundations/stripe-usage/controllers/stripe-usage.controller.js +3 -0
- package/dist/foundations/stripe-usage/controllers/stripe-usage.controller.js.map +1 -1
- package/dist/foundations/tokenusage/controllers/tokenusage.admin.controller.d.ts.map +1 -1
- package/dist/foundations/tokenusage/controllers/tokenusage.admin.controller.js +3 -0
- package/dist/foundations/tokenusage/controllers/tokenusage.admin.controller.js.map +1 -1
- package/dist/foundations/tokenusage/controllers/tokenusage.report.controller.d.ts.map +1 -1
- package/dist/foundations/tokenusage/controllers/tokenusage.report.controller.js +3 -0
- package/dist/foundations/tokenusage/controllers/tokenusage.report.controller.js.map +1 -1
- package/dist/foundations/tokenusage/enums/tokenusage.type.d.ts +3 -1
- package/dist/foundations/tokenusage/enums/tokenusage.type.d.ts.map +1 -1
- package/dist/foundations/tokenusage/enums/tokenusage.type.js +2 -0
- package/dist/foundations/tokenusage/enums/tokenusage.type.js.map +1 -1
- package/dist/foundations/two-factor/controllers/passkey.controller.d.ts.map +1 -1
- package/dist/foundations/two-factor/controllers/passkey.controller.js +7 -0
- package/dist/foundations/two-factor/controllers/passkey.controller.js.map +1 -1
- package/dist/foundations/two-factor/controllers/totp.controller.d.ts.map +1 -1
- package/dist/foundations/two-factor/controllers/totp.controller.js +6 -0
- package/dist/foundations/two-factor/controllers/totp.controller.js.map +1 -1
- package/dist/foundations/two-factor/controllers/two-factor.controller.d.ts.map +1 -1
- package/dist/foundations/two-factor/controllers/two-factor.controller.js +7 -0
- package/dist/foundations/two-factor/controllers/two-factor.controller.js.map +1 -1
- package/dist/foundations/user/controllers/user.controller.d.ts.map +1 -1
- package/dist/foundations/user/controllers/user.controller.js +3 -0
- package/dist/foundations/user/controllers/user.controller.js.map +1 -1
- package/dist/foundations/waitlist/controllers/waitlist.controller.d.ts.map +1 -1
- package/dist/foundations/waitlist/controllers/waitlist.controller.js +3 -0
- package/dist/foundations/waitlist/controllers/waitlist.controller.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.BlogPostRepository = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const nestjs_cls_1 = require("nestjs-cls");
|
|
15
|
+
const ai_status_1 = require("../../../common/enums/ai.status");
|
|
16
|
+
const build_fulltext_term_1 = require("../../../core/neo4j/helpers/build-fulltext-term");
|
|
17
|
+
const abstract_repository_1 = require("../../../core/neo4j/abstracts/abstract.repository");
|
|
18
|
+
const neo4j_service_1 = require("../../../core/neo4j/services/neo4j.service");
|
|
19
|
+
const security_service_1 = require("../../../core/security/services/security.service");
|
|
20
|
+
const user_meta_1 = require("../../user/entities/user.meta");
|
|
21
|
+
const blog_category_meta_1 = require("../entities/blog-category.meta");
|
|
22
|
+
const blog_category_translation_meta_1 = require("../entities/blog-category-translation.meta");
|
|
23
|
+
const blog_post_1 = require("../entities/blog-post");
|
|
24
|
+
const blog_post_meta_1 = require("../entities/blog-post.meta");
|
|
25
|
+
const blog_post_translation_1 = require("../entities/blog-post-translation");
|
|
26
|
+
const blog_post_translation_meta_1 = require("../entities/blog-post-translation.meta");
|
|
27
|
+
const post = blog_post_meta_1.blogPostMeta.nodeName;
|
|
28
|
+
const postLabel = blog_post_meta_1.blogPostMeta.labelName;
|
|
29
|
+
const translationLabel = blog_post_translation_meta_1.blogPostTranslationMeta.labelName;
|
|
30
|
+
const categoryLabel = blog_category_meta_1.blogCategoryMeta.labelName;
|
|
31
|
+
const categoryTranslationLabel = blog_category_translation_meta_1.blogCategoryTranslationMeta.labelName;
|
|
32
|
+
let BlogPostRepository = class BlogPostRepository extends abstract_repository_1.AbstractRepository {
|
|
33
|
+
constructor(neo4j, securityService, clsService) {
|
|
34
|
+
super(neo4j, securityService, clsService);
|
|
35
|
+
this.descriptor = blog_post_1.BlogPostDescriptor;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Admin list. A post has no text of its own (every string lives on its
|
|
39
|
+
* translations), so the inherited find would ignore `term`: a search matches
|
|
40
|
+
* any language version through the translation full-text index instead.
|
|
41
|
+
*/
|
|
42
|
+
async find(params) {
|
|
43
|
+
if (!params.term)
|
|
44
|
+
return super.find(params);
|
|
45
|
+
const query = this.neo4j.initQuery({
|
|
46
|
+
cursor: params.cursor,
|
|
47
|
+
serialiser: blog_post_1.BlogPostDescriptor.model,
|
|
48
|
+
fetchAll: params.fetchAll,
|
|
49
|
+
});
|
|
50
|
+
query.queryParams = { ...query.queryParams, term: (0, build_fulltext_term_1.buildFulltextTerm)(params.term) };
|
|
51
|
+
query.query += `
|
|
52
|
+
CALL db.index.fulltext.queryNodes("${blog_post_translation_1.BlogPostTranslationDescriptor.fulltextIndexName}", $term) YIELD node, score
|
|
53
|
+
MATCH (${post}:${postLabel})-[:HAS_TRANSLATION]->(node)
|
|
54
|
+
WITH ${post}, max(score) AS score
|
|
55
|
+
CALL {
|
|
56
|
+
WITH ${post}
|
|
57
|
+
${this.buildDefaultMatch()}
|
|
58
|
+
RETURN true AS ${post}_fulltextAccess
|
|
59
|
+
LIMIT 1
|
|
60
|
+
}
|
|
61
|
+
WITH ${post}, score
|
|
62
|
+
ORDER BY score DESC
|
|
63
|
+
{CURSOR}
|
|
64
|
+
${this.buildReturnStatement()}
|
|
65
|
+
`;
|
|
66
|
+
return this.neo4j.readMany(query);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Resolves the translation a visitor reads into `t`: the translation in $language when its
|
|
70
|
+
* AI status is completed, otherwise the original. Pattern comprehensions, so the row count
|
|
71
|
+
* (and the ORDER BY applied later) never changes.
|
|
72
|
+
*/
|
|
73
|
+
buildResolvedTranslation(carry = []) {
|
|
74
|
+
const carried = [post, ...carry].join(", ");
|
|
75
|
+
return `
|
|
76
|
+
WITH ${carried},
|
|
77
|
+
head([(${post})-[:HAS_TRANSLATION]->(localised:${translationLabel}) WHERE localised.language = $language AND localised.aiStatus = $completedStatus | localised]) AS localised
|
|
78
|
+
WITH ${carried},
|
|
79
|
+
coalesce(localised, head([(${post})-[:HAS_TRANSLATION]->(original:${translationLabel}) WHERE original.isOriginal = true | original])) AS t
|
|
80
|
+
`;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Public RETURN: the post node plus the resolved-language columns read by the descriptor's
|
|
84
|
+
* computed fields. Never returns the author User node (no email leak) nor translation nodes.
|
|
85
|
+
*/
|
|
86
|
+
buildPublicReturn(params) {
|
|
87
|
+
return `
|
|
88
|
+
RETURN ${post},
|
|
89
|
+
t.language AS resolvedLanguage,
|
|
90
|
+
t.title AS resolvedTitle,
|
|
91
|
+
t.slug AS resolvedSlug,
|
|
92
|
+
t.summary AS resolvedSummary,
|
|
93
|
+
${params.includeBody ? "t.body AS resolvedBody," : ""}
|
|
94
|
+
t.coverImageAlt AS resolvedCoverImageAlt,
|
|
95
|
+
t.readingMinutes AS resolvedReadingMinutes,
|
|
96
|
+
head([(${post})<-[:AUTHORED]-(writer:${user_meta_1.userMeta.labelName}) | writer.name]) AS authorName,
|
|
97
|
+
[(${post})-[:IN_BLOG_CATEGORY]->(postCategory:${categoryLabel}) | postCategory.id] AS categoryIds
|
|
98
|
+
`;
|
|
99
|
+
}
|
|
100
|
+
async createWithOriginal(params) {
|
|
101
|
+
await this.neo4j.executeInTransaction([
|
|
102
|
+
{
|
|
103
|
+
query: `
|
|
104
|
+
MATCH (author:${user_meta_1.userMeta.labelName} {id: $authorId})
|
|
105
|
+
CREATE (${post}:${postLabel} {
|
|
106
|
+
id: $id,
|
|
107
|
+
status: $status,
|
|
108
|
+
originalLanguage: $originalLanguage,
|
|
109
|
+
coverImage: $coverImage,
|
|
110
|
+
createdAt: datetime(),
|
|
111
|
+
updatedAt: datetime()
|
|
112
|
+
})
|
|
113
|
+
CREATE (author)-[:AUTHORED]->(${post})
|
|
114
|
+
`,
|
|
115
|
+
params: {
|
|
116
|
+
id: params.id,
|
|
117
|
+
authorId: params.authorId,
|
|
118
|
+
status: "draft",
|
|
119
|
+
originalLanguage: params.originalLanguage,
|
|
120
|
+
coverImage: params.coverImage ?? null,
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
query: `
|
|
125
|
+
MATCH (${post}:${postLabel} {id: $id})
|
|
126
|
+
CREATE (translation:${translationLabel} {
|
|
127
|
+
id: $translationId,
|
|
128
|
+
language: $originalLanguage,
|
|
129
|
+
isOriginal: true,
|
|
130
|
+
source: $source,
|
|
131
|
+
aiStatus: $aiStatus,
|
|
132
|
+
title: $title,
|
|
133
|
+
slug: $slug,
|
|
134
|
+
summary: $summary,
|
|
135
|
+
body: $body,
|
|
136
|
+
bodyText: $bodyText,
|
|
137
|
+
coverImageAlt: $coverImageAlt,
|
|
138
|
+
readingMinutes: $readingMinutes,
|
|
139
|
+
createdAt: datetime(),
|
|
140
|
+
updatedAt: datetime()
|
|
141
|
+
})
|
|
142
|
+
CREATE (${post})-[:HAS_TRANSLATION]->(translation)
|
|
143
|
+
`,
|
|
144
|
+
params: {
|
|
145
|
+
id: params.id,
|
|
146
|
+
translationId: params.translation.id,
|
|
147
|
+
originalLanguage: params.originalLanguage,
|
|
148
|
+
source: "original",
|
|
149
|
+
aiStatus: ai_status_1.AiStatus.Completed,
|
|
150
|
+
title: params.translation.title,
|
|
151
|
+
slug: params.translation.slug,
|
|
152
|
+
summary: params.translation.summary ?? null,
|
|
153
|
+
body: params.translation.body,
|
|
154
|
+
bodyText: params.translation.bodyText,
|
|
155
|
+
coverImageAlt: params.translation.coverImageAlt ?? null,
|
|
156
|
+
readingMinutes: params.translation.readingMinutes,
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
query: `
|
|
161
|
+
MATCH (${post}:${postLabel} {id: $id})
|
|
162
|
+
MATCH (category:${categoryLabel})
|
|
163
|
+
WHERE category.id IN $categoryIds
|
|
164
|
+
MERGE (${post})-[:IN_BLOG_CATEGORY]->(category)
|
|
165
|
+
`,
|
|
166
|
+
params: { id: params.id, categoryIds: params.categoryIds },
|
|
167
|
+
},
|
|
168
|
+
]);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Full update of the language-independent fields: a missing coverImage clears it, and the
|
|
172
|
+
* category edges become exactly `categoryIds`.
|
|
173
|
+
*/
|
|
174
|
+
async updateShared(params) {
|
|
175
|
+
await this.neo4j.executeInTransaction([
|
|
176
|
+
{
|
|
177
|
+
query: `
|
|
178
|
+
MATCH (${post}:${postLabel} {id: $id})
|
|
179
|
+
SET ${post}.coverImage = $coverImage, ${post}.updatedAt = datetime()
|
|
180
|
+
`,
|
|
181
|
+
params: { id: params.id, coverImage: params.coverImage ?? null },
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
query: `
|
|
185
|
+
MATCH (${post}:${postLabel} {id: $id})-[edge:IN_BLOG_CATEGORY]->(category:${categoryLabel})
|
|
186
|
+
WHERE NOT category.id IN $categoryIds
|
|
187
|
+
DELETE edge
|
|
188
|
+
`,
|
|
189
|
+
params: { id: params.id, categoryIds: params.categoryIds },
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
query: `
|
|
193
|
+
MATCH (${post}:${postLabel} {id: $id})
|
|
194
|
+
MATCH (category:${categoryLabel})
|
|
195
|
+
WHERE category.id IN $categoryIds
|
|
196
|
+
MERGE (${post})-[:IN_BLOG_CATEGORY]->(category)
|
|
197
|
+
`,
|
|
198
|
+
params: { id: params.id, categoryIds: params.categoryIds },
|
|
199
|
+
},
|
|
200
|
+
]);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Sets the status. Publishing stamps publishedAt only the first time, so unpublish and
|
|
204
|
+
* republish keep the original date.
|
|
205
|
+
*/
|
|
206
|
+
async setStatus(params) {
|
|
207
|
+
await this.neo4j.executeInTransaction([
|
|
208
|
+
{
|
|
209
|
+
query: `
|
|
210
|
+
MATCH (${post}:${postLabel} {id: $id})
|
|
211
|
+
SET ${post}.status = $status, ${post}.updatedAt = datetime()
|
|
212
|
+
${params.status === "published" ? `SET ${post}.publishedAt = coalesce(${post}.publishedAt, datetime())` : ""}
|
|
213
|
+
`,
|
|
214
|
+
params: { id: params.id, status: params.status },
|
|
215
|
+
},
|
|
216
|
+
]);
|
|
217
|
+
}
|
|
218
|
+
async deleteWithTranslations(params) {
|
|
219
|
+
await this.neo4j.executeInTransaction([
|
|
220
|
+
{
|
|
221
|
+
query: `
|
|
222
|
+
MATCH (${post}:${postLabel} {id: $id})
|
|
223
|
+
OPTIONAL MATCH (${post})-[:HAS_TRANSLATION]->(translation:${translationLabel})
|
|
224
|
+
WITH ${post}, collect(translation) AS translations
|
|
225
|
+
FOREACH (item IN translations | DETACH DELETE item)
|
|
226
|
+
DETACH DELETE ${post}
|
|
227
|
+
`,
|
|
228
|
+
params: { id: params.id },
|
|
229
|
+
},
|
|
230
|
+
]);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Published posts in the visitor's language (original as fallback), newest first, optionally
|
|
234
|
+
* filtered by a category slug in any language and searched through the translation full-text
|
|
235
|
+
* index (only the resolved translation of each post can match).
|
|
236
|
+
*/
|
|
237
|
+
async findPublished(params) {
|
|
238
|
+
const query = this.neo4j.initQuery({ serialiser: blog_post_1.BlogPostDescriptor.model, cursor: params.cursor });
|
|
239
|
+
query.queryParams = {
|
|
240
|
+
...query.queryParams,
|
|
241
|
+
language: params.language,
|
|
242
|
+
completedStatus: ai_status_1.AiStatus.Completed,
|
|
243
|
+
...(params.categorySlug ? { categorySlug: params.categorySlug } : {}),
|
|
244
|
+
...(params.term ? { term: (0, build_fulltext_term_1.buildFulltextTerm)(params.term) } : {}),
|
|
245
|
+
};
|
|
246
|
+
const categoryFilter = params.categorySlug
|
|
247
|
+
? `AND EXISTS {
|
|
248
|
+
MATCH (${post})-[:IN_BLOG_CATEGORY]->(:${categoryLabel})-[:HAS_TRANSLATION]->(:${categoryTranslationLabel} {slug: $categorySlug})
|
|
249
|
+
}`
|
|
250
|
+
: "";
|
|
251
|
+
if (params.term) {
|
|
252
|
+
query.query += `
|
|
253
|
+
CALL db.index.fulltext.queryNodes("${blog_post_translation_1.BlogPostTranslationDescriptor.fulltextIndexName}", $term)
|
|
254
|
+
YIELD node, score
|
|
255
|
+
MATCH (${post}:${postLabel})-[:HAS_TRANSLATION]->(node)
|
|
256
|
+
WITH ${post}, node, score
|
|
257
|
+
CALL {
|
|
258
|
+
WITH ${post}
|
|
259
|
+
${this.buildDefaultMatch()}
|
|
260
|
+
RETURN true AS ${post}_fulltextAccess
|
|
261
|
+
LIMIT 1
|
|
262
|
+
}
|
|
263
|
+
WITH ${post}, node, score
|
|
264
|
+
WHERE ${post}.status = "published"
|
|
265
|
+
${categoryFilter}
|
|
266
|
+
${this.buildResolvedTranslation(["node", "score"])}
|
|
267
|
+
WITH ${post}, node, score, t
|
|
268
|
+
WHERE node = t
|
|
269
|
+
WITH ${post}, t, score
|
|
270
|
+
ORDER BY score DESC
|
|
271
|
+
`;
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
query.query += `
|
|
275
|
+
${this.buildDefaultMatch()}
|
|
276
|
+
WHERE ${post}.status = "published"
|
|
277
|
+
${categoryFilter}
|
|
278
|
+
${this.buildResolvedTranslation()}
|
|
279
|
+
WITH ${post}, t
|
|
280
|
+
ORDER BY ${post}.publishedAt DESC
|
|
281
|
+
`;
|
|
282
|
+
}
|
|
283
|
+
query.query += `
|
|
284
|
+
{CURSOR}
|
|
285
|
+
${this.buildPublicReturn({ includeBody: false })}
|
|
286
|
+
`;
|
|
287
|
+
return this.neo4j.readMany(query);
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* One published post by a slug of ANY of its languages, with the text resolved in $language.
|
|
291
|
+
* When two posts share the slug in different languages, the one owning it in $language wins.
|
|
292
|
+
*/
|
|
293
|
+
async findPublishedBySlug(params) {
|
|
294
|
+
const query = this.neo4j.initQuery({ serialiser: blog_post_1.BlogPostDescriptor.model });
|
|
295
|
+
query.queryParams = {
|
|
296
|
+
...query.queryParams,
|
|
297
|
+
slug: params.slug,
|
|
298
|
+
language: params.language,
|
|
299
|
+
completedStatus: ai_status_1.AiStatus.Completed,
|
|
300
|
+
};
|
|
301
|
+
query.query += `
|
|
302
|
+
${this.buildDefaultMatch()}
|
|
303
|
+
WHERE ${post}.status = "published"
|
|
304
|
+
AND EXISTS {
|
|
305
|
+
MATCH (${post})-[:HAS_TRANSLATION]->(:${translationLabel} {slug: $slug})
|
|
306
|
+
}
|
|
307
|
+
WITH ${post},
|
|
308
|
+
CASE WHEN EXISTS {
|
|
309
|
+
MATCH (${post})-[:HAS_TRANSLATION]->(:${translationLabel} {slug: $slug, language: $language})
|
|
310
|
+
} THEN 0 ELSE 1 END AS slugRank
|
|
311
|
+
ORDER BY slugRank ASC
|
|
312
|
+
LIMIT 1
|
|
313
|
+
${this.buildResolvedTranslation()}
|
|
314
|
+
${this.buildPublicReturn({ includeBody: true })}
|
|
315
|
+
`;
|
|
316
|
+
return this.neo4j.readOne(query);
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Up to `limit` other published posts sharing a category with the given post, newest first.
|
|
320
|
+
*/
|
|
321
|
+
async findPublishedRelated(params) {
|
|
322
|
+
const query = this.neo4j.initQuery({ serialiser: blog_post_1.BlogPostDescriptor.model, cursor: { take: params.limit } });
|
|
323
|
+
query.queryParams = {
|
|
324
|
+
...query.queryParams,
|
|
325
|
+
postId: params.postId,
|
|
326
|
+
language: params.language,
|
|
327
|
+
completedStatus: ai_status_1.AiStatus.Completed,
|
|
328
|
+
};
|
|
329
|
+
query.query += `
|
|
330
|
+
${this.buildDefaultMatch()}
|
|
331
|
+
WHERE ${post}.status = "published"
|
|
332
|
+
AND ${post}.id <> $postId
|
|
333
|
+
AND EXISTS {
|
|
334
|
+
MATCH (${post})-[:IN_BLOG_CATEGORY]->(:${categoryLabel})<-[:IN_BLOG_CATEGORY]-(:${postLabel} {id: $postId})
|
|
335
|
+
}
|
|
336
|
+
${this.buildResolvedTranslation()}
|
|
337
|
+
WITH ${post}, t
|
|
338
|
+
ORDER BY ${post}.publishedAt DESC
|
|
339
|
+
{CURSOR}
|
|
340
|
+
${this.buildPublicReturn({ includeBody: false })}
|
|
341
|
+
`;
|
|
342
|
+
return this.neo4j.readManyWithoutCount(query);
|
|
343
|
+
}
|
|
344
|
+
};
|
|
345
|
+
exports.BlogPostRepository = BlogPostRepository;
|
|
346
|
+
exports.BlogPostRepository = BlogPostRepository = __decorate([
|
|
347
|
+
(0, common_1.Injectable)(),
|
|
348
|
+
__metadata("design:paramtypes", [neo4j_service_1.Neo4jService, security_service_1.SecurityService, nestjs_cls_1.ClsService])
|
|
349
|
+
], BlogPostRepository);
|
|
350
|
+
//# sourceMappingURL=blog-post.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blog-post.repository.js","sourceRoot":"","sources":["../../../../src/foundations/blog/repositories/blog-post.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ClsService } from "nestjs-cls";
|
|
2
|
+
import { AbstractRepository } from "../../../core/neo4j/abstracts/abstract.repository";
|
|
3
|
+
import { Neo4jService } from "../../../core/neo4j/services/neo4j.service";
|
|
4
|
+
import { SecurityService } from "../../../core/security/services/security.service";
|
|
5
|
+
import { BlogListLayout } from "../blog.constants";
|
|
6
|
+
import { BlogSettings, BlogSettingsDescriptor } from "../entities/blog-settings";
|
|
7
|
+
export declare class BlogSettingsRepository extends AbstractRepository<BlogSettings, typeof BlogSettingsDescriptor.relationships> {
|
|
8
|
+
protected readonly descriptor: import("../../..").EntityDescriptor<BlogSettings, {}>;
|
|
9
|
+
constructor(neo4j: Neo4jService, securityService: SecurityService, clsService: ClsService);
|
|
10
|
+
/**
|
|
11
|
+
* The single settings node, or null when it was never saved.
|
|
12
|
+
*/
|
|
13
|
+
findSettings(): Promise<BlogSettings | null>;
|
|
14
|
+
/**
|
|
15
|
+
* Creates or updates the single settings node, always on BLOG_SETTINGS_ID.
|
|
16
|
+
*/
|
|
17
|
+
upsert(params: {
|
|
18
|
+
listLayout: BlogListLayout;
|
|
19
|
+
}): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=blog-settings.repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blog-settings.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/blog/repositories/blog-settings.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mDAAmD,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AACnF,OAAO,EAAoB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAKjF,qBACa,sBAAuB,SAAQ,kBAAkB,CAC5D,YAAY,EACZ,OAAO,sBAAsB,CAAC,aAAa,CAC5C;IACC,SAAS,CAAC,QAAQ,CAAC,UAAU,wDAA0B;gBAE3C,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU;IAIzF;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAalD;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,cAAc,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAYpE"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.BlogSettingsRepository = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const nestjs_cls_1 = require("nestjs-cls");
|
|
15
|
+
const abstract_repository_1 = require("../../../core/neo4j/abstracts/abstract.repository");
|
|
16
|
+
const neo4j_service_1 = require("../../../core/neo4j/services/neo4j.service");
|
|
17
|
+
const security_service_1 = require("../../../core/security/services/security.service");
|
|
18
|
+
const blog_constants_1 = require("../blog.constants");
|
|
19
|
+
const blog_settings_1 = require("../entities/blog-settings");
|
|
20
|
+
const blog_settings_meta_1 = require("../entities/blog-settings.meta");
|
|
21
|
+
const settings = blog_settings_meta_1.blogSettingsMeta.nodeName;
|
|
22
|
+
let BlogSettingsRepository = class BlogSettingsRepository extends abstract_repository_1.AbstractRepository {
|
|
23
|
+
constructor(neo4j, securityService, clsService) {
|
|
24
|
+
super(neo4j, securityService, clsService);
|
|
25
|
+
this.descriptor = blog_settings_1.BlogSettingsDescriptor;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The single settings node, or null when it was never saved.
|
|
29
|
+
*/
|
|
30
|
+
async findSettings() {
|
|
31
|
+
const query = this.neo4j.initQuery({ serialiser: blog_settings_1.BlogSettingsDescriptor.model });
|
|
32
|
+
query.queryParams = { ...query.queryParams, searchValue: blog_constants_1.BLOG_SETTINGS_ID };
|
|
33
|
+
query.query += `
|
|
34
|
+
${this.buildDefaultMatch({ searchField: "id" })}
|
|
35
|
+
${this.buildReturnStatement()}
|
|
36
|
+
`;
|
|
37
|
+
return this.neo4j.readOne(query);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Creates or updates the single settings node, always on BLOG_SETTINGS_ID.
|
|
41
|
+
*/
|
|
42
|
+
async upsert(params) {
|
|
43
|
+
await this.neo4j.executeInTransaction([
|
|
44
|
+
{
|
|
45
|
+
query: `
|
|
46
|
+
MERGE (${settings}:${blog_settings_meta_1.blogSettingsMeta.labelName} {id: $id})
|
|
47
|
+
ON CREATE SET ${settings}.createdAt = datetime()
|
|
48
|
+
SET ${settings}.listLayout = $listLayout, ${settings}.updatedAt = datetime()
|
|
49
|
+
`,
|
|
50
|
+
params: { id: blog_constants_1.BLOG_SETTINGS_ID, listLayout: params.listLayout },
|
|
51
|
+
},
|
|
52
|
+
]);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
exports.BlogSettingsRepository = BlogSettingsRepository;
|
|
56
|
+
exports.BlogSettingsRepository = BlogSettingsRepository = __decorate([
|
|
57
|
+
(0, common_1.Injectable)(),
|
|
58
|
+
__metadata("design:paramtypes", [neo4j_service_1.Neo4jService, security_service_1.SecurityService, nestjs_cls_1.ClsService])
|
|
59
|
+
], BlogSettingsRepository);
|
|
60
|
+
//# sourceMappingURL=blog-settings.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blog-settings.repository.js","sourceRoot":"","sources":["../../../../src/foundations/blog/repositories/blog-settings.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAAwC;AACxC,2FAAuF;AACvF,8EAA0E;AAC1E,uFAAmF;AACnF,sDAAqE;AACrE,6DAAiF;AACjF,uEAAkE;AAElE,MAAM,QAAQ,GAAG,qCAAgB,CAAC,QAAQ,CAAC;AAGpC,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,wCAG3C;IAGC,YAAY,KAAmB,EAAE,eAAgC,EAAE,UAAsB;QACvF,KAAK,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;QAHzB,eAAU,GAAG,sCAAsB,CAAC;IAIvD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,sCAAsB,CAAC,KAAK,EAAE,CAAC,CAAC;QAEjF,KAAK,CAAC,WAAW,GAAG,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,WAAW,EAAE,iCAAgB,EAAE,CAAC;QAE5E,KAAK,CAAC,KAAK,IAAI;QACX,IAAI,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QAC7C,IAAI,CAAC,oBAAoB,EAAE;KAC9B,CAAC;QAEF,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,MAAsC;QACjD,MAAM,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;YACpC;gBACE,KAAK,EAAE;mBACI,QAAQ,IAAI,qCAAgB,CAAC,SAAS;0BAC/B,QAAQ;gBAClB,QAAQ,8BAA8B,QAAQ;SACrD;gBACD,MAAM,EAAE,EAAE,EAAE,EAAE,iCAAgB,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE;aAChE;SACF,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAzCY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,mBAAU,GAAE;qCAOQ,4BAAY,EAAmB,kCAAe,EAAc,uBAAU;GAN9E,sBAAsB,CAyClC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ClsService } from "nestjs-cls";
|
|
2
|
+
import { JsonApiSingleDocument } from "../../../core/jsonapi/interfaces/jsonapi.document.interface";
|
|
3
|
+
import { JsonApiService } from "../../../core/jsonapi/services/jsonapi.service";
|
|
4
|
+
import { AbstractService } from "../../../core/neo4j/abstracts/abstract.service";
|
|
5
|
+
import { BlogCategoryTranslationPutDTO } from "../dtos/blog-category-translation.put.dto";
|
|
6
|
+
import { BlogCategoryTranslation, BlogCategoryTranslationDescriptor } from "../entities/blog-category-translation";
|
|
7
|
+
import { BlogCategoryTranslationRepository } from "../repositories/blog-category-translation.repository";
|
|
8
|
+
import { BlogQueueService } from "./blog-queue.service";
|
|
9
|
+
/**
|
|
10
|
+
* Hand edits to a non-original category translation, and "Translate again"
|
|
11
|
+
* for one language. The original is edited through BlogCategoryService only.
|
|
12
|
+
*/
|
|
13
|
+
export declare class BlogCategoryTranslationService extends AbstractService<BlogCategoryTranslation, typeof BlogCategoryTranslationDescriptor.relationships> {
|
|
14
|
+
private readonly blogCategoryTranslationRepository;
|
|
15
|
+
private readonly blogQueueService;
|
|
16
|
+
protected readonly descriptor: import("../../..").EntityDescriptor<BlogCategoryTranslation, {
|
|
17
|
+
category: {
|
|
18
|
+
model: import("../../..").DataMeta;
|
|
19
|
+
direction: "in";
|
|
20
|
+
relationship: string;
|
|
21
|
+
cardinality: "one";
|
|
22
|
+
description: string;
|
|
23
|
+
};
|
|
24
|
+
}>;
|
|
25
|
+
constructor(jsonApiService: JsonApiService, blogCategoryTranslationRepository: BlogCategoryTranslationRepository, clsService: ClsService, blogQueueService: BlogQueueService);
|
|
26
|
+
/** Saves this one translation and marks it `manual`. Nothing is re-run. */
|
|
27
|
+
updateTranslation(params: {
|
|
28
|
+
data: BlogCategoryTranslationPutDTO["data"];
|
|
29
|
+
}): Promise<JsonApiSingleDocument>;
|
|
30
|
+
/** Re-queues translation of this one language from the current original. */
|
|
31
|
+
retranslate(params: {
|
|
32
|
+
id: string;
|
|
33
|
+
}): Promise<void>;
|
|
34
|
+
private _findEditable;
|
|
35
|
+
private _uniqueSlug;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=blog-category-translation.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blog-category-translation.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/blog/services/blog-category-translation.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,6DAA6D,CAAC;AACpG,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,2CAA2C,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAE,iCAAiC,EAAE,MAAM,uCAAuC,CAAC;AACnH,OAAO,EAAE,iCAAiC,EAAE,MAAM,sDAAsD,CAAC;AAEzG,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;GAGG;AACH,qBACa,8BAA+B,SAAQ,eAAe,CACjE,uBAAuB,EACvB,OAAO,iCAAiC,CAAC,aAAa,CACvD;IAKG,OAAO,CAAC,QAAQ,CAAC,iCAAiC;IAElD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IANnC,SAAS,CAAC,QAAQ,CAAC,UAAU;;;;;;;;OAAqC;gBAGhE,cAAc,EAAE,cAAc,EACb,iCAAiC,EAAE,iCAAiC,EACrF,UAAU,EAAE,UAAU,EACL,gBAAgB,EAAE,gBAAgB;IAKrD,2EAA2E;IACrE,iBAAiB,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,6BAA6B,CAAC,MAAM,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAgChH,4EAA4E;IACtE,WAAW,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAU1C,aAAa;YAQb,WAAW;CAa1B"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.BlogCategoryTranslationService = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const nestjs_cls_1 = require("nestjs-cls");
|
|
15
|
+
const jsonapi_service_1 = require("../../../core/jsonapi/services/jsonapi.service");
|
|
16
|
+
const abstract_service_1 = require("../../../core/neo4j/abstracts/abstract.service");
|
|
17
|
+
const blog_category_translation_1 = require("../entities/blog-category-translation");
|
|
18
|
+
const blog_category_translation_repository_1 = require("../repositories/blog-category-translation.repository");
|
|
19
|
+
const slug_1 = require("../utils/slug");
|
|
20
|
+
const blog_queue_service_1 = require("./blog-queue.service");
|
|
21
|
+
/**
|
|
22
|
+
* Hand edits to a non-original category translation, and "Translate again"
|
|
23
|
+
* for one language. The original is edited through BlogCategoryService only.
|
|
24
|
+
*/
|
|
25
|
+
let BlogCategoryTranslationService = class BlogCategoryTranslationService extends abstract_service_1.AbstractService {
|
|
26
|
+
constructor(jsonApiService, blogCategoryTranslationRepository, clsService, blogQueueService) {
|
|
27
|
+
super(jsonApiService, blogCategoryTranslationRepository, clsService, blog_category_translation_1.BlogCategoryTranslationDescriptor.model);
|
|
28
|
+
this.blogCategoryTranslationRepository = blogCategoryTranslationRepository;
|
|
29
|
+
this.blogQueueService = blogQueueService;
|
|
30
|
+
this.descriptor = blog_category_translation_1.BlogCategoryTranslationDescriptor;
|
|
31
|
+
}
|
|
32
|
+
/** Saves this one translation and marks it `manual`. Nothing is re-run. */
|
|
33
|
+
async updateTranslation(params) {
|
|
34
|
+
const id = params.data.id;
|
|
35
|
+
const attributes = params.data.attributes;
|
|
36
|
+
const translation = await this._findEditable({ id });
|
|
37
|
+
let slug = translation.slug;
|
|
38
|
+
if (attributes.slug?.trim()) {
|
|
39
|
+
slug = await this._uniqueSlug({
|
|
40
|
+
language: translation.language,
|
|
41
|
+
text: attributes.slug,
|
|
42
|
+
excludeTranslationId: id,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
else if (!slug || attributes.name !== translation.name) {
|
|
46
|
+
slug = await this._uniqueSlug({
|
|
47
|
+
language: translation.language,
|
|
48
|
+
text: attributes.name,
|
|
49
|
+
excludeTranslationId: id,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
await this.blogCategoryTranslationRepository.updateText({
|
|
53
|
+
id,
|
|
54
|
+
name: attributes.name,
|
|
55
|
+
slug,
|
|
56
|
+
description: attributes.description,
|
|
57
|
+
source: "manual",
|
|
58
|
+
});
|
|
59
|
+
return this.findById({ id });
|
|
60
|
+
}
|
|
61
|
+
/** Re-queues translation of this one language from the current original. */
|
|
62
|
+
async retranslate(params) {
|
|
63
|
+
const translation = await this._findEditable({ id: params.id });
|
|
64
|
+
if (!translation.category?.id)
|
|
65
|
+
throw new common_1.NotFoundException(`Blog category translation ${params.id} has no category`);
|
|
66
|
+
await this.blogQueueService.enqueueCategoryLanguage({
|
|
67
|
+
categoryId: translation.category.id,
|
|
68
|
+
language: translation.language,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
async _findEditable(params) {
|
|
72
|
+
const translation = await this.blogCategoryTranslationRepository.findById({ id: params.id });
|
|
73
|
+
if (!translation)
|
|
74
|
+
throw new common_1.NotFoundException(`Blog category translation ${params.id} not found`);
|
|
75
|
+
if (translation.isOriginal)
|
|
76
|
+
throw new common_1.BadRequestException("The original is edited from the category, not as a translation");
|
|
77
|
+
return translation;
|
|
78
|
+
}
|
|
79
|
+
async _uniqueSlug(params) {
|
|
80
|
+
const base = (0, slug_1.slugify)(params.text);
|
|
81
|
+
const taken = await this.blogCategoryTranslationRepository.findSlugsWithPrefix({
|
|
82
|
+
language: params.language,
|
|
83
|
+
prefix: base,
|
|
84
|
+
excludeTranslationId: params.excludeTranslationId,
|
|
85
|
+
});
|
|
86
|
+
return (0, slug_1.uniqueSlug)(base, taken);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
exports.BlogCategoryTranslationService = BlogCategoryTranslationService;
|
|
90
|
+
exports.BlogCategoryTranslationService = BlogCategoryTranslationService = __decorate([
|
|
91
|
+
(0, common_1.Injectable)(),
|
|
92
|
+
__metadata("design:paramtypes", [jsonapi_service_1.JsonApiService,
|
|
93
|
+
blog_category_translation_repository_1.BlogCategoryTranslationRepository,
|
|
94
|
+
nestjs_cls_1.ClsService,
|
|
95
|
+
blog_queue_service_1.BlogQueueService])
|
|
96
|
+
], BlogCategoryTranslationService);
|
|
97
|
+
//# sourceMappingURL=blog-category-translation.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blog-category-translation.service.js","sourceRoot":"","sources":["../../../../src/foundations/blog/services/blog-category-translation.service.ts"],"names":[],"mappings":"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"}
|