@carlonicora/nestjs-neo4jsonapi 1.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/bootstrap/app.module.factory.d.ts.map +1 -1
  2. package/dist/bootstrap/app.module.factory.js +3 -1
  3. package/dist/bootstrap/app.module.factory.js.map +1 -1
  4. package/dist/bootstrap/bootstrap.options.d.ts +16 -0
  5. package/dist/bootstrap/bootstrap.options.d.ts.map +1 -1
  6. package/dist/core/jsonapi/abstracts/abstract.jsonapi.serialiser.d.ts +1 -0
  7. package/dist/core/jsonapi/abstracts/abstract.jsonapi.serialiser.d.ts.map +1 -1
  8. package/dist/core/jsonapi/abstracts/abstract.jsonapi.serialiser.js +3 -0
  9. package/dist/core/jsonapi/abstracts/abstract.jsonapi.serialiser.js.map +1 -1
  10. package/dist/foundations/auth/index.d.ts +2 -0
  11. package/dist/foundations/auth/index.d.ts.map +1 -1
  12. package/dist/foundations/auth/index.js +5 -1
  13. package/dist/foundations/auth/index.js.map +1 -1
  14. package/dist/foundations/auth/repositories/auth.repository.d.ts.map +1 -1
  15. package/dist/foundations/auth/repositories/auth.repository.js +8 -175
  16. package/dist/foundations/auth/repositories/auth.repository.js.map +1 -1
  17. package/dist/foundations/content/content.module.d.ts +33 -1
  18. package/dist/foundations/content/content.module.d.ts.map +1 -1
  19. package/dist/foundations/content/content.module.js +65 -9
  20. package/dist/foundations/content/content.module.js.map +1 -1
  21. package/dist/foundations/content/entities/content.entity.d.ts +18 -0
  22. package/dist/foundations/content/entities/content.entity.d.ts.map +1 -1
  23. package/dist/foundations/content/factories/content.model.factory.d.ts +17 -0
  24. package/dist/foundations/content/factories/content.model.factory.d.ts.map +1 -0
  25. package/dist/foundations/content/factories/content.model.factory.js +65 -0
  26. package/dist/foundations/content/factories/content.model.factory.js.map +1 -0
  27. package/dist/foundations/content/index.d.ts +2 -0
  28. package/dist/foundations/content/index.d.ts.map +1 -1
  29. package/dist/foundations/content/index.js +5 -1
  30. package/dist/foundations/content/index.js.map +1 -1
  31. package/dist/foundations/content/interfaces/content.extension.interface.d.ts +48 -0
  32. package/dist/foundations/content/interfaces/content.extension.interface.d.ts.map +1 -0
  33. package/dist/foundations/content/interfaces/content.extension.interface.js +9 -0
  34. package/dist/foundations/content/interfaces/content.extension.interface.js.map +1 -0
  35. package/dist/foundations/content/repositories/content.repository.d.ts +4 -0
  36. package/dist/foundations/content/repositories/content.repository.d.ts.map +1 -1
  37. package/dist/foundations/content/repositories/content.repository.js +15 -5
  38. package/dist/foundations/content/repositories/content.repository.js.map +1 -1
  39. package/dist/foundations/content/serialisers/content.serialiser.d.ts +3 -1
  40. package/dist/foundations/content/serialisers/content.serialiser.d.ts.map +1 -1
  41. package/dist/foundations/content/serialisers/content.serialiser.js +27 -2
  42. package/dist/foundations/content/serialisers/content.serialiser.js.map +1 -1
  43. package/dist/foundations/content/services/content.cypher.service.d.ts +3 -1
  44. package/dist/foundations/content/services/content.cypher.service.d.ts.map +1 -1
  45. package/dist/foundations/content/services/content.cypher.service.js +41 -7
  46. package/dist/foundations/content/services/content.cypher.service.js.map +1 -1
  47. package/dist/foundations/foundations.modules.d.ts +27 -9
  48. package/dist/foundations/foundations.modules.d.ts.map +1 -1
  49. package/dist/foundations/foundations.modules.js +30 -18
  50. package/dist/foundations/foundations.modules.js.map +1 -1
  51. package/dist/foundations/module/queries/feature.module.query.d.ts +2 -0
  52. package/dist/foundations/module/queries/feature.module.query.d.ts.map +1 -0
  53. package/dist/foundations/module/queries/feature.module.query.js +65 -0
  54. package/dist/foundations/module/queries/feature.module.query.js.map +1 -0
  55. package/dist/foundations/user/repositories/user.repository.d.ts.map +1 -1
  56. package/dist/foundations/user/repositories/user.repository.js +2 -61
  57. package/dist/foundations/user/repositories/user.repository.js.map +1 -1
  58. package/package.json +1 -1
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createExtendedContentModel = createExtendedContentModel;
4
+ const entity_1 = require("../../../common/abstracts/entity");
5
+ const user_meta_1 = require("../../user/entities/user.meta");
6
+ const content_meta_1 = require("../entities/content.meta");
7
+ const content_serialiser_1 = require("../serialisers/content.serialiser");
8
+ /**
9
+ * Creates an extended ContentModel with additional relationships based on extension config.
10
+ *
11
+ * This factory generates a DataModelInterface with:
12
+ * - Extended childrenTokens/singleChildrenTokens based on relationship cardinality
13
+ * - Extended mapper that initializes all relationship fields
14
+ *
15
+ * The extended model is registered in modelRegistry, overwriting the base ContentModel.
16
+ *
17
+ * @param extension - Configuration specifying additional relationships
18
+ * @returns DataModelInterface configured with extension relationships
19
+ */
20
+ function createExtendedContentModel(extension) {
21
+ // Compute extended childrenTokens for many-cardinality relationships
22
+ const extendedChildrenTokens = extension.additionalRelationships
23
+ .filter((r) => r.cardinality === "many")
24
+ .map((r) => r.model.nodeName);
25
+ // Compute extended singleChildrenTokens for one-cardinality relationships
26
+ // Note: owner and author are already single children in base model
27
+ const extendedSingleChildrenTokens = [
28
+ user_meta_1.ownerMeta.nodeName,
29
+ user_meta_1.authorMeta.nodeName,
30
+ ...extension.additionalRelationships.filter((r) => r.cardinality === "one").map((r) => r.model.nodeName),
31
+ ];
32
+ // Create extended mapper that initializes extension fields
33
+ const extendedMapper = (params) => {
34
+ const base = {
35
+ ...(0, entity_1.mapEntity)({ record: params.data }),
36
+ name: params.data.name,
37
+ contentType: params.data.labels?.[0] ?? "",
38
+ abstract: params.data.abstract,
39
+ tldr: params.data.tldr,
40
+ aiStatus: params.data.aiStatus,
41
+ relevance: params.record.has("totalScore") ? Number(params.record.get("totalScore")) : 0,
42
+ owner: undefined,
43
+ author: undefined,
44
+ };
45
+ // Initialize extension relationship fields based on cardinality
46
+ for (const rel of extension.additionalRelationships) {
47
+ if (rel.cardinality === "many") {
48
+ base[rel.model.nodeName] = [];
49
+ }
50
+ else {
51
+ base[rel.model.nodeName] = undefined;
52
+ }
53
+ }
54
+ return base;
55
+ };
56
+ return {
57
+ ...content_meta_1.contentMeta,
58
+ entity: undefined,
59
+ mapper: extendedMapper,
60
+ serialiser: content_serialiser_1.ContentSerialiser,
61
+ singleChildrenTokens: extendedSingleChildrenTokens,
62
+ childrenTokens: extendedChildrenTokens,
63
+ };
64
+ }
65
+ //# sourceMappingURL=content.model.factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.model.factory.js","sourceRoot":"","sources":["../../../../src/foundations/content/factories/content.model.factory.ts"],"names":[],"mappings":";;AAoBA,gEAgDC;AApED,6DAA6D;AAE7D,6DAAsE;AAEtE,2DAAuD;AAEvD,0EAAsE;AAEtE;;;;;;;;;;;GAWG;AACH,SAAgB,0BAA0B,CAAC,SAAiC;IAC1E,qEAAqE;IACrE,MAAM,sBAAsB,GAAG,SAAS,CAAC,uBAAuB;SAC7D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,MAAM,CAAC;SACvC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEhC,0EAA0E;IAC1E,mEAAmE;IACnE,MAAM,4BAA4B,GAAG;QACnC,qBAAS,CAAC,QAAQ;QAClB,sBAAU,CAAC,QAAQ;QACnB,GAAG,SAAS,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;KACzG,CAAC;IAEF,2DAA2D;IAC3D,MAAM,cAAc,GAAG,CAAC,MAAsD,EAAW,EAAE;QACzF,MAAM,IAAI,GAAY;YACpB,GAAG,IAAA,kBAAS,EAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;YACrC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;YACtB,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;YAC1C,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;YAC9B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;YACtB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;YAC9B,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxF,KAAK,EAAE,SAAgB;YACvB,MAAM,EAAE,SAAgB;SACzB,CAAC;QAEF,gEAAgE;QAChE,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,uBAAuB,EAAE,CAAC;YACpD,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;gBAC/B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;YACvC,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,OAAO;QACL,GAAG,0BAAW;QACd,MAAM,EAAE,SAA+B;QACvC,MAAM,EAAE,cAAc;QACtB,UAAU,EAAE,sCAAiB;QAC7B,oBAAoB,EAAE,4BAA4B;QAClD,cAAc,EAAE,sBAAsB;KACvC,CAAC;AACJ,CAAC"}
@@ -2,6 +2,8 @@ export { ContentModule } from "./content.module";
2
2
  export { Content } from "./entities/content.entity";
3
3
  export { contentMeta } from "./entities/content.meta";
4
4
  export { ContentModel } from "./entities/content.model";
5
+ export { createExtendedContentModel } from "./factories/content.model.factory";
6
+ export { ContentExtensionConfig, ContentRelationshipExtension, CONTENT_EXTENSION_CONFIG, } from "./interfaces/content.extension.interface";
5
7
  export { ContentRepository } from "./repositories/content.repository";
6
8
  export { ContentCypherService } from "./services/content.cypher.service";
7
9
  export { ContentService } from "./services/content.service";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/foundations/content/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/foundations/content/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC"}
@@ -1,12 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ContentService = exports.ContentCypherService = exports.ContentRepository = exports.ContentModel = exports.contentMeta = exports.ContentModule = void 0;
3
+ exports.ContentService = exports.ContentCypherService = exports.ContentRepository = exports.CONTENT_EXTENSION_CONFIG = exports.createExtendedContentModel = exports.ContentModel = exports.contentMeta = exports.ContentModule = void 0;
4
4
  var content_module_1 = require("./content.module");
5
5
  Object.defineProperty(exports, "ContentModule", { enumerable: true, get: function () { return content_module_1.ContentModule; } });
6
6
  var content_meta_1 = require("./entities/content.meta");
7
7
  Object.defineProperty(exports, "contentMeta", { enumerable: true, get: function () { return content_meta_1.contentMeta; } });
8
8
  var content_model_1 = require("./entities/content.model");
9
9
  Object.defineProperty(exports, "ContentModel", { enumerable: true, get: function () { return content_model_1.ContentModel; } });
10
+ var content_model_factory_1 = require("./factories/content.model.factory");
11
+ Object.defineProperty(exports, "createExtendedContentModel", { enumerable: true, get: function () { return content_model_factory_1.createExtendedContentModel; } });
12
+ var content_extension_interface_1 = require("./interfaces/content.extension.interface");
13
+ Object.defineProperty(exports, "CONTENT_EXTENSION_CONFIG", { enumerable: true, get: function () { return content_extension_interface_1.CONTENT_EXTENSION_CONFIG; } });
10
14
  var content_repository_1 = require("./repositories/content.repository");
11
15
  Object.defineProperty(exports, "ContentRepository", { enumerable: true, get: function () { return content_repository_1.ContentRepository; } });
12
16
  var content_cypher_service_1 = require("./services/content.cypher.service");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/foundations/content/index.ts"],"names":[],"mappings":";;;AAAA,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AAEtB,wDAAsD;AAA7C,2GAAA,WAAW,OAAA;AACpB,0DAAwD;AAA/C,6GAAA,YAAY,OAAA;AACrB,wEAAsE;AAA7D,uHAAA,iBAAiB,OAAA;AAC1B,4EAAyE;AAAhE,8HAAA,oBAAoB,OAAA;AAC7B,8DAA4D;AAAnD,iHAAA,cAAc,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/foundations/content/index.ts"],"names":[],"mappings":";;;AAAA,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AAEtB,wDAAsD;AAA7C,2GAAA,WAAW,OAAA;AACpB,0DAAwD;AAA/C,6GAAA,YAAY,OAAA;AACrB,2EAA+E;AAAtE,mIAAA,0BAA0B,OAAA;AACnC,wFAIkD;AADhD,uIAAA,wBAAwB,OAAA;AAE1B,wEAAsE;AAA7D,uHAAA,iBAAiB,OAAA;AAC1B,4EAAyE;AAAhE,8HAAA,oBAAoB,OAAA;AAC7B,8DAA4D;AAAnD,iHAAA,cAAc,OAAA"}
@@ -0,0 +1,48 @@
1
+ import { DataMeta } from "../../../common/interfaces/datamodel.interface";
2
+ /**
3
+ * Defines an additional relationship to be included in Content responses.
4
+ */
5
+ export interface ContentRelationshipExtension {
6
+ /** Meta information for the related model (e.g., topicMeta, expertiseMeta) */
7
+ model: DataMeta;
8
+ /** Neo4j relationship type (e.g., "HAS_KNOWLEDGE") */
9
+ relationship: string;
10
+ /** Direction of the relationship relative to Content node */
11
+ direction: "in" | "out";
12
+ /** Whether this is a one-to-one or one-to-many relationship */
13
+ cardinality: "one" | "many";
14
+ /** Optional JSON:API key override (e.g., "topics" instead of "topic") */
15
+ dtoKey?: string;
16
+ }
17
+ /**
18
+ * Configuration for extending Content module with additional relationships.
19
+ *
20
+ * This allows APIs to inject custom relationships that will be:
21
+ * - Queried via OPTIONAL MATCH in Cypher
22
+ * - Included in JSON:API serialization
23
+ * - Mapped in entity results
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * const contentExtension: ContentExtensionConfig = {
28
+ * additionalRelationships: [
29
+ * {
30
+ * model: topicMeta,
31
+ * relationship: "HAS_KNOWLEDGE",
32
+ * direction: "in",
33
+ * cardinality: "many",
34
+ * dtoKey: "topics",
35
+ * },
36
+ * ],
37
+ * };
38
+ * ```
39
+ */
40
+ export interface ContentExtensionConfig {
41
+ additionalRelationships: ContentRelationshipExtension[];
42
+ }
43
+ /**
44
+ * Injection token for Content extension configuration.
45
+ * Use with @Optional() @Inject(CONTENT_EXTENSION_CONFIG) to make it optional.
46
+ */
47
+ export declare const CONTENT_EXTENSION_CONFIG: unique symbol;
48
+ //# sourceMappingURL=content.extension.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.extension.interface.d.ts","sourceRoot":"","sources":["../../../../src/foundations/content/interfaces/content.extension.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,8EAA8E;IAC9E,KAAK,EAAE,QAAQ,CAAC;IAEhB,sDAAsD;IACtD,YAAY,EAAE,MAAM,CAAC;IAErB,6DAA6D;IAC7D,SAAS,EAAE,IAAI,GAAG,KAAK,CAAC;IAExB,+DAA+D;IAC/D,WAAW,EAAE,KAAK,GAAG,MAAM,CAAC;IAE5B,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,WAAW,sBAAsB;IACrC,uBAAuB,EAAE,4BAA4B,EAAE,CAAC;CACzD;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,eAAqC,CAAC"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CONTENT_EXTENSION_CONFIG = void 0;
4
+ /**
5
+ * Injection token for Content extension configuration.
6
+ * Use with @Optional() @Inject(CONTENT_EXTENSION_CONFIG) to make it optional.
7
+ */
8
+ exports.CONTENT_EXTENSION_CONFIG = Symbol("CONTENT_EXTENSION_CONFIG");
9
+ //# sourceMappingURL=content.extension.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.extension.interface.js","sourceRoot":"","sources":["../../../../src/foundations/content/interfaces/content.extension.interface.ts"],"names":[],"mappings":";;;AAiDA;;;GAGG;AACU,QAAA,wBAAwB,GAAG,MAAM,CAAC,0BAA0B,CAAC,CAAC"}
@@ -13,6 +13,10 @@ export declare class ContentRepository {
13
13
  private readonly configService;
14
14
  constructor(neo4j: Neo4jService, contentCypherService: ContentCypherService, securityService: SecurityService, configService: ConfigService<BaseConfigInterface>);
15
15
  private getContentTypes;
16
+ /**
17
+ * Get the ContentModel from registry (may be extended with additional childrenTokens)
18
+ */
19
+ private getContentModel;
16
20
  find(params: {
17
21
  fetchAll?: boolean;
18
22
  term?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"content.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/content/repositories/content.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAA+B,MAAM,4BAA4B,CAAC;AAC9F,OAAO,EAAE,sBAAsB,EAAE,MAAM,2DAA2D,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAC;AAGhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AAGrF,qBACa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAHb,KAAK,EAAE,YAAY,EACnB,oBAAoB,EAAE,oBAAoB,EAC1C,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,CAAC,mBAAmB,CAAC;IAGpE,OAAO,CAAC,eAAe;IAIjB,IAAI,CAAC,MAAM,EAAE;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,sBAAsB,CAAC;KACjC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAyBhB,SAAS,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAoBhE,WAAW,CAAC,MAAM,EAAE;QACxB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE,sBAAsB,CAAC;KACjC;CA0BF"}
1
+ {"version":3,"file":"content.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/content/repositories/content.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,EAAE,mBAAmB,EAA+B,MAAM,4BAA4B,CAAC;AAC9F,OAAO,EAAE,sBAAsB,EAAE,MAAM,2DAA2D,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AAGrF,qBACa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAHb,KAAK,EAAE,YAAY,EACnB,oBAAoB,EAAE,oBAAoB,EAC1C,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,CAAC,mBAAmB,CAAC;IAGpE,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAQjB,IAAI,CAAC,MAAM,EAAE;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,sBAAsB,CAAC;KACjC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAyBhB,SAAS,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAoBhE,WAAW,CAAC,MAAM,EAAE;QACxB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE,sBAAsB,CAAC;KACjC;CA0BF"}
@@ -12,10 +12,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ContentRepository = void 0;
13
13
  const common_1 = require("@nestjs/common");
14
14
  const config_1 = require("@nestjs/config");
15
+ const registry_1 = require("../../../common/registries/registry");
15
16
  const neo4j_service_1 = require("../../../core/neo4j/services/neo4j.service");
16
17
  const security_service_1 = require("../../../core/security/services/security.service");
17
18
  const content_meta_1 = require("../../content/entities/content.meta");
18
- const content_model_1 = require("../../content/entities/content.model");
19
19
  const content_cypher_service_1 = require("../../content/services/content.cypher.service");
20
20
  const user_meta_1 = require("../../user/entities/user.meta");
21
21
  let ContentRepository = class ContentRepository {
@@ -28,10 +28,20 @@ let ContentRepository = class ContentRepository {
28
28
  getContentTypes() {
29
29
  return this.configService.get("contentTypes")?.types ?? [];
30
30
  }
31
+ /**
32
+ * Get the ContentModel from registry (may be extended with additional childrenTokens)
33
+ */
34
+ getContentModel() {
35
+ const model = registry_1.modelRegistry.get(content_meta_1.contentMeta.nodeName);
36
+ if (!model) {
37
+ throw new Error(`ContentModel not found in registry for nodeName: ${content_meta_1.contentMeta.nodeName}`);
38
+ }
39
+ return model;
40
+ }
31
41
  async find(params) {
32
42
  const query = this.neo4j.initQuery({
33
43
  cursor: params.cursor,
34
- serialiser: content_model_1.ContentModel,
44
+ serialiser: this.getContentModel(),
35
45
  fetchAll: params.fetchAll,
36
46
  });
37
47
  query.queryParams = {
@@ -41,7 +51,7 @@ let ContentRepository = class ContentRepository {
41
51
  query.query += `
42
52
  ${this.contentCypherService.default()}
43
53
  ${this.securityService.userHasAccess({ validator: this.contentCypherService.userHasAccess })}
44
-
54
+
45
55
  ORDER BY ${content_meta_1.contentMeta.nodeName}.${params.orderBy ? `${params.orderBy}` : `updatedAt DESC`}
46
56
  {CURSOR}
47
57
 
@@ -50,7 +60,7 @@ let ContentRepository = class ContentRepository {
50
60
  return this.neo4j.readMany(query);
51
61
  }
52
62
  async findByIds(params) {
53
- const query = this.neo4j.initQuery({ serialiser: content_model_1.ContentModel });
63
+ const query = this.neo4j.initQuery({ serialiser: this.getContentModel() });
54
64
  query.queryParams = {
55
65
  ...query.queryParams,
56
66
  ids: params.contentIds,
@@ -67,7 +77,7 @@ let ContentRepository = class ContentRepository {
67
77
  }
68
78
  async findByOwner(params) {
69
79
  const query = this.neo4j.initQuery({
70
- serialiser: content_model_1.ContentModel,
80
+ serialiser: this.getContentModel(),
71
81
  cursor: params.cursor,
72
82
  fetchAll: params.fetchAll,
73
83
  });
@@ -1 +1 @@
1
- {"version":3,"file":"content.repository.js","sourceRoot":"","sources":["../../../../src/foundations/content/repositories/content.repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"content.repository.js","sourceRoot":"","sources":["../../../../src/foundations/content/repositories/content.repository.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,10 @@ import { AbstractJsonApiSerialiser } from "../../../core/jsonapi/abstracts/abstr
4
4
  import { JsonApiSerialiserFactory } from "../../../core/jsonapi/factories/jsonapi.serialiser.factory";
5
5
  import { JsonApiDataInterface } from "../../../core/jsonapi/interfaces/jsonapi.data.interface";
6
6
  import { JsonApiServiceInterface } from "../../../core/jsonapi/interfaces/jsonapi.service.interface";
7
+ import { ContentExtensionConfig } from "../interfaces/content.extension.interface";
7
8
  export declare class ContentSerialiser extends AbstractJsonApiSerialiser implements JsonApiServiceInterface {
8
- constructor(serialiserFactory: JsonApiSerialiserFactory, configService: ConfigService<BaseConfigInterface>);
9
+ private readonly extension?;
10
+ constructor(serialiserFactory: JsonApiSerialiserFactory, configService: ConfigService<BaseConfigInterface>, extension?: ContentExtensionConfig);
9
11
  get type(): string;
10
12
  create(): JsonApiDataInterface;
11
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"content.serialiser.d.ts","sourceRoot":"","sources":["../../../../src/foundations/content/serialisers/content.serialiser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6DAA6D,CAAC;AACxG,OAAO,EAAE,wBAAwB,EAAE,MAAM,4DAA4D,CAAC;AACtG,OAAO,EAAE,oBAAoB,EAAE,MAAM,yDAAyD,CAAC;AAC/F,OAAO,EAAE,uBAAuB,EAAE,MAAM,4DAA4D,CAAC;AAIrG,qBACa,iBAAkB,SAAQ,yBAA0B,YAAW,uBAAuB;gBACrF,iBAAiB,EAAE,wBAAwB,EAAE,aAAa,EAAE,aAAa,CAAC,mBAAmB,CAAC;IAI1G,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,MAAM,IAAI,oBAAoB;CAwB/B"}
1
+ {"version":3,"file":"content.serialiser.d.ts","sourceRoot":"","sources":["../../../../src/foundations/content/serialisers/content.serialiser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6DAA6D,CAAC;AACxG,OAAO,EAAE,wBAAwB,EAAE,MAAM,4DAA4D,CAAC;AACtG,OAAO,EAAE,oBAAoB,EAAE,MAAM,yDAAyD,CAAC;AAC/F,OAAO,EAAE,uBAAuB,EAAE,MAAM,4DAA4D,CAAC;AAGrG,OAAO,EAAE,sBAAsB,EAA4B,MAAM,2CAA2C,CAAC;AAE7G,qBACa,iBAAkB,SAAQ,yBAA0B,YAAW,uBAAuB;IAM/F,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAJ3B,iBAAiB,EAAE,wBAAwB,EAC3C,aAAa,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAGhC,SAAS,CAAC,EAAE,sBAAsB;IAKrD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,MAAM,IAAI,oBAAoB;CAyC/B"}
@@ -8,17 +8,23 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
15
  exports.ContentSerialiser = void 0;
13
16
  const common_1 = require("@nestjs/common");
14
17
  const config_1 = require("@nestjs/config");
18
+ const registry_1 = require("../../../common/registries/registry");
15
19
  const abstract_jsonapi_serialiser_1 = require("../../../core/jsonapi/abstracts/abstract.jsonapi.serialiser");
16
20
  const jsonapi_serialiser_factory_1 = require("../../../core/jsonapi/factories/jsonapi.serialiser.factory");
17
21
  const content_model_1 = require("../../content/entities/content.model");
18
22
  const user_model_1 = require("../../user/entities/user.model");
23
+ const content_extension_interface_1 = require("../interfaces/content.extension.interface");
19
24
  let ContentSerialiser = class ContentSerialiser extends abstract_jsonapi_serialiser_1.AbstractJsonApiSerialiser {
20
- constructor(serialiserFactory, configService) {
25
+ constructor(serialiserFactory, configService, extension) {
21
26
  super(serialiserFactory, configService);
27
+ this.extension = extension;
22
28
  }
23
29
  get type() {
24
30
  return content_model_1.ContentModel.endpoint;
@@ -42,12 +48,31 @@ let ContentSerialiser = class ContentSerialiser extends abstract_jsonapi_seriali
42
48
  data: this.serialiserFactory.create(user_model_1.AuthorModel),
43
49
  },
44
50
  };
51
+ // Add extension relationships
52
+ if (this.extension?.additionalRelationships) {
53
+ for (const rel of this.extension.additionalRelationships) {
54
+ const relatedModel = registry_1.modelRegistry.get(rel.model.nodeName);
55
+ if (relatedModel) {
56
+ const relationship = {
57
+ data: this.serialiserFactory.create(relatedModel),
58
+ };
59
+ // Use dtoKey for JSON:API relationship name if provided
60
+ if (rel.dtoKey) {
61
+ relationship.name = rel.dtoKey;
62
+ }
63
+ this.relationships[rel.model.nodeName] = relationship;
64
+ }
65
+ }
66
+ }
45
67
  return super.create();
46
68
  }
47
69
  };
48
70
  exports.ContentSerialiser = ContentSerialiser;
49
71
  exports.ContentSerialiser = ContentSerialiser = __decorate([
50
72
  (0, common_1.Injectable)(),
51
- __metadata("design:paramtypes", [jsonapi_serialiser_factory_1.JsonApiSerialiserFactory, config_1.ConfigService])
73
+ __param(2, (0, common_1.Optional)()),
74
+ __param(2, (0, common_1.Inject)(content_extension_interface_1.CONTENT_EXTENSION_CONFIG)),
75
+ __metadata("design:paramtypes", [jsonapi_serialiser_factory_1.JsonApiSerialiserFactory,
76
+ config_1.ConfigService, Object])
52
77
  ], ContentSerialiser);
53
78
  //# sourceMappingURL=content.serialiser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"content.serialiser.js","sourceRoot":"","sources":["../../../../src/foundations/content/serialisers/content.serialiser.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAA+C;AAE/C,6GAAwG;AACxG,2GAAsG;AAGtG,wEAAoE;AACpE,+DAAyE;AAGlE,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,uDAAyB;IAC9D,YAAY,iBAA2C,EAAE,aAAiD;QACxG,KAAK,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,IAAI;QACN,OAAO,4BAAY,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,UAAU,GAAG;YAChB,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,UAAU;YACpB,IAAI,EAAE,MAAM;SACb,CAAC;QAEF,IAAI,CAAC,IAAI,GAAG;YACV,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,WAAW;YACtB,WAAW,EAAE,aAAa;SAC3B,CAAC;QAEF,IAAI,CAAC,aAAa,GAAG;YACnB,KAAK,EAAE;gBACL,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,uBAAU,CAAC;aAChD;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,wBAAW,CAAC;aACjD;SACF,CAAC;QAEF,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;IACxB,CAAC;CACF,CAAA;AAjCY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;qCAEoB,qDAAwB,EAAiB,sBAAa;GAD1E,iBAAiB,CAiC7B"}
1
+ {"version":3,"file":"content.serialiser.js","sourceRoot":"","sources":["../../../../src/foundations/content/serialisers/content.serialiser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA8D;AAC9D,2CAA+C;AAC/C,kEAAoE;AAEpE,6GAAwG;AACxG,2GAAsG;AAGtG,wEAAoE;AACpE,+DAAyE;AACzE,2FAA6G;AAGtG,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,uDAAyB;IAC9D,YACE,iBAA2C,EAC3C,aAAiD,EAGhC,SAAkC;QAEnD,KAAK,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;QAFvB,cAAS,GAAT,SAAS,CAAyB;IAGrD,CAAC;IAED,IAAI,IAAI;QACN,OAAO,4BAAY,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,UAAU,GAAG;YAChB,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,UAAU;YACpB,IAAI,EAAE,MAAM;SACb,CAAC;QAEF,IAAI,CAAC,IAAI,GAAG;YACV,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,WAAW;YACtB,WAAW,EAAE,aAAa;SAC3B,CAAC;QAEF,IAAI,CAAC,aAAa,GAAG;YACnB,KAAK,EAAE;gBACL,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,uBAAU,CAAC;aAChD;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,wBAAW,CAAC;aACjD;SACF,CAAC;QAEF,8BAA8B;QAC9B,IAAI,IAAI,CAAC,SAAS,EAAE,uBAAuB,EAAE,CAAC;YAC5C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,uBAAuB,EAAE,CAAC;gBACzD,MAAM,YAAY,GAAG,wBAAa,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC3D,IAAI,YAAY,EAAE,CAAC;oBACjB,MAAM,YAAY,GAAwB;wBACxC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,YAAY,CAAC;qBAClD,CAAC;oBACF,wDAAwD;oBACxD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;wBACf,YAAY,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC;oBACjC,CAAC;oBACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC;gBACxD,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;IACxB,CAAC;CACF,CAAA;AAxDY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;IAKR,WAAA,IAAA,iBAAQ,GAAE,CAAA;IACV,WAAA,IAAA,eAAM,EAAC,sDAAwB,CAAC,CAAA;qCAHd,qDAAwB;QAC5B,sBAAa;GAHnB,iBAAiB,CAwD7B"}
@@ -1,10 +1,12 @@
1
1
  import { ConfigService } from "@nestjs/config";
2
2
  import { ClsService } from "nestjs-cls";
3
3
  import { BaseConfigInterface } from "../../../config/interfaces";
4
+ import { ContentExtensionConfig } from "../interfaces/content.extension.interface";
4
5
  export declare class ContentCypherService {
5
6
  private readonly clsService;
6
7
  private readonly configService;
7
- constructor(clsService: ClsService, configService: ConfigService<BaseConfigInterface>);
8
+ private readonly extension?;
9
+ constructor(clsService: ClsService, configService: ConfigService<BaseConfigInterface>, extension?: ContentExtensionConfig);
8
10
  private getContentTypes;
9
11
  default(params?: {
10
12
  searchField: string;
@@ -1 +1 @@
1
- {"version":3,"file":"content.cypher.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/content/services/content.cypher.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAA+B,MAAM,4BAA4B,CAAC;AAK9F,qBACa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,aAAa;gBADb,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,CAAC,mBAAmB,CAAC;IAGpE,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,MAAM,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM;IAahF,aAAa,GAAI,SAAS;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,KAAG,MAAM,CAO5D;IAEF,eAAe,GAAI,SAAS;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,YAWrD;CACH"}
1
+ {"version":3,"file":"content.cypher.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/content/services/content.cypher.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAA+B,MAAM,4BAA4B,CAAC;AAI9F,OAAO,EAAE,sBAAsB,EAA4B,MAAM,2CAA2C,CAAC;AAE7G,qBACa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAG9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAJV,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAGjD,SAAS,CAAC,EAAE,sBAAsB;IAGrD,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,MAAM,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM;IAahF,aAAa,GAAI,SAAS;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,KAAG,MAAM,CAO5D;IAEF,eAAe,GAAI,SAAS;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,YA6CrD;CACH"}
@@ -8,6 +8,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
15
  exports.ContentCypherService = void 0;
13
16
  const common_1 = require("@nestjs/common");
@@ -16,10 +19,12 @@ const nestjs_cls_1 = require("nestjs-cls");
16
19
  const company_meta_1 = require("../../company/entities/company.meta");
17
20
  const content_meta_1 = require("../../content/entities/content.meta");
18
21
  const user_meta_1 = require("../../user/entities/user.meta");
22
+ const content_extension_interface_1 = require("../interfaces/content.extension.interface");
19
23
  let ContentCypherService = class ContentCypherService {
20
- constructor(clsService, configService) {
24
+ constructor(clsService, configService, extension) {
21
25
  this.clsService = clsService;
22
26
  this.configService = configService;
27
+ this.extension = extension;
23
28
  this.userHasAccess = (params) => {
24
29
  const companyId = this.clsService.get("companyId");
25
30
  const userId = this.clsService.get("userId");
@@ -28,16 +33,43 @@ let ContentCypherService = class ContentCypherService {
28
33
  `;
29
34
  };
30
35
  this.returnStatement = (params) => {
31
- return `
36
+ // Base MATCH clauses for core relationships
37
+ let query = `
32
38
  MATCH (${content_meta_1.contentMeta.nodeName})-[:BELONGS_TO]->(${content_meta_1.contentMeta.nodeName}_${company_meta_1.companyMeta.nodeName}:${company_meta_1.companyMeta.labelName})
33
39
  MATCH (${content_meta_1.contentMeta.nodeName})<-[:PUBLISHED]-(${content_meta_1.contentMeta.nodeName}_${user_meta_1.ownerMeta.nodeName}:${user_meta_1.ownerMeta.labelName})
34
- MATCH (${content_meta_1.contentMeta.nodeName})<-[:PUBLISHED]-(${content_meta_1.contentMeta.nodeName}_${user_meta_1.authorMeta.nodeName}:${user_meta_1.authorMeta.labelName})
40
+ MATCH (${content_meta_1.contentMeta.nodeName})<-[:PUBLISHED]-(${content_meta_1.contentMeta.nodeName}_${user_meta_1.authorMeta.nodeName}:${user_meta_1.authorMeta.labelName})`;
41
+ // Add OPTIONAL MATCH for extension relationships
42
+ if (this.extension?.additionalRelationships) {
43
+ for (const rel of this.extension.additionalRelationships) {
44
+ // Build relationship pattern based on direction
45
+ // "in" means relationship points TO content: (other)-[:REL]->(content)
46
+ // "out" means relationship points FROM content: (content)-[:REL]->(other)
47
+ const relPattern = rel.direction === "in"
48
+ ? `(${content_meta_1.contentMeta.nodeName})<-[:${rel.relationship}]-(${content_meta_1.contentMeta.nodeName}_${rel.model.nodeName}:${rel.model.labelName})`
49
+ : `(${content_meta_1.contentMeta.nodeName})-[:${rel.relationship}]->(${content_meta_1.contentMeta.nodeName}_${rel.model.nodeName}:${rel.model.labelName})`;
50
+ query += `
51
+ OPTIONAL MATCH ${relPattern}`;
52
+ }
53
+ }
54
+ // Base RETURN clause
55
+ query += `
35
56
  RETURN ${content_meta_1.contentMeta.nodeName},
36
57
  ${content_meta_1.contentMeta.nodeName}_${company_meta_1.companyMeta.nodeName},
37
58
  ${content_meta_1.contentMeta.nodeName}_${user_meta_1.ownerMeta.nodeName},
38
- ${content_meta_1.contentMeta.nodeName}_${user_meta_1.authorMeta.nodeName}
39
- ${params?.useTotalScore ? `, totalScore` : ``}
40
- `;
59
+ ${content_meta_1.contentMeta.nodeName}_${user_meta_1.authorMeta.nodeName}`;
60
+ // Add extension relationship nodes to RETURN
61
+ if (this.extension?.additionalRelationships) {
62
+ for (const rel of this.extension.additionalRelationships) {
63
+ query += `,
64
+ ${content_meta_1.contentMeta.nodeName}_${rel.model.nodeName}`;
65
+ }
66
+ }
67
+ // Add optional totalScore
68
+ if (params?.useTotalScore) {
69
+ query += `,
70
+ totalScore`;
71
+ }
72
+ return query;
41
73
  };
42
74
  }
43
75
  getContentTypes() {
@@ -59,7 +91,9 @@ let ContentCypherService = class ContentCypherService {
59
91
  exports.ContentCypherService = ContentCypherService;
60
92
  exports.ContentCypherService = ContentCypherService = __decorate([
61
93
  (0, common_1.Injectable)(),
94
+ __param(2, (0, common_1.Optional)()),
95
+ __param(2, (0, common_1.Inject)(content_extension_interface_1.CONTENT_EXTENSION_CONFIG)),
62
96
  __metadata("design:paramtypes", [nestjs_cls_1.ClsService,
63
- config_1.ConfigService])
97
+ config_1.ConfigService, Object])
64
98
  ], ContentCypherService);
65
99
  //# sourceMappingURL=content.cypher.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"content.cypher.service.js","sourceRoot":"","sources":["../../../../src/foundations/content/services/content.cypher.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAA+C;AAC/C,2CAAwC;AAExC,sEAAkE;AAClE,sEAAkE;AAClE,6DAAsE;AAG/D,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,YACmB,UAAsB,EACtB,aAAiD;QADjD,eAAU,GAAV,UAAU,CAAY;QACtB,kBAAa,GAAb,aAAa,CAAoC;QAoBpE,kBAAa,GAAG,CAAC,MAAoC,EAAU,EAAE;YAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAE7C,OAAO;aACE,0BAAW,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,0BAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;KACzJ,CAAC;QACJ,CAAC,CAAC;QAEF,oBAAe,GAAG,CAAC,MAAoC,EAAE,EAAE;YACzD,OAAO;eACI,0BAAW,CAAC,QAAQ,qBAAqB,0BAAW,CAAC,QAAQ,IAAI,0BAAW,CAAC,QAAQ,IAAI,0BAAW,CAAC,SAAS;eAC9G,0BAAW,CAAC,QAAQ,oBAAoB,0BAAW,CAAC,QAAQ,IAAI,qBAAS,CAAC,QAAQ,IAAI,qBAAS,CAAC,SAAS;eACzG,0BAAW,CAAC,QAAQ,oBAAoB,0BAAW,CAAC,QAAQ,IAAI,sBAAU,CAAC,QAAQ,IAAI,sBAAU,CAAC,SAAS;eAC3G,0BAAW,CAAC,QAAQ;UACzB,0BAAW,CAAC,QAAQ,IAAI,0BAAW,CAAC,QAAQ;UAC5C,0BAAW,CAAC,QAAQ,IAAI,qBAAS,CAAC,QAAQ;UAC1C,0BAAW,CAAC,QAAQ,IAAI,sBAAU,CAAC,QAAQ;UAC3C,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;KAChD,CAAC;QACJ,CAAC,CAAC;IAvCC,CAAC;IAEI,eAAe;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAA8B,cAAc,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;IAC1F,CAAC;IAED,OAAO,CAAC,MAA+D;QACrE,OAAO;eACI,0BAAW,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,WAAW,iBAAiB,CAAC,CAAC,CAAC,EAAE;cACnH,0BAAW,CAAC,QAAQ;YACtB,0BAAW,CAAC,QAAQ;;;iBAGf,0BAAW,CAAC,QAAQ;;aAExB,0BAAW,CAAC,QAAQ,GAAG,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,wBAAwB;KAC1F,CAAC;IACJ,CAAC;CAuBF,CAAA;AA5CY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;qCAGoB,uBAAU;QACP,sBAAa;GAHpC,oBAAoB,CA4ChC"}
1
+ {"version":3,"file":"content.cypher.service.js","sourceRoot":"","sources":["../../../../src/foundations/content/services/content.cypher.service.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,12 @@
1
+ import { DynamicModule } from "@nestjs/common";
2
+ import { ContentExtensionConfig } from "./content/interfaces/content.extension.interface";
3
+ /**
4
+ * Configuration options for FoundationsModule.
5
+ */
6
+ export interface FoundationsModuleConfig {
7
+ /** Optional extension for Content module to add additional relationships */
8
+ contentExtension?: ContentExtensionConfig;
9
+ }
1
10
  /**
2
11
  * FoundationsModule - Centralized module for all foundation/domain modules
3
12
  *
@@ -10,19 +19,28 @@
10
19
  * - Notifications (NotificationModule, PushModule)
11
20
  * - And more...
12
21
  *
13
- * Queue configuration is now via baseConfig.chunkQueues - no forRoot() needed.
14
- *
15
- * Usage:
22
+ * @example
16
23
  * ```typescript
17
- * @Module({
18
- * imports: [
19
- * CoreModule.forRoot(),
20
- * FoundationsModule,
21
- * ],
24
+ * // Without content extension
25
+ * FoundationsModule.forRoot()
26
+ *
27
+ * // With content extension
28
+ * FoundationsModule.forRoot({
29
+ * contentExtension: {
30
+ * additionalRelationships: [
31
+ * { model: topicMeta, relationship: 'HAS_KNOWLEDGE', direction: 'in', cardinality: 'many' },
32
+ * ],
33
+ * },
22
34
  * })
23
- * export class AppModule {}
24
35
  * ```
25
36
  */
26
37
  export declare class FoundationsModule {
38
+ /**
39
+ * Configure FoundationsModule with optional extensions.
40
+ *
41
+ * @param config - Optional configuration for foundation modules
42
+ * @returns DynamicModule with all foundation modules configured
43
+ */
44
+ static forRoot(config?: FoundationsModuleConfig): DynamicModule;
27
45
  }
28
46
  //# sourceMappingURL=foundations.modules.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"foundations.modules.d.ts","sourceRoot":"","sources":["../../src/foundations/foundations.modules.ts"],"names":[],"mappings":"AA2CA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAIa,iBAAiB;CAAG"}
1
+ {"version":3,"file":"foundations.modules.d.ts","sourceRoot":"","sources":["../../src/foundations/foundations.modules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAU,MAAM,gBAAgB,CAAC;AAQvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAY1F;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;CAC3C;AAyBD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBACa,iBAAiB;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,uBAAuB,GAAG,aAAa;CAOhE"}
@@ -5,6 +5,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
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
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
7
  };
8
+ var FoundationsModule_1;
8
9
  Object.defineProperty(exports, "__esModule", { value: true });
9
10
  exports.FoundationsModule = void 0;
10
11
  const common_1 = require("@nestjs/common");
@@ -26,17 +27,16 @@ const s3_module_1 = require("./s3/s3.module");
26
27
  const tokenusage_module_1 = require("./tokenusage/tokenusage.module");
27
28
  const user_module_1 = require("./user/user.module");
28
29
  /**
29
- * All foundation modules - fully static.
30
+ * All static foundation modules (excluding ContentModule which is dynamic).
30
31
  * Queue registration is handled centrally by QueueModule (via baseConfig.chunkQueues).
31
32
  */
32
- const ALL_FOUNDATION_MODULES = [
33
+ const STATIC_FOUNDATION_MODULES = [
33
34
  atomicfact_module_1.AtomicFactModule,
34
35
  audit_module_1.AuditModule,
35
36
  auth_module_1.AuthModule,
36
37
  chunk_module_1.ChunkModule,
37
38
  chunker_module_1.ChunkerModule,
38
39
  company_module_1.CompanyModule,
39
- content_module_1.ContentModule,
40
40
  feature_module_1.FeatureModule,
41
41
  keyconcept_module_1.KeyConceptModule,
42
42
  module_module_1.ModuleModule,
@@ -60,26 +60,38 @@ const ALL_FOUNDATION_MODULES = [
60
60
  * - Notifications (NotificationModule, PushModule)
61
61
  * - And more...
62
62
  *
63
- * Queue configuration is now via baseConfig.chunkQueues - no forRoot() needed.
64
- *
65
- * Usage:
63
+ * @example
66
64
  * ```typescript
67
- * @Module({
68
- * imports: [
69
- * CoreModule.forRoot(),
70
- * FoundationsModule,
71
- * ],
65
+ * // Without content extension
66
+ * FoundationsModule.forRoot()
67
+ *
68
+ * // With content extension
69
+ * FoundationsModule.forRoot({
70
+ * contentExtension: {
71
+ * additionalRelationships: [
72
+ * { model: topicMeta, relationship: 'HAS_KNOWLEDGE', direction: 'in', cardinality: 'many' },
73
+ * ],
74
+ * },
72
75
  * })
73
- * export class AppModule {}
74
76
  * ```
75
77
  */
76
- let FoundationsModule = class FoundationsModule {
78
+ let FoundationsModule = FoundationsModule_1 = class FoundationsModule {
79
+ /**
80
+ * Configure FoundationsModule with optional extensions.
81
+ *
82
+ * @param config - Optional configuration for foundation modules
83
+ * @returns DynamicModule with all foundation modules configured
84
+ */
85
+ static forRoot(config) {
86
+ return {
87
+ module: FoundationsModule_1,
88
+ imports: [...STATIC_FOUNDATION_MODULES, content_module_1.ContentModule.forRoot(config?.contentExtension)],
89
+ exports: [...STATIC_FOUNDATION_MODULES, content_module_1.ContentModule],
90
+ };
91
+ }
77
92
  };
78
93
  exports.FoundationsModule = FoundationsModule;
79
- exports.FoundationsModule = FoundationsModule = __decorate([
80
- (0, common_1.Module)({
81
- imports: ALL_FOUNDATION_MODULES,
82
- exports: ALL_FOUNDATION_MODULES,
83
- })
94
+ exports.FoundationsModule = FoundationsModule = FoundationsModule_1 = __decorate([
95
+ (0, common_1.Module)({})
84
96
  ], FoundationsModule);
85
97
  //# sourceMappingURL=foundations.modules.js.map