@stamhoofd/models 2.74.0 → 2.75.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/dist/src/factories/BalanceItemFactory.d.ts +25 -0
  2. package/dist/src/factories/BalanceItemFactory.d.ts.map +1 -0
  3. package/dist/src/factories/BalanceItemFactory.js +52 -0
  4. package/dist/src/factories/BalanceItemFactory.js.map +1 -0
  5. package/dist/src/factories/GroupFactory.d.ts +0 -2
  6. package/dist/src/factories/GroupFactory.d.ts.map +1 -1
  7. package/dist/src/factories/GroupFactory.js +0 -4
  8. package/dist/src/factories/GroupFactory.js.map +1 -1
  9. package/dist/src/helpers/Handlebars.d.ts.map +1 -1
  10. package/dist/src/helpers/Handlebars.js +51 -10
  11. package/dist/src/helpers/Handlebars.js.map +1 -1
  12. package/dist/src/index.d.ts +1 -0
  13. package/dist/src/index.d.ts.map +1 -1
  14. package/dist/src/index.js +1 -0
  15. package/dist/src/index.js.map +1 -1
  16. package/dist/src/migrations/1739017508-event-notifications.sql +25 -0
  17. package/dist/src/migrations/1739017509-event-notifications-link.sql +10 -0
  18. package/dist/src/migrations/1739282590-event-notifications-submitted-at.sql +3 -0
  19. package/dist/src/models/Document.d.ts.map +1 -1
  20. package/dist/src/models/Document.js.map +1 -1
  21. package/dist/src/models/DocumentTemplate.d.ts.map +1 -1
  22. package/dist/src/models/DocumentTemplate.js +3 -1
  23. package/dist/src/models/DocumentTemplate.js.map +1 -1
  24. package/dist/src/models/EventNotification.d.ts +27 -0
  25. package/dist/src/models/EventNotification.d.ts.map +1 -0
  26. package/dist/src/models/EventNotification.js +95 -0
  27. package/dist/src/models/EventNotification.js.map +1 -0
  28. package/dist/src/models/Image.d.ts +1 -1
  29. package/dist/src/models/Image.d.ts.map +1 -1
  30. package/dist/src/models/Image.js +14 -2
  31. package/dist/src/models/Image.js.map +1 -1
  32. package/dist/src/models/MemberPlatformMembership.d.ts +1 -1
  33. package/dist/src/models/MemberPlatformMembership.d.ts.map +1 -1
  34. package/dist/src/models/MemberPlatformMembership.js +9 -2
  35. package/dist/src/models/MemberPlatformMembership.js.map +1 -1
  36. package/dist/src/models/MemberResponsibilityRecord.d.ts +1 -0
  37. package/dist/src/models/MemberResponsibilityRecord.d.ts.map +1 -1
  38. package/dist/src/models/MemberResponsibilityRecord.js +3 -0
  39. package/dist/src/models/MemberResponsibilityRecord.js.map +1 -1
  40. package/dist/src/models/Organization.js +1 -1
  41. package/dist/src/models/Organization.js.map +1 -1
  42. package/dist/src/models/User.d.ts +4 -1
  43. package/dist/src/models/User.d.ts.map +1 -1
  44. package/dist/src/models/User.js +31 -11
  45. package/dist/src/models/User.js.map +1 -1
  46. package/dist/src/models/index.d.ts +1 -0
  47. package/dist/src/models/index.d.ts.map +1 -1
  48. package/dist/src/models/index.js +1 -0
  49. package/dist/src/models/index.js.map +1 -1
  50. package/dist/tsconfig.tsbuildinfo +1 -1
  51. package/package.json +4 -4
  52. package/src/factories/BalanceItemFactory.ts +57 -0
  53. package/src/factories/GroupFactory.ts +1 -6
  54. package/src/helpers/Handlebars.ts +64 -10
  55. package/src/index.ts +1 -0
  56. package/src/migrations/1739017508-event-notifications.sql +25 -0
  57. package/src/migrations/1739017509-event-notifications-link.sql +10 -0
  58. package/src/migrations/1739282590-event-notifications-submitted-at.sql +3 -0
  59. package/src/models/Document.ts +1 -1
  60. package/src/models/DocumentTemplate.ts +3 -1
  61. package/src/models/EventNotification.ts +77 -0
  62. package/src/models/Image.ts +15 -2
  63. package/src/models/MemberPlatformMembership.ts +11 -2
  64. package/src/models/MemberResponsibilityRecord.ts +5 -1
  65. package/src/models/Organization.ts +1 -1
  66. package/src/models/User.ts +53 -14
  67. package/src/models/index.ts +1 -0
@@ -1,6 +1,6 @@
1
1
  import { column, Database, ManyToOneRelation } from '@simonbackx/simple-database';
2
2
  import { EmailInterfaceRecipient } from '@stamhoofd/email';
3
- import { QueryableModel } from '@stamhoofd/sql';
3
+ import { QueryableModel, SQL, SQLExpression, SQLJsonExtract } from '@stamhoofd/sql';
4
4
  import { LoginProviderType, NewUser, Permissions, Recipient, Replacement, UserMeta, UserPermissions, User as UserStruct } from '@stamhoofd/structures';
5
5
  import argon2 from 'argon2';
6
6
  import { v4 as uuidv4 } from 'uuid';
@@ -117,15 +117,52 @@ export class User extends QueryableModel {
117
117
  });
118
118
  }
119
119
 
120
- static async getAdmins(organizationIds: string[], options?: { verified?: boolean }) {
121
- if (organizationIds.length == 0) {
122
- return [];
120
+ static async getPlatformAdmins(options?: { verified?: boolean }) {
121
+ // Custom implementation
122
+ const q = User.select()
123
+ .where('organizationId', null)
124
+ .where('permissions', '!=', null)
125
+ .where(
126
+ SQL.jsonValue(SQL.column('permissions'), '$.value.globalPermissions'),
127
+ '!=',
128
+ null,
129
+ )
130
+ .where('id', '!=', '1');
131
+
132
+ if (options?.verified !== undefined) {
133
+ q.where('verified', options.verified);
123
134
  }
124
135
 
136
+ let global = await q.fetch();
137
+
138
+ // Hide api accounts
139
+ global = global.filter(a => !a.isApiUser);
140
+
141
+ return global;
142
+ }
143
+
144
+ static async getAdmins(organizationId: string, options?: { verified?: boolean }) {
125
145
  if (STAMHOOFD.userMode === 'platform') {
126
146
  // Custom implementation
127
- let global = (await User.where({ organizationId: null, permissions: { sign: '!=', value: null } }));
128
- global = global.filter(u => organizationIds.find(organizationId => u.permissions?.organizationPermissions.has(organizationId)));
147
+ const q = User.select()
148
+ .where('organizationId', null)
149
+ .where('permissions', '!=', null)
150
+ .where(
151
+ SQL.jsonValue(
152
+ SQL.jsonValue(SQL.column('permissions'), '$.value.organizationPermissions'),
153
+ '$."' + organizationId + '"',
154
+ true,
155
+ ),
156
+ '!=',
157
+ null,
158
+ )
159
+ ;
160
+
161
+ if (options?.verified !== undefined) {
162
+ q.where('verified', options.verified);
163
+ }
164
+
165
+ let global = await q.fetch();
129
166
 
130
167
  // Hide api accounts
131
168
  global = global.filter(a => !a.isApiUser);
@@ -133,19 +170,21 @@ export class User extends QueryableModel {
133
170
  return global;
134
171
  }
135
172
 
136
- const query: any = {
137
- permissions: { sign: '!=', value: null },
138
- organizationId: { sign: 'IN', value: organizationIds },
139
- };
173
+ const q = User.select()
174
+ .where('organizationId', organizationId)
175
+ .where('permissions', '!=', null)
176
+ ;
140
177
 
141
178
  if (options?.verified !== undefined) {
142
- query.verified = options.verified;
179
+ q.where('verified', options.verified);
143
180
  }
144
181
 
145
- return (
182
+ let global = await q.fetch();
183
+
184
+ // Hide api accounts
185
+ global = global.filter(a => !a.isApiUser);
146
186
 
147
- await User.where(query)
148
- ).filter(a => !a.isApiUser);
187
+ return global;
149
188
  }
150
189
 
151
190
  static async getApiUsers(organizationIds: string[]) {
@@ -51,6 +51,7 @@ export * from './MemberPlatformMembership';
51
51
  export * from './Email';
52
52
  export * from './EmailRecipient';
53
53
  export * from './Event';
54
+ export * from './EventNotification';
54
55
  export * from './CachedBalance';
55
56
  export * from './AuditLog';
56
57
  export * from './MemberUser';