@multitenantkit/domain 0.1.1 → 0.1.2

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.
@@ -11,9 +11,10 @@ import { BaseUseCase } from '../../../shared/use-case';
11
11
  * Generic support for custom fields:
12
12
  * @template TOrganizationCustomFields - Custom fields for OrganizationRepository (for consistency)
13
13
  */
14
- export declare class AddOrganizationMember<TOrganizationCustomFields = {}, TUserCustomFields = {}, TOrganizationMembershipCustomFields = {}> extends BaseUseCase<AddOrganizationMemberInput, AddOrganizationMemberOutput, DomainError, TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields> implements IAddOrganizationMember {
14
+ export declare class AddOrganizationMember<TOrganizationCustomFields = {}, TUserCustomFields = {}, TOrganizationMembershipCustomFields = {}> extends BaseUseCase<AddOrganizationMemberInput & TOrganizationMembershipCustomFields, AddOrganizationMemberOutput, DomainError, TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields> implements IAddOrganizationMember {
15
+ private readonly membershipCustomSchema?;
15
16
  constructor(adapters: Adapters<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>, toolkitOptions?: ToolkitOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>);
16
17
  protected authorize(input: AddOrganizationMemberInput, _context: OperationContext): Promise<Result<void, DomainError>>;
17
- protected executeBusinessLogic(input: AddOrganizationMemberInput, context: OperationContext): Promise<Result<AddOrganizationMemberOutput, DomainError>>;
18
+ protected executeBusinessLogic(input: AddOrganizationMemberInput & TOrganizationMembershipCustomFields, context: OperationContext): Promise<Result<AddOrganizationMemberOutput, DomainError>>;
18
19
  }
19
20
  //# sourceMappingURL=AddOrganizationMember.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AddOrganizationMember.d.ts","sourceRoot":"","sources":["../../../../src/organization-memberships/use-cases/add-organization-member/AddOrganizationMember.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,KAAK,EACR,0BAA0B,EAC1B,2BAA2B,EAC3B,sBAAsB,EACzB,MAAM,2DAA2D,CAAC;AAMnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAChG,OAAO,EAEH,KAAK,WAAW,EAInB,MAAM,sDAAsD,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;;;;;GAMG;AACH,qBAAa,qBAAqB,CAE1B,yBAAyB,GAAG,EAAE,EAE9B,iBAAiB,GAAG,EAAE,EAEtB,mCAAmC,GAAG,EAAE,CAE5C,SAAQ,WAAW,CACf,0BAA0B,EAC1B,2BAA2B,EAC3B,WAAW,EACX,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CAEvC,YAAW,sBAAsB;gBAG7B,QAAQ,EAAE,QAAQ,CACd,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,EACD,cAAc,CAAC,EAAE,cAAc,CAC3B,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC;cAYW,SAAS,CACrB,KAAK,EAAE,0BAA0B,EACjC,QAAQ,EAAE,gBAAgB,GAC3B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;cAqDrB,oBAAoB,CAChC,KAAK,EAAE,0BAA0B,EACjC,OAAO,EAAE,gBAAgB,GAC1B,OAAO,CAAC,MAAM,CAAC,2BAA2B,EAAE,WAAW,CAAC,CAAC;CAsG/D"}
1
+ {"version":3,"file":"AddOrganizationMember.d.ts","sourceRoot":"","sources":["../../../../src/organization-memberships/use-cases/add-organization-member/AddOrganizationMember.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,KAAK,EACR,0BAA0B,EAC1B,2BAA2B,EAC3B,sBAAsB,EACzB,MAAM,2DAA2D,CAAC;AAOnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAChG,OAAO,EAEH,KAAK,WAAW,EAInB,MAAM,sDAAsD,CAAC;AAE9D,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;;;;;GAMG;AACH,qBAAa,qBAAqB,CAE1B,yBAAyB,GAAG,EAAE,EAE9B,iBAAiB,GAAG,EAAE,EAEtB,mCAAmC,GAAG,EAAE,CAE5C,SAAQ,WAAW,CACf,0BAA0B,GAAG,mCAAmC,EAChE,2BAA2B,EAC3B,WAAW,EACX,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CAEvC,YAAW,sBAAsB;IAEjC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAmB;gBAGvD,QAAQ,EAAE,QAAQ,CACd,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,EACD,cAAc,CAAC,EAAE,cAAc,CAC3B,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC;cAyBW,SAAS,CACrB,KAAK,EAAE,0BAA0B,EACjC,QAAQ,EAAE,gBAAgB,GAC3B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;cAqDrB,oBAAoB,CAChC,KAAK,EAAE,0BAA0B,GAAG,mCAAmC,EACvE,OAAO,EAAE,gBAAgB,GAC1B,OAAO,CAAC,MAAM,CAAC,2BAA2B,EAAE,WAAW,CAAC,CAAC;CAwI/D"}
@@ -1,4 +1,4 @@
1
- import { AddOrganizationMemberInputSchema, AddOrganizationMemberOutputSchema } from '@multitenantkit/domain-contracts/organization-memberships';
1
+ import { AddOrganizationMemberInputSchema, AddOrganizationMemberOutputSchema, OrganizationMembershipSchema } from '@multitenantkit/domain-contracts/organization-memberships';
2
2
  import { ConflictError, NotFoundError, UnauthorizedError, ValidationError } from '@multitenantkit/domain-contracts/shared/errors/index';
3
3
  import { Result } from '../../../shared/result/Result';
4
4
  import { BaseUseCase } from '../../../shared/use-case';
@@ -10,8 +10,17 @@ import { BaseUseCase } from '../../../shared/use-case';
10
10
  * @template TOrganizationCustomFields - Custom fields for OrganizationRepository (for consistency)
11
11
  */
12
12
  export class AddOrganizationMember extends BaseUseCase {
13
+ membershipCustomSchema;
13
14
  constructor(adapters, toolkitOptions) {
14
- super('organizationMembership-addOrganizationMember', adapters, toolkitOptions, AddOrganizationMemberInputSchema, AddOrganizationMemberOutputSchema, 'Failed to add organization member');
15
+ // Extract organization membership custom schema from toolkit options
16
+ const membershipCustomSchema = toolkitOptions?.organizationMemberships?.customFields
17
+ ?.customSchema;
18
+ // Build input schema with membership custom fields if provided
19
+ const inputSchema = (membershipCustomSchema
20
+ ? AddOrganizationMemberInputSchema.and(membershipCustomSchema.partial())
21
+ : AddOrganizationMemberInputSchema);
22
+ super('organizationMembership-addOrganizationMember', adapters, toolkitOptions, inputSchema, AddOrganizationMemberOutputSchema, 'Failed to add organization member');
23
+ this.membershipCustomSchema = membershipCustomSchema;
15
24
  }
16
25
  async authorize(input, _context) {
17
26
  // Ensure organization exists for permission checks
@@ -44,17 +53,20 @@ export class AddOrganizationMember extends BaseUseCase {
44
53
  return Result.ok(undefined);
45
54
  }
46
55
  async executeBusinessLogic(input, context) {
47
- // 1. Validate target user exists
48
- const targetUser = await this.adapters.persistence.userRepository.findByUsername(input.username);
56
+ // 1. Extract custom fields from input
57
+ const { principalExternalId, organizationId, username, roleCode, ...customFields } = input;
58
+ const baseInput = { principalExternalId, organizationId, username, roleCode };
59
+ // 2. Validate target user exists
60
+ const targetUser = await this.adapters.persistence.userRepository.findByUsername(baseInput.username);
49
61
  const now = this.adapters.system.clock.now();
50
62
  let existingMembership = null;
51
63
  // If user doesn't exist, just create the membership without user id
52
64
  if (targetUser) {
53
- // 2. Check if user already has a membership
54
- const existingMembershipDB = await this.adapters.persistence.organizationMembershipRepository.findByUserIdAndOrganizationId(targetUser.id, input.organizationId);
65
+ // 3. Check if user already has a membership
66
+ const existingMembershipDB = await this.adapters.persistence.organizationMembershipRepository.findByUserIdAndOrganizationId(targetUser.id, baseInput.organizationId);
55
67
  existingMembership = existingMembershipDB;
56
68
  if (existingMembership && !existingMembership.leftAt && !existingMembership.deletedAt) {
57
- return Result.fail(new ConflictError('OrganizationMembership', `${targetUser.id}:${input.organizationId}`, {
69
+ return Result.fail(new ConflictError('OrganizationMembership', `${targetUser.id}:${baseInput.organizationId}`, {
58
70
  reason: 'User is already a member of this organization'
59
71
  }));
60
72
  }
@@ -62,7 +74,7 @@ export class AddOrganizationMember extends BaseUseCase {
62
74
  let membership;
63
75
  if (existingMembership && !!existingMembership.leftAt && !existingMembership.deletedAt) {
64
76
  // 4a. Reactivate existing membership that was left
65
- const reactivatedMembership = {
77
+ const reactivatedMembershipBase = {
66
78
  ...existingMembership,
67
79
  invitedAt: now,
68
80
  joinedAt: undefined,
@@ -70,21 +82,26 @@ export class AddOrganizationMember extends BaseUseCase {
70
82
  deletedAt: undefined,
71
83
  updatedAt: now
72
84
  };
85
+ // Merge base with custom fields
86
+ const reactivatedMembership = {
87
+ ...reactivatedMembershipBase,
88
+ ...customFields
89
+ };
73
90
  // Then update the role if it's different from current role
74
91
  membership =
75
- reactivatedMembership.roleCode !== input.roleCode
76
- ? { ...reactivatedMembership, roleCode: input.roleCode, updatedAt: now }
92
+ reactivatedMembership.roleCode !== baseInput.roleCode
93
+ ? { ...reactivatedMembership, roleCode: baseInput.roleCode, updatedAt: now }
77
94
  : reactivatedMembership;
78
95
  }
79
96
  else {
80
- // 4b. Create new membership
97
+ // 4b. Create new membership with custom fields
81
98
  const membershipId = this.adapters.system.uuid.generate();
82
- membership = {
99
+ const membershipBase = {
83
100
  id: membershipId,
84
101
  userId: targetUser?.id,
85
- username: input.username,
86
- organizationId: input.organizationId,
87
- roleCode: input.roleCode,
102
+ username: baseInput.username,
103
+ organizationId: baseInput.organizationId,
104
+ roleCode: baseInput.roleCode,
88
105
  invitedAt: now,
89
106
  joinedAt: undefined,
90
107
  leftAt: undefined,
@@ -92,11 +109,25 @@ export class AddOrganizationMember extends BaseUseCase {
92
109
  createdAt: now,
93
110
  updatedAt: now
94
111
  };
112
+ // Merge base membership with custom fields
113
+ membership = {
114
+ ...membershipBase,
115
+ ...customFields
116
+ };
117
+ }
118
+ // 5. Validate the membership data (base + custom) if custom schema exists
119
+ if (this.membershipCustomSchema) {
120
+ const membershipSchema = OrganizationMembershipSchema.and(this.membershipCustomSchema);
121
+ const membershipValidation = membershipSchema.safeParse(membership);
122
+ if (!membershipValidation.success) {
123
+ const firstError = membershipValidation.error.errors[0];
124
+ return Result.fail(new ValidationError(`Membership validation failed: ${firstError.message}`, firstError.path.join('.')));
125
+ }
95
126
  }
96
- // 5. Persist the entity (save or update) using Unit of Work (transaction) with audit context
127
+ // 6. Persist the entity (save or update) using Unit of Work (transaction) with audit context
97
128
  const auditContext = {
98
129
  ...context,
99
- organizationId: input.organizationId,
130
+ organizationId: baseInput.organizationId,
100
131
  auditAction: 'ADD_ORGANIZATION_MEMBER'
101
132
  };
102
133
  try {
@@ -116,7 +147,7 @@ export class AddOrganizationMember extends BaseUseCase {
116
147
  originalError: error
117
148
  }));
118
149
  }
119
- // 6. KEY PATTERN: Spread + Parse to guarantee contract
150
+ // 7. KEY PATTERN: Spread + Parse to guarantee contract
120
151
  const output = AddOrganizationMemberOutputSchema.parse({
121
152
  ...membership
122
153
  });
@@ -1 +1 @@
1
- {"version":3,"file":"AddOrganizationMember.js","sourceRoot":"","sources":["../../../../src/organization-memberships/use-cases/add-organization-member/AddOrganizationMember.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,gCAAgC,EAChC,iCAAiC,EAEpC,MAAM,2DAA2D,CAAC;AAEnE,OAAO,EACH,aAAa,EAEb,aAAa,EACb,iBAAiB,EACjB,eAAe,EAClB,MAAM,sDAAsD,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,OAAO,qBAQT,SAAQ,WAOP;IAGD,YACI,QAIC,EACD,cAIC;QAED,KAAK,CACD,8CAA8C,EAC9C,QAAQ,EACR,cAAc,EACd,gCAAgC,EAChC,iCAAkG,EAClG,mCAAmC,CACtC,CAAC;IACN,CAAC;IAES,KAAK,CAAC,SAAS,CACrB,KAAiC,EACjC,QAA0B;QAE1B,mDAAmD;QACnD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,sBAAsB,CAAC,QAAQ,CAChF,KAAK,CAAC,cAAc,CACvB,CAAC;QACF,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,cAAc,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;QAChF,CAAC;QAED,kFAAkF;QAClF,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC,IAAI,CACd,IAAI,eAAe,CACf,gDAAgD,EAChD,gBAAgB,CACnB,CACJ,CAAC;QACN,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAElF,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,YAAY,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC;QAE9C,+BAA+B;QAC/B,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,KAAK,YAAY,CAAC,EAAE,CAAC;QAE7D,sDAAsD;QACtD,MAAM,eAAe,GACjB,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,gCAAgC,CAAC,6BAA6B,CAC1F,YAAY,CAAC,EAAE,EACf,KAAK,CAAC,cAAc,CACvB,CAAC;QACN,MAAM,OAAO,GACT,CAAC,CAAC,eAAe;YACjB,eAAe,CAAC,QAAQ,KAAK,OAAO;YACpC,CAAC,CAAC,eAAe,CAAC,QAAQ;YAC1B,CAAC,eAAe,CAAC,MAAM;YACvB,CAAC,eAAe,CAAC,SAAS,CAAC;QAC/B,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC;QAE1D,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC,EAAE,CAAC;YACvC,OAAO,MAAM,CAAC,IAAI,CACd,IAAI,iBAAiB,CAAC,qDAAqD,CAAC,CAC/E,CAAC;QACN,CAAC;QAED,OAAO,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IAES,KAAK,CAAC,oBAAoB,CAChC,KAAiC,EACjC,OAAyB;QAEzB,iCAAiC;QACjC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC,cAAc,CAC5E,KAAK,CAAC,QAAQ,CACjB,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAE7C,IAAI,kBAAkB,GAAkC,IAAI,CAAC;QAC7D,oEAAoE;QACpE,IAAI,UAAU,EAAE,CAAC;YACb,4CAA4C;YAC5C,MAAM,oBAAoB,GACtB,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,gCAAgC,CAAC,6BAA6B,CAC1F,UAAU,CAAC,EAAE,EACb,KAAK,CAAC,cAAc,CACvB,CAAC;YACN,kBAAkB,GAAG,oBAAoB,CAAC;YAE1C,IAAI,kBAAkB,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC;gBACpF,OAAO,MAAM,CAAC,IAAI,CACd,IAAI,aAAa,CACb,wBAAwB,EACxB,GAAG,UAAU,CAAC,EAAE,IAAI,KAAK,CAAC,cAAc,EAAE,EAC1C;oBACI,MAAM,EAAE,+CAA+C;iBAC1D,CACJ,CACJ,CAAC;YACN,CAAC;QACL,CAAC;QAED,IAAI,UAAkC,CAAC;QAEvC,IAAI,kBAAkB,IAAI,CAAC,CAAC,kBAAkB,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC;YACrF,mDAAmD;YACnD,MAAM,qBAAqB,GAA2B;gBAClD,GAAG,kBAAkB;gBACrB,SAAS,EAAE,GAAG;gBACd,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,SAAS;gBACpB,SAAS,EAAE,GAAG;aACS,CAAC;YAE5B,2DAA2D;YAC3D,UAAU;gBACN,qBAAqB,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;oBAC7C,CAAC,CAAC,EAAE,GAAG,qBAAqB,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE;oBACxE,CAAC,CAAC,qBAAqB,CAAC;QACpC,CAAC;aAAM,CAAC;YACJ,4BAA4B;YAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1D,UAAU,GAAG;gBACT,EAAE,EAAE,YAAY;gBAChB,MAAM,EAAE,UAAU,EAAE,EAAE;gBACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,SAAS,EAAE,GAAG;gBACd,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,SAAS;gBACpB,SAAS,EAAE,GAAG;gBACd,SAAS,EAAE,GAAG;aACS,CAAC;QAChC,CAAC;QAED,6FAA6F;QAC7F,MAAM,YAAY,GAAqB;YACnC,GAAG,OAAO;YACV,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,WAAW,EAAE,yBAAyB;SACzC,CAAC;QAEF,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC5D,IACI,kBAAkB;oBAClB,CAAC,CAAC,kBAAkB,CAAC,MAAM;oBAC3B,CAAC,kBAAkB,CAAC,SAAS,EAC/B,CAAC;oBACC,MAAM,KAAK,CAAC,uBAAuB,CAAC,MAAM,CAAC,UAAiB,EAAE,YAAY,CAAC,CAAC;gBAChF,CAAC;qBAAM,CAAC;oBACJ,MAAM,KAAK,CAAC,uBAAuB,CAAC,MAAM,CAAC,UAAiB,EAAE,YAAY,CAAC,CAAC;gBAChF,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,MAAM,CAAC,IAAI,CACd,IAAI,eAAe,CAAC,wCAAwC,EAAE,SAAS,EAAE;gBACrE,aAAa,EAAE,KAAK;aACvB,CAAC,CACL,CAAC;QACN,CAAC;QAED,uDAAuD;QACvD,MAAM,MAAM,GAAG,iCAAiC,CAAC,KAAK,CAAC;YACnD,GAAG,UAAU;SAChB,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;CACJ"}
1
+ {"version":3,"file":"AddOrganizationMember.js","sourceRoot":"","sources":["../../../../src/organization-memberships/use-cases/add-organization-member/AddOrganizationMember.ts"],"names":[],"mappings":"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"}
@@ -11,9 +11,14 @@ import { BaseUseCase } from '../../../shared/use-case';
11
11
  * Generic support for custom fields:
12
12
  * @template TOrganizationCustomFields - Custom fields added to Organization
13
13
  */
14
- export declare class CreateOrganization<TUserCustomFields = {}, TOrganizationCustomFields = {}, TOrganizationMembershipCustomFields = {}> extends BaseUseCase<CreateOrganizationInput & TOrganizationCustomFields, CreateOrganizationOutput, DomainError, TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields> implements ICreateOrganization {
14
+ export declare class CreateOrganization<TUserCustomFields = {}, TOrganizationCustomFields = {}, TOrganizationMembershipCustomFields = {}> extends BaseUseCase<CreateOrganizationInput & TOrganizationCustomFields & {
15
+ ownerMembershipCustomFields?: TOrganizationMembershipCustomFields;
16
+ }, CreateOrganizationOutput, DomainError, TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields> implements ICreateOrganization {
15
17
  private readonly customSchema?;
18
+ private readonly membershipCustomSchema?;
16
19
  constructor(adapters: Adapters<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>, toolkitOptions?: ToolkitOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>);
17
- protected executeBusinessLogic(input: CreateOrganizationInput & TOrganizationCustomFields, context: OperationContext): Promise<Result<CreateOrganizationOutput, DomainError>>;
20
+ protected executeBusinessLogic(input: CreateOrganizationInput & TOrganizationCustomFields & {
21
+ ownerMembershipCustomFields?: TOrganizationMembershipCustomFields;
22
+ }, context: OperationContext): Promise<Result<CreateOrganizationOutput, DomainError>>;
18
23
  }
19
24
  //# sourceMappingURL=CreateOrganization.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreateOrganization.d.ts","sourceRoot":"","sources":["../../../../src/organizations/use-cases/create-organization/CreateOrganization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAEjE,OAAO,KAAK,EACR,uBAAuB,EACvB,wBAAwB,EACxB,mBAAmB,EAEtB,MAAM,gDAAgD,CAAC;AAKxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAChG,OAAO,EACH,KAAK,WAAW,EAEnB,MAAM,sDAAsD,CAAC;AAE9D,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;;;;;GAMG;AACH,qBAAa,kBAAkB,CAEvB,iBAAiB,GAAG,EAAE,EAEtB,yBAAyB,GAAG,EAAE,EAE9B,mCAAmC,GAAG,EAAE,CAE5C,SAAQ,WAAW,CACf,uBAAuB,GAAG,yBAAyB,EACnD,wBAAwB,EACxB,WAAW,EACX,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CAEvC,YAAW,mBAAmB;IAE9B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAmB;gBAG7C,QAAQ,EAAE,QAAQ,CACd,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,EACD,cAAc,CAAC,EAAE,cAAc,CAC3B,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC;cA+BW,oBAAoB,CAChC,KAAK,EAAE,uBAAuB,GAAG,yBAAyB,EAC1D,OAAO,EAAE,gBAAgB,GAC1B,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,WAAW,CAAC,CAAC;CAkF5D"}
1
+ {"version":3,"file":"CreateOrganization.d.ts","sourceRoot":"","sources":["../../../../src/organizations/use-cases/create-organization/CreateOrganization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAEjE,OAAO,KAAK,EACR,uBAAuB,EACvB,wBAAwB,EACxB,mBAAmB,EAEtB,MAAM,gDAAgD,CAAC;AAKxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAChG,OAAO,EACH,KAAK,WAAW,EAEnB,MAAM,sDAAsD,CAAC;AAE9D,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;;;;;GAMG;AACH,qBAAa,kBAAkB,CAEvB,iBAAiB,GAAG,EAAE,EAEtB,yBAAyB,GAAG,EAAE,EAE9B,mCAAmC,GAAG,EAAE,CAE5C,SAAQ,WAAW,CACf,uBAAuB,GACnB,yBAAyB,GAAG;IACxB,2BAA2B,CAAC,EAAE,mCAAmC,CAAC;CACrE,EACL,wBAAwB,EACxB,WAAW,EACX,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CAEvC,YAAW,mBAAmB;IAE9B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAmB;IACjD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAmB;gBAGvD,QAAQ,EAAE,QAAQ,CACd,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,EACD,cAAc,CAAC,EAAE,cAAc,CAC3B,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC;cAmDW,oBAAoB,CAChC,KAAK,EAAE,uBAAuB,GAC1B,yBAAyB,GAAG;QACxB,2BAA2B,CAAC,EAAE,mCAAmC,CAAC;KACrE,EACL,OAAO,EAAE,gBAAgB,GAC1B,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,WAAW,CAAC,CAAC;CA4H5D"}
@@ -1,5 +1,6 @@
1
1
  import { CreateOrganizationInputSchema, CreateOrganizationOutputSchema } from '@multitenantkit/domain-contracts/organizations';
2
2
  import { ValidationError } from '@multitenantkit/domain-contracts/shared/errors/index';
3
+ import { z } from 'zod';
3
4
  import { Result } from '../../../shared/result/Result';
4
5
  import { BaseUseCase } from '../../../shared/use-case';
5
6
  /**
@@ -11,19 +12,31 @@ import { BaseUseCase } from '../../../shared/use-case';
11
12
  */
12
13
  export class CreateOrganization extends BaseUseCase {
13
14
  customSchema;
15
+ membershipCustomSchema;
14
16
  constructor(adapters, toolkitOptions) {
15
17
  // Extract organization custom schema from toolkit options
16
18
  const customSchema = toolkitOptions?.organizations?.customFields?.customSchema;
17
- // Build input schema with custom fields if provided
18
- const inputSchema = (customSchema
19
- ? CreateOrganizationInputSchema.and(customSchema.partial())
20
- : CreateOrganizationInputSchema);
19
+ // Extract organization membership custom schema from toolkit options
20
+ const membershipCustomSchema = toolkitOptions?.organizationMemberships?.customFields
21
+ ?.customSchema;
22
+ // Build input schema with organization custom fields and optional membership custom fields
23
+ let inputSchema = CreateOrganizationInputSchema;
24
+ if (customSchema) {
25
+ inputSchema = inputSchema.and(customSchema.partial());
26
+ }
27
+ if (membershipCustomSchema) {
28
+ inputSchema = inputSchema.and(z.object({
29
+ ownerMembershipCustomFields: membershipCustomSchema.partial().optional()
30
+ }));
31
+ }
32
+ const finalInputSchema = inputSchema;
21
33
  // Build output schema with custom fields if provided
22
34
  const outputSchema = (customSchema
23
35
  ? CreateOrganizationOutputSchema.merge(customSchema)
24
36
  : CreateOrganizationOutputSchema);
25
- super('organization-createOrganization', adapters, toolkitOptions, inputSchema, outputSchema, 'Failed to create organization');
37
+ super('organization-createOrganization', adapters, toolkitOptions, finalInputSchema, outputSchema, 'Failed to create organization');
26
38
  this.customSchema = customSchema;
39
+ this.membershipCustomSchema = membershipCustomSchema;
27
40
  }
28
41
  async executeBusinessLogic(input, context) {
29
42
  // 1. Business validation - e.g., ensure no conflicting organization constraints
@@ -36,15 +49,17 @@ export class CreateOrganization extends BaseUseCase {
36
49
  // 2. Generate ID and timestamp
37
50
  const organizationId = this.adapters.system.uuid.generate();
38
51
  const now = this.adapters.system.clock.now();
39
- // 3. Create Organization entity
52
+ // 3. Extract membership custom fields from input (if provided)
53
+ const { ownerMembershipCustomFields, ...organizationInput } = input;
54
+ // 4. Create Organization entity
40
55
  const organization = {
41
56
  id: organizationId,
42
- ...input,
57
+ ...organizationInput,
43
58
  ownerUserId: existingUser.id,
44
59
  createdAt: now,
45
60
  updatedAt: now
46
61
  };
47
- // 4. Validate the organization data (base + custom)
62
+ // 5. Validate the organization data (base + custom)
48
63
  const organizationSchema = this.customSchema
49
64
  ? CreateOrganizationOutputSchema.strip().and(this.customSchema.strip())
50
65
  : CreateOrganizationOutputSchema.strip();
@@ -54,7 +69,51 @@ export class CreateOrganization extends BaseUseCase {
54
69
  return Result.fail(new ValidationError(firstError.message, firstError.path.join('.')));
55
70
  }
56
71
  const validatedOrganization = validation.data;
57
- // 5. Persist organization and owner membership using Unit of Work
72
+ // 6. Create owner membership with custom fields
73
+ const ownerMembershipBase = {
74
+ id: this.adapters.system.uuid.generate(),
75
+ organizationId: validatedOrganization.id,
76
+ userId: validatedOrganization.ownerUserId,
77
+ username: existingUser.username,
78
+ roleCode: 'owner',
79
+ invitedAt: undefined,
80
+ joinedAt: now,
81
+ leftAt: undefined,
82
+ deletedAt: undefined,
83
+ createdAt: now,
84
+ updatedAt: now
85
+ };
86
+ // Merge membership base fields with custom fields
87
+ const ownerMembership = {
88
+ ...ownerMembershipBase,
89
+ ...ownerMembershipCustomFields
90
+ };
91
+ // 7. Validate the membership data (base + custom) if custom schema exists
92
+ if (this.membershipCustomSchema) {
93
+ const membershipSchema = this.membershipCustomSchema
94
+ ? z
95
+ .object({
96
+ id: z.string(),
97
+ organizationId: z.string(),
98
+ userId: z.string(),
99
+ username: z.string(),
100
+ roleCode: z.enum(['owner', 'admin', 'member']),
101
+ invitedAt: z.date().optional(),
102
+ joinedAt: z.date().optional(),
103
+ leftAt: z.date().optional(),
104
+ deletedAt: z.date().optional(),
105
+ createdAt: z.date(),
106
+ updatedAt: z.date()
107
+ })
108
+ .and(this.membershipCustomSchema)
109
+ : z.any();
110
+ const membershipValidation = membershipSchema.safeParse(ownerMembership);
111
+ if (!membershipValidation.success) {
112
+ const firstError = membershipValidation.error.errors[0];
113
+ return Result.fail(new ValidationError(`Owner membership validation failed: ${firstError.message}`, `ownerMembershipCustomFields.${firstError.path.join('.')}`));
114
+ }
115
+ }
116
+ // 8. Persist organization and owner membership using Unit of Work
58
117
  const auditContext = {
59
118
  ...context,
60
119
  organizationId: validatedOrganization.id,
@@ -68,19 +127,6 @@ export class CreateOrganization extends BaseUseCase {
68
127
  try {
69
128
  await this.adapters.persistence.uow.transaction(async (repos) => {
70
129
  await repos.organizations.insert(validatedOrganization, auditContext);
71
- const ownerMembership = {
72
- id: this.adapters.system.uuid.generate(),
73
- organizationId: validatedOrganization.id,
74
- userId: validatedOrganization.ownerUserId,
75
- username: existingUser.username,
76
- roleCode: 'owner',
77
- invitedAt: undefined,
78
- joinedAt: now,
79
- leftAt: undefined,
80
- deletedAt: undefined,
81
- createdAt: now,
82
- updatedAt: now
83
- };
84
130
  await repos.organizationMemberships.insert(ownerMembership, membershipAuditContext);
85
131
  });
86
132
  }
@@ -89,7 +135,7 @@ export class CreateOrganization extends BaseUseCase {
89
135
  originalError: error
90
136
  }));
91
137
  }
92
- // 6. Return success; BaseUseCase will parse with output schema
138
+ // 9. Return success; BaseUseCase will parse with output schema
93
139
  return Result.ok({ ...validatedOrganization });
94
140
  }
95
141
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CreateOrganization.js","sourceRoot":"","sources":["../../../../src/organizations/use-cases/create-organization/CreateOrganization.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CreateOrganization.js","sourceRoot":"","sources":["../../../../src/organizations/use-cases/create-organization/CreateOrganization.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@multitenantkit/domain",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "type": "module",
5
5
  "description": "Core domain logic and use cases for MultiTenantKit - Pure business logic layer",
6
6
  "keywords": [