@stamhoofd/models 2.78.4 → 2.79.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 (77) hide show
  1. package/dist/src/factories/GroupFactory.d.ts +4 -0
  2. package/dist/src/factories/GroupFactory.d.ts.map +1 -1
  3. package/dist/src/factories/GroupFactory.js +11 -1
  4. package/dist/src/factories/GroupFactory.js.map +1 -1
  5. package/dist/src/factories/MemberResponsibilityRecordFactory.d.ts +14 -0
  6. package/dist/src/factories/MemberResponsibilityRecordFactory.d.ts.map +1 -0
  7. package/dist/src/factories/MemberResponsibilityRecordFactory.js +34 -0
  8. package/dist/src/factories/MemberResponsibilityRecordFactory.js.map +1 -0
  9. package/dist/src/factories/OrganizationRegistrationPeriodFactory.d.ts +13 -0
  10. package/dist/src/factories/OrganizationRegistrationPeriodFactory.d.ts.map +1 -0
  11. package/dist/src/factories/OrganizationRegistrationPeriodFactory.js +20 -0
  12. package/dist/src/factories/OrganizationRegistrationPeriodFactory.js.map +1 -0
  13. package/dist/src/factories/OrganizationTagFactory.js +1 -1
  14. package/dist/src/factories/OrganizationTagFactory.js.map +1 -1
  15. package/dist/src/factories/PlatformResponsibilityFactory.d.ts +11 -0
  16. package/dist/src/factories/PlatformResponsibilityFactory.d.ts.map +1 -0
  17. package/dist/src/factories/PlatformResponsibilityFactory.js +25 -0
  18. package/dist/src/factories/PlatformResponsibilityFactory.js.map +1 -0
  19. package/dist/src/factories/RegistrationPeriodFactory.d.ts +1 -0
  20. package/dist/src/factories/RegistrationPeriodFactory.d.ts.map +1 -1
  21. package/dist/src/factories/RegistrationPeriodFactory.js +4 -0
  22. package/dist/src/factories/RegistrationPeriodFactory.js.map +1 -1
  23. package/dist/src/factories/index.d.ts +3 -0
  24. package/dist/src/factories/index.d.ts.map +1 -1
  25. package/dist/src/factories/index.js +3 -0
  26. package/dist/src/factories/index.js.map +1 -1
  27. package/dist/src/helpers/EmailBuilder.d.ts +8 -10
  28. package/dist/src/helpers/EmailBuilder.d.ts.map +1 -1
  29. package/dist/src/helpers/EmailBuilder.js +44 -42
  30. package/dist/src/helpers/EmailBuilder.js.map +1 -1
  31. package/dist/src/models/Email.d.ts +9 -2
  32. package/dist/src/models/Email.d.ts.map +1 -1
  33. package/dist/src/models/Email.js +18 -16
  34. package/dist/src/models/Email.js.map +1 -1
  35. package/dist/src/models/Email.test.js +183 -2
  36. package/dist/src/models/Email.test.js.map +1 -1
  37. package/dist/src/models/Member.d.ts +3 -1
  38. package/dist/src/models/Member.d.ts.map +1 -1
  39. package/dist/src/models/Member.js.map +1 -1
  40. package/dist/src/models/Order.d.ts +0 -2
  41. package/dist/src/models/Order.d.ts.map +1 -1
  42. package/dist/src/models/Order.js +0 -48
  43. package/dist/src/models/Order.js.map +1 -1
  44. package/dist/src/models/Organization.d.ts +1 -16
  45. package/dist/src/models/Organization.d.ts.map +1 -1
  46. package/dist/src/models/Organization.js +5 -86
  47. package/dist/src/models/Organization.js.map +1 -1
  48. package/dist/src/models/Platform.d.ts +11 -3
  49. package/dist/src/models/Platform.d.ts.map +1 -1
  50. package/dist/src/models/Platform.js +76 -24
  51. package/dist/src/models/Platform.js.map +1 -1
  52. package/dist/src/models/Platform.test.d.ts +2 -0
  53. package/dist/src/models/Platform.test.d.ts.map +1 -0
  54. package/dist/src/models/Platform.test.js +90 -0
  55. package/dist/src/models/Platform.test.js.map +1 -0
  56. package/dist/src/models/index.d.ts +1 -1
  57. package/dist/src/models/index.d.ts.map +1 -1
  58. package/dist/src/models/index.js +2 -3
  59. package/dist/src/models/index.js.map +1 -1
  60. package/dist/tsconfig.tsbuildinfo +1 -1
  61. package/package.json +4 -4
  62. package/src/factories/GroupFactory.ts +16 -3
  63. package/src/factories/MemberResponsibilityRecordFactory.ts +35 -0
  64. package/src/factories/OrganizationRegistrationPeriodFactory.ts +22 -0
  65. package/src/factories/OrganizationTagFactory.ts +1 -1
  66. package/src/factories/PlatformResponsibilityFactory.ts +25 -0
  67. package/src/factories/RegistrationPeriodFactory.ts +4 -0
  68. package/src/factories/index.ts +3 -0
  69. package/src/helpers/EmailBuilder.ts +54 -50
  70. package/src/models/Email.test.ts +217 -5
  71. package/src/models/Email.ts +22 -20
  72. package/src/models/Member.ts +3 -1
  73. package/src/models/Order.ts +0 -55
  74. package/src/models/Organization.ts +6 -101
  75. package/src/models/Platform.test.ts +107 -0
  76. package/src/models/Platform.ts +86 -25
  77. package/src/models/index.ts +1 -1
@@ -6,6 +6,7 @@ const simple_database_1 = require("@simonbackx/simple-database");
6
6
  const queues_1 = require("@stamhoofd/queues");
7
7
  const sql_1 = require("@stamhoofd/sql");
8
8
  const structures_1 = require("@stamhoofd/structures");
9
+ const utility_1 = require("@stamhoofd/utility");
9
10
  const uuid_1 = require("uuid");
10
11
  const RegistrationPeriod_1 = require("./RegistrationPeriod");
11
12
  class Platform extends sql_1.QueryableModel {
@@ -20,38 +21,37 @@ class Platform extends sql_1.QueryableModel {
20
21
  * Invisible data for the frontend / structs - no matter your auhtorization level
21
22
  */
22
23
  serverConfig = structures_1.PlatformServerConfig.create({});
24
+ static shared = null;
25
+ static sharedPrivateStruct = null;
23
26
  static sharedStruct = null;
24
27
  static async getSharedStruct() {
25
- const struct = await this.getSharedPrivateStruct();
26
- const clone = struct.clone();
27
- clone.privateConfig = null;
28
- clone.setShared();
29
- return clone;
28
+ if (!this.sharedStruct) {
29
+ await this.loadCaches();
30
+ }
31
+ if (!this.sharedStruct || !!this.sharedStruct.privateConfig) {
32
+ throw new Error('[Platform] Failed to load platform shared struct');
33
+ }
34
+ return this.sharedStruct;
30
35
  }
31
36
  async setPreviousPeriodId() {
32
37
  const period = await RegistrationPeriod_1.RegistrationPeriod.getByID(this.periodId);
33
38
  this.previousPeriodId = period?.previousPeriodId ?? null;
34
39
  }
35
40
  static async getSharedPrivateStruct() {
36
- if (this.sharedStruct && this.sharedStruct.privateConfig) {
37
- return this.sharedStruct;
41
+ if (!this.sharedPrivateStruct) {
42
+ await this.loadCaches();
38
43
  }
39
- return await queues_1.QueueHandler.schedule('Platform.getSharedStruct', async () => {
40
- const model = await this.getShared();
41
- const period = await RegistrationPeriod_1.RegistrationPeriod.getByID(model.periodId);
42
- const struct = structures_1.Platform.create({
43
- ...model,
44
- period: period?.getStructure() ?? undefined,
45
- });
46
- this.sharedStruct = struct;
47
- return struct;
48
- });
44
+ if (!this.sharedPrivateStruct || !this.sharedPrivateStruct.privateConfig) {
45
+ throw new Error('[Platform] Failed to load platform shared private struct');
46
+ }
47
+ return this.sharedPrivateStruct;
49
48
  }
50
- static async getShared() {
51
- return queues_1.QueueHandler.schedule('Platform.getShared', async () => {
49
+ static async getForEditing() {
50
+ return queues_1.QueueHandler.schedule('Platform.getModel', async () => {
52
51
  // Build a new one
53
52
  let model = await this.getByID('1');
54
53
  if (!model) {
54
+ console.info('[Platform] Creating new platform');
55
55
  // Create a new platform
56
56
  model = new Platform();
57
57
  model.id = '1';
@@ -61,14 +61,66 @@ class Platform extends sql_1.QueryableModel {
61
61
  return model;
62
62
  });
63
63
  }
64
- static clearCache() {
65
- this.sharedStruct = null;
64
+ static async getShared() {
65
+ return queues_1.QueueHandler.schedule('Platform.getShared', async () => {
66
+ if (this.shared) {
67
+ return this.shared;
68
+ }
69
+ // Build a new one
70
+ const model = await this.getForEditing();
71
+ (0, utility_1.deepFreeze)(model);
72
+ this.shared = model;
73
+ return model;
74
+ });
75
+ }
76
+ static async loadCaches() {
77
+ await queues_1.QueueHandler.schedule('Platform.loadCaches', async () => {
78
+ if (this.sharedPrivateStruct && this.sharedStruct) {
79
+ // Already loaded (possible if multiple calls to loadCaches were made)
80
+ return;
81
+ }
82
+ // Build a new one
83
+ const model = await this.getForEditing();
84
+ await this.setCachesFromModel(model);
85
+ });
86
+ }
87
+ static async setCachesFromModel(model) {
88
+ // Set structure cache
89
+ const period = await RegistrationPeriod_1.RegistrationPeriod.getByID(model.periodId);
90
+ const struct = structures_1.Platform.create({
91
+ ...model,
92
+ period: period?.getStructure() ?? undefined,
93
+ });
94
+ // We clone to avoid the chance of updating the platform model
95
+ this.sharedPrivateStruct = struct.clone();
96
+ const clone = struct.clone();
97
+ clone.privateConfig = null;
98
+ clone.setShared();
99
+ this.sharedStruct = clone;
100
+ }
101
+ static async clearCache() {
102
+ await this.clearCacheWithoutRefresh();
103
+ await this.loadCaches();
104
+ }
105
+ static async clearCacheWithoutRefresh() {
106
+ await queues_1.QueueHandler.schedule('Platform.loadCaches', async () => {
107
+ this.sharedStruct = null;
108
+ this.sharedPrivateStruct = null;
109
+ });
110
+ await queues_1.QueueHandler.schedule('Platform.getShared', async () => {
111
+ this.shared = null;
112
+ });
66
113
  }
67
114
  async save() {
115
+ let update = false;
116
+ if (this.existsInDatabase) {
117
+ update = true;
118
+ }
68
119
  const s = await super.save();
69
- Platform.clearCache();
70
- // Force update cache immediately
71
- await Platform.getSharedStruct();
120
+ if (update) {
121
+ // Force update cache immediately
122
+ await Platform.clearCache();
123
+ }
72
124
  return s;
73
125
  }
74
126
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Platform.js","sourceRoot":"","sources":["../../../src/models/Platform.ts"],"names":[],"mappings":";;;;AAAA,iEAAqD;AACrD,8CAAiD;AACjD,wCAAgD;AAChD,sDAAgI;AAChI,+BAAoC;AACpC,6DAA0D;AAE1D,MAAa,QAAS,SAAQ,oBAAc;IACxC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC;IAO1B,EAAE,CAAU;IAGZ,MAAM,GAAmB,2BAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAGnD,QAAQ,CAAS;IAGjB,gBAAgB,GAAkB,IAAI,CAAC;IAGvC,wBAAwB,GAAkB,IAAI,CAAC;IAG/C,aAAa,GAA0B,kCAAqB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAExE;;OAEG;IAEH,YAAY,GAAyB,iCAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAErE,MAAM,CAAC,YAAY,GAA0B,IAAI,CAAC;IAElD,MAAM,CAAC,KAAK,CAAC,eAAe;QACxB,MAAM,MAAM,GAAmB,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACnE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAC7B,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;QAC3B,KAAK,CAAC,SAAS,EAAE,CAAC;QAElB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,mBAAmB;QACrB,MAAM,MAAM,GAAG,MAAM,uCAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/D,IAAI,CAAC,gBAAgB,GAAG,MAAM,EAAE,gBAAgB,IAAI,IAAI,CAAC;IAC7D,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,sBAAsB;QAC/B,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC,YAAmB,CAAC;QACpC,CAAC;QAED,OAAO,MAAM,qBAAY,CAAC,QAAQ,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,uCAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,qBAAc,CAAC,MAAM,CAAC;gBACjC,GAAG,KAAK;gBACR,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,SAAS;aAC9C,CAAC,CAAC;YACH,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;YAE3B,OAAO,MAAa,CAAC;QACzB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,SAAS;QAClB,OAAO,qBAAY,CAAC,QAAQ,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;YAC1D,kBAAkB;YAClB,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACT,wBAAwB;gBACxB,KAAK,GAAG,IAAI,QAAQ,EAAE,CAAC;gBACvB,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC;gBACf,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,uCAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;YACvB,CAAC;YAED,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,UAAU;QACb,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,IAAI;QACN,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,QAAQ,CAAC,UAAU,EAAE,CAAC;QAEtB,iCAAiC;QACjC,MAAM,QAAQ,CAAC,eAAe,EAAE,CAAC;QAEjC,OAAO,CAAC,CAAC;IACb,CAAC;;AA7FL,4BA8FC;AAtFG;IALC,IAAA,wBAAM,EAAC;QACJ,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK;YAC3C,OAAO,KAAK,IAAI,IAAA,SAAM,GAAE,CAAC;QAC7B,CAAC;KACJ,CAAC;oCACU;AAGZ;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,2BAAc,EAAE,CAAC;wCACC;AAGnD;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;0CACV;AAGjB;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;kDACJ;AAGvC;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;0DACI;AAG/C;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,kCAAqB,EAAE,CAAC;+CACe;AAMxE;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iCAAoB,EAAE,CAAC;8CACa"}
1
+ {"version":3,"file":"Platform.js","sourceRoot":"","sources":["../../../src/models/Platform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Platform.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Platform.test.d.ts","sourceRoot":"","sources":["../../../src/models/Platform.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const structures_1 = require("@stamhoofd/structures");
4
+ const Platform_1 = require("./Platform");
5
+ const simple_database_1 = require("@simonbackx/simple-database");
6
+ describe('Model.Platform', () => {
7
+ describe('Shared caches', () => {
8
+ beforeEach(async () => {
9
+ const platform = await Platform_1.Platform.getByID('1');
10
+ platform.config = structures_1.PlatformConfig.create({});
11
+ await platform.save();
12
+ });
13
+ test('Editable model changes do not propagate', async () => {
14
+ const editable = await Platform_1.Platform.getForEditing();
15
+ editable.config.membershipTypes = [
16
+ structures_1.PlatformMembershipType.create({ id: '1', name: 'Test' }),
17
+ ];
18
+ const shared = (await Platform_1.Platform.getShared());
19
+ expect(shared.config.membershipTypes).toHaveLength(0);
20
+ });
21
+ test('Shared model is immutable', async () => {
22
+ const editable = await Platform_1.Platform.getForEditing();
23
+ editable.config.membershipTypes = [
24
+ structures_1.PlatformMembershipType.create({ id: '1', name: 'Test' }),
25
+ ];
26
+ await editable.save();
27
+ const shared = (await Platform_1.Platform.getShared());
28
+ expect(() => {
29
+ shared.privateConfig.roles = [];
30
+ }).toThrow();
31
+ expect(() => {
32
+ shared.membershipOrganizationId = '2';
33
+ }).toThrow();
34
+ expect(shared.config.membershipTypes).toHaveLength(1);
35
+ expect(() => {
36
+ shared.concat.membershipTypes[0].name = 'Test2';
37
+ }).toThrow();
38
+ });
39
+ test('Saving changes propagates to all shared states', async () => {
40
+ const structBefore = await Platform_1.Platform.getSharedStruct();
41
+ const privateStructBefore = await Platform_1.Platform.getSharedPrivateStruct();
42
+ const sharedModelBefore = await Platform_1.Platform.getShared();
43
+ const editable = await Platform_1.Platform.getForEditing();
44
+ editable.config.membershipTypes = [
45
+ structures_1.PlatformMembershipType.create({ id: '1', name: 'Hey there' }),
46
+ ];
47
+ await editable.save();
48
+ const structAfter = await Platform_1.Platform.getSharedStruct();
49
+ const privateStructAfter = await Platform_1.Platform.getSharedPrivateStruct();
50
+ const sharedModelAfter = await Platform_1.Platform.getShared();
51
+ expect(structAfter.config.membershipTypes[0].name).toEqual('Hey there');
52
+ expect(privateStructAfter.config.membershipTypes[0].name).toEqual('Hey there');
53
+ expect(sharedModelAfter.config.membershipTypes[0].name).toEqual('Hey there');
54
+ // Test before state not altered
55
+ expect(structBefore.config.membershipTypes).toHaveLength(0);
56
+ expect(privateStructBefore.config.membershipTypes).toHaveLength(0);
57
+ expect(sharedModelBefore.config.membershipTypes).toHaveLength(0);
58
+ });
59
+ });
60
+ describe('Creating fresh platform', () => {
61
+ beforeEach(async () => {
62
+ await simple_database_1.Database.delete('DELETE FROM platform');
63
+ await Platform_1.Platform.clearCacheWithoutRefresh();
64
+ if (await Platform_1.Platform.getByID('1')) {
65
+ throw new Error('Platform 1 should not exist');
66
+ }
67
+ });
68
+ test('when requesting getForEditing', async () => {
69
+ const editable = await Platform_1.Platform.getForEditing();
70
+ expect(editable.id).toBe('1');
71
+ expect(await Platform_1.Platform.getByID('1')).toEqual(editable);
72
+ });
73
+ test('when requesting getShared', async () => {
74
+ const shared = await Platform_1.Platform.getShared();
75
+ expect(shared.id).toBe('1');
76
+ expect(await Platform_1.Platform.getByID('1')).toMatchObject(shared);
77
+ });
78
+ test('when requesting getSharedPrivateStruct', async () => {
79
+ const editable = await Platform_1.Platform.getSharedPrivateStruct();
80
+ expect(editable).toBeDefined();
81
+ expect(await Platform_1.Platform.getByID('1')).toBeDefined();
82
+ });
83
+ test('when requesting getSharedStruct', async () => {
84
+ const editable = await Platform_1.Platform.getSharedStruct();
85
+ expect(editable).toBeDefined();
86
+ expect(await Platform_1.Platform.getByID('1')).toBeDefined();
87
+ });
88
+ });
89
+ });
90
+ //# sourceMappingURL=Platform.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Platform.test.js","sourceRoot":"","sources":["../../../src/models/Platform.test.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ export { Organization } from './Organization';
2
2
  export { User } from './User';
3
3
  export { Payment } from './Payment';
4
4
  export { Registration } from './Registration';
5
- export { Member, RegistrationWithMember, MemberWithRegistrations } from './Member';
5
+ export * from './Member';
6
6
  export { MergedMember } from './MergedMember';
7
7
  export * from './EmailVerificationCode';
8
8
  export * from './Image';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,cAAc,yBAAyB,CAAC;AAExC,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/C,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AAErC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AAExC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AAEnC,cAAc,uBAAuB,CAAC;AAEtC,cAAc,YAAY,CAAC;AAC3B,cAAc,8BAA8B,CAAC;AAE7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,cAAc,yBAAyB,CAAC;AAExC,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/C,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AAErC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AAExC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AAEnC,cAAc,uBAAuB,CAAC;AAEtC,cAAc,YAAY,CAAC;AAC3B,cAAc,8BAA8B,CAAC;AAE7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Group = exports.BalanceItemPayment = exports.BalanceItem = exports.Token = exports.STPendingInvoice = exports.Order = exports.MergedMember = exports.Member = exports.Registration = exports.Payment = exports.User = exports.Organization = void 0;
3
+ exports.Group = exports.BalanceItemPayment = exports.BalanceItem = exports.Token = exports.STPendingInvoice = exports.Order = exports.MergedMember = exports.Registration = exports.Payment = exports.User = exports.Organization = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  var Organization_1 = require("./Organization");
6
6
  Object.defineProperty(exports, "Organization", { enumerable: true, get: function () { return Organization_1.Organization; } });
@@ -10,8 +10,7 @@ var Payment_1 = require("./Payment");
10
10
  Object.defineProperty(exports, "Payment", { enumerable: true, get: function () { return Payment_1.Payment; } });
11
11
  var Registration_1 = require("./Registration");
12
12
  Object.defineProperty(exports, "Registration", { enumerable: true, get: function () { return Registration_1.Registration; } });
13
- var Member_1 = require("./Member");
14
- Object.defineProperty(exports, "Member", { enumerable: true, get: function () { return Member_1.Member; } });
13
+ tslib_1.__exportStar(require("./Member"), exports);
15
14
  var MergedMember_1 = require("./MergedMember");
16
15
  Object.defineProperty(exports, "MergedMember", { enumerable: true, get: function () { return MergedMember_1.MergedMember; } });
17
16
  tslib_1.__exportStar(require("./EmailVerificationCode"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":";;;;AAAA,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AACrB,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAChB,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AACrB,mCAAmF;AAA1E,gGAAA,MAAM,OAAA;AACf,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AAErB,kEAAwC;AAExC,kDAAwB;AACxB,0DAAgC;AAChC,wDAA8B;AAC9B,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AACd,0DAAgC;AAChC,4DAAkC;AAClC,yDAA+B;AAC/B,sDAA4B;AAC5B,sDAA4B;AAC5B,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AACzB,iCAA+C;AAAtC,8FAAA,KAAK,OAAA;AACd,oDAA0B;AAC1B,qDAA2B;AAC3B,6DAAmC;AACnC,mDAAyB;AACzB,0DAAgC;AAChC,4DAAkC;AAClC,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;AACpB,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AAEd,6DAAmC;AACnC,2DAAiC;AACjC,iEAAuC;AACvC,+DAAqC;AAErC,0DAAgC;AAChC,gEAAsC;AACtC,kEAAwC;AAExC,qDAA2B;AAC3B,6DAAmC;AAEnC,gEAAsC;AAEtC,qDAA2B;AAC3B,uEAA6C;AAE7C,2EAAiD;AACjD,+DAAqC;AACrC,qEAA2C;AAC3C,kDAAwB;AACxB,2DAAiC;AACjC,kDAAwB;AACxB,8DAAoC;AACpC,0DAAgC;AAChC,qDAA2B;AAC3B,uDAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":";;;;AAAA,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AACrB,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAChB,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AACrB,mDAAyB;AACzB,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AAErB,kEAAwC;AAExC,kDAAwB;AACxB,0DAAgC;AAChC,wDAA8B;AAC9B,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AACd,0DAAgC;AAChC,4DAAkC;AAClC,yDAA+B;AAC/B,sDAA4B;AAC5B,sDAA4B;AAC5B,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AACzB,iCAA+C;AAAtC,8FAAA,KAAK,OAAA;AACd,oDAA0B;AAC1B,qDAA2B;AAC3B,6DAAmC;AACnC,mDAAyB;AACzB,0DAAgC;AAChC,4DAAkC;AAClC,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;AACpB,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AAEd,6DAAmC;AACnC,2DAAiC;AACjC,iEAAuC;AACvC,+DAAqC;AAErC,0DAAgC;AAChC,gEAAsC;AACtC,kEAAwC;AAExC,qDAA2B;AAC3B,6DAAmC;AAEnC,gEAAsC;AAEtC,qDAA2B;AAC3B,uEAA6C;AAE7C,2EAAiD;AACjD,+DAAqC;AACrC,qEAA2C;AAC3C,kDAAwB;AACxB,2DAAiC;AACjC,kDAAwB;AACxB,8DAAoC;AACpC,0DAAgC;AAChC,qDAA2B;AAC3B,uDAA6B"}
@@ -1 +1 @@
1
- {"root":["../src/index.ts","../src/factories/addressfactory.ts","../src/factories/balanceitemfactory.ts","../src/factories/emergencycontactfactory.ts","../src/factories/groupfactory.ts","../src/factories/memberfactory.ts","../src/factories/organizationfactory.ts","../src/factories/organizationtagfactory.ts","../src/factories/parentfactory.ts","../src/factories/recordfactory.ts","../src/factories/registercodefactory.ts","../src/factories/registrationfactory.ts","../src/factories/registrationperiodfactory.ts","../src/factories/userfactory.ts","../src/factories/webshopfactory.ts","../src/factories/index.ts","../src/helpers/dnsvalidator.ts","../src/helpers/emailbuilder.ts","../src/helpers/groupbuilder.ts","../src/helpers/handlebars.ts","../src/helpers/membermerger.test.ts","../src/helpers/membermerger.ts","../src/helpers/ratelimiter.ts","../src/helpers/webshopcounter.ts","../src/migrations/1605262045-import-postcodes.ts","../src/migrations/1605262046-import-postcodes-nl.ts","../src/models/auditlog.ts","../src/models/balanceitem.ts","../src/models/balanceitempayment.ts","../src/models/buckaroopayment.ts","../src/models/cachedbalance.ts","../src/models/document.ts","../src/models/documenttemplate.ts","../src/models/email.test.ts","../src/models/email.ts","../src/models/emailrecipient.ts","../src/models/emailtemplate.ts","../src/models/emailverificationcode.ts","../src/models/event.ts","../src/models/eventnotification.ts","../src/models/group.ts","../src/models/image.ts","../src/models/member.ts","../src/models/memberplatformmembership.ts","../src/models/memberresponsibilityrecord.ts","../src/models/memberuser.ts","../src/models/mergedmember.ts","../src/models/molliepayment.ts","../src/models/mollietoken.ts","../src/models/onetimetoken.ts","../src/models/order.ts","../src/models/organization.ts","../src/models/organizationregistrationperiod.ts","../src/models/passwordtoken.ts","../src/models/payconiqpayment.ts","../src/models/payment.ts","../src/models/platform.ts","../src/models/registercode.ts","../src/models/registration.ts","../src/models/registrationperiod.ts","../src/models/stcredit.ts","../src/models/stinvoice.ts","../src/models/stpackage.ts","../src/models/stpendinginvoice.ts","../src/models/stripeaccount.ts","../src/models/stripecheckoutsession.ts","../src/models/stripepaymentintent.ts","../src/models/ticket.ts","../src/models/token.test.ts","../src/models/token.ts","../src/models/usedregistercode.ts","../src/models/user.ts","../src/models/userpermissions.ts","../src/models/webshop.ts","../src/models/webshopdiscountcode.ts","../src/models/index.ts","../src/models/addresses/city.ts","../src/models/addresses/postalcode.test.ts","../src/models/addresses/postalcode.ts","../src/models/addresses/province.ts","../src/models/addresses/street.ts","../src/structures/organizationservermetadata.ts","../tests/jest.global.setup.ts","../tests/jest.setup.ts","../../../../environment.d.ts","../../../../jest-extended.d.ts","../../../stamhoofd.d.ts"],"version":"5.6.2"}
1
+ {"root":["../src/index.ts","../src/factories/addressfactory.ts","../src/factories/balanceitemfactory.ts","../src/factories/emergencycontactfactory.ts","../src/factories/groupfactory.ts","../src/factories/memberfactory.ts","../src/factories/memberresponsibilityrecordfactory.ts","../src/factories/organizationfactory.ts","../src/factories/organizationregistrationperiodfactory.ts","../src/factories/organizationtagfactory.ts","../src/factories/parentfactory.ts","../src/factories/platformresponsibilityfactory.ts","../src/factories/recordfactory.ts","../src/factories/registercodefactory.ts","../src/factories/registrationfactory.ts","../src/factories/registrationperiodfactory.ts","../src/factories/userfactory.ts","../src/factories/webshopfactory.ts","../src/factories/index.ts","../src/helpers/dnsvalidator.ts","../src/helpers/emailbuilder.ts","../src/helpers/groupbuilder.ts","../src/helpers/handlebars.ts","../src/helpers/membermerger.test.ts","../src/helpers/membermerger.ts","../src/helpers/ratelimiter.ts","../src/helpers/webshopcounter.ts","../src/migrations/1605262045-import-postcodes.ts","../src/migrations/1605262046-import-postcodes-nl.ts","../src/models/auditlog.ts","../src/models/balanceitem.ts","../src/models/balanceitempayment.ts","../src/models/buckaroopayment.ts","../src/models/cachedbalance.ts","../src/models/document.ts","../src/models/documenttemplate.ts","../src/models/email.test.ts","../src/models/email.ts","../src/models/emailrecipient.ts","../src/models/emailtemplate.ts","../src/models/emailverificationcode.ts","../src/models/event.ts","../src/models/eventnotification.ts","../src/models/group.ts","../src/models/image.ts","../src/models/member.ts","../src/models/memberplatformmembership.ts","../src/models/memberresponsibilityrecord.ts","../src/models/memberuser.ts","../src/models/mergedmember.ts","../src/models/molliepayment.ts","../src/models/mollietoken.ts","../src/models/onetimetoken.ts","../src/models/order.ts","../src/models/organization.ts","../src/models/organizationregistrationperiod.ts","../src/models/passwordtoken.ts","../src/models/payconiqpayment.ts","../src/models/payment.ts","../src/models/platform.test.ts","../src/models/platform.ts","../src/models/registercode.ts","../src/models/registration.ts","../src/models/registrationperiod.ts","../src/models/stcredit.ts","../src/models/stinvoice.ts","../src/models/stpackage.ts","../src/models/stpendinginvoice.ts","../src/models/stripeaccount.ts","../src/models/stripecheckoutsession.ts","../src/models/stripepaymentintent.ts","../src/models/ticket.ts","../src/models/token.test.ts","../src/models/token.ts","../src/models/usedregistercode.ts","../src/models/user.ts","../src/models/userpermissions.ts","../src/models/webshop.ts","../src/models/webshopdiscountcode.ts","../src/models/index.ts","../src/models/addresses/city.ts","../src/models/addresses/postalcode.test.ts","../src/models/addresses/postalcode.ts","../src/models/addresses/province.ts","../src/models/addresses/street.ts","../src/structures/organizationservermetadata.ts","../tests/jest.global.setup.ts","../tests/jest.setup.ts","../../../../environment.d.ts","../../../../jest-extended.d.ts","../../../stamhoofd.d.ts"],"version":"5.6.2"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stamhoofd/models",
3
- "version": "2.78.4",
3
+ "version": "2.79.0",
4
4
  "main": "./dist/src/index.js",
5
5
  "types": "./dist/src/index.d.ts",
6
6
  "license": "UNLICENCED",
@@ -16,7 +16,7 @@
16
16
  "lint": "eslint"
17
17
  },
18
18
  "peerDependencies": {
19
- "@simonbackx/simple-database": "1.29.0",
19
+ "@simonbackx/simple-database": "1.29.1",
20
20
  "@stamhoofd/email": "*",
21
21
  "@stamhoofd/queues": "*"
22
22
  },
@@ -25,10 +25,10 @@
25
25
  "base-x": "^3.0.9"
26
26
  },
27
27
  "devDependencies": {
28
- "@simonbackx/simple-database": "1.29.0"
28
+ "@simonbackx/simple-database": "1.29.1"
29
29
  },
30
30
  "publishConfig": {
31
31
  "access": "public"
32
32
  },
33
- "gitHead": "e8c207be8fd75320024f670d5c663eaa8306ba29"
33
+ "gitHead": "1ba7d80ded3676ecdc63741f3e8972bd378b5ea6"
34
34
  }
@@ -1,6 +1,7 @@
1
1
  import { Factory } from '@simonbackx/simple-database';
2
- import { GroupPrice, GroupSettings, OldGroupPrice, OldGroupPrices, ReduceablePrice } from '@stamhoofd/structures';
2
+ import { GroupPrice, GroupSettings, GroupType, ReduceablePrice } from '@stamhoofd/structures';
3
3
 
4
+ import { RegistrationPeriod } from '../models';
4
5
  import { Group } from '../models/Group';
5
6
  import { Organization } from '../models/Organization';
6
7
  import { OrganizationFactory } from './OrganizationFactory';
@@ -10,9 +11,10 @@ class Options {
10
11
  price?: number;
11
12
  reducedPrice?: number;
12
13
  stock?: number;
13
-
14
+ type?: GroupType;
14
15
  skipCategory?: boolean;
15
16
  maxMembers?: number | null;
17
+ period?: RegistrationPeriod;
16
18
  }
17
19
 
18
20
  export class GroupFactory extends Factory<Options, Group> {
@@ -21,7 +23,14 @@ export class GroupFactory extends Factory<Options, Group> {
21
23
 
22
24
  const group = new Group();
23
25
  group.organizationId = organization.id;
24
- group.periodId = organization.periodId;
26
+
27
+ if (this.options.period) {
28
+ group.periodId = this.options.period.id;
29
+ }
30
+ else {
31
+ group.periodId = organization.periodId;
32
+ }
33
+
25
34
  group.settings = GroupSettings.create({
26
35
  name: 'Group name',
27
36
  startDate: new Date(new Date().getTime() - 10 * 1000),
@@ -40,6 +49,10 @@ export class GroupFactory extends Factory<Options, Group> {
40
49
  maxMembers: this.options.maxMembers === undefined ? null : this.options.maxMembers,
41
50
  });
42
51
 
52
+ if (this.options.type) {
53
+ group.type = this.options.type;
54
+ }
55
+
43
56
  await group.save();
44
57
 
45
58
  if (!this.options.skipCategory) {
@@ -0,0 +1,35 @@
1
+ import { Factory } from '@simonbackx/simple-database';
2
+ import { MemberResponsibility } from '@stamhoofd/structures';
3
+
4
+ import { Member, MemberResponsibilityRecord } from '../models';
5
+ import { PlatformResponsibilityFactory } from './PlatformResponsibilityFactory';
6
+
7
+ class Options {
8
+ name?: string;
9
+ responsibility?: MemberResponsibility;
10
+ member: Member;
11
+ organizationId?: string;
12
+ }
13
+
14
+ export class MemberResponsibilityRecordFactory extends Factory<Options, MemberResponsibilityRecord> {
15
+ async create(): Promise<MemberResponsibilityRecord> {
16
+ const record = new MemberResponsibilityRecord();
17
+ const responsibility = this.options.responsibility ?? (await new PlatformResponsibilityFactory({
18
+ organizationBased: !!this.options.organizationId,
19
+ }).create());
20
+ record.responsibilityId = this.options.responsibility?.id ?? responsibility.id;
21
+ record.memberId = this.options.member.id;
22
+ record.startDate = new Date();
23
+ record.endDate = null;
24
+ record.organizationId = this.options.organizationId ?? this.options.member.organizationId;
25
+
26
+ if (record.organizationId) {
27
+ if (responsibility.organizationBased) {
28
+ throw new Error('This responsibility is organization based. Please also provider the organizationId option when creating the record with MemberResponsibilityRecordFactory');
29
+ }
30
+ }
31
+
32
+ await record.save();
33
+ return record;
34
+ }
35
+ }
@@ -0,0 +1,22 @@
1
+ import { Factory } from '@simonbackx/simple-database';
2
+
3
+ import { OrganizationRegistrationPeriod } from '../models';
4
+ import { Organization } from '../models/Organization';
5
+ import { RegistrationPeriod } from '../models/RegistrationPeriod';
6
+
7
+ class Options {
8
+ organization: Organization;
9
+ period: RegistrationPeriod;
10
+ }
11
+
12
+ export class OrganizationRegistrationPeriodFactory extends Factory<Options, OrganizationRegistrationPeriod> {
13
+ async create(): Promise<OrganizationRegistrationPeriod> {
14
+ const organizationRegistrationPeriod = new OrganizationRegistrationPeriod();
15
+
16
+ organizationRegistrationPeriod.organizationId = this.options.organization.id;
17
+ organizationRegistrationPeriod.periodId = this.options.period.id;
18
+
19
+ await organizationRegistrationPeriod.save();
20
+ return organizationRegistrationPeriod;
21
+ }
22
+ }
@@ -14,7 +14,7 @@ export class OrganizationTagFactory extends Factory<Options, OrganizationTag> {
14
14
  });
15
15
 
16
16
  // Add to platform
17
- const platform = await Platform.getShared();
17
+ const platform = await Platform.getForEditing();
18
18
  platform.config.tags.push(tag);
19
19
  await platform.save();
20
20
 
@@ -0,0 +1,25 @@
1
+ import { Factory } from '@simonbackx/simple-database';
2
+ import { MemberResponsibility } from '@stamhoofd/structures';
3
+
4
+ import { Platform } from '../models/Platform';
5
+
6
+ class Options {
7
+ name?: string;
8
+ organizationBased?: boolean;
9
+ }
10
+
11
+ export class PlatformResponsibilityFactory extends Factory<Options, MemberResponsibility> {
12
+ async create(): Promise<MemberResponsibility> {
13
+ const responsibility = MemberResponsibility.create({
14
+ name: this.options.name ?? ('Responsibility ' + (new Date().getTime() + Math.floor(Math.random() * 999999))),
15
+ organizationBased: this.options.organizationBased ?? true,
16
+ });
17
+
18
+ // Add to platform
19
+ const platform = await Platform.getForEditing();
20
+ platform.config.responsibilities.push(responsibility);
21
+ await platform.save();
22
+
23
+ return responsibility;
24
+ }
25
+ }
@@ -6,6 +6,7 @@ import { RegistrationPeriod } from '../models';
6
6
  class Options {
7
7
  startDate?: Date;
8
8
  endDate?: Date;
9
+ previousPeriodId?: string;
9
10
  }
10
11
 
11
12
  export class RegistrationPeriodFactory extends Factory<Options, RegistrationPeriod> {
@@ -15,6 +16,9 @@ export class RegistrationPeriodFactory extends Factory<Options, RegistrationPeri
15
16
  period.organizationId = null;
16
17
  period.startDate = this.options.startDate ?? new Date(2024, 0, 1, 0, 0, 0, 0);
17
18
  period.endDate = this.options.endDate ?? new Date(2024, 11, 31, 59, 59, 59, 999);
19
+ if (this.options.previousPeriodId) {
20
+ period.previousPeriodId = this.options.previousPeriodId;
21
+ }
18
22
  period.settings = RegistrationPeriodSettings.create({});
19
23
 
20
24
  await period.save();
@@ -12,3 +12,6 @@ export * from './WebshopFactory';
12
12
  export * from './BalanceItemFactory';
13
13
  export * from './RegistrationPeriodFactory';
14
14
  export * from './OrganizationTagFactory';
15
+ export * from './OrganizationRegistrationPeriodFactory';
16
+ export * from './MemberResponsibilityRecordFactory';
17
+ export * from './PlatformResponsibilityFactory';