@carlonicora/nestjs-neo4jsonapi 4.4.0 → 4.5.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/responder/factories/responder.context.factory.d.ts +2 -1
- package/dist/agents/responder/factories/responder.context.factory.d.ts.map +1 -1
- package/dist/agents/responder/factories/responder.context.factory.js.map +1 -1
- package/dist/agents/responder/services/responder.service.d.ts +16 -1
- package/dist/agents/responder/services/responder.service.d.ts.map +1 -1
- package/dist/agents/responder/services/responder.service.js +14 -2
- package/dist/agents/responder/services/responder.service.js.map +1 -1
- package/dist/bootstrap/app.module.factory.d.ts.map +1 -1
- package/dist/bootstrap/app.module.factory.js +2 -0
- package/dist/bootstrap/app.module.factory.js.map +1 -1
- package/dist/bootstrap/bootstrap.options.d.ts +35 -0
- package/dist/bootstrap/bootstrap.options.d.ts.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 +4 -0
- package/dist/common/index.js.map +1 -1
- package/dist/common/repositories/handbook.ai-source-query.provider.d.ts +34 -0
- package/dist/common/repositories/handbook.ai-source-query.provider.d.ts.map +1 -0
- package/dist/common/repositories/handbook.ai-source-query.provider.js +58 -0
- package/dist/common/repositories/handbook.ai-source-query.provider.js.map +1 -0
- package/dist/common/repositories/index.d.ts +1 -0
- package/dist/common/repositories/index.d.ts.map +1 -1
- package/dist/common/repositories/index.js +1 -0
- package/dist/common/repositories/index.js.map +1 -1
- package/dist/common/types/data.limits.d.ts +4 -0
- package/dist/common/types/data.limits.d.ts.map +1 -1
- package/dist/common/utils/chunk-content.util.d.ts +28 -0
- package/dist/common/utils/chunk-content.util.d.ts.map +1 -0
- package/dist/common/utils/chunk-content.util.js +32 -0
- package/dist/common/utils/chunk-content.util.js.map +1 -0
- package/dist/config/base.config.d.ts.map +1 -1
- package/dist/config/base.config.js +1 -0
- package/dist/config/base.config.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/config/interfaces/config.two.factor.interface.d.ts +10 -3
- package/dist/config/interfaces/config.two.factor.interface.d.ts.map +1 -1
- package/dist/core/core.module.d.ts.map +1 -1
- package/dist/core/core.module.js +8 -1
- package/dist/core/core.module.js.map +1 -1
- package/dist/core/llm/services/model.service.d.ts +13 -0
- package/dist/core/llm/services/model.service.d.ts.map +1 -1
- package/dist/core/llm/services/model.service.js +22 -0
- package/dist/core/llm/services/model.service.js.map +1 -1
- package/dist/core/neo4j/abstracts/abstract.service.d.ts.map +1 -1
- package/dist/core/neo4j/abstracts/abstract.service.js +8 -1
- package/dist/core/neo4j/abstracts/abstract.service.js.map +1 -1
- package/dist/foundations/assistant/controllers/assistant.controller.d.ts.map +1 -1
- package/dist/foundations/assistant/controllers/assistant.controller.js +6 -2
- package/dist/foundations/assistant/controllers/assistant.controller.js.map +1 -1
- package/dist/foundations/assistant/dtos/assistant-append.dto.d.ts +2 -0
- package/dist/foundations/assistant/dtos/assistant-append.dto.d.ts.map +1 -1
- package/dist/foundations/assistant/dtos/assistant-append.dto.js +10 -0
- package/dist/foundations/assistant/dtos/assistant-append.dto.js.map +1 -1
- package/dist/foundations/assistant/dtos/assistant-post.dto.d.ts +2 -0
- package/dist/foundations/assistant/dtos/assistant-post.dto.d.ts.map +1 -1
- package/dist/foundations/assistant/dtos/assistant-post.dto.js +10 -0
- package/dist/foundations/assistant/dtos/assistant-post.dto.js.map +1 -1
- package/dist/foundations/assistant/services/assistant.service.d.ts +8 -1
- package/dist/foundations/assistant/services/assistant.service.d.ts.map +1 -1
- package/dist/foundations/assistant/services/assistant.service.js +14 -1
- package/dist/foundations/assistant/services/assistant.service.js.map +1 -1
- package/dist/foundations/foundations.modules.d.ts +6 -0
- package/dist/foundations/foundations.modules.d.ts.map +1 -1
- package/dist/foundations/foundations.modules.js +10 -2
- package/dist/foundations/foundations.modules.js.map +1 -1
- package/dist/foundations/handbook/controllers/handbook-thread.controller.d.ts +61 -0
- package/dist/foundations/handbook/controllers/handbook-thread.controller.d.ts.map +1 -0
- package/dist/foundations/handbook/controllers/handbook-thread.controller.js +170 -0
- package/dist/foundations/handbook/controllers/handbook-thread.controller.js.map +1 -0
- package/dist/foundations/handbook/controllers/handbook.controller.d.ts +29 -0
- package/dist/foundations/handbook/controllers/handbook.controller.d.ts.map +1 -0
- package/dist/foundations/handbook/controllers/handbook.controller.js +123 -0
- package/dist/foundations/handbook/controllers/handbook.controller.js.map +1 -0
- package/dist/foundations/handbook/dtos/handbook-page.dto.d.ts +11 -0
- package/dist/foundations/handbook/dtos/handbook-page.dto.d.ts.map +1 -0
- package/dist/foundations/handbook/dtos/handbook-page.dto.js +45 -0
- package/dist/foundations/handbook/dtos/handbook-page.dto.js.map +1 -0
- package/dist/foundations/handbook/dtos/handbook-thread-message-post.dto.d.ts +24 -0
- package/dist/foundations/handbook/dtos/handbook-thread-message-post.dto.d.ts.map +1 -0
- package/dist/foundations/handbook/dtos/handbook-thread-message-post.dto.js +60 -0
- package/dist/foundations/handbook/dtos/handbook-thread-message-post.dto.js.map +1 -0
- package/dist/foundations/handbook/dtos/handbook-thread-patch.dto.d.ts +19 -0
- package/dist/foundations/handbook/dtos/handbook-thread-patch.dto.d.ts.map +1 -0
- package/dist/foundations/handbook/dtos/handbook-thread-patch.dto.js +59 -0
- package/dist/foundations/handbook/dtos/handbook-thread-patch.dto.js.map +1 -0
- package/dist/foundations/handbook/dtos/handbook-thread-post.dto.d.ts +24 -0
- package/dist/foundations/handbook/dtos/handbook-thread-post.dto.d.ts.map +1 -0
- package/dist/foundations/handbook/dtos/handbook-thread-post.dto.js +60 -0
- package/dist/foundations/handbook/dtos/handbook-thread-post.dto.js.map +1 -0
- package/dist/foundations/handbook/entities/handbook-page.d.ts +25 -0
- package/dist/foundations/handbook/entities/handbook-page.d.ts.map +1 -0
- package/dist/foundations/handbook/entities/handbook-page.js +45 -0
- package/dist/foundations/handbook/entities/handbook-page.js.map +1 -0
- package/dist/foundations/handbook/entities/handbook-page.meta.d.ts +3 -0
- package/dist/foundations/handbook/entities/handbook-page.meta.d.ts.map +1 -0
- package/dist/foundations/handbook/entities/handbook-page.meta.js +10 -0
- package/dist/foundations/handbook/entities/handbook-page.meta.js.map +1 -0
- package/dist/foundations/handbook/entities/handbook-section.d.ts +22 -0
- package/dist/foundations/handbook/entities/handbook-section.d.ts.map +1 -0
- package/dist/foundations/handbook/entities/handbook-section.js +24 -0
- package/dist/foundations/handbook/entities/handbook-section.js.map +1 -0
- package/dist/foundations/handbook/entities/handbook-section.meta.d.ts +3 -0
- package/dist/foundations/handbook/entities/handbook-section.meta.d.ts.map +1 -0
- package/dist/foundations/handbook/entities/handbook-section.meta.js +10 -0
- package/dist/foundations/handbook/entities/handbook-section.meta.js.map +1 -0
- package/dist/foundations/handbook/entities/handbook-thread-message.d.ts +36 -0
- package/dist/foundations/handbook/entities/handbook-thread-message.d.ts.map +1 -0
- package/dist/foundations/handbook/entities/handbook-thread-message.js +28 -0
- package/dist/foundations/handbook/entities/handbook-thread-message.js.map +1 -0
- package/dist/foundations/handbook/entities/handbook-thread-message.meta.d.ts +3 -0
- package/dist/foundations/handbook/entities/handbook-thread-message.meta.d.ts.map +1 -0
- package/dist/foundations/handbook/entities/handbook-thread-message.meta.js +10 -0
- package/dist/foundations/handbook/entities/handbook-thread-message.meta.js.map +1 -0
- package/dist/foundations/handbook/entities/handbook-thread.d.ts +47 -0
- package/dist/foundations/handbook/entities/handbook-thread.d.ts.map +1 -0
- package/dist/foundations/handbook/entities/handbook-thread.js +35 -0
- package/dist/foundations/handbook/entities/handbook-thread.js.map +1 -0
- package/dist/foundations/handbook/entities/handbook-thread.meta.d.ts +3 -0
- package/dist/foundations/handbook/entities/handbook-thread.meta.d.ts.map +1 -0
- package/dist/foundations/handbook/entities/handbook-thread.meta.js +10 -0
- package/dist/foundations/handbook/entities/handbook-thread.meta.js.map +1 -0
- package/dist/foundations/handbook/handbook.module.d.ts +21 -0
- package/dist/foundations/handbook/handbook.module.d.ts.map +1 -0
- package/dist/foundations/handbook/handbook.module.js +135 -0
- package/dist/foundations/handbook/handbook.module.js.map +1 -0
- package/dist/foundations/handbook/index.d.ts +23 -0
- package/dist/foundations/handbook/index.d.ts.map +1 -0
- package/dist/foundations/handbook/index.js +39 -0
- package/dist/foundations/handbook/index.js.map +1 -0
- package/dist/foundations/handbook/interfaces/handbook.config.interface.d.ts +26 -0
- package/dist/foundations/handbook/interfaces/handbook.config.interface.d.ts.map +1 -0
- package/dist/foundations/handbook/interfaces/handbook.config.interface.js +10 -0
- package/dist/foundations/handbook/interfaces/handbook.config.interface.js.map +1 -0
- package/dist/foundations/handbook/processors/handbook.processor.d.ts +22 -0
- package/dist/foundations/handbook/processors/handbook.processor.d.ts.map +1 -0
- package/dist/foundations/handbook/processors/handbook.processor.js +108 -0
- package/dist/foundations/handbook/processors/handbook.processor.js.map +1 -0
- package/dist/foundations/handbook/repositories/handbook-page.repository.d.ts +135 -0
- package/dist/foundations/handbook/repositories/handbook-page.repository.d.ts.map +1 -0
- package/dist/foundations/handbook/repositories/handbook-page.repository.js +245 -0
- package/dist/foundations/handbook/repositories/handbook-page.repository.js.map +1 -0
- package/dist/foundations/handbook/repositories/handbook-section.repository.d.ts +36 -0
- package/dist/foundations/handbook/repositories/handbook-section.repository.d.ts.map +1 -0
- package/dist/foundations/handbook/repositories/handbook-section.repository.js +91 -0
- package/dist/foundations/handbook/repositories/handbook-section.repository.js.map +1 -0
- package/dist/foundations/handbook/repositories/handbook-thread-message.repository.d.ts +36 -0
- package/dist/foundations/handbook/repositories/handbook-thread-message.repository.d.ts.map +1 -0
- package/dist/foundations/handbook/repositories/handbook-thread-message.repository.js +63 -0
- package/dist/foundations/handbook/repositories/handbook-thread-message.repository.js.map +1 -0
- package/dist/foundations/handbook/repositories/handbook-thread.repository.d.ts +63 -0
- package/dist/foundations/handbook/repositories/handbook-thread.repository.d.ts.map +1 -0
- package/dist/foundations/handbook/repositories/handbook-thread.repository.js +86 -0
- package/dist/foundations/handbook/repositories/handbook-thread.repository.js.map +1 -0
- package/dist/foundations/handbook/services/handbook-ingest.service.d.ts +101 -0
- package/dist/foundations/handbook/services/handbook-ingest.service.d.ts.map +1 -0
- package/dist/foundations/handbook/services/handbook-ingest.service.js +408 -0
- package/dist/foundations/handbook/services/handbook-ingest.service.js.map +1 -0
- package/dist/foundations/handbook/services/handbook-page.service.d.ts +57 -0
- package/dist/foundations/handbook/services/handbook-page.service.d.ts.map +1 -0
- package/dist/foundations/handbook/services/handbook-page.service.js +116 -0
- package/dist/foundations/handbook/services/handbook-page.service.js.map +1 -0
- package/dist/foundations/handbook/services/handbook-section.service.d.ts +15 -0
- package/dist/foundations/handbook/services/handbook-section.service.d.ts.map +1 -0
- package/dist/foundations/handbook/services/handbook-section.service.js +37 -0
- package/dist/foundations/handbook/services/handbook-section.service.js.map +1 -0
- package/dist/foundations/handbook/services/handbook-thread-message.service.d.ts +27 -0
- package/dist/foundations/handbook/services/handbook-thread-message.service.d.ts.map +1 -0
- package/dist/foundations/handbook/services/handbook-thread-message.service.js +39 -0
- package/dist/foundations/handbook/services/handbook-thread-message.service.js.map +1 -0
- package/dist/foundations/handbook/services/handbook-thread.service.d.ts +164 -0
- package/dist/foundations/handbook/services/handbook-thread.service.d.ts.map +1 -0
- package/dist/foundations/handbook/services/handbook-thread.service.js +297 -0
- package/dist/foundations/handbook/services/handbook-thread.service.js.map +1 -0
- package/dist/foundations/how-to/controllers/how-to.controller.d.ts +7 -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 +18 -12
- package/dist/foundations/how-to/controllers/how-to.controller.js.map +1 -1
- package/dist/foundations/how-to/controllers/how-to.public.controller.d.ts +7 -0
- package/dist/foundations/how-to/controllers/how-to.public.controller.d.ts.map +1 -1
- package/dist/foundations/how-to/controllers/how-to.public.controller.js +7 -0
- package/dist/foundations/how-to/controllers/how-to.public.controller.js.map +1 -1
- package/dist/foundations/how-to/entities/how-to.d.ts.map +1 -1
- package/dist/foundations/how-to/entities/how-to.js +60 -13
- package/dist/foundations/how-to/entities/how-to.js.map +1 -1
- package/dist/foundations/how-to/how-to.module.d.ts +36 -1
- package/dist/foundations/how-to/how-to.module.d.ts.map +1 -1
- package/dist/foundations/how-to/how-to.module.js +80 -4
- package/dist/foundations/how-to/how-to.module.js.map +1 -1
- package/dist/foundations/how-to/index.d.ts +1 -0
- package/dist/foundations/how-to/index.d.ts.map +1 -1
- package/dist/foundations/how-to/index.js +1 -0
- package/dist/foundations/how-to/index.js.map +1 -1
- package/dist/foundations/how-to/interfaces/how-to.config.interface.d.ts +30 -0
- package/dist/foundations/how-to/interfaces/how-to.config.interface.d.ts.map +1 -0
- package/dist/foundations/how-to/interfaces/how-to.config.interface.js +10 -0
- package/dist/foundations/how-to/interfaces/how-to.config.interface.js.map +1 -0
- package/dist/foundations/how-to/processors/how-to.processor.d.ts +3 -1
- package/dist/foundations/how-to/processors/how-to.processor.d.ts.map +1 -1
- package/dist/foundations/how-to/processors/how-to.processor.js +8 -1
- package/dist/foundations/how-to/processors/how-to.processor.js.map +1 -1
- package/dist/foundations/how-to/services/how-to.service.d.ts +4 -0
- package/dist/foundations/how-to/services/how-to.service.d.ts.map +1 -1
- package/dist/foundations/how-to/services/how-to.service.js +47 -24
- package/dist/foundations/how-to/services/how-to.service.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/two-factor/services/totp.service.d.ts.map +1 -1
- package/dist/foundations/two-factor/services/totp.service.js +2 -1
- package/dist/foundations/two-factor/services/totp.service.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,245 @@
|
|
|
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.HandbookPageRepository = 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 abstract_repository_1 = require("../../../core/neo4j/abstracts/abstract.repository");
|
|
17
|
+
const neo4j_service_1 = require("../../../core/neo4j/services/neo4j.service");
|
|
18
|
+
const security_service_1 = require("../../../core/security/services/security.service");
|
|
19
|
+
const chunk_meta_1 = require("../../chunk/entities/chunk.meta");
|
|
20
|
+
const handbook_page_1 = require("../entities/handbook-page");
|
|
21
|
+
const handbook_page_meta_1 = require("../entities/handbook-page.meta");
|
|
22
|
+
let HandbookPageRepository = class HandbookPageRepository extends abstract_repository_1.AbstractRepository {
|
|
23
|
+
constructor(neo4j, securityService, clsService) {
|
|
24
|
+
super(neo4j, securityService, clsService);
|
|
25
|
+
this.descriptor = handbook_page_1.HandbookPageDescriptor;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* `path` is the natural key of the ingest: the walk looks a page up by the
|
|
29
|
+
* file it came from. The descriptor only auto-creates the `id` constraint
|
|
30
|
+
* (common/helpers/define-entity.ts:387), so this one is declared here — the
|
|
31
|
+
* same place ChunkRepository declares its own indexes.
|
|
32
|
+
*
|
|
33
|
+
* `super.onModuleInit()` runs FIRST and is not optional: the base
|
|
34
|
+
* implementation is what turns the descriptor's `constraints` and `indexes`
|
|
35
|
+
* into real Neo4j objects. Overriding it without delegating would silently
|
|
36
|
+
* drop the `id` uniqueness constraint and the descriptor's FULLTEXT index —
|
|
37
|
+
* the bug NotificationRepository avoids by re-declaring its `id` constraint
|
|
38
|
+
* by hand. Delegating keeps the database config derived from the descriptor.
|
|
39
|
+
*/
|
|
40
|
+
async onModuleInit() {
|
|
41
|
+
await super.onModuleInit();
|
|
42
|
+
await this.neo4j.writeOne({
|
|
43
|
+
query: `CREATE CONSTRAINT handbookpage_path IF NOT EXISTS FOR (${handbook_page_meta_1.handbookPageMeta.nodeName}:${handbook_page_meta_1.handbookPageMeta.labelName}) REQUIRE ${handbook_page_meta_1.handbookPageMeta.nodeName}.path IS UNIQUE`,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The list is a manual's table of contents, not an audit log.
|
|
48
|
+
*
|
|
49
|
+
* `AbstractRepository.find` orders by `descriptor.defaultOrderBy`, which
|
|
50
|
+
* `defineEntity` hardcodes to `updatedAt DESC` and exposes no way to override
|
|
51
|
+
* — so without this the rows arrive in reverse ingest order and `09-workflow`
|
|
52
|
+
* renders before `00-start-here`. The one ordering hook `find` does offer a
|
|
53
|
+
* caller is `orderByFields`, a multi-key `SortCriterion[]`; supplying a
|
|
54
|
+
* default for it puts `ORDER BY handbookPage.section ASC, handbookPage.order
|
|
55
|
+
* ASC` ahead of `{CURSOR}` in the inherited query and leaves the fulltext
|
|
56
|
+
* branch, the structured filters, the security snippet and the pagination
|
|
57
|
+
* exactly as the framework builds them.
|
|
58
|
+
*
|
|
59
|
+
* `order` is the repo-relative path, so sorting on it inside a section
|
|
60
|
+
* reproduces the filesystem, which is already meaningful. An explicit
|
|
61
|
+
* `orderBy` or `orderByFields` from the request still wins.
|
|
62
|
+
*/
|
|
63
|
+
async find(params) {
|
|
64
|
+
const ordered = params.orderByFields?.length || params.orderBy;
|
|
65
|
+
return super.find({
|
|
66
|
+
...params,
|
|
67
|
+
orderByFields: ordered
|
|
68
|
+
? params.orderByFields
|
|
69
|
+
: [
|
|
70
|
+
{ field: "section", direction: "asc" },
|
|
71
|
+
{ field: "order", direction: "asc" },
|
|
72
|
+
],
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/** Every page, unpaginated — the ingest diffs the whole tree in one pass. */
|
|
76
|
+
async findAllPages() {
|
|
77
|
+
const query = this.neo4j.initQuery({ serialiser: handbook_page_1.HandbookPageDescriptor.model });
|
|
78
|
+
query.query = `
|
|
79
|
+
${this.buildDefaultMatch()}
|
|
80
|
+
ORDER BY ${handbook_page_meta_1.handbookPageMeta.nodeName}.path ASC
|
|
81
|
+
${this.buildReturnStatement()}
|
|
82
|
+
`;
|
|
83
|
+
return this.neo4j.readMany(query);
|
|
84
|
+
}
|
|
85
|
+
async findByPath(params) {
|
|
86
|
+
const query = this.neo4j.initQuery({ serialiser: handbook_page_1.HandbookPageDescriptor.model });
|
|
87
|
+
query.queryParams = { ...query.queryParams, path: params.path };
|
|
88
|
+
query.query = `
|
|
89
|
+
${this.buildDefaultMatch()}
|
|
90
|
+
WHERE ${handbook_page_meta_1.handbookPageMeta.nodeName}.path = $path
|
|
91
|
+
${this.buildReturnStatement()}
|
|
92
|
+
`;
|
|
93
|
+
return this.neo4j.readOne(query);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Provenance for one answer: the repo-relative path of the page each cited
|
|
97
|
+
* chunk belongs to, in the order the chunks were cited.
|
|
98
|
+
*
|
|
99
|
+
* This does NOT go through `readMany`, because the result is not a
|
|
100
|
+
* `HandbookPage` — it is one scalar column. Raw records never leave this
|
|
101
|
+
* method: the mapping to `string[]` happens here, and a row whose `path` is
|
|
102
|
+
* missing is dropped rather than returned as an empty string. A chunk whose
|
|
103
|
+
* page no longer exists simply does not match, so it disappears from the
|
|
104
|
+
* provenance list instead of appearing as a blank source.
|
|
105
|
+
*/
|
|
106
|
+
async findPathsByChunkIds(params) {
|
|
107
|
+
if (params.chunkIds.length === 0)
|
|
108
|
+
return [];
|
|
109
|
+
const result = await this.neo4j.read(`
|
|
110
|
+
UNWIND $chunkIds AS chunkId
|
|
111
|
+
MATCH (${handbook_page_meta_1.handbookPageMeta.nodeName}:${handbook_page_meta_1.handbookPageMeta.labelName})-[:HAS_CHUNK]->(${chunk_meta_1.chunkMeta.nodeName}:${chunk_meta_1.chunkMeta.labelName} {id: chunkId})
|
|
112
|
+
RETURN ${handbook_page_meta_1.handbookPageMeta.nodeName}.path AS path
|
|
113
|
+
`, { chunkIds: params.chunkIds });
|
|
114
|
+
return (result?.records ?? [])
|
|
115
|
+
.map((record) => record.get("path"))
|
|
116
|
+
.filter((path) => typeof path === "string" && path.length > 0);
|
|
117
|
+
}
|
|
118
|
+
async createPage(params) {
|
|
119
|
+
const query = this.neo4j.initQuery();
|
|
120
|
+
query.queryParams = {
|
|
121
|
+
...query.queryParams,
|
|
122
|
+
...params,
|
|
123
|
+
// A page the index does not list has no summary. `null` clears the
|
|
124
|
+
// property in Cypher; `undefined` is not a legal driver parameter.
|
|
125
|
+
summary: params.summary ?? null,
|
|
126
|
+
aiStatus: ai_status_1.AiStatus.Pending,
|
|
127
|
+
};
|
|
128
|
+
query.query = `
|
|
129
|
+
CREATE (${handbook_page_meta_1.handbookPageMeta.nodeName}:${handbook_page_meta_1.handbookPageMeta.labelName} {
|
|
130
|
+
id: $id,
|
|
131
|
+
path: $path,
|
|
132
|
+
title: $title,
|
|
133
|
+
content: $content,
|
|
134
|
+
contentHash: $contentHash,
|
|
135
|
+
wordCount: $wordCount,
|
|
136
|
+
aiStatus: $aiStatus,
|
|
137
|
+
section: $section,
|
|
138
|
+
order: $order,
|
|
139
|
+
summary: $summary,
|
|
140
|
+
createdAt: datetime(),
|
|
141
|
+
updatedAt: datetime()
|
|
142
|
+
})
|
|
143
|
+
`;
|
|
144
|
+
await this.neo4j.writeOne(query);
|
|
145
|
+
}
|
|
146
|
+
async updatePage(params) {
|
|
147
|
+
const query = this.neo4j.initQuery();
|
|
148
|
+
query.queryParams = {
|
|
149
|
+
...query.queryParams,
|
|
150
|
+
...params,
|
|
151
|
+
summary: params.summary ?? null,
|
|
152
|
+
aiStatus: ai_status_1.AiStatus.Pending,
|
|
153
|
+
};
|
|
154
|
+
query.query = `
|
|
155
|
+
MATCH (${handbook_page_meta_1.handbookPageMeta.nodeName}:${handbook_page_meta_1.handbookPageMeta.labelName} {id: $id})
|
|
156
|
+
SET ${handbook_page_meta_1.handbookPageMeta.nodeName}.title = $title,
|
|
157
|
+
${handbook_page_meta_1.handbookPageMeta.nodeName}.content = $content,
|
|
158
|
+
${handbook_page_meta_1.handbookPageMeta.nodeName}.contentHash = $contentHash,
|
|
159
|
+
${handbook_page_meta_1.handbookPageMeta.nodeName}.wordCount = $wordCount,
|
|
160
|
+
${handbook_page_meta_1.handbookPageMeta.nodeName}.aiStatus = $aiStatus,
|
|
161
|
+
${handbook_page_meta_1.handbookPageMeta.nodeName}.section = $section,
|
|
162
|
+
${handbook_page_meta_1.handbookPageMeta.nodeName}.order = $order,
|
|
163
|
+
${handbook_page_meta_1.handbookPageMeta.nodeName}.summary = $summary,
|
|
164
|
+
${handbook_page_meta_1.handbookPageMeta.nodeName}.updatedAt = datetime()
|
|
165
|
+
`;
|
|
166
|
+
await this.neo4j.writeOne(query);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Index fields only — no content, no hash, no chunk work.
|
|
170
|
+
*
|
|
171
|
+
* The walk calls this for a page whose bytes did not change, so that a sync
|
|
172
|
+
* which only adds new index data (a README summary, a frontmatter `section`)
|
|
173
|
+
* costs nothing in embeddings. Bumping INGEST_FORMAT_VERSION instead would
|
|
174
|
+
* change every contentHash and re-embed the whole tree.
|
|
175
|
+
*/
|
|
176
|
+
async updateMetadata(params) {
|
|
177
|
+
const query = this.neo4j.initQuery();
|
|
178
|
+
query.queryParams = { ...query.queryParams, ...params, summary: params.summary ?? null };
|
|
179
|
+
query.query = `
|
|
180
|
+
MATCH (${handbook_page_meta_1.handbookPageMeta.nodeName}:${handbook_page_meta_1.handbookPageMeta.labelName} {id: $id})
|
|
181
|
+
SET ${handbook_page_meta_1.handbookPageMeta.nodeName}.title = $title,
|
|
182
|
+
${handbook_page_meta_1.handbookPageMeta.nodeName}.section = $section,
|
|
183
|
+
${handbook_page_meta_1.handbookPageMeta.nodeName}.order = $order,
|
|
184
|
+
${handbook_page_meta_1.handbookPageMeta.nodeName}.summary = $summary,
|
|
185
|
+
${handbook_page_meta_1.handbookPageMeta.nodeName}.updatedAt = datetime()
|
|
186
|
+
`;
|
|
187
|
+
await this.neo4j.writeOne(query);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* The display translation of one page — title, summary and body.
|
|
191
|
+
*
|
|
192
|
+
* Display fields ONLY. No content, no contentHash, no aiStatus, no chunk
|
|
193
|
+
* work: the page is indexed in English and shown in the display language, so
|
|
194
|
+
* a translation that arrives, changes or disappears must leave the retrieval
|
|
195
|
+
* store byte-for-byte as it was. Writing `content` here, or bumping the hash,
|
|
196
|
+
* would re-chunk and re-embed the page in the translated language and poison
|
|
197
|
+
* the index the handbook answers from.
|
|
198
|
+
*
|
|
199
|
+
* Every value is bound, and an absent one is bound as `null` rather than
|
|
200
|
+
* omitted: `null` CLEARS the property, which is what a page whose translation
|
|
201
|
+
* was deleted needs, and `undefined` is not a legal driver parameter.
|
|
202
|
+
*/
|
|
203
|
+
async updateDisplay(params) {
|
|
204
|
+
const query = this.neo4j.initQuery();
|
|
205
|
+
query.queryParams = {
|
|
206
|
+
...query.queryParams,
|
|
207
|
+
id: params.id,
|
|
208
|
+
displayTitle: params.displayTitle ?? null,
|
|
209
|
+
displaySummary: params.displaySummary ?? null,
|
|
210
|
+
displayContent: params.displayContent ?? null,
|
|
211
|
+
};
|
|
212
|
+
query.query = `
|
|
213
|
+
MATCH (${handbook_page_meta_1.handbookPageMeta.nodeName}:${handbook_page_meta_1.handbookPageMeta.labelName} {id: $id})
|
|
214
|
+
SET ${handbook_page_meta_1.handbookPageMeta.nodeName}.displayTitle = $displayTitle,
|
|
215
|
+
${handbook_page_meta_1.handbookPageMeta.nodeName}.displaySummary = $displaySummary,
|
|
216
|
+
${handbook_page_meta_1.handbookPageMeta.nodeName}.displayContent = $displayContent,
|
|
217
|
+
${handbook_page_meta_1.handbookPageMeta.nodeName}.updatedAt = datetime()
|
|
218
|
+
`;
|
|
219
|
+
await this.neo4j.writeOne(query);
|
|
220
|
+
}
|
|
221
|
+
async updateStatus(params) {
|
|
222
|
+
const query = this.neo4j.initQuery();
|
|
223
|
+
query.queryParams = { ...query.queryParams, id: params.id, aiStatus: params.aiStatus };
|
|
224
|
+
query.query = `
|
|
225
|
+
MATCH (${handbook_page_meta_1.handbookPageMeta.nodeName}:${handbook_page_meta_1.handbookPageMeta.labelName} {id: $id})
|
|
226
|
+
SET ${handbook_page_meta_1.handbookPageMeta.nodeName}.aiStatus = $aiStatus, ${handbook_page_meta_1.handbookPageMeta.nodeName}.updatedAt = datetime()
|
|
227
|
+
`;
|
|
228
|
+
await this.neo4j.writeOne(query);
|
|
229
|
+
}
|
|
230
|
+
async deletePage(params) {
|
|
231
|
+
const query = this.neo4j.initQuery();
|
|
232
|
+
query.queryParams = { ...query.queryParams, id: params.id };
|
|
233
|
+
query.query = `
|
|
234
|
+
MATCH (${handbook_page_meta_1.handbookPageMeta.nodeName}:${handbook_page_meta_1.handbookPageMeta.labelName} {id: $id})
|
|
235
|
+
DETACH DELETE ${handbook_page_meta_1.handbookPageMeta.nodeName}
|
|
236
|
+
`;
|
|
237
|
+
await this.neo4j.writeOne(query);
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
exports.HandbookPageRepository = HandbookPageRepository;
|
|
241
|
+
exports.HandbookPageRepository = HandbookPageRepository = __decorate([
|
|
242
|
+
(0, common_1.Injectable)(),
|
|
243
|
+
__metadata("design:paramtypes", [neo4j_service_1.Neo4jService, security_service_1.SecurityService, nestjs_cls_1.ClsService])
|
|
244
|
+
], HandbookPageRepository);
|
|
245
|
+
//# sourceMappingURL=handbook-page.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handbook-page.repository.js","sourceRoot":"","sources":["../../../../src/foundations/handbook/repositories/handbook-page.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { OnModuleInit } from "@nestjs/common";
|
|
2
|
+
import { ClsService } from "nestjs-cls";
|
|
3
|
+
import { AbstractRepository } from "../../../core/neo4j/abstracts/abstract.repository";
|
|
4
|
+
import { Neo4jService } from "../../../core/neo4j/services/neo4j.service";
|
|
5
|
+
import { SecurityService } from "../../../core/security/services/security.service";
|
|
6
|
+
import { HandbookSection, HandbookSectionDescriptor } from "../entities/handbook-section";
|
|
7
|
+
export declare class HandbookSectionRepository extends AbstractRepository<HandbookSection, typeof HandbookSectionDescriptor.relationships> implements OnModuleInit {
|
|
8
|
+
protected readonly descriptor: import("../../..").EntityDescriptor<HandbookSection, {}>;
|
|
9
|
+
constructor(neo4j: Neo4jService, securityService: SecurityService, clsService: ClsService);
|
|
10
|
+
/**
|
|
11
|
+
* `key` is the natural key of the ingest. `super.onModuleInit()` runs FIRST
|
|
12
|
+
* and is not optional: the base implementation turns the descriptor's own
|
|
13
|
+
* constraints and indexes into real Neo4j objects, exactly as
|
|
14
|
+
* HandbookPageRepository documents.
|
|
15
|
+
*/
|
|
16
|
+
onModuleInit(): Promise<void>;
|
|
17
|
+
/** Every section, unpaginated — there are ten of them. */
|
|
18
|
+
findAllSections(): Promise<HandbookSection[]>;
|
|
19
|
+
/**
|
|
20
|
+
* Sections are replaced wholesale on every sync: there are ten of them and
|
|
21
|
+
* diffing buys nothing. One statement, so a failed sync cannot leave the
|
|
22
|
+
* tree half-described.
|
|
23
|
+
*/
|
|
24
|
+
replaceAll(params: {
|
|
25
|
+
sections: {
|
|
26
|
+
id: string;
|
|
27
|
+
key: string;
|
|
28
|
+
title: string;
|
|
29
|
+
summary?: string;
|
|
30
|
+
order: string;
|
|
31
|
+
displayTitle?: string;
|
|
32
|
+
displaySummary?: string;
|
|
33
|
+
}[];
|
|
34
|
+
}): Promise<void>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=handbook-section.repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handbook-section.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/handbook/repositories/handbook-section.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1D,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,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAG1F,qBACa,yBACX,SAAQ,kBAAkB,CAAC,eAAe,EAAE,OAAO,yBAAyB,CAAC,aAAa,CAC1F,YAAW,YAAY;IAEvB,SAAS,CAAC,QAAQ,CAAC,UAAU,2DAA6B;gBAE9C,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU;IAIzF;;;;;OAKG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAQnC,0DAA0D;IACpD,eAAe,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAUnD;;;;OAIG;IACG,UAAU,CAAC,MAAM,EAAE;QACvB,QAAQ,EAAE;YACR,EAAE,EAAE,MAAM,CAAC;YACX,GAAG,EAAE,MAAM,CAAC;YACZ,KAAK,EAAE,MAAM,CAAC;YACd,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC;YACd,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,cAAc,CAAC,EAAE,MAAM,CAAC;SACzB,EAAE,CAAC;KACL,GAAG,OAAO,CAAC,IAAI,CAAC;CAiClB"}
|
|
@@ -0,0 +1,91 @@
|
|
|
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.HandbookSectionRepository = 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 handbook_section_1 = require("../entities/handbook-section");
|
|
19
|
+
const handbook_section_meta_1 = require("../entities/handbook-section.meta");
|
|
20
|
+
let HandbookSectionRepository = class HandbookSectionRepository extends abstract_repository_1.AbstractRepository {
|
|
21
|
+
constructor(neo4j, securityService, clsService) {
|
|
22
|
+
super(neo4j, securityService, clsService);
|
|
23
|
+
this.descriptor = handbook_section_1.HandbookSectionDescriptor;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* `key` is the natural key of the ingest. `super.onModuleInit()` runs FIRST
|
|
27
|
+
* and is not optional: the base implementation turns the descriptor's own
|
|
28
|
+
* constraints and indexes into real Neo4j objects, exactly as
|
|
29
|
+
* HandbookPageRepository documents.
|
|
30
|
+
*/
|
|
31
|
+
async onModuleInit() {
|
|
32
|
+
await super.onModuleInit();
|
|
33
|
+
await this.neo4j.writeOne({
|
|
34
|
+
query: `CREATE CONSTRAINT handbooksection_key IF NOT EXISTS FOR (${handbook_section_meta_1.handbookSectionMeta.nodeName}:${handbook_section_meta_1.handbookSectionMeta.labelName}) REQUIRE ${handbook_section_meta_1.handbookSectionMeta.nodeName}.key IS UNIQUE`,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/** Every section, unpaginated — there are ten of them. */
|
|
38
|
+
async findAllSections() {
|
|
39
|
+
const query = this.neo4j.initQuery({ serialiser: handbook_section_1.HandbookSectionDescriptor.model });
|
|
40
|
+
query.query = `
|
|
41
|
+
${this.buildDefaultMatch()}
|
|
42
|
+
ORDER BY ${handbook_section_meta_1.handbookSectionMeta.nodeName}.order ASC
|
|
43
|
+
${this.buildReturnStatement()}
|
|
44
|
+
`;
|
|
45
|
+
return this.neo4j.readMany(query);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Sections are replaced wholesale on every sync: there are ten of them and
|
|
49
|
+
* diffing buys nothing. One statement, so a failed sync cannot leave the
|
|
50
|
+
* tree half-described.
|
|
51
|
+
*/
|
|
52
|
+
async replaceAll(params) {
|
|
53
|
+
const query = this.neo4j.initQuery();
|
|
54
|
+
query.queryParams = {
|
|
55
|
+
...query.queryParams,
|
|
56
|
+
// An absent optional is bound as `null`, never left `undefined`: the
|
|
57
|
+
// driver takes no `undefined`, and `null` is what writes "this section
|
|
58
|
+
// has no blurb / no translation" rather than a stale value.
|
|
59
|
+
sections: params.sections.map((section) => ({
|
|
60
|
+
...section,
|
|
61
|
+
summary: section.summary ?? null,
|
|
62
|
+
displayTitle: section.displayTitle ?? null,
|
|
63
|
+
displaySummary: section.displaySummary ?? null,
|
|
64
|
+
})),
|
|
65
|
+
};
|
|
66
|
+
query.query = `
|
|
67
|
+
OPTIONAL MATCH (existing:${handbook_section_meta_1.handbookSectionMeta.labelName})
|
|
68
|
+
DETACH DELETE existing
|
|
69
|
+
WITH count(*) AS ignored
|
|
70
|
+
UNWIND $sections AS section
|
|
71
|
+
CREATE (${handbook_section_meta_1.handbookSectionMeta.nodeName}:${handbook_section_meta_1.handbookSectionMeta.labelName} {
|
|
72
|
+
id: section.id,
|
|
73
|
+
key: section.key,
|
|
74
|
+
title: section.title,
|
|
75
|
+
summary: section.summary,
|
|
76
|
+
order: section.order,
|
|
77
|
+
displayTitle: section.displayTitle,
|
|
78
|
+
displaySummary: section.displaySummary,
|
|
79
|
+
createdAt: datetime(),
|
|
80
|
+
updatedAt: datetime()
|
|
81
|
+
})
|
|
82
|
+
`;
|
|
83
|
+
await this.neo4j.writeOne(query);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
exports.HandbookSectionRepository = HandbookSectionRepository;
|
|
87
|
+
exports.HandbookSectionRepository = HandbookSectionRepository = __decorate([
|
|
88
|
+
(0, common_1.Injectable)(),
|
|
89
|
+
__metadata("design:paramtypes", [neo4j_service_1.Neo4jService, security_service_1.SecurityService, nestjs_cls_1.ClsService])
|
|
90
|
+
], HandbookSectionRepository);
|
|
91
|
+
//# sourceMappingURL=handbook-section.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handbook-section.repository.js","sourceRoot":"","sources":["../../../../src/foundations/handbook/repositories/handbook-section.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA0D;AAC1D,2CAAwC;AACxC,2FAAuF;AACvF,8EAA0E;AAC1E,uFAAmF;AACnF,mEAA0F;AAC1F,6EAAwE;AAGjE,IAAM,yBAAyB,GAA/B,MAAM,yBACX,SAAQ,wCAAmF;IAK3F,YAAY,KAAmB,EAAE,eAAgC,EAAE,UAAsB;QACvF,KAAK,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;QAHzB,eAAU,GAAG,4CAAyB,CAAC;IAI1D,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY;QAChB,MAAM,KAAK,CAAC,YAAY,EAAE,CAAC;QAE3B,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;YACxB,KAAK,EAAE,4DAA4D,2CAAmB,CAAC,QAAQ,IAAI,2CAAmB,CAAC,SAAS,aAAa,2CAAmB,CAAC,QAAQ,gBAAgB;SAC1L,CAAC,CAAC;IACL,CAAC;IAED,0DAA0D;IAC1D,KAAK,CAAC,eAAe;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,4CAAyB,CAAC,KAAK,EAAE,CAAC,CAAC;QACpF,KAAK,CAAC,KAAK,GAAG;QACV,IAAI,CAAC,iBAAiB,EAAE;iBACf,2CAAmB,CAAC,QAAQ;QACrC,IAAI,CAAC,oBAAoB,EAAE;KAC9B,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,UAAU,CAAC,MAUhB;QACC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACrC,KAAK,CAAC,WAAW,GAAG;YAClB,GAAG,KAAK,CAAC,WAAW;YACpB,qEAAqE;YACrE,uEAAuE;YACvE,4DAA4D;YAC5D,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC1C,GAAG,OAAO;gBACV,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;gBAChC,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI;gBAC1C,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI;aAC/C,CAAC,CAAC;SACJ,CAAC;QACF,KAAK,CAAC,KAAK,GAAG;iCACe,2CAAmB,CAAC,SAAS;;;;gBAI9C,2CAAmB,CAAC,QAAQ,IAAI,2CAAmB,CAAC,SAAS;;;;;;;;;;;KAWxE,CAAC;QACF,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;CACF,CAAA;AAnFY,8DAAyB;oCAAzB,yBAAyB;IADrC,IAAA,mBAAU,GAAE;qCAOQ,4BAAY,EAAmB,kCAAe,EAAc,uBAAU;GAN9E,yBAAyB,CAmFrC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
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 { HandbookThreadMessage, HandbookThreadMessageDescriptor } from "../entities/handbook-thread-message";
|
|
6
|
+
/**
|
|
7
|
+
* HandbookThreadMessageRepository
|
|
8
|
+
*
|
|
9
|
+
* A message carries no owner of its own: access is inherited from the parent
|
|
10
|
+
* thread's `CREATED_BY` edge. As with the thread there is no company filter to
|
|
11
|
+
* fall back on, so this override is the only thing standing between one
|
|
12
|
+
* administrator and another's conversation.
|
|
13
|
+
*/
|
|
14
|
+
export declare class HandbookThreadMessageRepository extends AbstractRepository<HandbookThreadMessage, typeof HandbookThreadMessageDescriptor.relationships> {
|
|
15
|
+
protected readonly descriptor: import("../../..").EntityDescriptor<HandbookThreadMessage, {
|
|
16
|
+
thread: {
|
|
17
|
+
model: import("../../..").DataMeta;
|
|
18
|
+
direction: "in";
|
|
19
|
+
relationship: string;
|
|
20
|
+
cardinality: "one";
|
|
21
|
+
required: true;
|
|
22
|
+
dtoKey: string;
|
|
23
|
+
immutable: true;
|
|
24
|
+
};
|
|
25
|
+
}>;
|
|
26
|
+
constructor(neo4j: Neo4jService, securityService: SecurityService, clsService: ClsService);
|
|
27
|
+
protected buildUserHasAccess(): string;
|
|
28
|
+
/**
|
|
29
|
+
* Next free position under a thread: 0 for an empty thread, otherwise
|
|
30
|
+
* max(position) + 1. Mirrors `AssistantMessageRepository.getNextPosition`.
|
|
31
|
+
*/
|
|
32
|
+
getNextPosition(params: {
|
|
33
|
+
threadId: string;
|
|
34
|
+
}): Promise<number>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=handbook-thread-message.repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handbook-thread-message.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/handbook/repositories/handbook-thread-message.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;AAEnF,OAAO,EAAE,qBAAqB,EAAE,+BAA+B,EAAE,MAAM,qCAAqC,CAAC;AAG7G;;;;;;;GAOG;AACH,qBACa,+BAAgC,SAAQ,kBAAkB,CACrE,qBAAqB,EACrB,OAAO,+BAA+B,CAAC,aAAa,CACrD;IACC,SAAS,CAAC,QAAQ,CAAC,UAAU;;;;;;;;;;OAAmC;gBAEpD,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU;IAIzF,SAAS,CAAC,kBAAkB,IAAI,MAAM;IAStC;;;OAGG;IACG,eAAe,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAcrE"}
|
|
@@ -0,0 +1,63 @@
|
|
|
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.HandbookThreadMessageRepository = 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 handbook_thread_meta_1 = require("../entities/handbook-thread.meta");
|
|
19
|
+
const handbook_thread_message_1 = require("../entities/handbook-thread-message");
|
|
20
|
+
const handbook_thread_message_meta_1 = require("../entities/handbook-thread-message.meta");
|
|
21
|
+
/**
|
|
22
|
+
* HandbookThreadMessageRepository
|
|
23
|
+
*
|
|
24
|
+
* A message carries no owner of its own: access is inherited from the parent
|
|
25
|
+
* thread's `CREATED_BY` edge. As with the thread there is no company filter to
|
|
26
|
+
* fall back on, so this override is the only thing standing between one
|
|
27
|
+
* administrator and another's conversation.
|
|
28
|
+
*/
|
|
29
|
+
let HandbookThreadMessageRepository = class HandbookThreadMessageRepository extends abstract_repository_1.AbstractRepository {
|
|
30
|
+
constructor(neo4j, securityService, clsService) {
|
|
31
|
+
super(neo4j, securityService, clsService);
|
|
32
|
+
this.descriptor = handbook_thread_message_1.HandbookThreadMessageDescriptor;
|
|
33
|
+
}
|
|
34
|
+
buildUserHasAccess() {
|
|
35
|
+
const { nodeName } = this.descriptor.model;
|
|
36
|
+
return `WITH ${nodeName}
|
|
37
|
+
WHERE EXISTS {
|
|
38
|
+
MATCH (${nodeName})<-[:HAS_MESSAGE]-(:${handbook_thread_meta_1.handbookThreadMeta.labelName})-[:CREATED_BY]->(:User {id: $currentUserId})
|
|
39
|
+
}
|
|
40
|
+
WITH ${nodeName}`;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Next free position under a thread: 0 for an empty thread, otherwise
|
|
44
|
+
* max(position) + 1. Mirrors `AssistantMessageRepository.getNextPosition`.
|
|
45
|
+
*/
|
|
46
|
+
async getNextPosition(params) {
|
|
47
|
+
const result = await this.neo4j.read(`
|
|
48
|
+
MATCH (:${handbook_thread_meta_1.handbookThreadMeta.labelName} {id: $threadId})-[:HAS_MESSAGE]->(${handbook_thread_message_meta_1.handbookThreadMessageMeta.nodeName}:${handbook_thread_message_meta_1.handbookThreadMessageMeta.labelName})
|
|
49
|
+
RETURN coalesce(max(${handbook_thread_message_meta_1.handbookThreadMessageMeta.nodeName}.position), -1) + 1 AS next
|
|
50
|
+
`, { threadId: params.threadId });
|
|
51
|
+
const record = result.records[0];
|
|
52
|
+
if (!record)
|
|
53
|
+
return 0;
|
|
54
|
+
const value = record.get("next");
|
|
55
|
+
return typeof value?.toNumber === "function" ? value.toNumber() : Number(value ?? 0);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
exports.HandbookThreadMessageRepository = HandbookThreadMessageRepository;
|
|
59
|
+
exports.HandbookThreadMessageRepository = HandbookThreadMessageRepository = __decorate([
|
|
60
|
+
(0, common_1.Injectable)(),
|
|
61
|
+
__metadata("design:paramtypes", [neo4j_service_1.Neo4jService, security_service_1.SecurityService, nestjs_cls_1.ClsService])
|
|
62
|
+
], HandbookThreadMessageRepository);
|
|
63
|
+
//# sourceMappingURL=handbook-thread-message.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handbook-thread-message.repository.js","sourceRoot":"","sources":["../../../../src/foundations/handbook/repositories/handbook-thread-message.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAAwC;AACxC,2FAAuF;AACvF,8EAA0E;AAC1E,uFAAmF;AACnF,2EAAsE;AACtE,iFAA6G;AAC7G,2FAAqF;AAErF;;;;;;;GAOG;AAEI,IAAM,+BAA+B,GAArC,MAAM,+BAAgC,SAAQ,wCAGpD;IAGC,YAAY,KAAmB,EAAE,eAAgC,EAAE,UAAsB;QACvF,KAAK,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;QAHzB,eAAU,GAAG,yDAA+B,CAAC;IAIhE,CAAC;IAES,kBAAkB;QAC1B,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAC3C,OAAO,QAAQ,QAAQ;;uBAEJ,QAAQ,uBAAuB,yCAAkB,CAAC,SAAS;;mBAE/D,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe,CAAC,MAA4B;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAClC;kBACY,yCAAkB,CAAC,SAAS,sCAAsC,wDAAyB,CAAC,QAAQ,IAAI,wDAAyB,CAAC,SAAS;8BAC/H,wDAAyB,CAAC,QAAQ;OACzD,EACD,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAC9B,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjC,OAAO,OAAO,KAAK,EAAE,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IACvF,CAAC;CACF,CAAA;AArCY,0EAA+B;0CAA/B,+BAA+B;IAD3C,IAAA,mBAAU,GAAE;qCAOQ,4BAAY,EAAmB,kCAAe,EAAc,uBAAU;GAN9E,+BAA+B,CAqC3C"}
|
|
@@ -0,0 +1,63 @@
|
|
|
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 { HandbookThread, HandbookThreadDescriptor } from "../entities/handbook-thread";
|
|
6
|
+
/**
|
|
7
|
+
* HandbookThreadRepository
|
|
8
|
+
*
|
|
9
|
+
* `HandbookThread` is `isCompanyScoped: false`, so `buildDefaultMatch()` emits
|
|
10
|
+
* no company filter at all — the `CREATED_BY` owner edge asserted here is the
|
|
11
|
+
* ENTIRE security boundary. Without this override every administrator would
|
|
12
|
+
* read and mutate every other administrator's threads.
|
|
13
|
+
*
|
|
14
|
+
* `$currentUserId` is auto-injected into queryParams by
|
|
15
|
+
* `Neo4jService.initQuery()` (it reads `clsService.get("userId")`), exactly as
|
|
16
|
+
* `AssistantRepository` relies on.
|
|
17
|
+
*/
|
|
18
|
+
export declare class HandbookThreadRepository extends AbstractRepository<HandbookThread, typeof HandbookThreadDescriptor.relationships> {
|
|
19
|
+
protected readonly descriptor: import("../../..").EntityDescriptor<HandbookThread, {
|
|
20
|
+
owner: {
|
|
21
|
+
model: import("../../..").DataMeta;
|
|
22
|
+
direction: "out";
|
|
23
|
+
relationship: string;
|
|
24
|
+
cardinality: "one";
|
|
25
|
+
required: false;
|
|
26
|
+
dtoKey: string;
|
|
27
|
+
contextKey: string;
|
|
28
|
+
immutable: true;
|
|
29
|
+
};
|
|
30
|
+
messages: {
|
|
31
|
+
model: import("../../..").DataMeta;
|
|
32
|
+
direction: "out";
|
|
33
|
+
relationship: string;
|
|
34
|
+
cardinality: "many";
|
|
35
|
+
required: false;
|
|
36
|
+
dtoKey: string;
|
|
37
|
+
};
|
|
38
|
+
}>;
|
|
39
|
+
constructor(neo4j: Neo4jService, securityService: SecurityService, clsService: ClsService);
|
|
40
|
+
protected buildUserHasAccess(): string;
|
|
41
|
+
/**
|
|
42
|
+
* Bump `updatedAt` so the thread list — ordered by the descriptor default
|
|
43
|
+
* `updatedAt DESC` — surfaces the conversation a user just spoke in. Neither
|
|
44
|
+
* creating a child message nor writing the `HAS_MESSAGE` edge touches the
|
|
45
|
+
* parent node, so without this an active thread would sink below a thread
|
|
46
|
+
* that was merely renamed.
|
|
47
|
+
*/
|
|
48
|
+
touch(params: {
|
|
49
|
+
id: string;
|
|
50
|
+
}): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Delete the thread AND its messages. `DETACH DELETE` on the thread alone
|
|
53
|
+
* would drop the `HAS_MESSAGE` edges and orphan every message node, which
|
|
54
|
+
* — because the messages are only ever reachable through their thread —
|
|
55
|
+
* means they could never be read or deleted again.
|
|
56
|
+
*
|
|
57
|
+
* Mirrors `AssistantRepository.delete`.
|
|
58
|
+
*/
|
|
59
|
+
delete(params: {
|
|
60
|
+
id: string;
|
|
61
|
+
}): Promise<void>;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=handbook-thread.repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handbook-thread.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/handbook/repositories/handbook-thread.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,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAIvF;;;;;;;;;;;GAWG;AACH,qBACa,wBAAyB,SAAQ,kBAAkB,CAC9D,cAAc,EACd,OAAO,wBAAwB,CAAC,aAAa,CAC9C;IACC,SAAS,CAAC,QAAQ,CAAC,UAAU;;;;;;;;;;;;;;;;;;;OAA4B;gBAE7C,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU;IAIzF,SAAS,CAAC,kBAAkB,IAAI,MAAM;IAStC;;;;;;OAMG;IACG,KAAK,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAUlD;;;;;;;OAOG;IACG,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAUpD"}
|