@coursebuilder/adapter-drizzle 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/{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-QY4TPO7D.js → chunk-BM5UKWXI.js} +3 -3
- package/dist/{chunk-QMDE6HUA.js → chunk-CQNKTFXE.js} +3 -3
- package/dist/{chunk-4PJWD6YK.js → chunk-FRA4ZCRA.js} +462 -336
- 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-MCARHGE5.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-PIQXK2CY.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-J63FMGT7.js → chunk-Z245DYMP.js} +314 -190
- package/dist/index.js +22 -19
- package/dist/lib/mysql/index.cjs +1144 -774
- 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 -65
- 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 -128
- 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 +186 -54
- 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 +6 -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
|
|
|
@@ -816,15 +857,17 @@ export function mySqlDrizzleAdapter(
|
|
|
816
857
|
}
|
|
817
858
|
},
|
|
818
859
|
async getCoupon(couponIdOrCode: string): Promise<Coupon | null> {
|
|
819
|
-
|
|
820
|
-
await client
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
)
|
|
860
|
+
const loadedCoupon =
|
|
861
|
+
(await client.query.coupon.findFirst({
|
|
862
|
+
where: or(
|
|
863
|
+
eq(coupon.id, couponIdOrCode),
|
|
864
|
+
eq(coupon.code, couponIdOrCode),
|
|
865
|
+
),
|
|
866
|
+
})) || null
|
|
867
|
+
|
|
868
|
+
logger.debug('loadedCoupon', { loadedCoupon })
|
|
869
|
+
|
|
870
|
+
return couponSchema.nullable().parse(loadedCoupon)
|
|
828
871
|
},
|
|
829
872
|
async getCouponWithBulkPurchases(couponId: string): Promise<
|
|
830
873
|
| (Coupon & {
|
|
@@ -940,6 +983,9 @@ export function mySqlDrizzleAdapter(
|
|
|
940
983
|
userIdOrEmail: string,
|
|
941
984
|
moduleIdOrSlug: string,
|
|
942
985
|
): Promise<ModuleProgress> {
|
|
986
|
+
const ALLOWED_MODULE_RESOURCE_TYPES = ['lesson', 'exercise', 'solution']
|
|
987
|
+
const COUNTABLE_MODULE_RESOURCE_TYPES = ['lesson', 'exercise']
|
|
988
|
+
|
|
943
989
|
const module = await client.query.contentResource.findFirst({
|
|
944
990
|
where: or(
|
|
945
991
|
eq(contentResource.id, moduleIdOrSlug),
|
|
@@ -950,6 +996,26 @@ export function mySqlDrizzleAdapter(
|
|
|
950
996
|
),
|
|
951
997
|
with: {
|
|
952
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
|
+
},
|
|
953
1019
|
orderBy: asc(contentResourceResource.position),
|
|
954
1020
|
},
|
|
955
1021
|
},
|
|
@@ -957,24 +1023,37 @@ export function mySqlDrizzleAdapter(
|
|
|
957
1023
|
|
|
958
1024
|
const parsedModule = ContentResourceSchema.parse(module)
|
|
959
1025
|
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
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
|
+
}
|
|
968
1040
|
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
1041
|
+
recurse(resources)
|
|
1042
|
+
return result
|
|
1043
|
+
}
|
|
972
1044
|
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
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)
|
|
978
1057
|
return {
|
|
979
1058
|
completedLessons: [],
|
|
980
1059
|
nextResource: null,
|
|
@@ -984,13 +1063,35 @@ export function mySqlDrizzleAdapter(
|
|
|
984
1063
|
}
|
|
985
1064
|
}
|
|
986
1065
|
|
|
987
|
-
const
|
|
988
|
-
|
|
989
|
-
with: {
|
|
990
|
-
roles: true,
|
|
991
|
-
},
|
|
1066
|
+
const progressResources = parsedResources.data.filter((r) => {
|
|
1067
|
+
return COUNTABLE_MODULE_RESOURCE_TYPES.includes(r.type)
|
|
992
1068
|
})
|
|
993
1069
|
|
|
1070
|
+
const totalLessonsCount = progressResources.length
|
|
1071
|
+
|
|
1072
|
+
const user = await client.query.users
|
|
1073
|
+
.findFirst({
|
|
1074
|
+
where: or(
|
|
1075
|
+
eq(users.id, userIdOrEmail),
|
|
1076
|
+
eq(users.email, userIdOrEmail),
|
|
1077
|
+
),
|
|
1078
|
+
with: {
|
|
1079
|
+
roles: {
|
|
1080
|
+
with: {
|
|
1081
|
+
role: true,
|
|
1082
|
+
},
|
|
1083
|
+
},
|
|
1084
|
+
},
|
|
1085
|
+
})
|
|
1086
|
+
.then(async (res) => {
|
|
1087
|
+
if (res) {
|
|
1088
|
+
return {
|
|
1089
|
+
...res,
|
|
1090
|
+
roles: res.roles.map((r) => r.role),
|
|
1091
|
+
}
|
|
1092
|
+
}
|
|
1093
|
+
})
|
|
1094
|
+
|
|
994
1095
|
if (!user) {
|
|
995
1096
|
console.error('User not found', userIdOrEmail)
|
|
996
1097
|
return {
|
|
@@ -998,27 +1099,40 @@ export function mySqlDrizzleAdapter(
|
|
|
998
1099
|
nextResource: null,
|
|
999
1100
|
percentCompleted: 0,
|
|
1000
1101
|
completedLessonsCount: 0,
|
|
1001
|
-
totalLessonsCount
|
|
1102
|
+
totalLessonsCount,
|
|
1002
1103
|
}
|
|
1003
1104
|
}
|
|
1004
1105
|
|
|
1005
|
-
const parsedUser = userSchema.
|
|
1106
|
+
const parsedUser = userSchema.safeParse(user)
|
|
1107
|
+
|
|
1108
|
+
if (!parsedUser.success) {
|
|
1109
|
+
console.error('Error parsing user', parsedUser.error)
|
|
1110
|
+
return {
|
|
1111
|
+
completedLessons: [],
|
|
1112
|
+
nextResource: null,
|
|
1113
|
+
percentCompleted: 0,
|
|
1114
|
+
completedLessonsCount: 0,
|
|
1115
|
+
totalLessonsCount,
|
|
1116
|
+
}
|
|
1117
|
+
}
|
|
1006
1118
|
|
|
1007
1119
|
const userProgress = await client.query.resourceProgress.findMany({
|
|
1008
1120
|
where: and(
|
|
1009
|
-
eq(resourceProgress.userId, parsedUser.id),
|
|
1121
|
+
eq(resourceProgress.userId, parsedUser.data.id),
|
|
1010
1122
|
isNotNull(resourceProgress.completedAt),
|
|
1011
1123
|
inArray(
|
|
1012
|
-
resourceProgress.
|
|
1013
|
-
|
|
1124
|
+
resourceProgress.resourceId,
|
|
1125
|
+
progressResources.map((r) => r.id),
|
|
1014
1126
|
),
|
|
1015
1127
|
),
|
|
1016
1128
|
orderBy: asc(resourceProgress.completedAt),
|
|
1017
1129
|
})
|
|
1018
1130
|
|
|
1019
|
-
const nextResourceId =
|
|
1020
|
-
|
|
1021
|
-
|
|
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
|
|
1022
1136
|
|
|
1023
1137
|
const nextResource = await client.query.contentResource.findFirst({
|
|
1024
1138
|
where: eq(contentResource.id, nextResourceId as string),
|
|
@@ -1039,11 +1153,11 @@ export function mySqlDrizzleAdapter(
|
|
|
1039
1153
|
nextResource: null,
|
|
1040
1154
|
percentCompleted: 0,
|
|
1041
1155
|
completedLessonsCount: 0,
|
|
1042
|
-
totalLessonsCount
|
|
1156
|
+
totalLessonsCount,
|
|
1043
1157
|
}
|
|
1044
1158
|
}
|
|
1045
1159
|
const percentCompleted = Math.round(
|
|
1046
|
-
(parsedProgress.data.length /
|
|
1160
|
+
(parsedProgress.data.length / parsedResources.data.length) * 100,
|
|
1047
1161
|
)
|
|
1048
1162
|
|
|
1049
1163
|
return {
|
|
@@ -1051,7 +1165,7 @@ export function mySqlDrizzleAdapter(
|
|
|
1051
1165
|
nextResource: parsedNextResource,
|
|
1052
1166
|
percentCompleted,
|
|
1053
1167
|
completedLessonsCount: parsedProgress.data.length,
|
|
1054
|
-
totalLessonsCount
|
|
1168
|
+
totalLessonsCount,
|
|
1055
1169
|
}
|
|
1056
1170
|
},
|
|
1057
1171
|
getLessonProgresses(): Promise<ResourceProgress[]> {
|
|
@@ -1151,6 +1265,16 @@ export function mySqlDrizzleAdapter(
|
|
|
1151
1265
|
}),
|
|
1152
1266
|
)
|
|
1153
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
|
+
},
|
|
1154
1278
|
async getPurchase(purchaseId: string): Promise<Purchase | null> {
|
|
1155
1279
|
const purchase = await client.query.purchases.findFirst({
|
|
1156
1280
|
where: eq(purchaseTable.id, purchaseId),
|
|
@@ -1468,7 +1592,7 @@ export function mySqlDrizzleAdapter(
|
|
|
1468
1592
|
let lessonProgress = await client.query.resourceProgress.findFirst({
|
|
1469
1593
|
where: and(
|
|
1470
1594
|
eq(resourceProgress.userId, options.userId),
|
|
1471
|
-
eq(resourceProgress.
|
|
1595
|
+
eq(resourceProgress.resourceId, options.lessonId),
|
|
1472
1596
|
),
|
|
1473
1597
|
})
|
|
1474
1598
|
|
|
@@ -1481,11 +1605,11 @@ export function mySqlDrizzleAdapter(
|
|
|
1481
1605
|
completedAt: lessonProgress.completedAt ? null : now,
|
|
1482
1606
|
updatedAt: now,
|
|
1483
1607
|
})
|
|
1484
|
-
.where(eq(resourceProgress.
|
|
1608
|
+
.where(eq(resourceProgress.resourceId, options.lessonId))
|
|
1485
1609
|
} else {
|
|
1486
1610
|
await client.insert(resourceProgress).values({
|
|
1487
1611
|
userId: options.userId,
|
|
1488
|
-
|
|
1612
|
+
resourceId: options.lessonId,
|
|
1489
1613
|
completedAt: now,
|
|
1490
1614
|
updatedAt: now,
|
|
1491
1615
|
})
|
|
@@ -1494,7 +1618,7 @@ export function mySqlDrizzleAdapter(
|
|
|
1494
1618
|
lessonProgress = await client.query.resourceProgress.findFirst({
|
|
1495
1619
|
where: and(
|
|
1496
1620
|
eq(resourceProgress.userId, options.userId),
|
|
1497
|
-
eq(resourceProgress.
|
|
1621
|
+
eq(resourceProgress.resourceId, options.lessonId),
|
|
1498
1622
|
),
|
|
1499
1623
|
})
|
|
1500
1624
|
|
|
@@ -1712,7 +1836,15 @@ export function mySqlDrizzleAdapter(
|
|
|
1712
1836
|
with: {
|
|
1713
1837
|
resources: {
|
|
1714
1838
|
with: {
|
|
1715
|
-
resource:
|
|
1839
|
+
resource: {
|
|
1840
|
+
with: {
|
|
1841
|
+
resources: {
|
|
1842
|
+
with: {
|
|
1843
|
+
resource: true,
|
|
1844
|
+
},
|
|
1845
|
+
},
|
|
1846
|
+
},
|
|
1847
|
+
},
|
|
1716
1848
|
},
|
|
1717
1849
|
orderBy: asc(contentResourceResource.position),
|
|
1718
1850
|
},
|
|
@@ -1835,7 +1967,7 @@ export function mySqlDrizzleAdapter(
|
|
|
1835
1967
|
return null
|
|
1836
1968
|
}
|
|
1837
1969
|
|
|
1838
|
-
return dbAccount.
|
|
1970
|
+
return dbAccount.User
|
|
1839
1971
|
},
|
|
1840
1972
|
async deleteSession(sessionToken) {
|
|
1841
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(),
|