@headless-lms/adapter-db 0.3.0 → 0.5.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.
- package/dist/client.d.ts +8 -2
- package/dist/client.js +10 -2
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +10 -4
- package/dist/index.js +9 -3
- package/dist/repositories/admin.d.ts +12 -4
- package/dist/repositories/admin.js +165 -23
- package/dist/repositories/admin.js.map +1 -1
- package/dist/repositories/assets.d.ts +2 -2
- package/dist/repositories/assets.js +11 -5
- package/dist/repositories/assets.js.map +1 -1
- package/dist/repositories/automations.d.ts +0 -1
- package/dist/repositories/automations.js +2 -18
- package/dist/repositories/automations.js.map +1 -1
- package/dist/repositories/chats.d.ts +14 -5
- package/dist/repositories/chats.js +194 -85
- package/dist/repositories/chats.js.map +1 -1
- package/dist/repositories/content.d.ts +24 -7
- package/dist/repositories/content.js +229 -48
- package/dist/repositories/content.js.map +1 -1
- package/dist/repositories/credentials.js +1 -1
- package/dist/repositories/devices.d.ts +17 -0
- package/dist/repositories/devices.js +75 -0
- package/dist/repositories/devices.js.map +1 -0
- package/dist/repositories/digest-runs.d.ts +14 -0
- package/dist/repositories/digest-runs.js +39 -0
- package/dist/repositories/digest-runs.js.map +1 -0
- package/dist/repositories/discussion.d.ts +7 -2
- package/dist/repositories/discussion.js +18 -7
- package/dist/repositories/discussion.js.map +1 -1
- package/dist/repositories/entitlements.d.ts +11 -9
- package/dist/repositories/entitlements.js +56 -59
- package/dist/repositories/entitlements.js.map +1 -1
- package/dist/repositories/event-reports.d.ts +16 -0
- package/dist/repositories/event-reports.js +199 -0
- package/dist/repositories/event-reports.js.map +1 -0
- package/dist/repositories/grant-covers.d.ts +4 -3
- package/dist/repositories/grant-covers.js +7 -4
- package/dist/repositories/grant-covers.js.map +1 -1
- package/dist/repositories/identity.js +1 -1
- package/dist/repositories/inserted-row.d.ts +5 -0
- package/dist/repositories/inserted-row.js +7 -0
- package/dist/repositories/inserted-row.js.map +1 -0
- package/dist/repositories/integrations.js +1 -1
- package/dist/repositories/member.d.ts +12 -4
- package/dist/repositories/member.js +19 -7
- package/dist/repositories/member.js.map +1 -1
- package/dist/repositories/members.d.ts +2 -5
- package/dist/repositories/members.js +39 -94
- package/dist/repositories/members.js.map +1 -1
- package/dist/repositories/mentions.d.ts +17 -0
- package/dist/repositories/mentions.js +55 -0
- package/dist/repositories/mentions.js.map +1 -0
- package/dist/repositories/notification-settings.d.ts +19 -0
- package/dist/repositories/notification-settings.js +67 -0
- package/dist/repositories/notification-settings.js.map +1 -0
- package/dist/repositories/notifications.d.ts +23 -16
- package/dist/repositories/notifications.js +152 -44
- package/dist/repositories/notifications.js.map +1 -1
- package/dist/repositories/org-user-profile.d.ts +0 -17
- package/dist/repositories/org-user-profile.js +0 -1
- package/dist/repositories/org-user-profile.js.map +1 -1
- package/dist/repositories/organizations.d.ts +4 -4
- package/dist/repositories/organizations.js +25 -47
- package/dist/repositories/organizations.js.map +1 -1
- package/dist/repositories/outbox.d.ts +5 -1
- package/dist/repositories/outbox.js +12 -3
- package/dist/repositories/outbox.js.map +1 -1
- package/dist/repositories/posts.d.ts +4 -8
- package/dist/repositories/posts.js +26 -29
- package/dist/repositories/posts.js.map +1 -1
- package/dist/repositories/progress.js +1 -1
- package/dist/repositories/roles.d.ts +35 -0
- package/dist/repositories/roles.js +244 -0
- package/dist/repositories/roles.js.map +1 -0
- package/dist/repositories/settings.js +1 -1
- package/dist/repositories/subscriptions.d.ts +18 -0
- package/dist/repositories/subscriptions.js +72 -0
- package/dist/repositories/subscriptions.js.map +1 -0
- package/dist/schema/assets.d.ts +17 -0
- package/dist/schema/assets.js +1 -0
- package/dist/schema/assets.js.map +1 -1
- package/dist/schema/automations.d.ts +524 -19
- package/dist/schema/automations.js +73 -7
- package/dist/schema/automations.js.map +1 -1
- package/dist/schema/content.d.ts +437 -3
- package/dist/schema/content.js +70 -3
- package/dist/schema/content.js.map +1 -1
- package/dist/schema/discussion.d.ts +295 -128
- package/dist/schema/discussion.js +63 -26
- package/dist/schema/discussion.js.map +1 -1
- package/dist/schema/identity.d.ts +109 -109
- package/dist/schema/identity.js +28 -70
- package/dist/schema/identity.js.map +1 -1
- package/dist/schema/index.d.ts +7 -6
- package/dist/schema/index.js +16 -7
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/organizations.d.ts +5 -22
- package/dist/schema/organizations.js +1 -13
- package/dist/schema/organizations.js.map +1 -1
- package/dist/schema/roles.d.ts +369 -0
- package/dist/schema/roles.js +71 -0
- package/dist/schema/roles.js.map +1 -0
- package/drizzle/0011_digest_runs.sql +8 -0
- package/drizzle/0012_subscriptions.sql +16 -0
- package/drizzle/0013_mentions.sql +10 -0
- package/drizzle/0014_notification_settings_devices.sql +36 -0
- package/drizzle/0015_automations_drop_source.sql +2 -0
- package/drizzle/0016_notifications_automations.sql +48 -0
- package/drizzle/0017_configurable_roles.sql +38 -0
- package/drizzle/0018_messages_client_id.sql +2 -0
- package/drizzle/0019_events.sql +44 -0
- package/drizzle/meta/0011_snapshot.json +8868 -0
- package/drizzle/meta/0012_snapshot.json +8873 -0
- package/drizzle/meta/0013_snapshot.json +8943 -0
- package/drizzle/meta/0014_snapshot.json +9305 -0
- package/drizzle/meta/0015_snapshot.json +9270 -0
- package/drizzle/meta/0016_snapshot.json +9230 -0
- package/drizzle/meta/0017_snapshot.json +9518 -0
- package/drizzle/meta/0018_snapshot.json +9557 -0
- package/drizzle/meta/0019_snapshot.json +9919 -0
- package/drizzle/meta/_journal.json +63 -0
- package/package.json +2 -2
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
//#region src/schema/roles.d.ts
|
|
2
|
+
declare const orgRoles: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
3
|
+
name: "org_roles";
|
|
4
|
+
schema: undefined;
|
|
5
|
+
columns: {
|
|
6
|
+
orgId: import("drizzle-orm/pg-core").PgColumn<{
|
|
7
|
+
name: "org_id";
|
|
8
|
+
tableName: "org_roles";
|
|
9
|
+
dataType: "string";
|
|
10
|
+
columnType: "PgText";
|
|
11
|
+
data: string;
|
|
12
|
+
driverParam: string;
|
|
13
|
+
notNull: true;
|
|
14
|
+
hasDefault: false;
|
|
15
|
+
isPrimaryKey: false;
|
|
16
|
+
isAutoincrement: false;
|
|
17
|
+
hasRuntimeDefault: false;
|
|
18
|
+
enumValues: [string, ...string[]];
|
|
19
|
+
baseColumn: never;
|
|
20
|
+
identity: undefined;
|
|
21
|
+
generated: undefined;
|
|
22
|
+
}, {}, {}>;
|
|
23
|
+
id: import("drizzle-orm/pg-core").PgColumn<{
|
|
24
|
+
name: "id";
|
|
25
|
+
tableName: "org_roles";
|
|
26
|
+
dataType: "string";
|
|
27
|
+
columnType: "PgText";
|
|
28
|
+
data: string;
|
|
29
|
+
driverParam: string;
|
|
30
|
+
notNull: true;
|
|
31
|
+
hasDefault: true;
|
|
32
|
+
isPrimaryKey: false;
|
|
33
|
+
isAutoincrement: false;
|
|
34
|
+
hasRuntimeDefault: true;
|
|
35
|
+
enumValues: [string, ...string[]];
|
|
36
|
+
baseColumn: never;
|
|
37
|
+
identity: undefined;
|
|
38
|
+
generated: undefined;
|
|
39
|
+
}, {}, {}>;
|
|
40
|
+
key: import("drizzle-orm/pg-core").PgColumn<{
|
|
41
|
+
name: "key";
|
|
42
|
+
tableName: "org_roles";
|
|
43
|
+
dataType: "string";
|
|
44
|
+
columnType: "PgText";
|
|
45
|
+
data: string;
|
|
46
|
+
driverParam: string;
|
|
47
|
+
notNull: true;
|
|
48
|
+
hasDefault: false;
|
|
49
|
+
isPrimaryKey: false;
|
|
50
|
+
isAutoincrement: false;
|
|
51
|
+
hasRuntimeDefault: false;
|
|
52
|
+
enumValues: [string, ...string[]];
|
|
53
|
+
baseColumn: never;
|
|
54
|
+
identity: undefined;
|
|
55
|
+
generated: undefined;
|
|
56
|
+
}, {}, {}>;
|
|
57
|
+
name: import("drizzle-orm/pg-core").PgColumn<{
|
|
58
|
+
name: "name";
|
|
59
|
+
tableName: "org_roles";
|
|
60
|
+
dataType: "string";
|
|
61
|
+
columnType: "PgText";
|
|
62
|
+
data: string;
|
|
63
|
+
driverParam: string;
|
|
64
|
+
notNull: false;
|
|
65
|
+
hasDefault: false;
|
|
66
|
+
isPrimaryKey: false;
|
|
67
|
+
isAutoincrement: false;
|
|
68
|
+
hasRuntimeDefault: false;
|
|
69
|
+
enumValues: [string, ...string[]];
|
|
70
|
+
baseColumn: never;
|
|
71
|
+
identity: undefined;
|
|
72
|
+
generated: undefined;
|
|
73
|
+
}, {}, {}>;
|
|
74
|
+
description: import("drizzle-orm/pg-core").PgColumn<{
|
|
75
|
+
name: "description";
|
|
76
|
+
tableName: "org_roles";
|
|
77
|
+
dataType: "string";
|
|
78
|
+
columnType: "PgText";
|
|
79
|
+
data: string;
|
|
80
|
+
driverParam: string;
|
|
81
|
+
notNull: false;
|
|
82
|
+
hasDefault: false;
|
|
83
|
+
isPrimaryKey: false;
|
|
84
|
+
isAutoincrement: false;
|
|
85
|
+
hasRuntimeDefault: false;
|
|
86
|
+
enumValues: [string, ...string[]];
|
|
87
|
+
baseColumn: never;
|
|
88
|
+
identity: undefined;
|
|
89
|
+
generated: undefined;
|
|
90
|
+
}, {}, {}>;
|
|
91
|
+
base: import("drizzle-orm/pg-core").PgColumn<{
|
|
92
|
+
name: "base";
|
|
93
|
+
tableName: "org_roles";
|
|
94
|
+
dataType: "string";
|
|
95
|
+
columnType: "PgText";
|
|
96
|
+
data: string;
|
|
97
|
+
driverParam: string;
|
|
98
|
+
notNull: true;
|
|
99
|
+
hasDefault: false;
|
|
100
|
+
isPrimaryKey: false;
|
|
101
|
+
isAutoincrement: false;
|
|
102
|
+
hasRuntimeDefault: false;
|
|
103
|
+
enumValues: [string, ...string[]];
|
|
104
|
+
baseColumn: never;
|
|
105
|
+
identity: undefined;
|
|
106
|
+
generated: undefined;
|
|
107
|
+
}, {}, {}>;
|
|
108
|
+
levels: import("drizzle-orm/pg-core").PgColumn<{
|
|
109
|
+
name: "levels";
|
|
110
|
+
tableName: "org_roles";
|
|
111
|
+
dataType: "array";
|
|
112
|
+
columnType: "PgArray";
|
|
113
|
+
data: ("course" | "download" | "event" | "community" | "org")[];
|
|
114
|
+
driverParam: string | string[];
|
|
115
|
+
notNull: false;
|
|
116
|
+
hasDefault: false;
|
|
117
|
+
isPrimaryKey: false;
|
|
118
|
+
isAutoincrement: false;
|
|
119
|
+
hasRuntimeDefault: false;
|
|
120
|
+
enumValues: ["org", "course", "download", "community", "event"];
|
|
121
|
+
baseColumn: import("drizzle-orm").Column<{
|
|
122
|
+
name: "levels";
|
|
123
|
+
tableName: "org_roles";
|
|
124
|
+
dataType: "string";
|
|
125
|
+
columnType: "PgText";
|
|
126
|
+
data: "course" | "download" | "event" | "community" | "org";
|
|
127
|
+
driverParam: string;
|
|
128
|
+
notNull: false;
|
|
129
|
+
hasDefault: false;
|
|
130
|
+
isPrimaryKey: false;
|
|
131
|
+
isAutoincrement: false;
|
|
132
|
+
hasRuntimeDefault: false;
|
|
133
|
+
enumValues: ["org", "course", "download", "community", "event"];
|
|
134
|
+
baseColumn: never;
|
|
135
|
+
identity: undefined;
|
|
136
|
+
generated: undefined;
|
|
137
|
+
}, {}, {}>;
|
|
138
|
+
identity: undefined;
|
|
139
|
+
generated: undefined;
|
|
140
|
+
}, {}, {
|
|
141
|
+
size: undefined;
|
|
142
|
+
baseBuilder: import("drizzle-orm/pg-core").PgColumnBuilder<{
|
|
143
|
+
name: "levels";
|
|
144
|
+
dataType: "string";
|
|
145
|
+
columnType: "PgText";
|
|
146
|
+
data: "course" | "download" | "event" | "community" | "org";
|
|
147
|
+
enumValues: ["org", "course", "download", "community", "event"];
|
|
148
|
+
driverParam: string;
|
|
149
|
+
}, {}, {}, import("drizzle-orm").ColumnBuilderExtraConfig>;
|
|
150
|
+
}>;
|
|
151
|
+
permissions: import("drizzle-orm/pg-core").PgColumn<{
|
|
152
|
+
name: "permissions";
|
|
153
|
+
tableName: "org_roles";
|
|
154
|
+
dataType: "json";
|
|
155
|
+
columnType: "PgJsonb";
|
|
156
|
+
data: Record<string, boolean>;
|
|
157
|
+
driverParam: unknown;
|
|
158
|
+
notNull: true;
|
|
159
|
+
hasDefault: true;
|
|
160
|
+
isPrimaryKey: false;
|
|
161
|
+
isAutoincrement: false;
|
|
162
|
+
hasRuntimeDefault: false;
|
|
163
|
+
enumValues: undefined;
|
|
164
|
+
baseColumn: never;
|
|
165
|
+
identity: undefined;
|
|
166
|
+
generated: undefined;
|
|
167
|
+
}, {}, {
|
|
168
|
+
$type: Record<string, boolean>;
|
|
169
|
+
}>;
|
|
170
|
+
team: import("drizzle-orm/pg-core").PgColumn<{
|
|
171
|
+
name: "team";
|
|
172
|
+
tableName: "org_roles";
|
|
173
|
+
dataType: "boolean";
|
|
174
|
+
columnType: "PgBoolean";
|
|
175
|
+
data: boolean;
|
|
176
|
+
driverParam: boolean;
|
|
177
|
+
notNull: false;
|
|
178
|
+
hasDefault: false;
|
|
179
|
+
isPrimaryKey: false;
|
|
180
|
+
isAutoincrement: false;
|
|
181
|
+
hasRuntimeDefault: false;
|
|
182
|
+
enumValues: undefined;
|
|
183
|
+
baseColumn: never;
|
|
184
|
+
identity: undefined;
|
|
185
|
+
generated: undefined;
|
|
186
|
+
}, {}, {}>;
|
|
187
|
+
createdAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
188
|
+
name: "created_at";
|
|
189
|
+
tableName: "org_roles";
|
|
190
|
+
dataType: "date";
|
|
191
|
+
columnType: "PgTimestamp";
|
|
192
|
+
data: Date;
|
|
193
|
+
driverParam: string;
|
|
194
|
+
notNull: true;
|
|
195
|
+
hasDefault: true;
|
|
196
|
+
isPrimaryKey: false;
|
|
197
|
+
isAutoincrement: false;
|
|
198
|
+
hasRuntimeDefault: false;
|
|
199
|
+
enumValues: undefined;
|
|
200
|
+
baseColumn: never;
|
|
201
|
+
identity: undefined;
|
|
202
|
+
generated: undefined;
|
|
203
|
+
}, {}, {}>;
|
|
204
|
+
updatedAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
205
|
+
name: "updated_at";
|
|
206
|
+
tableName: "org_roles";
|
|
207
|
+
dataType: "date";
|
|
208
|
+
columnType: "PgTimestamp";
|
|
209
|
+
data: Date;
|
|
210
|
+
driverParam: string;
|
|
211
|
+
notNull: true;
|
|
212
|
+
hasDefault: true;
|
|
213
|
+
isPrimaryKey: false;
|
|
214
|
+
isAutoincrement: false;
|
|
215
|
+
hasRuntimeDefault: false;
|
|
216
|
+
enumValues: undefined;
|
|
217
|
+
baseColumn: never;
|
|
218
|
+
identity: undefined;
|
|
219
|
+
generated: undefined;
|
|
220
|
+
}, {}, {}>;
|
|
221
|
+
};
|
|
222
|
+
dialect: "pg";
|
|
223
|
+
}>;
|
|
224
|
+
declare const roleAssignments: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
225
|
+
name: "role_assignments";
|
|
226
|
+
schema: undefined;
|
|
227
|
+
columns: {
|
|
228
|
+
orgId: import("drizzle-orm/pg-core").PgColumn<{
|
|
229
|
+
name: "org_id";
|
|
230
|
+
tableName: "role_assignments";
|
|
231
|
+
dataType: "string";
|
|
232
|
+
columnType: "PgText";
|
|
233
|
+
data: string;
|
|
234
|
+
driverParam: string;
|
|
235
|
+
notNull: true;
|
|
236
|
+
hasDefault: false;
|
|
237
|
+
isPrimaryKey: false;
|
|
238
|
+
isAutoincrement: false;
|
|
239
|
+
hasRuntimeDefault: false;
|
|
240
|
+
enumValues: [string, ...string[]];
|
|
241
|
+
baseColumn: never;
|
|
242
|
+
identity: undefined;
|
|
243
|
+
generated: undefined;
|
|
244
|
+
}, {}, {}>;
|
|
245
|
+
id: import("drizzle-orm/pg-core").PgColumn<{
|
|
246
|
+
name: "id";
|
|
247
|
+
tableName: "role_assignments";
|
|
248
|
+
dataType: "string";
|
|
249
|
+
columnType: "PgText";
|
|
250
|
+
data: string;
|
|
251
|
+
driverParam: string;
|
|
252
|
+
notNull: true;
|
|
253
|
+
hasDefault: true;
|
|
254
|
+
isPrimaryKey: false;
|
|
255
|
+
isAutoincrement: false;
|
|
256
|
+
hasRuntimeDefault: true;
|
|
257
|
+
enumValues: [string, ...string[]];
|
|
258
|
+
baseColumn: never;
|
|
259
|
+
identity: undefined;
|
|
260
|
+
generated: undefined;
|
|
261
|
+
}, {}, {}>;
|
|
262
|
+
orgUserId: import("drizzle-orm/pg-core").PgColumn<{
|
|
263
|
+
name: "org_user_id";
|
|
264
|
+
tableName: "role_assignments";
|
|
265
|
+
dataType: "string";
|
|
266
|
+
columnType: "PgText";
|
|
267
|
+
data: string;
|
|
268
|
+
driverParam: string;
|
|
269
|
+
notNull: true;
|
|
270
|
+
hasDefault: false;
|
|
271
|
+
isPrimaryKey: false;
|
|
272
|
+
isAutoincrement: false;
|
|
273
|
+
hasRuntimeDefault: false;
|
|
274
|
+
enumValues: [string, ...string[]];
|
|
275
|
+
baseColumn: never;
|
|
276
|
+
identity: undefined;
|
|
277
|
+
generated: undefined;
|
|
278
|
+
}, {}, {}>;
|
|
279
|
+
roleKey: import("drizzle-orm/pg-core").PgColumn<{
|
|
280
|
+
name: "role_key";
|
|
281
|
+
tableName: "role_assignments";
|
|
282
|
+
dataType: "string";
|
|
283
|
+
columnType: "PgText";
|
|
284
|
+
data: string;
|
|
285
|
+
driverParam: string;
|
|
286
|
+
notNull: true;
|
|
287
|
+
hasDefault: false;
|
|
288
|
+
isPrimaryKey: false;
|
|
289
|
+
isAutoincrement: false;
|
|
290
|
+
hasRuntimeDefault: false;
|
|
291
|
+
enumValues: [string, ...string[]];
|
|
292
|
+
baseColumn: never;
|
|
293
|
+
identity: undefined;
|
|
294
|
+
generated: undefined;
|
|
295
|
+
}, {}, {}>;
|
|
296
|
+
contentId: import("drizzle-orm/pg-core").PgColumn<{
|
|
297
|
+
name: "content_id";
|
|
298
|
+
tableName: "role_assignments";
|
|
299
|
+
dataType: "string";
|
|
300
|
+
columnType: "PgText";
|
|
301
|
+
data: string;
|
|
302
|
+
driverParam: string;
|
|
303
|
+
notNull: false;
|
|
304
|
+
hasDefault: false;
|
|
305
|
+
isPrimaryKey: false;
|
|
306
|
+
isAutoincrement: false;
|
|
307
|
+
hasRuntimeDefault: false;
|
|
308
|
+
enumValues: [string, ...string[]];
|
|
309
|
+
baseColumn: never;
|
|
310
|
+
identity: undefined;
|
|
311
|
+
generated: undefined;
|
|
312
|
+
}, {}, {}>;
|
|
313
|
+
contentType: import("drizzle-orm/pg-core").PgColumn<{
|
|
314
|
+
name: "content_type";
|
|
315
|
+
tableName: "role_assignments";
|
|
316
|
+
dataType: "string";
|
|
317
|
+
columnType: "PgText";
|
|
318
|
+
data: "course" | "download" | "event" | "community";
|
|
319
|
+
driverParam: string;
|
|
320
|
+
notNull: false;
|
|
321
|
+
hasDefault: false;
|
|
322
|
+
isPrimaryKey: false;
|
|
323
|
+
isAutoincrement: false;
|
|
324
|
+
hasRuntimeDefault: false;
|
|
325
|
+
enumValues: ["course", "download", "community", "event"];
|
|
326
|
+
baseColumn: never;
|
|
327
|
+
identity: undefined;
|
|
328
|
+
generated: undefined;
|
|
329
|
+
}, {}, {}>;
|
|
330
|
+
assignedBy: import("drizzle-orm/pg-core").PgColumn<{
|
|
331
|
+
name: "assigned_by";
|
|
332
|
+
tableName: "role_assignments";
|
|
333
|
+
dataType: "string";
|
|
334
|
+
columnType: "PgText";
|
|
335
|
+
data: string;
|
|
336
|
+
driverParam: string;
|
|
337
|
+
notNull: true;
|
|
338
|
+
hasDefault: false;
|
|
339
|
+
isPrimaryKey: false;
|
|
340
|
+
isAutoincrement: false;
|
|
341
|
+
hasRuntimeDefault: false;
|
|
342
|
+
enumValues: [string, ...string[]];
|
|
343
|
+
baseColumn: never;
|
|
344
|
+
identity: undefined;
|
|
345
|
+
generated: undefined;
|
|
346
|
+
}, {}, {}>;
|
|
347
|
+
createdAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
348
|
+
name: "created_at";
|
|
349
|
+
tableName: "role_assignments";
|
|
350
|
+
dataType: "date";
|
|
351
|
+
columnType: "PgTimestamp";
|
|
352
|
+
data: Date;
|
|
353
|
+
driverParam: string;
|
|
354
|
+
notNull: true;
|
|
355
|
+
hasDefault: true;
|
|
356
|
+
isPrimaryKey: false;
|
|
357
|
+
isAutoincrement: false;
|
|
358
|
+
hasRuntimeDefault: false;
|
|
359
|
+
enumValues: undefined;
|
|
360
|
+
baseColumn: never;
|
|
361
|
+
identity: undefined;
|
|
362
|
+
generated: undefined;
|
|
363
|
+
}, {}, {}>;
|
|
364
|
+
};
|
|
365
|
+
dialect: "pg";
|
|
366
|
+
}>;
|
|
367
|
+
//#endregion
|
|
368
|
+
export { orgRoles, roleAssignments };
|
|
369
|
+
//# sourceMappingURL=roles.d.ts.map
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { contentItems } from "./content.js";
|
|
2
|
+
import { orgUsers, organizations } from "./organizations.js";
|
|
3
|
+
import { sql } from "drizzle-orm";
|
|
4
|
+
import { boolean, foreignKey, index, jsonb, pgTable, primaryKey, text, timestamp, unique, uniqueIndex } from "drizzle-orm/pg-core";
|
|
5
|
+
import { genId } from "@headless-lms/core/shared/id";
|
|
6
|
+
//#region src/schema/roles.ts
|
|
7
|
+
const orgRoles = pgTable("org_roles", {
|
|
8
|
+
orgId: text("org_id").notNull().references(() => organizations.id, { onDelete: "cascade" }),
|
|
9
|
+
id: text("id").notNull().$defaultFn(() => genId("orgRole")),
|
|
10
|
+
key: text("key").notNull(),
|
|
11
|
+
name: text("name"),
|
|
12
|
+
description: text("description"),
|
|
13
|
+
base: text("base").notNull(),
|
|
14
|
+
levels: text("levels", { enum: [
|
|
15
|
+
"org",
|
|
16
|
+
"course",
|
|
17
|
+
"download",
|
|
18
|
+
"community",
|
|
19
|
+
"event"
|
|
20
|
+
] }).array(),
|
|
21
|
+
permissions: jsonb("permissions").$type().notNull().default({}),
|
|
22
|
+
team: boolean("team"),
|
|
23
|
+
createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
|
|
24
|
+
updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow().$onUpdate(() => /* @__PURE__ */ new Date())
|
|
25
|
+
}, (t) => ({
|
|
26
|
+
pk: primaryKey({ columns: [t.orgId, t.id] }),
|
|
27
|
+
keyUq: unique("org_roles_key_uq").on(t.orgId, t.key),
|
|
28
|
+
nameUq: uniqueIndex("org_roles_name_uq").on(t.orgId, sql`lower(${t.name})`).where(sql`${t.name} is not null`)
|
|
29
|
+
}));
|
|
30
|
+
const roleAssignments = pgTable("role_assignments", {
|
|
31
|
+
orgId: text("org_id").notNull(),
|
|
32
|
+
id: text("id").notNull().$defaultFn(() => genId("roleAssignment")),
|
|
33
|
+
orgUserId: text("org_user_id").notNull(),
|
|
34
|
+
roleKey: text("role_key").notNull(),
|
|
35
|
+
contentId: text("content_id"),
|
|
36
|
+
contentType: text("content_type", { enum: [
|
|
37
|
+
"course",
|
|
38
|
+
"download",
|
|
39
|
+
"community",
|
|
40
|
+
"event"
|
|
41
|
+
] }),
|
|
42
|
+
assignedBy: text("assigned_by").notNull(),
|
|
43
|
+
createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow()
|
|
44
|
+
}, (t) => ({
|
|
45
|
+
pk: primaryKey({ columns: [t.orgId, t.id] }),
|
|
46
|
+
orgUserFk: foreignKey({
|
|
47
|
+
name: "role_assignments_org_user_fk",
|
|
48
|
+
columns: [t.orgId, t.orgUserId],
|
|
49
|
+
foreignColumns: [orgUsers.orgId, orgUsers.id]
|
|
50
|
+
}).onDelete("cascade"),
|
|
51
|
+
contentFk: foreignKey({
|
|
52
|
+
name: "role_assignments_content_fk",
|
|
53
|
+
columns: [
|
|
54
|
+
t.orgId,
|
|
55
|
+
t.contentId,
|
|
56
|
+
t.contentType
|
|
57
|
+
],
|
|
58
|
+
foreignColumns: [
|
|
59
|
+
contentItems.orgId,
|
|
60
|
+
contentItems.id,
|
|
61
|
+
contentItems.type
|
|
62
|
+
]
|
|
63
|
+
}).onDelete("cascade"),
|
|
64
|
+
scopeUq: unique("role_assignments_scope_uq").on(t.orgId, t.orgUserId, t.contentId).nullsNotDistinct(),
|
|
65
|
+
ownerUq: uniqueIndex("role_assignments_owner_uq").on(t.orgId).where(sql`${t.roleKey} = 'owner'`),
|
|
66
|
+
contentIdx: index("role_assignments_content_idx").on(t.orgId, t.contentId)
|
|
67
|
+
}));
|
|
68
|
+
//#endregion
|
|
69
|
+
export { orgRoles, roleAssignments };
|
|
70
|
+
|
|
71
|
+
//# sourceMappingURL=roles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roles.js","names":[],"sources":["../../src/schema/roles.ts"],"sourcesContent":["import { sql } from \"drizzle-orm\";\nimport {\n pgTable,\n text,\n boolean,\n jsonb,\n timestamp,\n foreignKey,\n unique,\n uniqueIndex,\n index,\n primaryKey,\n} from \"drizzle-orm/pg-core\";\nimport type { OrgRoleRow, RoleAssignment } from \"@headless-lms/core/schemas\";\nimport { genId } from \"@headless-lms/core/shared/id\";\nimport { organizations, orgUsers } from \"./organizations.js\";\nimport { contentItems } from \"./content.js\";\nimport type { Expect, NoDrift } from \"./drift.js\";\n\nexport const orgRoles = pgTable(\n \"org_roles\",\n {\n orgId: text(\"org_id\")\n .notNull()\n .references(() => organizations.id, { onDelete: \"cascade\" }),\n id: text(\"id\")\n .notNull()\n .$defaultFn(() => genId(\"orgRole\")),\n key: text(\"key\").notNull(),\n name: text(\"name\"),\n description: text(\"description\"),\n base: text(\"base\").notNull(),\n levels: text(\"levels\", { enum: [\"org\", \"course\", \"download\", \"community\", \"event\"] }).array(),\n permissions: jsonb(\"permissions\").$type<Record<string, boolean>>().notNull().default({}),\n team: boolean(\"team\"),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true })\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (t) => ({\n pk: primaryKey({ columns: [t.orgId, t.id] }),\n keyUq: unique(\"org_roles_key_uq\").on(t.orgId, t.key),\n nameUq: uniqueIndex(\"org_roles_name_uq\")\n .on(t.orgId, sql`lower(${t.name})`)\n .where(sql`${t.name} is not null`),\n }),\n);\n\nexport const roleAssignments = pgTable(\n \"role_assignments\",\n {\n orgId: text(\"org_id\").notNull(),\n id: text(\"id\")\n .notNull()\n .$defaultFn(() => genId(\"roleAssignment\")),\n orgUserId: text(\"org_user_id\").notNull(),\n roleKey: text(\"role_key\").notNull(),\n contentId: text(\"content_id\"),\n contentType: text(\"content_type\", { enum: [\"course\", \"download\", \"community\", \"event\"] }),\n assignedBy: text(\"assigned_by\").notNull(),\n createdAt: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n },\n (t) => ({\n pk: primaryKey({ columns: [t.orgId, t.id] }),\n orgUserFk: foreignKey({\n name: \"role_assignments_org_user_fk\",\n columns: [t.orgId, t.orgUserId],\n foreignColumns: [orgUsers.orgId, orgUsers.id],\n }).onDelete(\"cascade\"),\n contentFk: foreignKey({\n name: \"role_assignments_content_fk\",\n columns: [t.orgId, t.contentId, t.contentType],\n foreignColumns: [contentItems.orgId, contentItems.id, contentItems.type],\n }).onDelete(\"cascade\"),\n scopeUq: unique(\"role_assignments_scope_uq\")\n .on(t.orgId, t.orgUserId, t.contentId)\n .nullsNotDistinct(),\n ownerUq: uniqueIndex(\"role_assignments_owner_uq\")\n .on(t.orgId)\n .where(sql`${t.roleKey} = 'owner'`),\n contentIdx: index(\"role_assignments_content_idx\").on(t.orgId, t.contentId),\n }),\n);\n\ntype _OrgRolesDrift = Expect<NoDrift<typeof orgRoles.$inferSelect, OrgRoleRow>>;\ntype _RoleAssignmentsDrift = Expect<NoDrift<typeof roleAssignments.$inferSelect, RoleAssignment>>;\n"],"mappings":";;;;;;AAmBA,MAAa,WAAW,QACtB,aACA;CACE,OAAO,KAAK,QAAQ,CAAC,CAClB,QAAQ,CAAC,CACT,iBAAiB,cAAc,IAAI,EAAE,UAAU,UAAU,CAAC;CAC7D,IAAI,KAAK,IAAI,CAAC,CACX,QAAQ,CAAC,CACT,iBAAiB,MAAM,SAAS,CAAC;CACpC,KAAK,KAAK,KAAK,CAAC,CAAC,QAAQ;CACzB,MAAM,KAAK,MAAM;CACjB,aAAa,KAAK,aAAa;CAC/B,MAAM,KAAK,MAAM,CAAC,CAAC,QAAQ;CAC3B,QAAQ,KAAK,UAAU,EAAE,MAAM;EAAC;EAAO;EAAU;EAAY;EAAa;CAAO,EAAE,CAAC,CAAC,CAAC,MAAM;CAC5F,aAAa,MAAM,aAAa,CAAC,CAAC,MAA+B,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;CACvF,MAAM,QAAQ,MAAM;CACpB,WAAW,UAAU,cAAc,EAAE,cAAc,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW;CAChF,WAAW,UAAU,cAAc,EAAE,cAAc,KAAK,CAAC,CAAC,CACvD,QAAQ,CAAC,CACT,WAAW,CAAC,CACZ,gCAAgB,IAAI,KAAK,CAAC;AAC/B,IACC,OAAO;CACN,IAAI,WAAW,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;CAC3C,OAAO,OAAO,kBAAkB,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG;CACnD,QAAQ,YAAY,mBAAmB,CAAC,CACrC,GAAG,EAAE,OAAO,GAAG,SAAS,EAAE,KAAK,EAAE,CAAC,CAClC,MAAM,GAAG,GAAG,EAAE,KAAK,aAAa;AACrC,EACF;AAEA,MAAa,kBAAkB,QAC7B,oBACA;CACE,OAAO,KAAK,QAAQ,CAAC,CAAC,QAAQ;CAC9B,IAAI,KAAK,IAAI,CAAC,CACX,QAAQ,CAAC,CACT,iBAAiB,MAAM,gBAAgB,CAAC;CAC3C,WAAW,KAAK,aAAa,CAAC,CAAC,QAAQ;CACvC,SAAS,KAAK,UAAU,CAAC,CAAC,QAAQ;CAClC,WAAW,KAAK,YAAY;CAC5B,aAAa,KAAK,gBAAgB,EAAE,MAAM;EAAC;EAAU;EAAY;EAAa;CAAO,EAAE,CAAC;CACxF,YAAY,KAAK,aAAa,CAAC,CAAC,QAAQ;CACxC,WAAW,UAAU,cAAc,EAAE,cAAc,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW;AAClF,IACC,OAAO;CACN,IAAI,WAAW,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;CAC3C,WAAW,WAAW;EACpB,MAAM;EACN,SAAS,CAAC,EAAE,OAAO,EAAE,SAAS;EAC9B,gBAAgB,CAAC,SAAS,OAAO,SAAS,EAAE;CAC9C,CAAC,CAAC,CAAC,SAAS,SAAS;CACrB,WAAW,WAAW;EACpB,MAAM;EACN,SAAS;GAAC,EAAE;GAAO,EAAE;GAAW,EAAE;EAAW;EAC7C,gBAAgB;GAAC,aAAa;GAAO,aAAa;GAAI,aAAa;EAAI;CACzE,CAAC,CAAC,CAAC,SAAS,SAAS;CACrB,SAAS,OAAO,2BAA2B,CAAC,CACzC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,CACrC,iBAAiB;CACpB,SAAS,YAAY,2BAA2B,CAAC,CAC9C,GAAG,EAAE,KAAK,CAAC,CACX,MAAM,GAAG,GAAG,EAAE,QAAQ,WAAW;CACpC,YAAY,MAAM,8BAA8B,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS;AAC3E,EACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
CREATE TABLE "digest_runs" (
|
|
2
|
+
"org_id" text NOT NULL,
|
|
3
|
+
"community_id" text NOT NULL,
|
|
4
|
+
"last_due_at" timestamp with time zone NOT NULL,
|
|
5
|
+
CONSTRAINT "digest_runs_org_id_community_id_pk" PRIMARY KEY("org_id","community_id")
|
|
6
|
+
);
|
|
7
|
+
--> statement-breakpoint
|
|
8
|
+
ALTER TABLE "digest_runs" ADD CONSTRAINT "digest_runs_org_id_community_id_communities_org_id_id_fk" FOREIGN KEY ("org_id","community_id") REFERENCES "public"."communities"("org_id","id") ON DELETE cascade ON UPDATE no action;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
CREATE TABLE "subscriptions" (
|
|
2
|
+
"org_id" text NOT NULL,
|
|
3
|
+
"org_user_id" text NOT NULL,
|
|
4
|
+
"item_type" text NOT NULL,
|
|
5
|
+
"item_id" text NOT NULL,
|
|
6
|
+
"state" text NOT NULL,
|
|
7
|
+
"muted_until" timestamp with time zone,
|
|
8
|
+
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
9
|
+
CONSTRAINT "subscriptions_org_id_org_user_id_item_type_item_id_pk" PRIMARY KEY("org_id","org_user_id","item_type","item_id")
|
|
10
|
+
);
|
|
11
|
+
--> statement-breakpoint
|
|
12
|
+
DROP TABLE "post_follows" CASCADE;--> statement-breakpoint
|
|
13
|
+
ALTER TABLE "subscriptions" ADD CONSTRAINT "subscriptions_org_id_org_user_id_org_users_org_id_id_fk" FOREIGN KEY ("org_id","org_user_id") REFERENCES "public"."org_users"("org_id","id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
14
|
+
CREATE INDEX "subscriptions_item_idx" ON "subscriptions" USING btree ("org_id","item_type","item_id","state");--> statement-breakpoint
|
|
15
|
+
ALTER TABLE "chat_users" DROP COLUMN "muted";--> statement-breakpoint
|
|
16
|
+
ALTER TABLE "chat_users" DROP COLUMN "muted_until";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
CREATE TABLE "mentions" (
|
|
2
|
+
"org_id" text NOT NULL,
|
|
3
|
+
"item_type" text NOT NULL,
|
|
4
|
+
"item_id" text NOT NULL,
|
|
5
|
+
"org_user_id" text NOT NULL,
|
|
6
|
+
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
7
|
+
CONSTRAINT "mentions_org_id_item_type_item_id_org_user_id_pk" PRIMARY KEY("org_id","item_type","item_id","org_user_id")
|
|
8
|
+
);
|
|
9
|
+
--> statement-breakpoint
|
|
10
|
+
ALTER TABLE "mentions" ADD CONSTRAINT "mentions_org_id_org_user_id_org_users_org_id_id_fk" FOREIGN KEY ("org_id","org_user_id") REFERENCES "public"."org_users"("org_id","id") ON DELETE cascade ON UPDATE no action;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
CREATE TABLE "devices" (
|
|
2
|
+
"org_id" text NOT NULL,
|
|
3
|
+
"id" text NOT NULL,
|
|
4
|
+
"user_id" text NOT NULL,
|
|
5
|
+
"provider" text NOT NULL,
|
|
6
|
+
"token" text NOT NULL,
|
|
7
|
+
"p256dh" text,
|
|
8
|
+
"auth" text,
|
|
9
|
+
"app_id" text,
|
|
10
|
+
"environment" text,
|
|
11
|
+
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
12
|
+
"last_seen_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
13
|
+
CONSTRAINT "devices_org_id_id_pk" PRIMARY KEY("org_id","id")
|
|
14
|
+
);
|
|
15
|
+
--> statement-breakpoint
|
|
16
|
+
CREATE TABLE "notification_settings" (
|
|
17
|
+
"org_id" text NOT NULL,
|
|
18
|
+
"id" text NOT NULL,
|
|
19
|
+
"user_id" text NOT NULL,
|
|
20
|
+
"community_id" text,
|
|
21
|
+
"space_id" text,
|
|
22
|
+
"category" text NOT NULL,
|
|
23
|
+
"channel" text NOT NULL,
|
|
24
|
+
"enabled" boolean NOT NULL,
|
|
25
|
+
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
26
|
+
CONSTRAINT "notification_settings_org_id_id_pk" PRIMARY KEY("org_id","id")
|
|
27
|
+
);
|
|
28
|
+
--> statement-breakpoint
|
|
29
|
+
ALTER TABLE "devices" ADD CONSTRAINT "devices_org_id_user_id_org_users_org_id_user_id_fk" FOREIGN KEY ("org_id","user_id") REFERENCES "public"."org_users"("org_id","user_id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
30
|
+
ALTER TABLE "notification_settings" ADD CONSTRAINT "notification_settings_org_id_user_id_org_users_org_id_user_id_fk" FOREIGN KEY ("org_id","user_id") REFERENCES "public"."org_users"("org_id","user_id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
31
|
+
ALTER TABLE "notification_settings" ADD CONSTRAINT "notification_settings_org_id_community_id_communities_org_id_id_fk" FOREIGN KEY ("org_id","community_id") REFERENCES "public"."communities"("org_id","id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
32
|
+
ALTER TABLE "notification_settings" ADD CONSTRAINT "notification_settings_org_id_space_id_spaces_org_id_id_fk" FOREIGN KEY ("org_id","space_id") REFERENCES "public"."spaces"("org_id","id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
33
|
+
CREATE UNIQUE INDEX "devices_token_idx" ON "devices" USING btree ("org_id","provider","token");--> statement-breakpoint
|
|
34
|
+
CREATE INDEX "devices_user_idx" ON "devices" USING btree ("org_id","user_id","last_seen_at");--> statement-breakpoint
|
|
35
|
+
CREATE UNIQUE INDEX "notification_settings_setting_idx" ON "notification_settings" USING btree ("org_id","user_id",coalesce("community_id", ''),coalesce("space_id", ''),"category","channel");--> statement-breakpoint
|
|
36
|
+
CREATE INDEX "notification_settings_switched_on_idx" ON "notification_settings" USING btree ("org_id",coalesce("community_id", ''),"category",coalesce("space_id", '')) WHERE "notification_settings"."enabled";
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
DROP TABLE "notification_preferences" CASCADE;--> statement-breakpoint
|
|
2
|
+
DROP TABLE "notifications" CASCADE;--> statement-breakpoint
|
|
3
|
+
CREATE TABLE "notification_deliveries" (
|
|
4
|
+
"org_id" text NOT NULL,
|
|
5
|
+
"id" text NOT NULL,
|
|
6
|
+
"notification_id" text NOT NULL,
|
|
7
|
+
"channel" text NOT NULL,
|
|
8
|
+
"status" text DEFAULT 'pending' NOT NULL,
|
|
9
|
+
"last_error" text,
|
|
10
|
+
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
11
|
+
"sent_at" timestamp with time zone,
|
|
12
|
+
CONSTRAINT "notification_deliveries_org_id_id_pk" PRIMARY KEY("org_id","id")
|
|
13
|
+
);
|
|
14
|
+
--> statement-breakpoint
|
|
15
|
+
CREATE TABLE "notifications" (
|
|
16
|
+
"org_id" text NOT NULL,
|
|
17
|
+
"id" text NOT NULL,
|
|
18
|
+
"user_id" text NOT NULL,
|
|
19
|
+
"source_event_id" text,
|
|
20
|
+
"type" text NOT NULL,
|
|
21
|
+
"scope" text NOT NULL,
|
|
22
|
+
"reasons" text[] NOT NULL,
|
|
23
|
+
"matched_reason" text NOT NULL,
|
|
24
|
+
"category" text NOT NULL,
|
|
25
|
+
"community_id" text,
|
|
26
|
+
"space_id" text,
|
|
27
|
+
"actor_org_user_id" text,
|
|
28
|
+
"subject_type" text,
|
|
29
|
+
"subject_id" text,
|
|
30
|
+
"parent_type" text,
|
|
31
|
+
"parent_id" text,
|
|
32
|
+
"display" jsonb NOT NULL,
|
|
33
|
+
"in_app" boolean NOT NULL,
|
|
34
|
+
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
35
|
+
"read_at" timestamp with time zone,
|
|
36
|
+
CONSTRAINT "notifications_org_id_id_pk" PRIMARY KEY("org_id","id")
|
|
37
|
+
);
|
|
38
|
+
--> statement-breakpoint
|
|
39
|
+
ALTER TABLE "notification_deliveries" ADD CONSTRAINT "notification_deliveries_org_id_notification_id_notifications_org_id_id_fk" FOREIGN KEY ("org_id","notification_id") REFERENCES "public"."notifications"("org_id","id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
40
|
+
ALTER TABLE "notifications" ADD CONSTRAINT "notifications_org_id_user_id_org_users_org_id_user_id_fk" FOREIGN KEY ("org_id","user_id") REFERENCES "public"."org_users"("org_id","user_id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
41
|
+
ALTER TABLE "notifications" ADD CONSTRAINT "notifications_org_id_community_id_communities_org_id_id_fk" FOREIGN KEY ("org_id","community_id") REFERENCES "public"."communities"("org_id","id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
42
|
+
ALTER TABLE "notifications" ADD CONSTRAINT "notifications_org_id_space_id_spaces_org_id_id_fk" FOREIGN KEY ("org_id","space_id") REFERENCES "public"."spaces"("org_id","id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
43
|
+
CREATE UNIQUE INDEX "notification_deliveries_channel_idx" ON "notification_deliveries" USING btree ("org_id","notification_id","channel");--> statement-breakpoint
|
|
44
|
+
CREATE UNIQUE INDEX "notifications_source_event_idx" ON "notifications" USING btree ("org_id","source_event_id","user_id",coalesce("community_id", '')) WHERE "notifications"."source_event_id" is not null;--> statement-breakpoint
|
|
45
|
+
CREATE INDEX "notifications_list_idx" ON "notifications" USING btree ("org_id","user_id","created_at" desc,"id" desc) WHERE "notifications"."in_app";--> statement-breakpoint
|
|
46
|
+
CREATE INDEX "notifications_community_idx" ON "notifications" USING btree ("org_id","user_id","community_id");--> statement-breakpoint
|
|
47
|
+
CREATE INDEX "notifications_category_idx" ON "notifications" USING btree ("org_id","user_id","category");--> statement-breakpoint
|
|
48
|
+
CREATE INDEX "notifications_reasons_idx" ON "notifications" USING gin ("reasons");
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
CREATE TABLE "org_roles" (
|
|
2
|
+
"org_id" text NOT NULL,
|
|
3
|
+
"id" text NOT NULL,
|
|
4
|
+
"key" text NOT NULL,
|
|
5
|
+
"name" text,
|
|
6
|
+
"description" text,
|
|
7
|
+
"base" text NOT NULL,
|
|
8
|
+
"levels" text[],
|
|
9
|
+
"permissions" jsonb DEFAULT '{}'::jsonb NOT NULL,
|
|
10
|
+
"team" boolean,
|
|
11
|
+
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
12
|
+
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
13
|
+
CONSTRAINT "org_roles_org_id_id_pk" PRIMARY KEY("org_id","id"),
|
|
14
|
+
CONSTRAINT "org_roles_key_uq" UNIQUE("org_id","key")
|
|
15
|
+
);
|
|
16
|
+
--> statement-breakpoint
|
|
17
|
+
CREATE TABLE "role_assignments" (
|
|
18
|
+
"org_id" text NOT NULL,
|
|
19
|
+
"id" text NOT NULL,
|
|
20
|
+
"org_user_id" text NOT NULL,
|
|
21
|
+
"role_key" text NOT NULL,
|
|
22
|
+
"content_id" text,
|
|
23
|
+
"content_type" text,
|
|
24
|
+
"assigned_by" text NOT NULL,
|
|
25
|
+
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
26
|
+
CONSTRAINT "role_assignments_org_id_id_pk" PRIMARY KEY("org_id","id"),
|
|
27
|
+
CONSTRAINT "role_assignments_scope_uq" UNIQUE NULLS NOT DISTINCT("org_id","org_user_id","content_id")
|
|
28
|
+
);
|
|
29
|
+
--> statement-breakpoint
|
|
30
|
+
ALTER TABLE "invites" ALTER COLUMN "role" SET DEFAULT 'member';--> statement-breakpoint
|
|
31
|
+
ALTER TABLE "assets" ADD COLUMN "content_id" text;--> statement-breakpoint
|
|
32
|
+
ALTER TABLE "org_roles" ADD CONSTRAINT "org_roles_org_id_organizations_id_fk" FOREIGN KEY ("org_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
33
|
+
ALTER TABLE "role_assignments" ADD CONSTRAINT "role_assignments_org_user_fk" FOREIGN KEY ("org_id","org_user_id") REFERENCES "public"."org_users"("org_id","id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
34
|
+
ALTER TABLE "role_assignments" ADD CONSTRAINT "role_assignments_content_fk" FOREIGN KEY ("org_id","content_id","content_type") REFERENCES "public"."content_items"("org_id","id","type") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
35
|
+
CREATE UNIQUE INDEX "org_roles_name_uq" ON "org_roles" USING btree ("org_id",lower("name")) WHERE "org_roles"."name" is not null;--> statement-breakpoint
|
|
36
|
+
CREATE UNIQUE INDEX "role_assignments_owner_uq" ON "role_assignments" USING btree ("org_id") WHERE "role_assignments"."role_key" = 'owner';--> statement-breakpoint
|
|
37
|
+
CREATE INDEX "role_assignments_content_idx" ON "role_assignments" USING btree ("org_id","content_id");--> statement-breakpoint
|
|
38
|
+
ALTER TABLE "org_users" DROP COLUMN "role";
|