@carlonicora/nestjs-neo4jsonapi 1.113.0 → 1.114.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.
Files changed (88) hide show
  1. package/dist/common/guards/index.d.ts +1 -0
  2. package/dist/common/guards/index.d.ts.map +1 -1
  3. package/dist/common/guards/index.js +1 -0
  4. package/dist/common/guards/index.js.map +1 -1
  5. package/dist/common/guards/jwt.auth.any-scope.guard.d.ts +20 -0
  6. package/dist/common/guards/jwt.auth.any-scope.guard.d.ts.map +1 -0
  7. package/dist/common/guards/jwt.auth.any-scope.guard.js +61 -0
  8. package/dist/common/guards/jwt.auth.any-scope.guard.js.map +1 -0
  9. package/dist/core/security/services/security.service.d.ts +5 -0
  10. package/dist/core/security/services/security.service.d.ts.map +1 -1
  11. package/dist/core/security/services/security.service.js +13 -0
  12. package/dist/core/security/services/security.service.js.map +1 -1
  13. package/dist/foundations/auth/controllers/auth.controller.d.ts +2 -0
  14. package/dist/foundations/auth/controllers/auth.controller.d.ts.map +1 -1
  15. package/dist/foundations/auth/controllers/auth.controller.js +29 -0
  16. package/dist/foundations/auth/controllers/auth.controller.js.map +1 -1
  17. package/dist/foundations/auth/entities/auth.entity.d.ts +10 -0
  18. package/dist/foundations/auth/entities/auth.entity.d.ts.map +1 -1
  19. package/dist/foundations/auth/repositories/auth.repository.d.ts +28 -0
  20. package/dist/foundations/auth/repositories/auth.repository.d.ts.map +1 -1
  21. package/dist/foundations/auth/repositories/auth.repository.js +92 -12
  22. package/dist/foundations/auth/repositories/auth.repository.js.map +1 -1
  23. package/dist/foundations/auth/serialisers/auth.serialiser.d.ts.map +1 -1
  24. package/dist/foundations/auth/serialisers/auth.serialiser.js +4 -0
  25. package/dist/foundations/auth/serialisers/auth.serialiser.js.map +1 -1
  26. package/dist/foundations/auth/services/auth.service.d.ts +12 -0
  27. package/dist/foundations/auth/services/auth.service.d.ts.map +1 -1
  28. package/dist/foundations/auth/services/auth.service.js +55 -0
  29. package/dist/foundations/auth/services/auth.service.js.map +1 -1
  30. package/dist/foundations/company/repositories/company.repository.d.ts.map +1 -1
  31. package/dist/foundations/company/repositories/company.repository.js +7 -34
  32. package/dist/foundations/company/repositories/company.repository.js.map +1 -1
  33. package/dist/foundations/discord-user/repositories/discord-user.repository.d.ts.map +1 -1
  34. package/dist/foundations/discord-user/repositories/discord-user.repository.js +6 -1
  35. package/dist/foundations/discord-user/repositories/discord-user.repository.js.map +1 -1
  36. package/dist/foundations/foundations.modules.d.ts.map +1 -1
  37. package/dist/foundations/foundations.modules.js +2 -0
  38. package/dist/foundations/foundations.modules.js.map +1 -1
  39. package/dist/foundations/google-user/repositories/google-user.repository.d.ts.map +1 -1
  40. package/dist/foundations/google-user/repositories/google-user.repository.js +6 -1
  41. package/dist/foundations/google-user/repositories/google-user.repository.js.map +1 -1
  42. package/dist/foundations/index.d.ts +1 -0
  43. package/dist/foundations/index.d.ts.map +1 -1
  44. package/dist/foundations/index.js +1 -0
  45. package/dist/foundations/index.js.map +1 -1
  46. package/dist/foundations/membership/entities/membership.d.ts +34 -0
  47. package/dist/foundations/membership/entities/membership.d.ts.map +1 -0
  48. package/dist/foundations/membership/entities/membership.js +24 -0
  49. package/dist/foundations/membership/entities/membership.js.map +1 -0
  50. package/dist/foundations/membership/entities/membership.meta.d.ts +3 -0
  51. package/dist/foundations/membership/entities/membership.meta.d.ts.map +1 -0
  52. package/dist/foundations/membership/entities/membership.meta.js +10 -0
  53. package/dist/foundations/membership/entities/membership.meta.js.map +1 -0
  54. package/dist/foundations/membership/index.d.ts +6 -0
  55. package/dist/foundations/membership/index.d.ts.map +1 -0
  56. package/dist/foundations/membership/index.js +17 -0
  57. package/dist/foundations/membership/index.js.map +1 -0
  58. package/dist/foundations/membership/membership.module.d.ts +9 -0
  59. package/dist/foundations/membership/membership.module.d.ts.map +1 -0
  60. package/dist/foundations/membership/membership.module.js +32 -0
  61. package/dist/foundations/membership/membership.module.js.map +1 -0
  62. package/dist/foundations/membership/queries/membership.query.d.ts +60 -0
  63. package/dist/foundations/membership/queries/membership.query.d.ts.map +1 -0
  64. package/dist/foundations/membership/queries/membership.query.js +86 -0
  65. package/dist/foundations/membership/queries/membership.query.js.map +1 -0
  66. package/dist/foundations/membership/repositories/membership.repository.d.ts +8 -0
  67. package/dist/foundations/membership/repositories/membership.repository.d.ts.map +1 -0
  68. package/dist/foundations/membership/repositories/membership.repository.js +30 -0
  69. package/dist/foundations/membership/repositories/membership.repository.js.map +1 -0
  70. package/dist/foundations/module/queries/feature.module.query.d.ts +2 -2
  71. package/dist/foundations/module/queries/feature.module.query.d.ts.map +1 -1
  72. package/dist/foundations/module/queries/feature.module.query.js +11 -3
  73. package/dist/foundations/module/queries/feature.module.query.js.map +1 -1
  74. package/dist/foundations/role/repositories/role.repository.d.ts.map +1 -1
  75. package/dist/foundations/role/repositories/role.repository.js +15 -4
  76. package/dist/foundations/role/repositories/role.repository.js.map +1 -1
  77. package/dist/foundations/user/entities/user.d.ts.map +1 -1
  78. package/dist/foundations/user/entities/user.js +6 -1
  79. package/dist/foundations/user/entities/user.js.map +1 -1
  80. package/dist/foundations/user/repositories/user.repository.d.ts +1 -0
  81. package/dist/foundations/user/repositories/user.repository.d.ts.map +1 -1
  82. package/dist/foundations/user/repositories/user.repository.js +105 -58
  83. package/dist/foundations/user/repositories/user.repository.js.map +1 -1
  84. package/dist/foundations/user/services/user.service.d.ts +8 -0
  85. package/dist/foundations/user/services/user.service.d.ts.map +1 -1
  86. package/dist/foundations/user/services/user.service.js +20 -4
  87. package/dist/foundations/user/services/user.service.js.map +1 -1
  88. package/package.json +1 -1
@@ -0,0 +1,3 @@
1
+ import { DataMeta } from "../../../common/interfaces/datamodel.interface";
2
+ export declare const membershipMeta: DataMeta;
3
+ //# sourceMappingURL=membership.meta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"membership.meta.d.ts","sourceRoot":"","sources":["../../../../src/foundations/membership/entities/membership.meta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AAE1E,eAAO,MAAM,cAAc,EAAE,QAK5B,CAAC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.membershipMeta = void 0;
4
+ exports.membershipMeta = {
5
+ type: "memberships",
6
+ endpoint: "memberships",
7
+ nodeName: "membership",
8
+ labelName: "Membership",
9
+ };
10
+ //# sourceMappingURL=membership.meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"membership.meta.js","sourceRoot":"","sources":["../../../../src/foundations/membership/entities/membership.meta.ts"],"names":[],"mappings":";;;AAEa,QAAA,cAAc,GAAa;IACtC,IAAI,EAAE,aAAa;IACnB,QAAQ,EAAE,aAAa;IACvB,QAAQ,EAAE,YAAY;IACtB,SAAS,EAAE,YAAY;CACxB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { Membership, MembershipDescriptor, MembershipDescriptorType } from "./entities/membership";
2
+ export { membershipMeta } from "./entities/membership.meta";
3
+ export { membershipRoleMatch, membershipRoleMatchRequired, grantCompanyRoles, grantPlatformRole, } from "./queries/membership.query";
4
+ export { MembershipRepository } from "./repositories/membership.repository";
5
+ export { MembershipModule } from "./membership.module";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/foundations/membership/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MembershipModule = exports.MembershipRepository = exports.grantPlatformRole = exports.grantCompanyRoles = exports.membershipRoleMatchRequired = exports.membershipRoleMatch = exports.membershipMeta = exports.MembershipDescriptor = void 0;
4
+ var membership_1 = require("./entities/membership");
5
+ Object.defineProperty(exports, "MembershipDescriptor", { enumerable: true, get: function () { return membership_1.MembershipDescriptor; } });
6
+ var membership_meta_1 = require("./entities/membership.meta");
7
+ Object.defineProperty(exports, "membershipMeta", { enumerable: true, get: function () { return membership_meta_1.membershipMeta; } });
8
+ var membership_query_1 = require("./queries/membership.query");
9
+ Object.defineProperty(exports, "membershipRoleMatch", { enumerable: true, get: function () { return membership_query_1.membershipRoleMatch; } });
10
+ Object.defineProperty(exports, "membershipRoleMatchRequired", { enumerable: true, get: function () { return membership_query_1.membershipRoleMatchRequired; } });
11
+ Object.defineProperty(exports, "grantCompanyRoles", { enumerable: true, get: function () { return membership_query_1.grantCompanyRoles; } });
12
+ Object.defineProperty(exports, "grantPlatformRole", { enumerable: true, get: function () { return membership_query_1.grantPlatformRole; } });
13
+ var membership_repository_1 = require("./repositories/membership.repository");
14
+ Object.defineProperty(exports, "MembershipRepository", { enumerable: true, get: function () { return membership_repository_1.MembershipRepository; } });
15
+ var membership_module_1 = require("./membership.module");
16
+ Object.defineProperty(exports, "MembershipModule", { enumerable: true, get: function () { return membership_module_1.MembershipModule; } });
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/foundations/membership/index.ts"],"names":[],"mappings":";;;AAAA,oDAAmG;AAA9E,kHAAA,oBAAoB,OAAA;AACzC,8DAA4D;AAAnD,iHAAA,cAAc,OAAA;AACvB,+DAKoC;AAJlC,uHAAA,mBAAmB,OAAA;AACnB,+HAAA,2BAA2B,OAAA;AAC3B,qHAAA,iBAAiB,OAAA;AACjB,qHAAA,iBAAiB,OAAA;AAEnB,8EAA4E;AAAnE,6HAAA,oBAAoB,OAAA;AAC7B,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA"}
@@ -0,0 +1,9 @@
1
+ import { OnModuleInit } from "@nestjs/common";
2
+ /**
3
+ * Membership is backend-internal: no controller, no endpoint.
4
+ * The repository exists only to bootstrap the uniqueness constraint.
5
+ */
6
+ export declare class MembershipModule implements OnModuleInit {
7
+ onModuleInit(): void;
8
+ }
9
+ //# sourceMappingURL=membership.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"membership.module.d.ts","sourceRoot":"","sources":["../../../src/foundations/membership/membership.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAMtD;;;GAGG;AACH,qBAMa,gBAAiB,YAAW,YAAY;IACnD,YAAY;CAGb"}
@@ -0,0 +1,32 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MembershipModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const registry_1 = require("../../common/registries/registry");
12
+ const membership_1 = require("./entities/membership");
13
+ const membership_repository_1 = require("./repositories/membership.repository");
14
+ /**
15
+ * Membership is backend-internal: no controller, no endpoint.
16
+ * The repository exists only to bootstrap the uniqueness constraint.
17
+ */
18
+ let MembershipModule = class MembershipModule {
19
+ onModuleInit() {
20
+ registry_1.modelRegistry.register(membership_1.MembershipDescriptor.model);
21
+ }
22
+ };
23
+ exports.MembershipModule = MembershipModule;
24
+ exports.MembershipModule = MembershipModule = __decorate([
25
+ (0, common_1.Module)({
26
+ controllers: [],
27
+ providers: [membership_repository_1.MembershipRepository, membership_1.MembershipDescriptor.model.serialiser],
28
+ exports: [membership_repository_1.MembershipRepository],
29
+ imports: [],
30
+ })
31
+ ], MembershipModule);
32
+ //# sourceMappingURL=membership.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"membership.module.js","sourceRoot":"","sources":["../../../src/foundations/membership/membership.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAsD;AAEtD,+DAAiE;AACjE,sDAA6D;AAC7D,gFAA4E;AAE5E;;;GAGG;AAOI,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YAAY;QACV,wBAAa,CAAC,QAAQ,CAAC,iCAAoB,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;CACF,CAAA;AAJY,4CAAgB;2BAAhB,gBAAgB;IAN5B,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,CAAC,4CAAoB,EAAE,iCAAoB,CAAC,KAAK,CAAC,UAAU,CAAC;QACxE,OAAO,EAAE,CAAC,4CAAoB,CAAC;QAC/B,OAAO,EAAE,EAAE;KACZ,CAAC;GACW,gBAAgB,CAI5B"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Canonical Cypher fragments for company-scoped role membership.
3
+ *
4
+ * These helpers are THE only sanctioned way to read/write role membership:
5
+ * (user)-[:HAS_MEMBERSHIP]->(:Membership)-[:IN_COMPANY]->(company)
6
+ * (membership)-[:HAS_ROLE]->(role)
7
+ *
8
+ * Rules for use:
9
+ * - `$companyId` is auto-injected from CLS by `Neo4jService.initQuery()`. Queries
10
+ * that must scope to an EXPLICIT company (login, switch, migration) set
11
+ * `query.queryParams.companyId` after `initQuery()`.
12
+ * - `$membershipId` is always `randomUUID()` generated in TypeScript and passed as
13
+ * a param — never `randomUUID()` in Cypher (keeps writes deterministic/testable).
14
+ * - `Membership.createdAt`/`updatedAt` are always written with `datetime()` in
15
+ * Cypher, never as a string param.
16
+ * - Invariant: every code path that deletes a `BELONGS_TO` edge, deletes a user, or
17
+ * deletes a company MUST also `DETACH DELETE` the corresponding (user, company)
18
+ * Membership node(s). An orphaned membership whose company vanished would read as
19
+ * a PLATFORM membership — a privilege escalation.
20
+ */
21
+ /**
22
+ * Effective-role read: roles of `userAlias` in the company bound to $companyId,
23
+ * PLUS platform-level roles (membership with no IN_COMPANY edge).
24
+ * Emits OPTIONAL MATCH lines; `roleAlias` is the Role node alias the caller's
25
+ * RETURN statement expects (e.g. "user_role", "auth_user_role").
26
+ */
27
+ export declare const membershipRoleMatch: (params: {
28
+ userAlias: string;
29
+ roleAlias: string;
30
+ }) => string;
31
+ /**
32
+ * Required variant (MATCH, not OPTIONAL MATCH) for queries that filter BY role,
33
+ * with the role id bound to $roleParamName (default $roleId).
34
+ */
35
+ export declare const membershipRoleMatchRequired: (params: {
36
+ userAlias: string;
37
+ roleAlias: string;
38
+ roleParamName?: string;
39
+ }) => string;
40
+ /**
41
+ * Write: ensure the (user, company) membership exists and grant roles.
42
+ * Expects $membershipId (fresh uuid) and $roleIds (string[]) params;
43
+ * `userAlias` and `companyAlias` must already be bound.
44
+ *
45
+ * The OPTIONAL MATCH + FOREACH shape deliberately avoids
46
+ * `MERGE (ms)-[:HAS_ROLE]->(:Role {id: roleId})`, which would CREATE a phantom
47
+ * Role node when the id does not exist (FOREACH cannot contain MATCH).
48
+ */
49
+ export declare const grantCompanyRoles: (params: {
50
+ userAlias: string;
51
+ companyAlias: string;
52
+ }) => string;
53
+ /**
54
+ * Write: ensure the user's PLATFORM membership (no IN_COMPANY) exists and grant
55
+ * the role bound to $roleId. Expects $membershipId. `userAlias` must be bound.
56
+ */
57
+ export declare const grantPlatformRole: (params: {
58
+ userAlias: string;
59
+ }) => string;
60
+ //# sourceMappingURL=membership.query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"membership.query.d.ts","sourceRoot":"","sources":["../../../../src/foundations/membership/queries/membership.query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,QAAQ;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,KAAG,MAKtF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,2BAA2B,GAAI,QAAQ;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,KAAG,MAKH,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,KAAG,MAUvF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,KAAG,MAWjE,CAAC"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ /**
3
+ * Canonical Cypher fragments for company-scoped role membership.
4
+ *
5
+ * These helpers are THE only sanctioned way to read/write role membership:
6
+ * (user)-[:HAS_MEMBERSHIP]->(:Membership)-[:IN_COMPANY]->(company)
7
+ * (membership)-[:HAS_ROLE]->(role)
8
+ *
9
+ * Rules for use:
10
+ * - `$companyId` is auto-injected from CLS by `Neo4jService.initQuery()`. Queries
11
+ * that must scope to an EXPLICIT company (login, switch, migration) set
12
+ * `query.queryParams.companyId` after `initQuery()`.
13
+ * - `$membershipId` is always `randomUUID()` generated in TypeScript and passed as
14
+ * a param — never `randomUUID()` in Cypher (keeps writes deterministic/testable).
15
+ * - `Membership.createdAt`/`updatedAt` are always written with `datetime()` in
16
+ * Cypher, never as a string param.
17
+ * - Invariant: every code path that deletes a `BELONGS_TO` edge, deletes a user, or
18
+ * deletes a company MUST also `DETACH DELETE` the corresponding (user, company)
19
+ * Membership node(s). An orphaned membership whose company vanished would read as
20
+ * a PLATFORM membership — a privilege escalation.
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.grantPlatformRole = exports.grantCompanyRoles = exports.membershipRoleMatchRequired = exports.membershipRoleMatch = void 0;
24
+ /**
25
+ * Effective-role read: roles of `userAlias` in the company bound to $companyId,
26
+ * PLUS platform-level roles (membership with no IN_COMPANY edge).
27
+ * Emits OPTIONAL MATCH lines; `roleAlias` is the Role node alias the caller's
28
+ * RETURN statement expects (e.g. "user_role", "auth_user_role").
29
+ */
30
+ const membershipRoleMatch = (params) => `
31
+ OPTIONAL MATCH (${params.userAlias})-[:HAS_MEMBERSHIP]->(${params.roleAlias}_ms:Membership)
32
+ WHERE (${params.roleAlias}_ms)-[:IN_COMPANY]->(:Company {id: $companyId})
33
+ OR NOT (${params.roleAlias}_ms)-[:IN_COMPANY]->(:Company)
34
+ OPTIONAL MATCH (${params.roleAlias}_ms)-[:HAS_ROLE]->(${params.roleAlias}:Role)
35
+ `;
36
+ exports.membershipRoleMatch = membershipRoleMatch;
37
+ /**
38
+ * Required variant (MATCH, not OPTIONAL MATCH) for queries that filter BY role,
39
+ * with the role id bound to $roleParamName (default $roleId).
40
+ */
41
+ const membershipRoleMatchRequired = (params) => `
42
+ MATCH (${params.userAlias})-[:HAS_MEMBERSHIP]->(${params.roleAlias}_ms:Membership)
43
+ WHERE (${params.roleAlias}_ms)-[:IN_COMPANY]->(:Company {id: $companyId})
44
+ OR NOT (${params.roleAlias}_ms)-[:IN_COMPANY]->(:Company)
45
+ MATCH (${params.roleAlias}_ms)-[:HAS_ROLE]->(${params.roleAlias}:Role {id: $${params.roleParamName ?? "roleId"}})
46
+ `;
47
+ exports.membershipRoleMatchRequired = membershipRoleMatchRequired;
48
+ /**
49
+ * Write: ensure the (user, company) membership exists and grant roles.
50
+ * Expects $membershipId (fresh uuid) and $roleIds (string[]) params;
51
+ * `userAlias` and `companyAlias` must already be bound.
52
+ *
53
+ * The OPTIONAL MATCH + FOREACH shape deliberately avoids
54
+ * `MERGE (ms)-[:HAS_ROLE]->(:Role {id: roleId})`, which would CREATE a phantom
55
+ * Role node when the id does not exist (FOREACH cannot contain MATCH).
56
+ */
57
+ const grantCompanyRoles = (params) => `
58
+ MERGE (${params.userAlias})-[:HAS_MEMBERSHIP]->(ms:Membership)-[:IN_COMPANY]->(${params.companyAlias})
59
+ ON CREATE SET ms.id = $membershipId, ms.createdAt = datetime(), ms.updatedAt = datetime()
60
+ SET ms.updatedAt = datetime()
61
+ WITH ms
62
+ UNWIND CASE WHEN size($roleIds) = 0 THEN [null] ELSE $roleIds END AS roleId
63
+ OPTIONAL MATCH (grant_role:Role {id: roleId})
64
+ FOREACH (_ IN CASE WHEN grant_role IS NULL THEN [] ELSE [1] END |
65
+ MERGE (ms)-[:HAS_ROLE]->(grant_role)
66
+ )
67
+ `;
68
+ exports.grantCompanyRoles = grantCompanyRoles;
69
+ /**
70
+ * Write: ensure the user's PLATFORM membership (no IN_COMPANY) exists and grant
71
+ * the role bound to $roleId. Expects $membershipId. `userAlias` must be bound.
72
+ */
73
+ const grantPlatformRole = (params) => `
74
+ OPTIONAL MATCH (${params.userAlias})-[:HAS_MEMBERSHIP]->(existing_ms:Membership)
75
+ WHERE NOT (existing_ms)-[:IN_COMPANY]->(:Company)
76
+ FOREACH (_ IN CASE WHEN existing_ms IS NULL THEN [1] ELSE [] END |
77
+ CREATE (${params.userAlias})-[:HAS_MEMBERSHIP]->(:Membership {id: $membershipId, createdAt: datetime(), updatedAt: datetime()})
78
+ )
79
+ WITH ${params.userAlias}
80
+ MATCH (${params.userAlias})-[:HAS_MEMBERSHIP]->(platform_ms:Membership)
81
+ WHERE NOT (platform_ms)-[:IN_COMPANY]->(:Company)
82
+ MATCH (platform_role:Role {id: $roleId})
83
+ MERGE (platform_ms)-[:HAS_ROLE]->(platform_role)
84
+ `;
85
+ exports.grantPlatformRole = grantPlatformRole;
86
+ //# sourceMappingURL=membership.query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"membership.query.js","sourceRoot":"","sources":["../../../../src/foundations/membership/queries/membership.query.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AAEH;;;;;GAKG;AACI,MAAM,mBAAmB,GAAG,CAAC,MAAgD,EAAU,EAAE,CAAC;oBAC7E,MAAM,CAAC,SAAS,yBAAyB,MAAM,CAAC,SAAS;WAClE,MAAM,CAAC,SAAS;eACZ,MAAM,CAAC,SAAS;oBACX,MAAM,CAAC,SAAS,sBAAsB,MAAM,CAAC,SAAS;CACzE,CAAC;AALW,QAAA,mBAAmB,uBAK9B;AAEF;;;GAGG;AACI,MAAM,2BAA2B,GAAG,CAAC,MAI3C,EAAU,EAAE,CAAC;WACH,MAAM,CAAC,SAAS,yBAAyB,MAAM,CAAC,SAAS;WACzD,MAAM,CAAC,SAAS;eACZ,MAAM,CAAC,SAAS;WACpB,MAAM,CAAC,SAAS,sBAAsB,MAAM,CAAC,SAAS,eAAe,MAAM,CAAC,aAAa,IAAI,QAAQ;CAC/G,CAAC;AATW,QAAA,2BAA2B,+BAStC;AAEF;;;;;;;;GAQG;AACI,MAAM,iBAAiB,GAAG,CAAC,MAAmD,EAAU,EAAE,CAAC;WACvF,MAAM,CAAC,SAAS,wDAAwD,MAAM,CAAC,YAAY;;;;;;;;;CASrG,CAAC;AAVW,QAAA,iBAAiB,qBAU5B;AAEF;;;GAGG;AACI,MAAM,iBAAiB,GAAG,CAAC,MAA6B,EAAU,EAAE,CAAC;oBACxD,MAAM,CAAC,SAAS;;;cAGtB,MAAM,CAAC,SAAS;;SAErB,MAAM,CAAC,SAAS;WACd,MAAM,CAAC,SAAS;;;;CAI1B,CAAC;AAXW,QAAA,iBAAiB,qBAW5B"}
@@ -0,0 +1,8 @@
1
+ import { OnModuleInit } from "@nestjs/common";
2
+ import { Neo4jService } from "../../../core/neo4j/services/neo4j.service";
3
+ export declare class MembershipRepository implements OnModuleInit {
4
+ private readonly neo4j;
5
+ constructor(neo4j: Neo4jService);
6
+ onModuleInit(): Promise<void>;
7
+ }
8
+ //# sourceMappingURL=membership.repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"membership.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/membership/repositories/membership.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAE1E,qBACa,oBAAqB,YAAW,YAAY;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,YAAY;IAE1C,YAAY;CAKnB"}
@@ -0,0 +1,30 @@
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.MembershipRepository = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const neo4j_service_1 = require("../../../core/neo4j/services/neo4j.service");
15
+ let MembershipRepository = class MembershipRepository {
16
+ constructor(neo4j) {
17
+ this.neo4j = neo4j;
18
+ }
19
+ async onModuleInit() {
20
+ await this.neo4j.writeOne({
21
+ query: `CREATE CONSTRAINT membership_id IF NOT EXISTS FOR (membership:Membership) REQUIRE membership.id IS UNIQUE`,
22
+ });
23
+ }
24
+ };
25
+ exports.MembershipRepository = MembershipRepository;
26
+ exports.MembershipRepository = MembershipRepository = __decorate([
27
+ (0, common_1.Injectable)(),
28
+ __metadata("design:paramtypes", [neo4j_service_1.Neo4jService])
29
+ ], MembershipRepository);
30
+ //# sourceMappingURL=membership.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"membership.repository.js","sourceRoot":"","sources":["../../../../src/foundations/membership/repositories/membership.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA0D;AAC1D,8EAA0E;AAGnE,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,YAA6B,KAAmB;QAAnB,UAAK,GAAL,KAAK,CAAc;IAAG,CAAC;IAEpD,KAAK,CAAC,YAAY;QAChB,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;YACxB,KAAK,EAAE,2GAA2G;SACnH,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AARY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;qCAEyB,4BAAY;GADrC,oBAAoB,CAQhC"}
@@ -1,4 +1,4 @@
1
1
  export declare const modulePermissionResolutionQuery = "\n WITH m,\n coalesce(apoc.convert.fromJsonList(m.permissions), []) AS defaultPermissions,\n collect(perm) AS perms\n WITH m, defaultPermissions,\n apoc.coll.flatten([p IN perms | coalesce(apoc.convert.fromJsonList(p.permissions), [])]) AS rolePerms\n WITH m,\n head([x IN defaultPermissions WHERE x.type = 'create' | x.value]) AS defaultCreate,\n head([x IN defaultPermissions WHERE x.type = 'read' | x.value]) AS defaultRead,\n head([x IN defaultPermissions WHERE x.type = 'update' | x.value]) AS defaultUpdate,\n head([x IN defaultPermissions WHERE x.type = 'delete' | x.value]) AS defaultDelete,\n rolePerms\n WITH m,\n [defaultCreate] + [x IN rolePerms WHERE x.type = 'create' | x.value] AS createValues,\n [defaultRead] + [x IN rolePerms WHERE x.type = 'read' | x.value] AS readValues,\n [defaultUpdate] + [x IN rolePerms WHERE x.type = 'update' | x.value] AS updateValues,\n [defaultDelete] + [x IN rolePerms WHERE x.type = 'delete' | x.value] AS deleteValues\n WITH m,\n CASE\n WHEN any(x IN createValues WHERE x = true) THEN true\n WHEN any(x IN createValues WHERE x IS NOT NULL AND x <> false AND x <> true)\n THEN head([x IN createValues WHERE x IS NOT NULL AND x <> false AND x <> true])\n ELSE coalesce(head(createValues), false)\n END AS effectiveCreate,\n CASE\n WHEN any(x IN readValues WHERE x = true) THEN true\n WHEN any(x IN readValues WHERE x IS NOT NULL AND x <> false AND x <> true)\n THEN head([x IN readValues WHERE x IS NOT NULL AND x <> false AND x <> true])\n ELSE coalesce(head(readValues), false)\n END AS effectiveRead,\n CASE\n WHEN any(x IN updateValues WHERE x = true) THEN true\n WHEN any(x IN updateValues WHERE x IS NOT NULL AND x <> false AND x <> true)\n THEN head([x IN updateValues WHERE x IS NOT NULL AND x <> false AND x <> true])\n ELSE coalesce(head(updateValues), false)\n END AS effectiveUpdate,\n CASE\n WHEN any(x IN deleteValues WHERE x = true) THEN true\n WHEN any(x IN deleteValues WHERE x IS NOT NULL AND x <> false AND x <> true)\n THEN head([x IN deleteValues WHERE x IS NOT NULL AND x <> false AND x <> true])\n ELSE coalesce(head(deleteValues), false)\n END AS effectiveDelete\n WITH m, apoc.convert.toJson([\n { type: \"create\", value: effectiveCreate },\n { type: \"read\", value: effectiveRead },\n { type: \"update\", value: effectiveUpdate },\n { type: \"delete\", value: effectiveDelete }\n ]) AS newPermissions\n CALL apoc.create.vNode(\n labels(m),\n apoc.map.merge(properties(m), { permissions: newPermissions })\n ) YIELD node AS module\n\n RETURN module\n";
2
- export declare const featureModuleQuery = "\n OPTIONAL MATCH (user)-[:MEMBER_OF]->(role:Role)\n OPTIONAL MATCH (feature:Feature)\n WHERE exists((company)-[:HAS_FEATURE]->(feature))\n OR feature.isCore = true\n MATCH (m:Module)-[:IN_FEATURE]->(feature)\n OPTIONAL MATCH (role)-[perm:HAS_PERMISSIONS]->(m)\n \n WITH m,\n coalesce(apoc.convert.fromJsonList(m.permissions), []) AS defaultPermissions,\n collect(perm) AS perms\n WITH m, defaultPermissions,\n apoc.coll.flatten([p IN perms | coalesce(apoc.convert.fromJsonList(p.permissions), [])]) AS rolePerms\n WITH m,\n head([x IN defaultPermissions WHERE x.type = 'create' | x.value]) AS defaultCreate,\n head([x IN defaultPermissions WHERE x.type = 'read' | x.value]) AS defaultRead,\n head([x IN defaultPermissions WHERE x.type = 'update' | x.value]) AS defaultUpdate,\n head([x IN defaultPermissions WHERE x.type = 'delete' | x.value]) AS defaultDelete,\n rolePerms\n WITH m,\n [defaultCreate] + [x IN rolePerms WHERE x.type = 'create' | x.value] AS createValues,\n [defaultRead] + [x IN rolePerms WHERE x.type = 'read' | x.value] AS readValues,\n [defaultUpdate] + [x IN rolePerms WHERE x.type = 'update' | x.value] AS updateValues,\n [defaultDelete] + [x IN rolePerms WHERE x.type = 'delete' | x.value] AS deleteValues\n WITH m,\n CASE\n WHEN any(x IN createValues WHERE x = true) THEN true\n WHEN any(x IN createValues WHERE x IS NOT NULL AND x <> false AND x <> true)\n THEN head([x IN createValues WHERE x IS NOT NULL AND x <> false AND x <> true])\n ELSE coalesce(head(createValues), false)\n END AS effectiveCreate,\n CASE\n WHEN any(x IN readValues WHERE x = true) THEN true\n WHEN any(x IN readValues WHERE x IS NOT NULL AND x <> false AND x <> true)\n THEN head([x IN readValues WHERE x IS NOT NULL AND x <> false AND x <> true])\n ELSE coalesce(head(readValues), false)\n END AS effectiveRead,\n CASE\n WHEN any(x IN updateValues WHERE x = true) THEN true\n WHEN any(x IN updateValues WHERE x IS NOT NULL AND x <> false AND x <> true)\n THEN head([x IN updateValues WHERE x IS NOT NULL AND x <> false AND x <> true])\n ELSE coalesce(head(updateValues), false)\n END AS effectiveUpdate,\n CASE\n WHEN any(x IN deleteValues WHERE x = true) THEN true\n WHEN any(x IN deleteValues WHERE x IS NOT NULL AND x <> false AND x <> true)\n THEN head([x IN deleteValues WHERE x IS NOT NULL AND x <> false AND x <> true])\n ELSE coalesce(head(deleteValues), false)\n END AS effectiveDelete\n WITH m, apoc.convert.toJson([\n { type: \"create\", value: effectiveCreate },\n { type: \"read\", value: effectiveRead },\n { type: \"update\", value: effectiveUpdate },\n { type: \"delete\", value: effectiveDelete }\n ]) AS newPermissions\n CALL apoc.create.vNode(\n labels(m),\n apoc.map.merge(properties(m), { permissions: newPermissions })\n ) YIELD node AS module\n\n RETURN module\n\n";
3
- export declare const adminModuleQuery = "\n MATCH (user:User {id: $searchValue})-[:MEMBER_OF]->(role:Role)\n MATCH (role)-[perm:HAS_PERMISSIONS]->(m:Module)\n \n WITH m,\n coalesce(apoc.convert.fromJsonList(m.permissions), []) AS defaultPermissions,\n collect(perm) AS perms\n WITH m, defaultPermissions,\n apoc.coll.flatten([p IN perms | coalesce(apoc.convert.fromJsonList(p.permissions), [])]) AS rolePerms\n WITH m,\n head([x IN defaultPermissions WHERE x.type = 'create' | x.value]) AS defaultCreate,\n head([x IN defaultPermissions WHERE x.type = 'read' | x.value]) AS defaultRead,\n head([x IN defaultPermissions WHERE x.type = 'update' | x.value]) AS defaultUpdate,\n head([x IN defaultPermissions WHERE x.type = 'delete' | x.value]) AS defaultDelete,\n rolePerms\n WITH m,\n [defaultCreate] + [x IN rolePerms WHERE x.type = 'create' | x.value] AS createValues,\n [defaultRead] + [x IN rolePerms WHERE x.type = 'read' | x.value] AS readValues,\n [defaultUpdate] + [x IN rolePerms WHERE x.type = 'update' | x.value] AS updateValues,\n [defaultDelete] + [x IN rolePerms WHERE x.type = 'delete' | x.value] AS deleteValues\n WITH m,\n CASE\n WHEN any(x IN createValues WHERE x = true) THEN true\n WHEN any(x IN createValues WHERE x IS NOT NULL AND x <> false AND x <> true)\n THEN head([x IN createValues WHERE x IS NOT NULL AND x <> false AND x <> true])\n ELSE coalesce(head(createValues), false)\n END AS effectiveCreate,\n CASE\n WHEN any(x IN readValues WHERE x = true) THEN true\n WHEN any(x IN readValues WHERE x IS NOT NULL AND x <> false AND x <> true)\n THEN head([x IN readValues WHERE x IS NOT NULL AND x <> false AND x <> true])\n ELSE coalesce(head(readValues), false)\n END AS effectiveRead,\n CASE\n WHEN any(x IN updateValues WHERE x = true) THEN true\n WHEN any(x IN updateValues WHERE x IS NOT NULL AND x <> false AND x <> true)\n THEN head([x IN updateValues WHERE x IS NOT NULL AND x <> false AND x <> true])\n ELSE coalesce(head(updateValues), false)\n END AS effectiveUpdate,\n CASE\n WHEN any(x IN deleteValues WHERE x = true) THEN true\n WHEN any(x IN deleteValues WHERE x IS NOT NULL AND x <> false AND x <> true)\n THEN head([x IN deleteValues WHERE x IS NOT NULL AND x <> false AND x <> true])\n ELSE coalesce(head(deleteValues), false)\n END AS effectiveDelete\n WITH m, apoc.convert.toJson([\n { type: \"create\", value: effectiveCreate },\n { type: \"read\", value: effectiveRead },\n { type: \"update\", value: effectiveUpdate },\n { type: \"delete\", value: effectiveDelete }\n ]) AS newPermissions\n CALL apoc.create.vNode(\n labels(m),\n apoc.map.merge(properties(m), { permissions: newPermissions })\n ) YIELD node AS module\n\n RETURN module\n\n";
2
+ export declare const featureModuleQuery = "\n OPTIONAL MATCH (user)-[:HAS_MEMBERSHIP]->(fm_ms:Membership)\n WHERE (fm_ms)-[:IN_COMPANY]->(company) OR NOT (fm_ms)-[:IN_COMPANY]->(:Company)\n OPTIONAL MATCH (fm_ms)-[:HAS_ROLE]->(role:Role)\n OPTIONAL MATCH (feature:Feature)\n WHERE exists((company)-[:HAS_FEATURE]->(feature))\n OR feature.isCore = true\n MATCH (m:Module)-[:IN_FEATURE]->(feature)\n OPTIONAL MATCH (role)-[perm:HAS_PERMISSIONS]->(m)\n \n WITH m,\n coalesce(apoc.convert.fromJsonList(m.permissions), []) AS defaultPermissions,\n collect(perm) AS perms\n WITH m, defaultPermissions,\n apoc.coll.flatten([p IN perms | coalesce(apoc.convert.fromJsonList(p.permissions), [])]) AS rolePerms\n WITH m,\n head([x IN defaultPermissions WHERE x.type = 'create' | x.value]) AS defaultCreate,\n head([x IN defaultPermissions WHERE x.type = 'read' | x.value]) AS defaultRead,\n head([x IN defaultPermissions WHERE x.type = 'update' | x.value]) AS defaultUpdate,\n head([x IN defaultPermissions WHERE x.type = 'delete' | x.value]) AS defaultDelete,\n rolePerms\n WITH m,\n [defaultCreate] + [x IN rolePerms WHERE x.type = 'create' | x.value] AS createValues,\n [defaultRead] + [x IN rolePerms WHERE x.type = 'read' | x.value] AS readValues,\n [defaultUpdate] + [x IN rolePerms WHERE x.type = 'update' | x.value] AS updateValues,\n [defaultDelete] + [x IN rolePerms WHERE x.type = 'delete' | x.value] AS deleteValues\n WITH m,\n CASE\n WHEN any(x IN createValues WHERE x = true) THEN true\n WHEN any(x IN createValues WHERE x IS NOT NULL AND x <> false AND x <> true)\n THEN head([x IN createValues WHERE x IS NOT NULL AND x <> false AND x <> true])\n ELSE coalesce(head(createValues), false)\n END AS effectiveCreate,\n CASE\n WHEN any(x IN readValues WHERE x = true) THEN true\n WHEN any(x IN readValues WHERE x IS NOT NULL AND x <> false AND x <> true)\n THEN head([x IN readValues WHERE x IS NOT NULL AND x <> false AND x <> true])\n ELSE coalesce(head(readValues), false)\n END AS effectiveRead,\n CASE\n WHEN any(x IN updateValues WHERE x = true) THEN true\n WHEN any(x IN updateValues WHERE x IS NOT NULL AND x <> false AND x <> true)\n THEN head([x IN updateValues WHERE x IS NOT NULL AND x <> false AND x <> true])\n ELSE coalesce(head(updateValues), false)\n END AS effectiveUpdate,\n CASE\n WHEN any(x IN deleteValues WHERE x = true) THEN true\n WHEN any(x IN deleteValues WHERE x IS NOT NULL AND x <> false AND x <> true)\n THEN head([x IN deleteValues WHERE x IS NOT NULL AND x <> false AND x <> true])\n ELSE coalesce(head(deleteValues), false)\n END AS effectiveDelete\n WITH m, apoc.convert.toJson([\n { type: \"create\", value: effectiveCreate },\n { type: \"read\", value: effectiveRead },\n { type: \"update\", value: effectiveUpdate },\n { type: \"delete\", value: effectiveDelete }\n ]) AS newPermissions\n CALL apoc.create.vNode(\n labels(m),\n apoc.map.merge(properties(m), { permissions: newPermissions })\n ) YIELD node AS module\n\n RETURN module\n\n";
3
+ export declare const adminModuleQuery = "\n MATCH (user:User {id: $searchValue})-[:HAS_MEMBERSHIP]->(am_ms:Membership)\n WHERE NOT (am_ms)-[:IN_COMPANY]->(:Company)\n MATCH (am_ms)-[:HAS_ROLE]->(role:Role)\n MATCH (role)-[perm:HAS_PERMISSIONS]->(m:Module)\n \n WITH m,\n coalesce(apoc.convert.fromJsonList(m.permissions), []) AS defaultPermissions,\n collect(perm) AS perms\n WITH m, defaultPermissions,\n apoc.coll.flatten([p IN perms | coalesce(apoc.convert.fromJsonList(p.permissions), [])]) AS rolePerms\n WITH m,\n head([x IN defaultPermissions WHERE x.type = 'create' | x.value]) AS defaultCreate,\n head([x IN defaultPermissions WHERE x.type = 'read' | x.value]) AS defaultRead,\n head([x IN defaultPermissions WHERE x.type = 'update' | x.value]) AS defaultUpdate,\n head([x IN defaultPermissions WHERE x.type = 'delete' | x.value]) AS defaultDelete,\n rolePerms\n WITH m,\n [defaultCreate] + [x IN rolePerms WHERE x.type = 'create' | x.value] AS createValues,\n [defaultRead] + [x IN rolePerms WHERE x.type = 'read' | x.value] AS readValues,\n [defaultUpdate] + [x IN rolePerms WHERE x.type = 'update' | x.value] AS updateValues,\n [defaultDelete] + [x IN rolePerms WHERE x.type = 'delete' | x.value] AS deleteValues\n WITH m,\n CASE\n WHEN any(x IN createValues WHERE x = true) THEN true\n WHEN any(x IN createValues WHERE x IS NOT NULL AND x <> false AND x <> true)\n THEN head([x IN createValues WHERE x IS NOT NULL AND x <> false AND x <> true])\n ELSE coalesce(head(createValues), false)\n END AS effectiveCreate,\n CASE\n WHEN any(x IN readValues WHERE x = true) THEN true\n WHEN any(x IN readValues WHERE x IS NOT NULL AND x <> false AND x <> true)\n THEN head([x IN readValues WHERE x IS NOT NULL AND x <> false AND x <> true])\n ELSE coalesce(head(readValues), false)\n END AS effectiveRead,\n CASE\n WHEN any(x IN updateValues WHERE x = true) THEN true\n WHEN any(x IN updateValues WHERE x IS NOT NULL AND x <> false AND x <> true)\n THEN head([x IN updateValues WHERE x IS NOT NULL AND x <> false AND x <> true])\n ELSE coalesce(head(updateValues), false)\n END AS effectiveUpdate,\n CASE\n WHEN any(x IN deleteValues WHERE x = true) THEN true\n WHEN any(x IN deleteValues WHERE x IS NOT NULL AND x <> false AND x <> true)\n THEN head([x IN deleteValues WHERE x IS NOT NULL AND x <> false AND x <> true])\n ELSE coalesce(head(deleteValues), false)\n END AS effectiveDelete\n WITH m, apoc.convert.toJson([\n { type: \"create\", value: effectiveCreate },\n { type: \"read\", value: effectiveRead },\n { type: \"update\", value: effectiveUpdate },\n { type: \"delete\", value: effectiveDelete }\n ]) AS newPermissions\n CALL apoc.create.vNode(\n labels(m),\n apoc.map.merge(properties(m), { permissions: newPermissions })\n ) YIELD node AS module\n\n RETURN module\n\n";
4
4
  //# sourceMappingURL=feature.module.query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature.module.query.d.ts","sourceRoot":"","sources":["../../../../src/foundations/module/queries/feature.module.query.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,+BAA+B,y0FAsD3C,CAAC;AAGF,eAAO,MAAM,kBAAkB,8mGAQ9B,CAAC;AAGF,eAAO,MAAM,gBAAgB,08FAI5B,CAAC"}
1
+ {"version":3,"file":"feature.module.query.d.ts","sourceRoot":"","sources":["../../../../src/foundations/module/queries/feature.module.query.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,+BAA+B,y0FAsD3C,CAAC;AAMF,eAAO,MAAM,kBAAkB,owGAU9B,CAAC;AAIF,eAAO,MAAM,gBAAgB,mjGAM5B,CAAC"}
@@ -59,8 +59,13 @@ exports.modulePermissionResolutionQuery = `
59
59
  RETURN module
60
60
  `;
61
61
  // For regular users: modules via Company → Features → Modules
62
+ // The role read is the membershipRoleMatch expansion bound to the `company` alias the
63
+ // caller already binds (this file exports plain strings, so the helper cannot be used
64
+ // verbatim — see foundations/membership/queries/membership.query.ts).
62
65
  exports.featureModuleQuery = `
63
- OPTIONAL MATCH (user)-[:MEMBER_OF]->(role:Role)
66
+ OPTIONAL MATCH (user)-[:HAS_MEMBERSHIP]->(fm_ms:Membership)
67
+ WHERE (fm_ms)-[:IN_COMPANY]->(company) OR NOT (fm_ms)-[:IN_COMPANY]->(:Company)
68
+ OPTIONAL MATCH (fm_ms)-[:HAS_ROLE]->(role:Role)
64
69
  OPTIONAL MATCH (feature:Feature)
65
70
  WHERE exists((company)-[:HAS_FEATURE]->(feature))
66
71
  OR feature.isCore = true
@@ -68,9 +73,12 @@ exports.featureModuleQuery = `
68
73
  OPTIONAL MATCH (role)-[perm:HAS_PERMISSIONS]->(m)
69
74
  ${exports.modulePermissionResolutionQuery}
70
75
  `;
71
- // For Administrator users: modules via Role → HAS_PERMISSIONS → Module
76
+ // For Administrator users: modules via the PLATFORM membership (no IN_COMPANY edge)
77
+ // → Role → HAS_PERMISSIONS → Module
72
78
  exports.adminModuleQuery = `
73
- MATCH (user:User {id: $searchValue})-[:MEMBER_OF]->(role:Role)
79
+ MATCH (user:User {id: $searchValue})-[:HAS_MEMBERSHIP]->(am_ms:Membership)
80
+ WHERE NOT (am_ms)-[:IN_COMPANY]->(:Company)
81
+ MATCH (am_ms)-[:HAS_ROLE]->(role:Role)
74
82
  MATCH (role)-[perm:HAS_PERMISSIONS]->(m:Module)
75
83
  ${exports.modulePermissionResolutionQuery}
76
84
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"feature.module.query.js","sourceRoot":"","sources":["../../../../src/foundations/module/queries/feature.module.query.ts"],"names":[],"mappings":";;;AAAA,mFAAmF;AACnF,wEAAwE;AAC3D,QAAA,+BAA+B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsD9C,CAAC;AAEF,8DAA8D;AACjD,QAAA,kBAAkB,GAAG;;;;;;;MAO5B,uCAA+B;CACpC,CAAC;AAEF,uEAAuE;AAC1D,QAAA,gBAAgB,GAAG;;;MAG1B,uCAA+B;CACpC,CAAC"}
1
+ {"version":3,"file":"feature.module.query.js","sourceRoot":"","sources":["../../../../src/foundations/module/queries/feature.module.query.ts"],"names":[],"mappings":";;;AAAA,mFAAmF;AACnF,wEAAwE;AAC3D,QAAA,+BAA+B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsD9C,CAAC;AAEF,8DAA8D;AAC9D,sFAAsF;AACtF,sFAAsF;AACtF,sEAAsE;AACzD,QAAA,kBAAkB,GAAG;;;;;;;;;MAS5B,uCAA+B;CACpC,CAAC;AAEF,oFAAoF;AACpF,oCAAoC;AACvB,QAAA,gBAAgB,GAAG;;;;;MAK1B,uCAA+B;CACpC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"role.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/role/repositories/role.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2DAA2D,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAkB,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAEhE,qBACa,cAAe,YAAW,YAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,YAAY;IAE1C,YAAY;IAMZ,eAAe,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBxE,UAAU,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAenD,QAAQ,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAenD,IAAI,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,sBAAsB,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAuBhF,WAAW,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,sBAAsB,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IA0BvG,aAAa,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,sBAAsB,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IA2BzG,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBjF,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBjF,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAaxD"}
1
+ {"version":3,"file":"role.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/role/repositories/role.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2DAA2D,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAkB,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAEhE,qBACa,cAAe,YAAW,YAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,YAAY;IAE1C,YAAY;IAMZ,eAAe,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBxE,UAAU,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAenD,QAAQ,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAenD,IAAI,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,sBAAsB,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAuBhF,WAAW,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,sBAAsB,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IA+BvG,aAAa,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,sBAAsB,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAiCzG,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBjF,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBjF,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAaxD"}
@@ -87,11 +87,16 @@ let RoleRepository = class RoleRepository {
87
87
  };
88
88
  query.query += `
89
89
  MATCH (user:User {id: $userId})-[:BELONGS_TO]->(company)
90
- MATCH (user)-[:MEMBER_OF]->(role:Role)
90
+ // Required (MATCH) variant of membershipRoleMatch bound to the company alias
91
+ // already matched above — see membership.query.ts. Company roles + platform roles.
92
+ MATCH (user)-[:HAS_MEMBERSHIP]->(role_ms:Membership)
93
+ WHERE (role_ms)-[:IN_COMPANY]->(company)
94
+ OR NOT (role_ms)-[:IN_COMPANY]->(:Company)
95
+ MATCH (role_ms)-[:HAS_ROLE]->(role:Role)
91
96
  WHERE role.id <> $administratorsId
92
97
  ${params.term ? "AND toLower(role.name) CONTAINS toLower($term)" : ""}
93
-
94
- WITH role
98
+
99
+ WITH DISTINCT role
95
100
  ORDER BY role.name ASC
96
101
  {CURSOR}
97
102
 
@@ -110,7 +115,13 @@ let RoleRepository = class RoleRepository {
110
115
  query.query += `
111
116
  MATCH (user:User {id: $userId})-[:BELONGS_TO]->(company)
112
117
  MATCH (role:Role)
113
- WHERE NOT (role)<-[:MEMBER_OF]-(user)
118
+ // Negated membership read (see membership.query.ts): the role must not be held
119
+ // through the company membership NOR through the platform membership.
120
+ WHERE NOT EXISTS {
121
+ MATCH (user)-[:HAS_MEMBERSHIP]->(nu_ms:Membership)-[:HAS_ROLE]->(role)
122
+ WHERE (nu_ms)-[:IN_COMPANY]->(company)
123
+ OR NOT (nu_ms)-[:IN_COMPANY]->(:Company)
124
+ }
114
125
  ${params.term ? "AND toLower(role.name) CONTAINS toLower($term)" : ""}
115
126
  AND role.id <> $administratorsId
116
127
 
@@ -1 +1 @@
1
- {"version":3,"file":"role.repository.js","sourceRoot":"","sources":["../../../../src/foundations/role/repositories/role.repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"role.repository.js","sourceRoot":"","sources":["../../../../src/foundations/role/repositories/role.repository.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../../src/foundations/user/entities/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAmC,MAAM,iBAAiB,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAE9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAElE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAKhD;;GAEG;AACH,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,eAAe,CAAC,EAAE,IAAI,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,IAAI,CAAC;IAE1B,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;EA8DzB,CAAC;AAGH,MAAM,MAAM,kBAAkB,GAAG,OAAO,cAAc,CAAC;AAGvD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;EAA+C,CAAC;AAC5E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;EAAkD,CAAC;AAClF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;EAAgD,CAAC"}
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../../src/foundations/user/entities/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAmC,MAAM,iBAAiB,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAE9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAElE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAKhD;;GAEG;AACH,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,eAAe,CAAC,EAAE,IAAI,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,IAAI,CAAC;IAE1B,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;EAmEzB,CAAC;AAGH,MAAM,MAAM,kBAAkB,GAAG,OAAO,cAAc,CAAC;AAGvD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;EAA+C,CAAC;AAC5E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;EAAkD,CAAC;AAClF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;EAAgD,CAAC"}
@@ -52,10 +52,15 @@ exports.UserDescriptor = (0, common_1.defineEntity)()({
52
52
  },
53
53
  // Relationship definitions
54
54
  relationships: {
55
+ // Serialisation-only: roles are hydrated through the Membership path
56
+ // (see foundations/membership/queries/membership.query.ts) — no single-hop
57
+ // (user)-[:HAS_MEMBERSHIP]->(role) edge exists. The serialiser maps by key +
58
+ // model, and no generic descriptor-driven writer touches this relationship
59
+ // (UserRepository/UserService do not extend AbstractRepository/AbstractService).
55
60
  role: {
56
61
  model: role_meta_1.roleMeta,
57
62
  direction: "out",
58
- relationship: "MEMBER_OF",
63
+ relationship: "HAS_MEMBERSHIP",
59
64
  cardinality: "many",
60
65
  dtoKey: "roles",
61
66
  },
@@ -1 +1 @@
1
- {"version":3,"file":"user.js","sourceRoot":"","sources":["../../../../src/foundations/user/entities/user.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../../../src/foundations/user/entities/user.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ export declare class UserRepository implements OnModuleInit {
12
12
  onModuleInit(): Promise<void>;
13
13
  makeCompanyAdmin(params: {
14
14
  userId: string;
15
+ companyId: string;
15
16
  }): Promise<void>;
16
17
  findOneForAdmin(params: {
17
18
  userId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"user.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/user/repositories/user.repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/user/repositories/user.repository.ts"],"names":[],"mappings":"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"}