@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.
Files changed (251) hide show
  1. package/dist/{chunk-57CX5SOI.js → chunk-2UU2F4DM.js} +5 -4
  2. package/dist/{chunk-V23SCQL7.js → chunk-3NUCFLQJ.js} +2 -2
  3. package/dist/{chunk-Y7QZGEPT.js → chunk-4ZWS76VQ.js} +2 -2
  4. package/dist/{chunk-PPBEA4EM.js → chunk-6ON2O6UD.js} +2 -2
  5. package/dist/{chunk-QY4TPO7D.js → chunk-BM5UKWXI.js} +3 -3
  6. package/dist/{chunk-QMDE6HUA.js → chunk-CQNKTFXE.js} +3 -3
  7. package/dist/{chunk-4PJWD6YK.js → chunk-FRA4ZCRA.js} +462 -336
  8. package/dist/{chunk-J4LBG2TH.js → chunk-GINRTL6J.js} +2 -2
  9. package/dist/chunk-JZQ666KH.js +62 -0
  10. package/dist/{chunk-GLPDG7UE.js → chunk-KDEWFXEP.js} +2 -2
  11. package/dist/{chunk-MBB4GIJI.js → chunk-LERR6HQ3.js} +2 -2
  12. package/dist/{chunk-VDVCCU7D.js → chunk-LZHZDFNZ.js} +2 -2
  13. package/dist/{chunk-MCARHGE5.js → chunk-O6JECJRY.js} +4 -4
  14. package/dist/{chunk-BX5SO2JG.js → chunk-P4VXXTVA.js} +2 -2
  15. package/dist/{chunk-VXZRMVNY.js → chunk-QP6YMUQX.js} +2 -2
  16. package/dist/chunk-QTGVGIRO.js +54 -0
  17. package/dist/{chunk-ZD3R6UPJ.js → chunk-SRTIWWLG.js} +7 -7
  18. package/dist/{chunk-PIQXK2CY.js → chunk-TBM3AK3P.js} +3 -3
  19. package/dist/{chunk-FNYW3XKR.js → chunk-XIGJFVUM.js} +8 -8
  20. package/dist/{chunk-JKOYOL7A.js → chunk-YGRYHMCG.js} +2 -2
  21. package/dist/chunk-YVVXDJHI.js +56 -0
  22. package/dist/{chunk-J63FMGT7.js → chunk-Z245DYMP.js} +314 -190
  23. package/dist/index.js +22 -19
  24. package/dist/lib/mysql/index.cjs +1144 -774
  25. package/dist/lib/mysql/index.cjs.map +1 -1
  26. package/dist/lib/mysql/index.d.cts +2064 -1148
  27. package/dist/lib/mysql/index.d.ts +2064 -1148
  28. package/dist/lib/mysql/index.js +22 -19
  29. package/dist/lib/mysql/schemas/auth/accounts.cjs +85 -77
  30. package/dist/lib/mysql/schemas/auth/accounts.cjs.map +1 -1
  31. package/dist/lib/mysql/schemas/auth/accounts.d.cts +17 -17
  32. package/dist/lib/mysql/schemas/auth/accounts.d.ts +17 -17
  33. package/dist/lib/mysql/schemas/auth/accounts.js +12 -12
  34. package/dist/lib/mysql/schemas/auth/device-access-token.cjs +214 -0
  35. package/dist/lib/mysql/schemas/auth/device-access-token.cjs.map +1 -0
  36. package/dist/lib/mysql/schemas/auth/device-access-token.d.cts +52 -0
  37. package/dist/lib/mysql/schemas/auth/device-access-token.d.ts +52 -0
  38. package/dist/lib/mysql/schemas/auth/device-access-token.js +22 -0
  39. package/dist/lib/mysql/schemas/auth/device-access-token.js.map +1 -0
  40. package/dist/lib/mysql/schemas/auth/device-verification.cjs +222 -0
  41. package/dist/lib/mysql/schemas/auth/device-verification.cjs.map +1 -0
  42. package/dist/lib/mysql/schemas/auth/device-verification.d.cts +88 -0
  43. package/dist/lib/mysql/schemas/auth/device-verification.d.ts +88 -0
  44. package/dist/lib/mysql/schemas/auth/device-verification.js +22 -0
  45. package/dist/lib/mysql/schemas/auth/device-verification.js.map +1 -0
  46. package/dist/lib/mysql/schemas/auth/permissions.cjs +1 -1
  47. package/dist/lib/mysql/schemas/auth/permissions.cjs.map +1 -1
  48. package/dist/lib/mysql/schemas/auth/permissions.d.cts +9 -9
  49. package/dist/lib/mysql/schemas/auth/permissions.d.ts +9 -9
  50. package/dist/lib/mysql/schemas/auth/permissions.js +1 -1
  51. package/dist/lib/mysql/schemas/auth/role-permissions.cjs +74 -66
  52. package/dist/lib/mysql/schemas/auth/role-permissions.cjs.map +1 -1
  53. package/dist/lib/mysql/schemas/auth/role-permissions.d.cts +10 -10
  54. package/dist/lib/mysql/schemas/auth/role-permissions.d.ts +10 -10
  55. package/dist/lib/mysql/schemas/auth/role-permissions.js +13 -13
  56. package/dist/lib/mysql/schemas/auth/roles.cjs +72 -64
  57. package/dist/lib/mysql/schemas/auth/roles.cjs.map +1 -1
  58. package/dist/lib/mysql/schemas/auth/roles.d.cts +10 -10
  59. package/dist/lib/mysql/schemas/auth/roles.d.ts +10 -10
  60. package/dist/lib/mysql/schemas/auth/roles.js +12 -12
  61. package/dist/lib/mysql/schemas/auth/sessions.cjs +75 -67
  62. package/dist/lib/mysql/schemas/auth/sessions.cjs.map +1 -1
  63. package/dist/lib/mysql/schemas/auth/sessions.d.cts +6 -6
  64. package/dist/lib/mysql/schemas/auth/sessions.d.ts +6 -6
  65. package/dist/lib/mysql/schemas/auth/sessions.js +13 -13
  66. package/dist/lib/mysql/schemas/auth/user-permissions.cjs +77 -69
  67. package/dist/lib/mysql/schemas/auth/user-permissions.cjs.map +1 -1
  68. package/dist/lib/mysql/schemas/auth/user-permissions.d.cts +10 -10
  69. package/dist/lib/mysql/schemas/auth/user-permissions.d.ts +10 -10
  70. package/dist/lib/mysql/schemas/auth/user-permissions.js +12 -12
  71. package/dist/lib/mysql/schemas/auth/user-prefs.cjs +222 -0
  72. package/dist/lib/mysql/schemas/auth/user-prefs.cjs.map +1 -0
  73. package/dist/lib/mysql/schemas/auth/user-prefs.d.cts +100 -0
  74. package/dist/lib/mysql/schemas/auth/user-prefs.d.ts +100 -0
  75. package/dist/lib/mysql/schemas/auth/user-prefs.js +21 -0
  76. package/dist/lib/mysql/schemas/auth/user-prefs.js.map +1 -0
  77. package/dist/lib/mysql/schemas/auth/user-roles.cjs +77 -69
  78. package/dist/lib/mysql/schemas/auth/user-roles.cjs.map +1 -1
  79. package/dist/lib/mysql/schemas/auth/user-roles.d.cts +10 -10
  80. package/dist/lib/mysql/schemas/auth/user-roles.d.ts +10 -10
  81. package/dist/lib/mysql/schemas/auth/user-roles.js +12 -12
  82. package/dist/lib/mysql/schemas/auth/users.cjs +263 -180
  83. package/dist/lib/mysql/schemas/auth/users.cjs.map +1 -1
  84. package/dist/lib/mysql/schemas/auth/users.d.cts +35 -21
  85. package/dist/lib/mysql/schemas/auth/users.d.ts +35 -21
  86. package/dist/lib/mysql/schemas/auth/users.js +12 -12
  87. package/dist/lib/mysql/schemas/auth/verification-tokens.cjs +1 -1
  88. package/dist/lib/mysql/schemas/auth/verification-tokens.cjs.map +1 -1
  89. package/dist/lib/mysql/schemas/auth/verification-tokens.d.cts +5 -5
  90. package/dist/lib/mysql/schemas/auth/verification-tokens.d.ts +5 -5
  91. package/dist/lib/mysql/schemas/auth/verification-tokens.js +1 -1
  92. package/dist/lib/mysql/schemas/commerce/coupon.cjs +75 -65
  93. package/dist/lib/mysql/schemas/commerce/coupon.cjs.map +1 -1
  94. package/dist/lib/mysql/schemas/commerce/coupon.d.cts +19 -19
  95. package/dist/lib/mysql/schemas/commerce/coupon.d.ts +19 -19
  96. package/dist/lib/mysql/schemas/commerce/coupon.js +12 -12
  97. package/dist/lib/mysql/schemas/commerce/merchant-account.cjs +1 -1
  98. package/dist/lib/mysql/schemas/commerce/merchant-account.cjs.map +1 -1
  99. package/dist/lib/mysql/schemas/commerce/merchant-account.d.cts +6 -6
  100. package/dist/lib/mysql/schemas/commerce/merchant-account.d.ts +6 -6
  101. package/dist/lib/mysql/schemas/commerce/merchant-account.js +1 -1
  102. package/dist/lib/mysql/schemas/commerce/merchant-charge.cjs +6 -5
  103. package/dist/lib/mysql/schemas/commerce/merchant-charge.cjs.map +1 -1
  104. package/dist/lib/mysql/schemas/commerce/merchant-charge.d.cts +13 -13
  105. package/dist/lib/mysql/schemas/commerce/merchant-charge.d.ts +13 -13
  106. package/dist/lib/mysql/schemas/commerce/merchant-charge.js +4 -4
  107. package/dist/lib/mysql/schemas/commerce/merchant-coupon.cjs +1 -1
  108. package/dist/lib/mysql/schemas/commerce/merchant-coupon.cjs.map +1 -1
  109. package/dist/lib/mysql/schemas/commerce/merchant-coupon.d.cts +7 -7
  110. package/dist/lib/mysql/schemas/commerce/merchant-coupon.d.ts +7 -7
  111. package/dist/lib/mysql/schemas/commerce/merchant-coupon.js +1 -1
  112. package/dist/lib/mysql/schemas/commerce/merchant-customer.cjs +3 -2
  113. package/dist/lib/mysql/schemas/commerce/merchant-customer.cjs.map +1 -1
  114. package/dist/lib/mysql/schemas/commerce/merchant-customer.d.cts +7 -7
  115. package/dist/lib/mysql/schemas/commerce/merchant-customer.d.ts +7 -7
  116. package/dist/lib/mysql/schemas/commerce/merchant-customer.js +1 -1
  117. package/dist/lib/mysql/schemas/commerce/merchant-price.cjs +1 -1
  118. package/dist/lib/mysql/schemas/commerce/merchant-price.cjs.map +1 -1
  119. package/dist/lib/mysql/schemas/commerce/merchant-price.d.cts +8 -8
  120. package/dist/lib/mysql/schemas/commerce/merchant-price.d.ts +8 -8
  121. package/dist/lib/mysql/schemas/commerce/merchant-price.js +1 -1
  122. package/dist/lib/mysql/schemas/commerce/merchant-product.cjs +1 -1
  123. package/dist/lib/mysql/schemas/commerce/merchant-product.cjs.map +1 -1
  124. package/dist/lib/mysql/schemas/commerce/merchant-product.d.cts +7 -7
  125. package/dist/lib/mysql/schemas/commerce/merchant-product.d.ts +7 -7
  126. package/dist/lib/mysql/schemas/commerce/merchant-product.js +1 -1
  127. package/dist/lib/mysql/schemas/commerce/merchant-session.cjs +1 -1
  128. package/dist/lib/mysql/schemas/commerce/merchant-session.cjs.map +1 -1
  129. package/dist/lib/mysql/schemas/commerce/merchant-session.d.cts +4 -4
  130. package/dist/lib/mysql/schemas/commerce/merchant-session.d.ts +4 -4
  131. package/dist/lib/mysql/schemas/commerce/merchant-session.js +1 -1
  132. package/dist/lib/mysql/schemas/commerce/price.cjs +60 -52
  133. package/dist/lib/mysql/schemas/commerce/price.cjs.map +1 -1
  134. package/dist/lib/mysql/schemas/commerce/price.d.cts +11 -11
  135. package/dist/lib/mysql/schemas/commerce/price.d.ts +11 -11
  136. package/dist/lib/mysql/schemas/commerce/price.js +12 -12
  137. package/dist/lib/mysql/schemas/commerce/product.cjs +75 -67
  138. package/dist/lib/mysql/schemas/commerce/product.cjs.map +1 -1
  139. package/dist/lib/mysql/schemas/commerce/product.d.cts +13 -13
  140. package/dist/lib/mysql/schemas/commerce/product.d.ts +13 -13
  141. package/dist/lib/mysql/schemas/commerce/product.js +12 -12
  142. package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.cjs +105 -96
  143. package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.cjs.map +1 -1
  144. package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.d.cts +15 -15
  145. package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.d.ts +15 -15
  146. package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.js +13 -13
  147. package/dist/lib/mysql/schemas/commerce/purchase.cjs +138 -128
  148. package/dist/lib/mysql/schemas/commerce/purchase.cjs.map +1 -1
  149. package/dist/lib/mysql/schemas/commerce/purchase.d.cts +25 -25
  150. package/dist/lib/mysql/schemas/commerce/purchase.d.ts +25 -25
  151. package/dist/lib/mysql/schemas/commerce/purchase.js +12 -12
  152. package/dist/lib/mysql/schemas/commerce/upgradable-products.cjs +66 -58
  153. package/dist/lib/mysql/schemas/commerce/upgradable-products.cjs.map +1 -1
  154. package/dist/lib/mysql/schemas/commerce/upgradable-products.d.cts +11 -11
  155. package/dist/lib/mysql/schemas/commerce/upgradable-products.d.ts +11 -11
  156. package/dist/lib/mysql/schemas/commerce/upgradable-products.js +13 -13
  157. package/dist/lib/mysql/schemas/communication/comment.cjs +220 -0
  158. package/dist/lib/mysql/schemas/communication/comment.cjs.map +1 -0
  159. package/dist/lib/mysql/schemas/communication/comment.d.cts +100 -0
  160. package/dist/lib/mysql/schemas/communication/comment.d.ts +100 -0
  161. package/dist/lib/mysql/schemas/communication/comment.js +21 -0
  162. package/dist/lib/mysql/schemas/communication/comment.js.map +1 -0
  163. package/dist/lib/mysql/schemas/communication/communication-channel.cjs +1 -1
  164. package/dist/lib/mysql/schemas/communication/communication-channel.cjs.map +1 -1
  165. package/dist/lib/mysql/schemas/communication/communication-channel.d.cts +8 -8
  166. package/dist/lib/mysql/schemas/communication/communication-channel.d.ts +8 -8
  167. package/dist/lib/mysql/schemas/communication/communication-channel.js +1 -1
  168. package/dist/lib/mysql/schemas/communication/communication-preference-types.cjs +1 -1
  169. package/dist/lib/mysql/schemas/communication/communication-preference-types.cjs.map +1 -1
  170. package/dist/lib/mysql/schemas/communication/communication-preference-types.d.cts +8 -8
  171. package/dist/lib/mysql/schemas/communication/communication-preference-types.d.ts +8 -8
  172. package/dist/lib/mysql/schemas/communication/communication-preference-types.js +1 -1
  173. package/dist/lib/mysql/schemas/communication/communication-preferences.cjs +99 -91
  174. package/dist/lib/mysql/schemas/communication/communication-preferences.cjs.map +1 -1
  175. package/dist/lib/mysql/schemas/communication/communication-preferences.d.cts +16 -16
  176. package/dist/lib/mysql/schemas/communication/communication-preferences.d.ts +16 -16
  177. package/dist/lib/mysql/schemas/communication/communication-preferences.js +12 -12
  178. package/dist/lib/mysql/schemas/content/content-contributions.cjs +67 -59
  179. package/dist/lib/mysql/schemas/content/content-contributions.cjs.map +1 -1
  180. package/dist/lib/mysql/schemas/content/content-contributions.d.cts +13 -13
  181. package/dist/lib/mysql/schemas/content/content-contributions.d.ts +13 -13
  182. package/dist/lib/mysql/schemas/content/content-contributions.js +12 -12
  183. package/dist/lib/mysql/schemas/content/content-resource-product.cjs +61 -53
  184. package/dist/lib/mysql/schemas/content/content-resource-product.cjs.map +1 -1
  185. package/dist/lib/mysql/schemas/content/content-resource-product.d.cts +11 -11
  186. package/dist/lib/mysql/schemas/content/content-resource-product.d.ts +11 -11
  187. package/dist/lib/mysql/schemas/content/content-resource-product.js +12 -12
  188. package/dist/lib/mysql/schemas/content/content-resource-resource.cjs +58 -50
  189. package/dist/lib/mysql/schemas/content/content-resource-resource.cjs.map +1 -1
  190. package/dist/lib/mysql/schemas/content/content-resource-resource.d.cts +11 -11
  191. package/dist/lib/mysql/schemas/content/content-resource-resource.d.ts +11 -11
  192. package/dist/lib/mysql/schemas/content/content-resource-resource.js +12 -12
  193. package/dist/lib/mysql/schemas/content/content-resource.cjs +114 -66
  194. package/dist/lib/mysql/schemas/content/content-resource.cjs.map +1 -1
  195. package/dist/lib/mysql/schemas/content/content-resource.d.cts +14 -13
  196. package/dist/lib/mysql/schemas/content/content-resource.d.ts +14 -13
  197. package/dist/lib/mysql/schemas/content/content-resource.js +12 -12
  198. package/dist/lib/mysql/schemas/content/contribution-types.cjs +1 -1
  199. package/dist/lib/mysql/schemas/content/contribution-types.cjs.map +1 -1
  200. package/dist/lib/mysql/schemas/content/contribution-types.d.cts +10 -10
  201. package/dist/lib/mysql/schemas/content/contribution-types.d.ts +10 -10
  202. package/dist/lib/mysql/schemas/content/contribution-types.js +1 -1
  203. package/dist/lib/mysql/schemas/content/lesson-progress.cjs +77 -0
  204. package/dist/lib/mysql/schemas/content/lesson-progress.cjs.map +1 -0
  205. package/dist/lib/mysql/schemas/content/lesson-progress.d.cts +132 -0
  206. package/dist/lib/mysql/schemas/content/lesson-progress.d.ts +132 -0
  207. package/dist/lib/mysql/schemas/content/lesson-progress.js +8 -0
  208. package/dist/lib/mysql/schemas/content/lesson-progress.js.map +1 -0
  209. package/dist/lib/mysql/schemas/content/resource-progress.cjs +7 -7
  210. package/dist/lib/mysql/schemas/content/resource-progress.cjs.map +1 -1
  211. package/dist/lib/mysql/schemas/content/resource-progress.d.cts +9 -9
  212. package/dist/lib/mysql/schemas/content/resource-progress.d.ts +9 -9
  213. package/dist/lib/mysql/schemas/content/resource-progress.js +1 -1
  214. package/package.json +5 -5
  215. package/src/lib/mysql/index.ts +186 -54
  216. package/src/lib/mysql/schemas/auth/accounts.ts +1 -1
  217. package/src/lib/mysql/schemas/auth/device-access-token.ts +40 -0
  218. package/src/lib/mysql/schemas/auth/device-verification.ts +48 -0
  219. package/src/lib/mysql/schemas/auth/permissions.ts +1 -1
  220. package/src/lib/mysql/schemas/auth/role-permissions.ts +1 -1
  221. package/src/lib/mysql/schemas/auth/roles.ts +1 -1
  222. package/src/lib/mysql/schemas/auth/sessions.ts +1 -1
  223. package/src/lib/mysql/schemas/auth/user-permissions.ts +1 -1
  224. package/src/lib/mysql/schemas/auth/user-prefs.ts +52 -0
  225. package/src/lib/mysql/schemas/auth/user-roles.ts +1 -1
  226. package/src/lib/mysql/schemas/auth/users.ts +14 -2
  227. package/src/lib/mysql/schemas/auth/verification-tokens.ts +1 -1
  228. package/src/lib/mysql/schemas/commerce/coupon.ts +6 -4
  229. package/src/lib/mysql/schemas/commerce/merchant-account.ts +1 -1
  230. package/src/lib/mysql/schemas/commerce/merchant-charge.ts +1 -1
  231. package/src/lib/mysql/schemas/commerce/merchant-coupon.ts +1 -1
  232. package/src/lib/mysql/schemas/commerce/merchant-customer.ts +3 -1
  233. package/src/lib/mysql/schemas/commerce/merchant-price.ts +1 -1
  234. package/src/lib/mysql/schemas/commerce/merchant-product.ts +1 -1
  235. package/src/lib/mysql/schemas/commerce/merchant-session.ts +1 -1
  236. package/src/lib/mysql/schemas/commerce/price.ts +1 -1
  237. package/src/lib/mysql/schemas/commerce/product.ts +1 -1
  238. package/src/lib/mysql/schemas/commerce/purchase-user-transfer.ts +1 -1
  239. package/src/lib/mysql/schemas/commerce/purchase.ts +5 -4
  240. package/src/lib/mysql/schemas/commerce/upgradable-products.ts +1 -1
  241. package/src/lib/mysql/schemas/communication/comment.ts +52 -0
  242. package/src/lib/mysql/schemas/communication/communication-channel.ts +1 -1
  243. package/src/lib/mysql/schemas/communication/communication-preference-types.ts +1 -1
  244. package/src/lib/mysql/schemas/communication/communication-preferences.ts +1 -1
  245. package/src/lib/mysql/schemas/content/content-contributions.ts +1 -1
  246. package/src/lib/mysql/schemas/content/content-resource-product.ts +1 -1
  247. package/src/lib/mysql/schemas/content/content-resource-resource.ts +1 -1
  248. package/src/lib/mysql/schemas/content/content-resource.ts +6 -2
  249. package/src/lib/mysql/schemas/content/contribution-types.ts +1 -1
  250. package/src/lib/mysql/schemas/content/lesson-progress.ts +39 -0
  251. package/src/lib/mysql/schemas/content/resource-progress.ts +6 -8
@@ -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.contentResourceId, options.lessonId),
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.contentResourceId, options.lessonId))
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
- contentResourceId: options.lessonId,
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.contentResourceId, options.lessonId),
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
- return couponSchema
564
+ const parsedCoupon = couponSchema
534
565
  .extend({
535
566
  merchantCoupon: merchantCouponSchema,
536
567
  })
537
- .parse(couponForIdOrCode)
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]?.coupons ?? null
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
- return couponSchema.nullable().parse(
820
- await client
821
- .select()
822
- .from(coupon)
823
- .where(
824
- or(eq(coupon.id, couponIdOrCode), eq(coupon.code, couponIdOrCode)),
825
- )
826
- .then((res) => res[0] ?? null),
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
- const moduleResources =
961
- await client.query.contentResourceResource.findMany({
962
- where: inArray(
963
- contentResourceResource.resourceOfId,
964
- parsedModule.resources?.map((r) => r.resourceId) ?? [],
965
- ),
966
- orderBy: asc(contentResourceResource.position),
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
- const parsedModuleResources = z
970
- .array(ContentResourceResourceSchema)
971
- .safeParse(moduleResources)
1041
+ recurse(resources)
1042
+ return result
1043
+ }
972
1044
 
973
- if (!parsedModuleResources.success) {
974
- console.error(
975
- 'Error parsing module resources',
976
- parsedModuleResources.error,
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 user = await client.query.users.findFirst({
988
- where: or(eq(users.id, userIdOrEmail), eq(users.email, userIdOrEmail)),
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: parsedModuleResources.data.length,
1102
+ totalLessonsCount,
1002
1103
  }
1003
1104
  }
1004
1105
 
1005
- const parsedUser = userSchema.parse(user)
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.contentResourceId,
1013
- parsedModuleResources.data.map((r) => r.resourceId),
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 = moduleResources.find(
1020
- (r) => !userProgress.find((p) => p.contentResourceId === r.resourceId),
1021
- )?.resourceId
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: parsedModuleResources.data.length,
1156
+ totalLessonsCount,
1043
1157
  }
1044
1158
  }
1045
1159
  const percentCompleted = Math.round(
1046
- (parsedProgress.data.length / parsedModuleResources.data.length) * 100,
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: parsedModuleResources.data.length,
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.contentResourceId, options.lessonId),
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.contentResourceId, options.lessonId))
1608
+ .where(eq(resourceProgress.resourceId, options.lessonId))
1485
1609
  } else {
1486
1610
  await client.insert(resourceProgress).values({
1487
1611
  userId: options.userId,
1488
- contentResourceId: options.lessonId,
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.contentResourceId, options.lessonId),
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: true,
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.user
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
- 'account',
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
- 'permission',
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
- 'rolePermission',
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
- 'role',
15
+ 'Role',
16
16
  {
17
17
  id: varchar('id', { length: 255 }).notNull().primaryKey(),
18
18
  name: varchar('name', { length: 255 }).notNull().unique(),
@@ -5,7 +5,7 @@ import { getUsersSchema } from './users.js'
5
5
 
6
6
  export function getSessionsSchema(mysqlTable: MySqlTableFn) {
7
7
  return mysqlTable(
8
- 'session',
8
+ 'Session',
9
9
  {
10
10
  sessionToken: varchar('sessionToken', { length: 255 })
11
11
  .notNull()
@@ -13,7 +13,7 @@ import { getUsersSchema } from './users.js'
13
13
 
14
14
  export function getUserPermissionsSchema(mysqlTable: MySqlTableFn) {
15
15
  return mysqlTable(
16
- 'userPermission',
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
- 'userRole',
16
+ 'UserRole',
17
17
  {
18
18
  userId: varchar('userId', { length: 255 }).notNull(),
19
19
  roleId: varchar('roleId', { length: 255 }).notNull(),