@coursebuilder/adapter-drizzle 0.4.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/{chunk-57CX5SOI.js → chunk-2UU2F4DM.js} +5 -4
- package/dist/{chunk-V23SCQL7.js → chunk-3NUCFLQJ.js} +2 -2
- package/dist/{chunk-Y7QZGEPT.js → chunk-4ZWS76VQ.js} +2 -2
- package/dist/{chunk-PPBEA4EM.js → chunk-6ON2O6UD.js} +2 -2
- package/dist/{chunk-ULEUIL2Y.js → chunk-BM5UKWXI.js} +3 -3
- package/dist/{chunk-IDINCRHK.js → chunk-CQNKTFXE.js} +3 -3
- package/dist/{chunk-N7UDJAI3.js → chunk-FRA4ZCRA.js} +462 -337
- package/dist/{chunk-J4LBG2TH.js → chunk-GINRTL6J.js} +2 -2
- package/dist/chunk-JZQ666KH.js +62 -0
- package/dist/{chunk-GLPDG7UE.js → chunk-KDEWFXEP.js} +2 -2
- package/dist/{chunk-MBB4GIJI.js → chunk-LERR6HQ3.js} +2 -2
- package/dist/{chunk-VDVCCU7D.js → chunk-LZHZDFNZ.js} +2 -2
- package/dist/{chunk-XJHSXR42.js → chunk-O6JECJRY.js} +4 -4
- package/dist/{chunk-BX5SO2JG.js → chunk-P4VXXTVA.js} +2 -2
- package/dist/{chunk-VXZRMVNY.js → chunk-QP6YMUQX.js} +2 -2
- package/dist/chunk-QTGVGIRO.js +54 -0
- package/dist/{chunk-ZD3R6UPJ.js → chunk-SRTIWWLG.js} +7 -7
- package/dist/{chunk-DL3UMWB4.js → chunk-TBM3AK3P.js} +3 -3
- package/dist/{chunk-FNYW3XKR.js → chunk-XIGJFVUM.js} +8 -8
- package/dist/{chunk-JKOYOL7A.js → chunk-YGRYHMCG.js} +2 -2
- package/dist/chunk-YVVXDJHI.js +56 -0
- package/dist/{chunk-A26D3TCA.js → chunk-Z245DYMP.js} +159 -62
- package/dist/index.js +22 -19
- package/dist/lib/mysql/index.cjs +992 -650
- package/dist/lib/mysql/index.cjs.map +1 -1
- package/dist/lib/mysql/index.d.cts +2064 -1148
- package/dist/lib/mysql/index.d.ts +2064 -1148
- package/dist/lib/mysql/index.js +22 -19
- package/dist/lib/mysql/schemas/auth/accounts.cjs +85 -77
- package/dist/lib/mysql/schemas/auth/accounts.cjs.map +1 -1
- package/dist/lib/mysql/schemas/auth/accounts.d.cts +17 -17
- package/dist/lib/mysql/schemas/auth/accounts.d.ts +17 -17
- package/dist/lib/mysql/schemas/auth/accounts.js +12 -12
- package/dist/lib/mysql/schemas/auth/device-access-token.cjs +214 -0
- package/dist/lib/mysql/schemas/auth/device-access-token.cjs.map +1 -0
- package/dist/lib/mysql/schemas/auth/device-access-token.d.cts +52 -0
- package/dist/lib/mysql/schemas/auth/device-access-token.d.ts +52 -0
- package/dist/lib/mysql/schemas/auth/device-access-token.js +22 -0
- package/dist/lib/mysql/schemas/auth/device-access-token.js.map +1 -0
- package/dist/lib/mysql/schemas/auth/device-verification.cjs +222 -0
- package/dist/lib/mysql/schemas/auth/device-verification.cjs.map +1 -0
- package/dist/lib/mysql/schemas/auth/device-verification.d.cts +88 -0
- package/dist/lib/mysql/schemas/auth/device-verification.d.ts +88 -0
- package/dist/lib/mysql/schemas/auth/device-verification.js +22 -0
- package/dist/lib/mysql/schemas/auth/device-verification.js.map +1 -0
- package/dist/lib/mysql/schemas/auth/permissions.cjs +1 -1
- package/dist/lib/mysql/schemas/auth/permissions.cjs.map +1 -1
- package/dist/lib/mysql/schemas/auth/permissions.d.cts +9 -9
- package/dist/lib/mysql/schemas/auth/permissions.d.ts +9 -9
- package/dist/lib/mysql/schemas/auth/permissions.js +1 -1
- package/dist/lib/mysql/schemas/auth/role-permissions.cjs +74 -66
- package/dist/lib/mysql/schemas/auth/role-permissions.cjs.map +1 -1
- package/dist/lib/mysql/schemas/auth/role-permissions.d.cts +10 -10
- package/dist/lib/mysql/schemas/auth/role-permissions.d.ts +10 -10
- package/dist/lib/mysql/schemas/auth/role-permissions.js +13 -13
- package/dist/lib/mysql/schemas/auth/roles.cjs +72 -64
- package/dist/lib/mysql/schemas/auth/roles.cjs.map +1 -1
- package/dist/lib/mysql/schemas/auth/roles.d.cts +10 -10
- package/dist/lib/mysql/schemas/auth/roles.d.ts +10 -10
- package/dist/lib/mysql/schemas/auth/roles.js +12 -12
- package/dist/lib/mysql/schemas/auth/sessions.cjs +75 -67
- package/dist/lib/mysql/schemas/auth/sessions.cjs.map +1 -1
- package/dist/lib/mysql/schemas/auth/sessions.d.cts +6 -6
- package/dist/lib/mysql/schemas/auth/sessions.d.ts +6 -6
- package/dist/lib/mysql/schemas/auth/sessions.js +13 -13
- package/dist/lib/mysql/schemas/auth/user-permissions.cjs +77 -69
- package/dist/lib/mysql/schemas/auth/user-permissions.cjs.map +1 -1
- package/dist/lib/mysql/schemas/auth/user-permissions.d.cts +10 -10
- package/dist/lib/mysql/schemas/auth/user-permissions.d.ts +10 -10
- package/dist/lib/mysql/schemas/auth/user-permissions.js +12 -12
- package/dist/lib/mysql/schemas/auth/user-prefs.cjs +222 -0
- package/dist/lib/mysql/schemas/auth/user-prefs.cjs.map +1 -0
- package/dist/lib/mysql/schemas/auth/user-prefs.d.cts +100 -0
- package/dist/lib/mysql/schemas/auth/user-prefs.d.ts +100 -0
- package/dist/lib/mysql/schemas/auth/user-prefs.js +21 -0
- package/dist/lib/mysql/schemas/auth/user-prefs.js.map +1 -0
- package/dist/lib/mysql/schemas/auth/user-roles.cjs +77 -69
- package/dist/lib/mysql/schemas/auth/user-roles.cjs.map +1 -1
- package/dist/lib/mysql/schemas/auth/user-roles.d.cts +10 -10
- package/dist/lib/mysql/schemas/auth/user-roles.d.ts +10 -10
- package/dist/lib/mysql/schemas/auth/user-roles.js +12 -12
- package/dist/lib/mysql/schemas/auth/users.cjs +263 -180
- package/dist/lib/mysql/schemas/auth/users.cjs.map +1 -1
- package/dist/lib/mysql/schemas/auth/users.d.cts +35 -21
- package/dist/lib/mysql/schemas/auth/users.d.ts +35 -21
- package/dist/lib/mysql/schemas/auth/users.js +12 -12
- package/dist/lib/mysql/schemas/auth/verification-tokens.cjs +1 -1
- package/dist/lib/mysql/schemas/auth/verification-tokens.cjs.map +1 -1
- package/dist/lib/mysql/schemas/auth/verification-tokens.d.cts +5 -5
- package/dist/lib/mysql/schemas/auth/verification-tokens.d.ts +5 -5
- package/dist/lib/mysql/schemas/auth/verification-tokens.js +1 -1
- package/dist/lib/mysql/schemas/commerce/coupon.cjs +75 -66
- package/dist/lib/mysql/schemas/commerce/coupon.cjs.map +1 -1
- package/dist/lib/mysql/schemas/commerce/coupon.d.cts +19 -19
- package/dist/lib/mysql/schemas/commerce/coupon.d.ts +19 -19
- package/dist/lib/mysql/schemas/commerce/coupon.js +12 -12
- package/dist/lib/mysql/schemas/commerce/merchant-account.cjs +1 -1
- package/dist/lib/mysql/schemas/commerce/merchant-account.cjs.map +1 -1
- package/dist/lib/mysql/schemas/commerce/merchant-account.d.cts +6 -6
- package/dist/lib/mysql/schemas/commerce/merchant-account.d.ts +6 -6
- package/dist/lib/mysql/schemas/commerce/merchant-account.js +1 -1
- package/dist/lib/mysql/schemas/commerce/merchant-charge.cjs +6 -5
- package/dist/lib/mysql/schemas/commerce/merchant-charge.cjs.map +1 -1
- package/dist/lib/mysql/schemas/commerce/merchant-charge.d.cts +13 -13
- package/dist/lib/mysql/schemas/commerce/merchant-charge.d.ts +13 -13
- package/dist/lib/mysql/schemas/commerce/merchant-charge.js +4 -4
- package/dist/lib/mysql/schemas/commerce/merchant-coupon.cjs +1 -1
- package/dist/lib/mysql/schemas/commerce/merchant-coupon.cjs.map +1 -1
- package/dist/lib/mysql/schemas/commerce/merchant-coupon.d.cts +7 -7
- package/dist/lib/mysql/schemas/commerce/merchant-coupon.d.ts +7 -7
- package/dist/lib/mysql/schemas/commerce/merchant-coupon.js +1 -1
- package/dist/lib/mysql/schemas/commerce/merchant-customer.cjs +3 -2
- package/dist/lib/mysql/schemas/commerce/merchant-customer.cjs.map +1 -1
- package/dist/lib/mysql/schemas/commerce/merchant-customer.d.cts +7 -7
- package/dist/lib/mysql/schemas/commerce/merchant-customer.d.ts +7 -7
- package/dist/lib/mysql/schemas/commerce/merchant-customer.js +1 -1
- package/dist/lib/mysql/schemas/commerce/merchant-price.cjs +1 -1
- package/dist/lib/mysql/schemas/commerce/merchant-price.cjs.map +1 -1
- package/dist/lib/mysql/schemas/commerce/merchant-price.d.cts +8 -8
- package/dist/lib/mysql/schemas/commerce/merchant-price.d.ts +8 -8
- package/dist/lib/mysql/schemas/commerce/merchant-price.js +1 -1
- package/dist/lib/mysql/schemas/commerce/merchant-product.cjs +1 -1
- package/dist/lib/mysql/schemas/commerce/merchant-product.cjs.map +1 -1
- package/dist/lib/mysql/schemas/commerce/merchant-product.d.cts +7 -7
- package/dist/lib/mysql/schemas/commerce/merchant-product.d.ts +7 -7
- package/dist/lib/mysql/schemas/commerce/merchant-product.js +1 -1
- package/dist/lib/mysql/schemas/commerce/merchant-session.cjs +1 -1
- package/dist/lib/mysql/schemas/commerce/merchant-session.cjs.map +1 -1
- package/dist/lib/mysql/schemas/commerce/merchant-session.d.cts +4 -4
- package/dist/lib/mysql/schemas/commerce/merchant-session.d.ts +4 -4
- package/dist/lib/mysql/schemas/commerce/merchant-session.js +1 -1
- package/dist/lib/mysql/schemas/commerce/price.cjs +60 -52
- package/dist/lib/mysql/schemas/commerce/price.cjs.map +1 -1
- package/dist/lib/mysql/schemas/commerce/price.d.cts +11 -11
- package/dist/lib/mysql/schemas/commerce/price.d.ts +11 -11
- package/dist/lib/mysql/schemas/commerce/price.js +12 -12
- package/dist/lib/mysql/schemas/commerce/product.cjs +75 -67
- package/dist/lib/mysql/schemas/commerce/product.cjs.map +1 -1
- package/dist/lib/mysql/schemas/commerce/product.d.cts +13 -13
- package/dist/lib/mysql/schemas/commerce/product.d.ts +13 -13
- package/dist/lib/mysql/schemas/commerce/product.js +12 -12
- package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.cjs +105 -96
- package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.cjs.map +1 -1
- package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.d.cts +15 -15
- package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.d.ts +15 -15
- package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.js +13 -13
- package/dist/lib/mysql/schemas/commerce/purchase.cjs +138 -129
- package/dist/lib/mysql/schemas/commerce/purchase.cjs.map +1 -1
- package/dist/lib/mysql/schemas/commerce/purchase.d.cts +25 -25
- package/dist/lib/mysql/schemas/commerce/purchase.d.ts +25 -25
- package/dist/lib/mysql/schemas/commerce/purchase.js +12 -12
- package/dist/lib/mysql/schemas/commerce/upgradable-products.cjs +66 -58
- package/dist/lib/mysql/schemas/commerce/upgradable-products.cjs.map +1 -1
- package/dist/lib/mysql/schemas/commerce/upgradable-products.d.cts +11 -11
- package/dist/lib/mysql/schemas/commerce/upgradable-products.d.ts +11 -11
- package/dist/lib/mysql/schemas/commerce/upgradable-products.js +13 -13
- package/dist/lib/mysql/schemas/communication/comment.cjs +220 -0
- package/dist/lib/mysql/schemas/communication/comment.cjs.map +1 -0
- package/dist/lib/mysql/schemas/communication/comment.d.cts +100 -0
- package/dist/lib/mysql/schemas/communication/comment.d.ts +100 -0
- package/dist/lib/mysql/schemas/communication/comment.js +21 -0
- package/dist/lib/mysql/schemas/communication/comment.js.map +1 -0
- package/dist/lib/mysql/schemas/communication/communication-channel.cjs +1 -1
- package/dist/lib/mysql/schemas/communication/communication-channel.cjs.map +1 -1
- package/dist/lib/mysql/schemas/communication/communication-channel.d.cts +8 -8
- package/dist/lib/mysql/schemas/communication/communication-channel.d.ts +8 -8
- package/dist/lib/mysql/schemas/communication/communication-channel.js +1 -1
- package/dist/lib/mysql/schemas/communication/communication-preference-types.cjs +1 -1
- package/dist/lib/mysql/schemas/communication/communication-preference-types.cjs.map +1 -1
- package/dist/lib/mysql/schemas/communication/communication-preference-types.d.cts +8 -8
- package/dist/lib/mysql/schemas/communication/communication-preference-types.d.ts +8 -8
- package/dist/lib/mysql/schemas/communication/communication-preference-types.js +1 -1
- package/dist/lib/mysql/schemas/communication/communication-preferences.cjs +99 -91
- package/dist/lib/mysql/schemas/communication/communication-preferences.cjs.map +1 -1
- package/dist/lib/mysql/schemas/communication/communication-preferences.d.cts +16 -16
- package/dist/lib/mysql/schemas/communication/communication-preferences.d.ts +16 -16
- package/dist/lib/mysql/schemas/communication/communication-preferences.js +12 -12
- package/dist/lib/mysql/schemas/content/content-contributions.cjs +67 -59
- package/dist/lib/mysql/schemas/content/content-contributions.cjs.map +1 -1
- package/dist/lib/mysql/schemas/content/content-contributions.d.cts +13 -13
- package/dist/lib/mysql/schemas/content/content-contributions.d.ts +13 -13
- package/dist/lib/mysql/schemas/content/content-contributions.js +12 -12
- package/dist/lib/mysql/schemas/content/content-resource-product.cjs +61 -53
- package/dist/lib/mysql/schemas/content/content-resource-product.cjs.map +1 -1
- package/dist/lib/mysql/schemas/content/content-resource-product.d.cts +11 -11
- package/dist/lib/mysql/schemas/content/content-resource-product.d.ts +11 -11
- package/dist/lib/mysql/schemas/content/content-resource-product.js +12 -12
- package/dist/lib/mysql/schemas/content/content-resource-resource.cjs +58 -50
- package/dist/lib/mysql/schemas/content/content-resource-resource.cjs.map +1 -1
- package/dist/lib/mysql/schemas/content/content-resource-resource.d.cts +11 -11
- package/dist/lib/mysql/schemas/content/content-resource-resource.d.ts +11 -11
- package/dist/lib/mysql/schemas/content/content-resource-resource.js +12 -12
- package/dist/lib/mysql/schemas/content/content-resource.cjs +114 -66
- package/dist/lib/mysql/schemas/content/content-resource.cjs.map +1 -1
- package/dist/lib/mysql/schemas/content/content-resource.d.cts +14 -13
- package/dist/lib/mysql/schemas/content/content-resource.d.ts +14 -13
- package/dist/lib/mysql/schemas/content/content-resource.js +12 -12
- package/dist/lib/mysql/schemas/content/contribution-types.cjs +1 -1
- package/dist/lib/mysql/schemas/content/contribution-types.cjs.map +1 -1
- package/dist/lib/mysql/schemas/content/contribution-types.d.cts +10 -10
- package/dist/lib/mysql/schemas/content/contribution-types.d.ts +10 -10
- package/dist/lib/mysql/schemas/content/contribution-types.js +1 -1
- package/dist/lib/mysql/schemas/content/lesson-progress.cjs +77 -0
- package/dist/lib/mysql/schemas/content/lesson-progress.cjs.map +1 -0
- package/dist/lib/mysql/schemas/content/lesson-progress.d.cts +132 -0
- package/dist/lib/mysql/schemas/content/lesson-progress.d.ts +132 -0
- package/dist/lib/mysql/schemas/content/lesson-progress.js +8 -0
- package/dist/lib/mysql/schemas/content/lesson-progress.js.map +1 -0
- package/dist/lib/mysql/schemas/content/resource-progress.cjs +7 -7
- package/dist/lib/mysql/schemas/content/resource-progress.cjs.map +1 -1
- package/dist/lib/mysql/schemas/content/resource-progress.d.cts +9 -9
- package/dist/lib/mysql/schemas/content/resource-progress.d.ts +9 -9
- package/dist/lib/mysql/schemas/content/resource-progress.js +1 -1
- package/package.json +5 -5
- package/src/lib/mysql/index.ts +142 -39
- package/src/lib/mysql/schemas/auth/accounts.ts +1 -1
- package/src/lib/mysql/schemas/auth/device-access-token.ts +40 -0
- package/src/lib/mysql/schemas/auth/device-verification.ts +48 -0
- package/src/lib/mysql/schemas/auth/permissions.ts +1 -1
- package/src/lib/mysql/schemas/auth/role-permissions.ts +1 -1
- package/src/lib/mysql/schemas/auth/roles.ts +1 -1
- package/src/lib/mysql/schemas/auth/sessions.ts +1 -1
- package/src/lib/mysql/schemas/auth/user-permissions.ts +1 -1
- package/src/lib/mysql/schemas/auth/user-prefs.ts +52 -0
- package/src/lib/mysql/schemas/auth/user-roles.ts +1 -1
- package/src/lib/mysql/schemas/auth/users.ts +14 -2
- package/src/lib/mysql/schemas/auth/verification-tokens.ts +1 -1
- package/src/lib/mysql/schemas/commerce/coupon.ts +1 -4
- package/src/lib/mysql/schemas/commerce/merchant-account.ts +1 -1
- package/src/lib/mysql/schemas/commerce/merchant-charge.ts +1 -1
- package/src/lib/mysql/schemas/commerce/merchant-coupon.ts +1 -1
- package/src/lib/mysql/schemas/commerce/merchant-customer.ts +3 -1
- package/src/lib/mysql/schemas/commerce/merchant-price.ts +1 -1
- package/src/lib/mysql/schemas/commerce/merchant-product.ts +1 -1
- package/src/lib/mysql/schemas/commerce/merchant-session.ts +1 -1
- package/src/lib/mysql/schemas/commerce/price.ts +1 -1
- package/src/lib/mysql/schemas/commerce/product.ts +1 -1
- package/src/lib/mysql/schemas/commerce/purchase-user-transfer.ts +1 -1
- package/src/lib/mysql/schemas/commerce/purchase.ts +5 -4
- package/src/lib/mysql/schemas/commerce/upgradable-products.ts +1 -1
- package/src/lib/mysql/schemas/communication/comment.ts +52 -0
- package/src/lib/mysql/schemas/communication/communication-channel.ts +1 -1
- package/src/lib/mysql/schemas/communication/communication-preference-types.ts +1 -1
- package/src/lib/mysql/schemas/communication/communication-preferences.ts +1 -1
- package/src/lib/mysql/schemas/content/content-contributions.ts +1 -1
- package/src/lib/mysql/schemas/content/content-resource-product.ts +1 -1
- package/src/lib/mysql/schemas/content/content-resource-resource.ts +1 -1
- package/src/lib/mysql/schemas/content/content-resource.ts +6 -2
- package/src/lib/mysql/schemas/content/contribution-types.ts +1 -1
- package/src/lib/mysql/schemas/content/lesson-progress.ts +39 -0
- package/src/lib/mysql/schemas/content/resource-progress.ts +6 -8
package/src/lib/mysql/index.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { addSeconds, isAfter } from 'date-fns'
|
|
|
3
3
|
import {
|
|
4
4
|
and,
|
|
5
5
|
asc,
|
|
6
|
+
count,
|
|
6
7
|
desc,
|
|
7
8
|
eq,
|
|
8
9
|
gte,
|
|
@@ -52,6 +53,8 @@ import {
|
|
|
52
53
|
import {
|
|
53
54
|
ContentResourceResourceSchema,
|
|
54
55
|
ContentResourceSchema,
|
|
56
|
+
type ContentResource,
|
|
57
|
+
type ContentResourceResource,
|
|
55
58
|
} from '@coursebuilder/core/schemas/content-resource-schema'
|
|
56
59
|
import { merchantAccountSchema } from '@coursebuilder/core/schemas/merchant-account-schema'
|
|
57
60
|
import { merchantCustomerSchema } from '@coursebuilder/core/schemas/merchant-customer-schema'
|
|
@@ -64,6 +67,14 @@ import {
|
|
|
64
67
|
getAccountsRelationsSchema,
|
|
65
68
|
getAccountsSchema,
|
|
66
69
|
} from './schemas/auth/accounts.js'
|
|
70
|
+
import {
|
|
71
|
+
getDeviceAccessTokenRelationsSchema,
|
|
72
|
+
getDeviceAccessTokenSchema,
|
|
73
|
+
} from './schemas/auth/device-access-token.js'
|
|
74
|
+
import {
|
|
75
|
+
getDeviceVerificationRelationsSchema,
|
|
76
|
+
getDeviceVerificationSchema,
|
|
77
|
+
} from './schemas/auth/device-verification.js'
|
|
67
78
|
import {
|
|
68
79
|
getPermissionsRelationsSchema,
|
|
69
80
|
getPermissionsSchema,
|
|
@@ -84,6 +95,10 @@ import {
|
|
|
84
95
|
getUserPermissionsRelationsSchema,
|
|
85
96
|
getUserPermissionsSchema,
|
|
86
97
|
} from './schemas/auth/user-permissions.js'
|
|
98
|
+
import {
|
|
99
|
+
getUserPrefsRelationsSchema,
|
|
100
|
+
getUserPrefsSchema,
|
|
101
|
+
} from './schemas/auth/user-prefs.js'
|
|
87
102
|
import {
|
|
88
103
|
getUserRolesRelationsSchema,
|
|
89
104
|
getUserRolesSchema,
|
|
@@ -124,6 +139,10 @@ import {
|
|
|
124
139
|
getUpgradableProductsRelationsSchema,
|
|
125
140
|
getUpgradableProductsSchema,
|
|
126
141
|
} from './schemas/commerce/upgradable-products.js'
|
|
142
|
+
import {
|
|
143
|
+
getCommentRelationsSchema,
|
|
144
|
+
getCommentsSchema,
|
|
145
|
+
} from './schemas/communication/comment.js'
|
|
127
146
|
import { getCommunicationChannelSchema } from './schemas/communication/communication-channel.js'
|
|
128
147
|
import { getCommunicationPreferenceTypesSchema } from './schemas/communication/communication-preference-types.js'
|
|
129
148
|
import {
|
|
@@ -150,6 +169,7 @@ import {
|
|
|
150
169
|
getContributionTypesRelationsSchema,
|
|
151
170
|
getContributionTypesSchema,
|
|
152
171
|
} from './schemas/content/contribution-types.js'
|
|
172
|
+
import { getLessonProgressSchema } from './schemas/content/lesson-progress.js'
|
|
153
173
|
import { getResourceProgressSchema } from './schemas/content/resource-progress.js'
|
|
154
174
|
|
|
155
175
|
export function getCourseBuilderSchema(mysqlTable: MySqlTableFn) {
|
|
@@ -173,6 +193,7 @@ export function getCourseBuilderSchema(mysqlTable: MySqlTableFn) {
|
|
|
173
193
|
verificationTokens: getVerificationTokensSchema(mysqlTable),
|
|
174
194
|
coupon: getCouponSchema(mysqlTable),
|
|
175
195
|
couponRelations: getCouponRelationsSchema(mysqlTable),
|
|
196
|
+
lessonProgress: getLessonProgressSchema(mysqlTable),
|
|
176
197
|
merchantAccount: getMerchantAccountSchema(mysqlTable),
|
|
177
198
|
merchantCharge: getMerchantChargeSchema(mysqlTable),
|
|
178
199
|
merchantChargeRelations: getMerchantChargeRelationsSchema(mysqlTable),
|
|
@@ -212,6 +233,15 @@ export function getCourseBuilderSchema(mysqlTable: MySqlTableFn) {
|
|
|
212
233
|
contentResourceProductRelations:
|
|
213
234
|
getContentResourceProductRelationsSchema(mysqlTable),
|
|
214
235
|
productRelations: getProductRelationsSchema(mysqlTable),
|
|
236
|
+
comments: getCommentsSchema(mysqlTable),
|
|
237
|
+
commentsRelations: getCommentRelationsSchema(mysqlTable),
|
|
238
|
+
deviceVerifications: getDeviceVerificationSchema(mysqlTable),
|
|
239
|
+
deviceVerificationRelations:
|
|
240
|
+
getDeviceVerificationRelationsSchema(mysqlTable),
|
|
241
|
+
deviceAccessToken: getDeviceAccessTokenSchema(mysqlTable),
|
|
242
|
+
deviceAccessTokenRelations: getDeviceAccessTokenRelationsSchema(mysqlTable),
|
|
243
|
+
userPrefs: getUserPrefsSchema(mysqlTable),
|
|
244
|
+
userPrefsRelations: getUserPrefsRelationsSchema(mysqlTable),
|
|
215
245
|
} as const
|
|
216
246
|
}
|
|
217
247
|
|
|
@@ -246,6 +276,7 @@ export function mySqlDrizzleAdapter(
|
|
|
246
276
|
products,
|
|
247
277
|
upgradableProducts,
|
|
248
278
|
resourceProgress,
|
|
279
|
+
comments,
|
|
249
280
|
} = createTables(tableFn)
|
|
250
281
|
|
|
251
282
|
const adapter: CourseBuilderAdapter = {
|
|
@@ -461,7 +492,7 @@ export function mySqlDrizzleAdapter(
|
|
|
461
492
|
let lessonProgress = await client.query.resourceProgress.findFirst({
|
|
462
493
|
where: and(
|
|
463
494
|
eq(resourceProgress.userId, options.userId),
|
|
464
|
-
eq(resourceProgress.
|
|
495
|
+
eq(resourceProgress.resourceId, options.lessonId),
|
|
465
496
|
),
|
|
466
497
|
})
|
|
467
498
|
|
|
@@ -475,12 +506,12 @@ export function mySqlDrizzleAdapter(
|
|
|
475
506
|
completedAt: now,
|
|
476
507
|
updatedAt: now,
|
|
477
508
|
})
|
|
478
|
-
.where(eq(resourceProgress.
|
|
509
|
+
.where(eq(resourceProgress.resourceId, options.lessonId))
|
|
479
510
|
}
|
|
480
511
|
} else {
|
|
481
512
|
await client.insert(resourceProgress).values({
|
|
482
513
|
userId: options.userId,
|
|
483
|
-
|
|
514
|
+
resourceId: options.lessonId,
|
|
484
515
|
completedAt: now,
|
|
485
516
|
updatedAt: now,
|
|
486
517
|
})
|
|
@@ -488,7 +519,7 @@ export function mySqlDrizzleAdapter(
|
|
|
488
519
|
lessonProgress = await client.query.resourceProgress.findFirst({
|
|
489
520
|
where: and(
|
|
490
521
|
eq(resourceProgress.userId, options.userId),
|
|
491
|
-
eq(resourceProgress.
|
|
522
|
+
eq(resourceProgress.resourceId, options.lessonId),
|
|
492
523
|
),
|
|
493
524
|
})
|
|
494
525
|
const parsedLessonProgress =
|
|
@@ -530,11 +561,21 @@ export function mySqlDrizzleAdapter(
|
|
|
530
561
|
|
|
531
562
|
if (!couponForIdOrCode) return null
|
|
532
563
|
|
|
533
|
-
|
|
564
|
+
const parsedCoupon = couponSchema
|
|
534
565
|
.extend({
|
|
535
566
|
merchantCoupon: merchantCouponSchema,
|
|
536
567
|
})
|
|
537
|
-
.
|
|
568
|
+
.safeParse(couponForIdOrCode)
|
|
569
|
+
|
|
570
|
+
if (!parsedCoupon.success) {
|
|
571
|
+
console.error(
|
|
572
|
+
'Error parsing coupon',
|
|
573
|
+
JSON.stringify(parsedCoupon.error),
|
|
574
|
+
)
|
|
575
|
+
return null
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
return parsedCoupon.data
|
|
538
579
|
},
|
|
539
580
|
async createMerchantChargeAndPurchase(options): Promise<Purchase> {
|
|
540
581
|
const purchaseId = await client.transaction(async (trx) => {
|
|
@@ -620,7 +661,7 @@ export function mySqlDrizzleAdapter(
|
|
|
620
661
|
),
|
|
621
662
|
)
|
|
622
663
|
.then((res) => {
|
|
623
|
-
return res[0]?.
|
|
664
|
+
return res[0]?.Coupon ?? null
|
|
624
665
|
}),
|
|
625
666
|
)
|
|
626
667
|
|
|
@@ -942,6 +983,9 @@ export function mySqlDrizzleAdapter(
|
|
|
942
983
|
userIdOrEmail: string,
|
|
943
984
|
moduleIdOrSlug: string,
|
|
944
985
|
): Promise<ModuleProgress> {
|
|
986
|
+
const ALLOWED_MODULE_RESOURCE_TYPES = ['lesson', 'exercise', 'solution']
|
|
987
|
+
const COUNTABLE_MODULE_RESOURCE_TYPES = ['lesson', 'exercise']
|
|
988
|
+
|
|
945
989
|
const module = await client.query.contentResource.findFirst({
|
|
946
990
|
where: or(
|
|
947
991
|
eq(contentResource.id, moduleIdOrSlug),
|
|
@@ -952,6 +996,26 @@ export function mySqlDrizzleAdapter(
|
|
|
952
996
|
),
|
|
953
997
|
with: {
|
|
954
998
|
resources: {
|
|
999
|
+
with: {
|
|
1000
|
+
resource: {
|
|
1001
|
+
with: {
|
|
1002
|
+
resources: {
|
|
1003
|
+
with: {
|
|
1004
|
+
resource: {
|
|
1005
|
+
with: {
|
|
1006
|
+
resources: {
|
|
1007
|
+
with: {
|
|
1008
|
+
resource: true,
|
|
1009
|
+
},
|
|
1010
|
+
},
|
|
1011
|
+
},
|
|
1012
|
+
},
|
|
1013
|
+
},
|
|
1014
|
+
orderBy: asc(contentResourceResource.position),
|
|
1015
|
+
},
|
|
1016
|
+
},
|
|
1017
|
+
},
|
|
1018
|
+
},
|
|
955
1019
|
orderBy: asc(contentResourceResource.position),
|
|
956
1020
|
},
|
|
957
1021
|
},
|
|
@@ -959,24 +1023,37 @@ export function mySqlDrizzleAdapter(
|
|
|
959
1023
|
|
|
960
1024
|
const parsedModule = ContentResourceSchema.parse(module)
|
|
961
1025
|
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
1026
|
+
function flattenResources(
|
|
1027
|
+
resources: ContentResourceResource[],
|
|
1028
|
+
): ContentResource[] {
|
|
1029
|
+
const result: ContentResource[] = []
|
|
1030
|
+
|
|
1031
|
+
function recurse(resources: ContentResourceResource[]) {
|
|
1032
|
+
for (const nestedResource of resources) {
|
|
1033
|
+
const resource = nestedResource.resource
|
|
1034
|
+
result.push(resource)
|
|
1035
|
+
if (resource.resources) {
|
|
1036
|
+
recurse(resource.resources)
|
|
1037
|
+
}
|
|
1038
|
+
}
|
|
1039
|
+
}
|
|
970
1040
|
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
1041
|
+
recurse(resources)
|
|
1042
|
+
return result
|
|
1043
|
+
}
|
|
974
1044
|
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
1045
|
+
const allResources =
|
|
1046
|
+
parsedModule?.resources && flattenResources(parsedModule.resources)
|
|
1047
|
+
const filteredResources = allResources?.filter((resource) => {
|
|
1048
|
+
return ALLOWED_MODULE_RESOURCE_TYPES.includes(resource.type)
|
|
1049
|
+
})
|
|
1050
|
+
|
|
1051
|
+
const parsedResources = z
|
|
1052
|
+
.array(ContentResourceSchema)
|
|
1053
|
+
.safeParse(filteredResources)
|
|
1054
|
+
|
|
1055
|
+
if (!parsedResources.success) {
|
|
1056
|
+
console.error('Error parsing module resources', parsedResources.error)
|
|
980
1057
|
return {
|
|
981
1058
|
completedLessons: [],
|
|
982
1059
|
nextResource: null,
|
|
@@ -986,6 +1063,12 @@ export function mySqlDrizzleAdapter(
|
|
|
986
1063
|
}
|
|
987
1064
|
}
|
|
988
1065
|
|
|
1066
|
+
const progressResources = parsedResources.data.filter((r) => {
|
|
1067
|
+
return COUNTABLE_MODULE_RESOURCE_TYPES.includes(r.type)
|
|
1068
|
+
})
|
|
1069
|
+
|
|
1070
|
+
const totalLessonsCount = progressResources.length
|
|
1071
|
+
|
|
989
1072
|
const user = await client.query.users
|
|
990
1073
|
.findFirst({
|
|
991
1074
|
where: or(
|
|
@@ -1016,7 +1099,7 @@ export function mySqlDrizzleAdapter(
|
|
|
1016
1099
|
nextResource: null,
|
|
1017
1100
|
percentCompleted: 0,
|
|
1018
1101
|
completedLessonsCount: 0,
|
|
1019
|
-
totalLessonsCount
|
|
1102
|
+
totalLessonsCount,
|
|
1020
1103
|
}
|
|
1021
1104
|
}
|
|
1022
1105
|
|
|
@@ -1029,7 +1112,7 @@ export function mySqlDrizzleAdapter(
|
|
|
1029
1112
|
nextResource: null,
|
|
1030
1113
|
percentCompleted: 0,
|
|
1031
1114
|
completedLessonsCount: 0,
|
|
1032
|
-
totalLessonsCount
|
|
1115
|
+
totalLessonsCount,
|
|
1033
1116
|
}
|
|
1034
1117
|
}
|
|
1035
1118
|
|
|
@@ -1038,16 +1121,18 @@ export function mySqlDrizzleAdapter(
|
|
|
1038
1121
|
eq(resourceProgress.userId, parsedUser.data.id),
|
|
1039
1122
|
isNotNull(resourceProgress.completedAt),
|
|
1040
1123
|
inArray(
|
|
1041
|
-
resourceProgress.
|
|
1042
|
-
|
|
1124
|
+
resourceProgress.resourceId,
|
|
1125
|
+
progressResources.map((r) => r.id),
|
|
1043
1126
|
),
|
|
1044
1127
|
),
|
|
1045
1128
|
orderBy: asc(resourceProgress.completedAt),
|
|
1046
1129
|
})
|
|
1047
1130
|
|
|
1048
|
-
const nextResourceId =
|
|
1049
|
-
|
|
1050
|
-
|
|
1131
|
+
const nextResourceId = parsedResources.data
|
|
1132
|
+
.filter((r) => {
|
|
1133
|
+
return COUNTABLE_MODULE_RESOURCE_TYPES.includes(r.type)
|
|
1134
|
+
})
|
|
1135
|
+
.find((r) => !userProgress.find((p) => p.resourceId === r.id))?.id
|
|
1051
1136
|
|
|
1052
1137
|
const nextResource = await client.query.contentResource.findFirst({
|
|
1053
1138
|
where: eq(contentResource.id, nextResourceId as string),
|
|
@@ -1068,11 +1153,11 @@ export function mySqlDrizzleAdapter(
|
|
|
1068
1153
|
nextResource: null,
|
|
1069
1154
|
percentCompleted: 0,
|
|
1070
1155
|
completedLessonsCount: 0,
|
|
1071
|
-
totalLessonsCount
|
|
1156
|
+
totalLessonsCount,
|
|
1072
1157
|
}
|
|
1073
1158
|
}
|
|
1074
1159
|
const percentCompleted = Math.round(
|
|
1075
|
-
(parsedProgress.data.length /
|
|
1160
|
+
(parsedProgress.data.length / parsedResources.data.length) * 100,
|
|
1076
1161
|
)
|
|
1077
1162
|
|
|
1078
1163
|
return {
|
|
@@ -1080,7 +1165,7 @@ export function mySqlDrizzleAdapter(
|
|
|
1080
1165
|
nextResource: parsedNextResource,
|
|
1081
1166
|
percentCompleted,
|
|
1082
1167
|
completedLessonsCount: parsedProgress.data.length,
|
|
1083
|
-
totalLessonsCount
|
|
1168
|
+
totalLessonsCount,
|
|
1084
1169
|
}
|
|
1085
1170
|
},
|
|
1086
1171
|
getLessonProgresses(): Promise<ResourceProgress[]> {
|
|
@@ -1180,6 +1265,16 @@ export function mySqlDrizzleAdapter(
|
|
|
1180
1265
|
}),
|
|
1181
1266
|
)
|
|
1182
1267
|
},
|
|
1268
|
+
async getPurchaseCountForProduct(productId: string): Promise<number> {
|
|
1269
|
+
return await client.query.purchases
|
|
1270
|
+
.findMany({
|
|
1271
|
+
where: and(
|
|
1272
|
+
eq(purchaseTable.productId, productId),
|
|
1273
|
+
inArray(purchaseTable.status, ['Valid', 'Restricted']),
|
|
1274
|
+
),
|
|
1275
|
+
})
|
|
1276
|
+
.then((res) => res.length)
|
|
1277
|
+
},
|
|
1183
1278
|
async getPurchase(purchaseId: string): Promise<Purchase | null> {
|
|
1184
1279
|
const purchase = await client.query.purchases.findFirst({
|
|
1185
1280
|
where: eq(purchaseTable.id, purchaseId),
|
|
@@ -1497,7 +1592,7 @@ export function mySqlDrizzleAdapter(
|
|
|
1497
1592
|
let lessonProgress = await client.query.resourceProgress.findFirst({
|
|
1498
1593
|
where: and(
|
|
1499
1594
|
eq(resourceProgress.userId, options.userId),
|
|
1500
|
-
eq(resourceProgress.
|
|
1595
|
+
eq(resourceProgress.resourceId, options.lessonId),
|
|
1501
1596
|
),
|
|
1502
1597
|
})
|
|
1503
1598
|
|
|
@@ -1510,11 +1605,11 @@ export function mySqlDrizzleAdapter(
|
|
|
1510
1605
|
completedAt: lessonProgress.completedAt ? null : now,
|
|
1511
1606
|
updatedAt: now,
|
|
1512
1607
|
})
|
|
1513
|
-
.where(eq(resourceProgress.
|
|
1608
|
+
.where(eq(resourceProgress.resourceId, options.lessonId))
|
|
1514
1609
|
} else {
|
|
1515
1610
|
await client.insert(resourceProgress).values({
|
|
1516
1611
|
userId: options.userId,
|
|
1517
|
-
|
|
1612
|
+
resourceId: options.lessonId,
|
|
1518
1613
|
completedAt: now,
|
|
1519
1614
|
updatedAt: now,
|
|
1520
1615
|
})
|
|
@@ -1523,7 +1618,7 @@ export function mySqlDrizzleAdapter(
|
|
|
1523
1618
|
lessonProgress = await client.query.resourceProgress.findFirst({
|
|
1524
1619
|
where: and(
|
|
1525
1620
|
eq(resourceProgress.userId, options.userId),
|
|
1526
|
-
eq(resourceProgress.
|
|
1621
|
+
eq(resourceProgress.resourceId, options.lessonId),
|
|
1527
1622
|
),
|
|
1528
1623
|
})
|
|
1529
1624
|
|
|
@@ -1741,7 +1836,15 @@ export function mySqlDrizzleAdapter(
|
|
|
1741
1836
|
with: {
|
|
1742
1837
|
resources: {
|
|
1743
1838
|
with: {
|
|
1744
|
-
resource:
|
|
1839
|
+
resource: {
|
|
1840
|
+
with: {
|
|
1841
|
+
resources: {
|
|
1842
|
+
with: {
|
|
1843
|
+
resource: true,
|
|
1844
|
+
},
|
|
1845
|
+
},
|
|
1846
|
+
},
|
|
1847
|
+
},
|
|
1745
1848
|
},
|
|
1746
1849
|
orderBy: asc(contentResourceResource.position),
|
|
1747
1850
|
},
|
|
@@ -1864,7 +1967,7 @@ export function mySqlDrizzleAdapter(
|
|
|
1864
1967
|
return null
|
|
1865
1968
|
}
|
|
1866
1969
|
|
|
1867
|
-
return dbAccount.
|
|
1970
|
+
return dbAccount.User
|
|
1868
1971
|
},
|
|
1869
1972
|
async deleteSession(sessionToken) {
|
|
1870
1973
|
const session =
|
|
@@ -13,7 +13,7 @@ import { getUsersSchema } from './users.js'
|
|
|
13
13
|
|
|
14
14
|
export function getAccountsSchema(mysqlTable: MySqlTableFn) {
|
|
15
15
|
return mysqlTable(
|
|
16
|
-
'
|
|
16
|
+
'Account',
|
|
17
17
|
{
|
|
18
18
|
userId: varchar('userId', { length: 255 }).notNull(),
|
|
19
19
|
type: varchar('type', { length: 255 })
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { relations, sql } from 'drizzle-orm'
|
|
2
|
+
import {
|
|
3
|
+
index,
|
|
4
|
+
MySqlTableFn,
|
|
5
|
+
primaryKey,
|
|
6
|
+
timestamp,
|
|
7
|
+
varchar,
|
|
8
|
+
} from 'drizzle-orm/mysql-core'
|
|
9
|
+
|
|
10
|
+
import { getUsersSchema } from './users.js'
|
|
11
|
+
|
|
12
|
+
export function getDeviceAccessTokenSchema(mysqlTable: MySqlTableFn) {
|
|
13
|
+
return mysqlTable(
|
|
14
|
+
'DeviceAccessToken',
|
|
15
|
+
{
|
|
16
|
+
token: varchar('token', { length: 191 }).notNull(),
|
|
17
|
+
userId: varchar('userId', { length: 191 }).notNull(),
|
|
18
|
+
createdAt: timestamp('createdAt', {
|
|
19
|
+
mode: 'date',
|
|
20
|
+
fsp: 3,
|
|
21
|
+
}).default(sql`CURRENT_TIMESTAMP(3)`),
|
|
22
|
+
},
|
|
23
|
+
(crr) => ({
|
|
24
|
+
pk: primaryKey({ columns: [crr.token] }),
|
|
25
|
+
userIdIdx: index('userId_idx').on(crr.userId),
|
|
26
|
+
}),
|
|
27
|
+
)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function getDeviceAccessTokenRelationsSchema(mysqlTable: MySqlTableFn) {
|
|
31
|
+
const deviceAccessToken = getDeviceAccessTokenSchema(mysqlTable)
|
|
32
|
+
const user = getUsersSchema(mysqlTable)
|
|
33
|
+
return relations(deviceAccessToken, ({ one }) => ({
|
|
34
|
+
verifiedBy: one(user, {
|
|
35
|
+
fields: [deviceAccessToken.userId],
|
|
36
|
+
references: [user.id],
|
|
37
|
+
relationName: 'user',
|
|
38
|
+
}),
|
|
39
|
+
}))
|
|
40
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { relations, sql } from 'drizzle-orm'
|
|
2
|
+
import {
|
|
3
|
+
MySqlTableFn,
|
|
4
|
+
primaryKey,
|
|
5
|
+
text,
|
|
6
|
+
timestamp,
|
|
7
|
+
varchar,
|
|
8
|
+
} from 'drizzle-orm/mysql-core'
|
|
9
|
+
|
|
10
|
+
import { getUsersSchema } from './users.js'
|
|
11
|
+
|
|
12
|
+
export function getDeviceVerificationSchema(mysqlTable: MySqlTableFn) {
|
|
13
|
+
return mysqlTable(
|
|
14
|
+
'DeviceVerification',
|
|
15
|
+
{
|
|
16
|
+
verifiedByUserId: varchar('verifiedByUserId', { length: 255 }),
|
|
17
|
+
deviceCode: varchar('deviceCode', { length: 191 }).notNull(),
|
|
18
|
+
userCode: text('userCode').notNull(),
|
|
19
|
+
expires: timestamp('expires', {
|
|
20
|
+
mode: 'date',
|
|
21
|
+
fsp: 3,
|
|
22
|
+
}).notNull(),
|
|
23
|
+
createdAt: timestamp('createdAt', {
|
|
24
|
+
mode: 'date',
|
|
25
|
+
fsp: 3,
|
|
26
|
+
}).default(sql`CURRENT_TIMESTAMP(3)`),
|
|
27
|
+
verifiedAt: timestamp('verifiedAt', {
|
|
28
|
+
mode: 'date',
|
|
29
|
+
fsp: 3,
|
|
30
|
+
}),
|
|
31
|
+
},
|
|
32
|
+
(crr) => ({
|
|
33
|
+
pk: primaryKey({ columns: [crr.deviceCode] }),
|
|
34
|
+
}),
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function getDeviceVerificationRelationsSchema(mysqlTable: MySqlTableFn) {
|
|
39
|
+
const deviceVerification = getDeviceVerificationSchema(mysqlTable)
|
|
40
|
+
const user = getUsersSchema(mysqlTable)
|
|
41
|
+
return relations(deviceVerification, ({ one }) => ({
|
|
42
|
+
verifiedBy: one(user, {
|
|
43
|
+
fields: [deviceVerification.verifiedByUserId],
|
|
44
|
+
references: [user.id],
|
|
45
|
+
relationName: 'user',
|
|
46
|
+
}),
|
|
47
|
+
}))
|
|
48
|
+
}
|
|
@@ -12,7 +12,7 @@ import { getRolePermissionsSchema } from './role-permissions.js'
|
|
|
12
12
|
|
|
13
13
|
export function getPermissionsSchema(mysqlTable: MySqlTableFn) {
|
|
14
14
|
return mysqlTable(
|
|
15
|
-
'
|
|
15
|
+
'Permission',
|
|
16
16
|
{
|
|
17
17
|
id: varchar('id', { length: 255 }).notNull().primaryKey(),
|
|
18
18
|
name: varchar('name', { length: 255 }).notNull().unique(),
|
|
@@ -13,7 +13,7 @@ import { getRolesSchema } from './roles.js'
|
|
|
13
13
|
|
|
14
14
|
export function getRolePermissionsSchema(mysqlTable: MySqlTableFn) {
|
|
15
15
|
return mysqlTable(
|
|
16
|
-
'
|
|
16
|
+
'RolePermission',
|
|
17
17
|
{
|
|
18
18
|
roleId: varchar('roleId', { length: 255 }).notNull(),
|
|
19
19
|
permissionId: varchar('permissionId', { length: 255 }).notNull(),
|
|
@@ -12,7 +12,7 @@ import { getUserRolesSchema } from './user-roles.js'
|
|
|
12
12
|
|
|
13
13
|
export function getRolesSchema(mysqlTable: MySqlTableFn) {
|
|
14
14
|
return mysqlTable(
|
|
15
|
-
'
|
|
15
|
+
'Role',
|
|
16
16
|
{
|
|
17
17
|
id: varchar('id', { length: 255 }).notNull().primaryKey(),
|
|
18
18
|
name: varchar('name', { length: 255 }).notNull().unique(),
|
|
@@ -13,7 +13,7 @@ import { getUsersSchema } from './users.js'
|
|
|
13
13
|
|
|
14
14
|
export function getUserPermissionsSchema(mysqlTable: MySqlTableFn) {
|
|
15
15
|
return mysqlTable(
|
|
16
|
-
'
|
|
16
|
+
'UserPermission',
|
|
17
17
|
{
|
|
18
18
|
userId: varchar('userId', { length: 255 }).notNull(),
|
|
19
19
|
permissionId: varchar('permissionId', { length: 255 }).notNull(),
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { relations, sql } from 'drizzle-orm'
|
|
2
|
+
import {
|
|
3
|
+
index,
|
|
4
|
+
json,
|
|
5
|
+
MySqlTableFn,
|
|
6
|
+
primaryKey,
|
|
7
|
+
text,
|
|
8
|
+
timestamp,
|
|
9
|
+
varchar,
|
|
10
|
+
} from 'drizzle-orm/mysql-core'
|
|
11
|
+
|
|
12
|
+
import { getUsersSchema } from '../auth/users.js'
|
|
13
|
+
|
|
14
|
+
export function getUserPrefsSchema(mysqlTable: MySqlTableFn) {
|
|
15
|
+
return mysqlTable(
|
|
16
|
+
'UserPrefs',
|
|
17
|
+
{
|
|
18
|
+
id: varchar('id', { length: 191 }).notNull(),
|
|
19
|
+
type: varchar('type', { length: 191 }).default('Global').notNull(),
|
|
20
|
+
userId: varchar('userId', { length: 255 }).notNull(),
|
|
21
|
+
fields: json('fields').$type<Record<string, any>>().default({}),
|
|
22
|
+
createdAt: timestamp('createdAt', {
|
|
23
|
+
mode: 'date',
|
|
24
|
+
fsp: 3,
|
|
25
|
+
}).default(sql`CURRENT_TIMESTAMP(3)`),
|
|
26
|
+
updatedAt: timestamp('updatedAt', {
|
|
27
|
+
mode: 'date',
|
|
28
|
+
fsp: 3,
|
|
29
|
+
}).default(sql`CURRENT_TIMESTAMP(3)`),
|
|
30
|
+
deletedAt: timestamp('deletedAt', {
|
|
31
|
+
mode: 'date',
|
|
32
|
+
fsp: 3,
|
|
33
|
+
}),
|
|
34
|
+
},
|
|
35
|
+
(crr) => ({
|
|
36
|
+
pk: primaryKey({ columns: [crr.id] }),
|
|
37
|
+
crrUserIdIdKey: index('crr_userIdId_idx').on(crr.userId),
|
|
38
|
+
}),
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function getUserPrefsRelationsSchema(mysqlTable: MySqlTableFn) {
|
|
43
|
+
const userPrefs = getUserPrefsSchema(mysqlTable)
|
|
44
|
+
const user = getUsersSchema(mysqlTable)
|
|
45
|
+
return relations(userPrefs, ({ one }) => ({
|
|
46
|
+
user: one(user, {
|
|
47
|
+
fields: [userPrefs.userId],
|
|
48
|
+
references: [user.id],
|
|
49
|
+
relationName: 'user',
|
|
50
|
+
}),
|
|
51
|
+
}))
|
|
52
|
+
}
|
|
@@ -13,7 +13,7 @@ import { getUsersSchema } from './users.js'
|
|
|
13
13
|
|
|
14
14
|
export function getUserRolesSchema(mysqlTable: MySqlTableFn) {
|
|
15
15
|
return mysqlTable(
|
|
16
|
-
'
|
|
16
|
+
'UserRole',
|
|
17
17
|
{
|
|
18
18
|
userId: varchar('userId', { length: 255 }).notNull(),
|
|
19
19
|
roleId: varchar('roleId', { length: 255 }).notNull(),
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { relations, sql } from 'drizzle-orm'
|
|
2
2
|
import {
|
|
3
3
|
index,
|
|
4
|
+
json,
|
|
4
5
|
mysqlEnum,
|
|
5
6
|
MySqlTableFn,
|
|
6
7
|
timestamp,
|
|
@@ -8,21 +9,24 @@ import {
|
|
|
8
9
|
} from 'drizzle-orm/mysql-core'
|
|
9
10
|
|
|
10
11
|
import { getPurchaseSchema } from '../commerce/purchase.js'
|
|
12
|
+
import { getCommentsSchema } from '../communication/comment.js'
|
|
11
13
|
import { getCommunicationPreferencesSchema } from '../communication/communication-preferences.js'
|
|
12
14
|
import { getContentContributionsSchema } from '../content/content-contributions.js'
|
|
13
15
|
import { getContentResourceSchema } from '../content/content-resource.js'
|
|
14
16
|
import { getAccountsSchema } from './accounts.js'
|
|
15
17
|
import { getUserPermissionsSchema } from './user-permissions.js'
|
|
18
|
+
import { getUserPrefsSchema } from './user-prefs.js'
|
|
16
19
|
import { getUserRolesSchema } from './user-roles.js'
|
|
17
20
|
|
|
18
21
|
export function getUsersSchema(mysqlTable: MySqlTableFn) {
|
|
19
22
|
return mysqlTable(
|
|
20
|
-
'
|
|
23
|
+
'User',
|
|
21
24
|
{
|
|
22
25
|
id: varchar('id', { length: 255 }).notNull().primaryKey(),
|
|
23
26
|
name: varchar('name', { length: 255 }),
|
|
24
|
-
role:
|
|
27
|
+
role: varchar('role', { length: 191 }).notNull().default('user'),
|
|
25
28
|
email: varchar('email', { length: 255 }).notNull().unique(),
|
|
29
|
+
fields: json('fields').$type<Record<string, any>>().default({}),
|
|
26
30
|
emailVerified: timestamp('emailVerified', {
|
|
27
31
|
mode: 'date',
|
|
28
32
|
fsp: 3,
|
|
@@ -50,6 +54,8 @@ export function getUsersRelationsSchema(mysqlTable: MySqlTableFn) {
|
|
|
50
54
|
const contentContributions = getContentContributionsSchema(mysqlTable)
|
|
51
55
|
const contentResource = getContentResourceSchema(mysqlTable)
|
|
52
56
|
const purchases = getPurchaseSchema(mysqlTable)
|
|
57
|
+
const comments = getCommentsSchema(mysqlTable)
|
|
58
|
+
const userPrefs = getUserPrefsSchema(mysqlTable)
|
|
53
59
|
return relations(users, ({ many }) => ({
|
|
54
60
|
accounts: many(accounts, {
|
|
55
61
|
relationName: 'user',
|
|
@@ -72,5 +78,11 @@ export function getUsersRelationsSchema(mysqlTable: MySqlTableFn) {
|
|
|
72
78
|
createdContent: many(contentResource, {
|
|
73
79
|
relationName: 'user',
|
|
74
80
|
}),
|
|
81
|
+
comments: many(comments, {
|
|
82
|
+
relationName: 'user',
|
|
83
|
+
}),
|
|
84
|
+
prefs: many(userPrefs, {
|
|
85
|
+
relationName: 'user',
|
|
86
|
+
}),
|
|
75
87
|
}))
|
|
76
88
|
}
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
|
|
8
8
|
export function getVerificationTokensSchema(mysqlTable: MySqlTableFn) {
|
|
9
9
|
return mysqlTable(
|
|
10
|
-
'
|
|
10
|
+
'VerificationToken',
|
|
11
11
|
{
|
|
12
12
|
identifier: varchar('identifier', { length: 255 }).notNull(),
|
|
13
13
|
token: varchar('token', { length: 255 }).notNull(),
|