@coursebuilder/adapter-drizzle 0.0.3 → 0.0.5

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 (239) hide show
  1. package/dist/chunk-6CBAFOL3.js +38 -0
  2. package/dist/chunk-AIDEJDKJ.js +44 -0
  3. package/dist/chunk-BRGTUNY2.js +78 -0
  4. package/dist/chunk-H4MXNDWO.js +34 -0
  5. package/dist/chunk-ICL7XZ2Y.js +50 -0
  6. package/dist/chunk-JD4KFACE.js +43 -0
  7. package/dist/chunk-JQFZOCAU.js +4099 -0
  8. package/dist/chunk-KI47TR7F.js +47 -0
  9. package/dist/chunk-KVN3JV7C.js +60 -0
  10. package/dist/chunk-LLWSIKQV.js +18 -0
  11. package/dist/chunk-MBQ3TMHH.js +44 -0
  12. package/dist/chunk-NISOQSUL.js +47 -0
  13. package/dist/chunk-PUGK2AEH.js +746 -0
  14. package/dist/chunk-RMRO5TA7.js +228 -0
  15. package/dist/chunk-SFJM6FKE.js +36 -0
  16. package/dist/chunk-SQR6UWVO.js +225 -0
  17. package/dist/chunk-TA6VLEV5.js +45 -0
  18. package/dist/chunk-TMQIGK3N.js +36 -0
  19. package/dist/chunk-US2EXVMI.js +42 -0
  20. package/dist/chunk-UY3DVPP3.js +48 -0
  21. package/dist/chunk-VEFCDI73.js +67 -0
  22. package/dist/chunk-VNI36MMC.js +7 -0
  23. package/dist/chunk-VZABQCFH.js +40 -0
  24. package/dist/index.d.ts +15 -0
  25. package/dist/index.js +54 -0
  26. package/dist/lib/mysql/index.cjs +5414 -0
  27. package/dist/lib/mysql/index.cjs.map +1 -0
  28. package/dist/lib/mysql/index.d.ts +5713 -0
  29. package/dist/lib/mysql/index.js +30 -0
  30. package/dist/lib/mysql/index.js.map +1 -0
  31. package/dist/lib/mysql/schemas/auth/accounts.cjs +177 -0
  32. package/dist/lib/mysql/schemas/auth/accounts.cjs.map +1 -0
  33. package/dist/lib/mysql/schemas/auth/accounts.d.ts +184 -0
  34. package/dist/lib/mysql/schemas/auth/accounts.js +12 -0
  35. package/dist/lib/mysql/schemas/auth/accounts.js.map +1 -0
  36. package/dist/lib/mysql/schemas/auth/permissions.cjs +155 -0
  37. package/dist/lib/mysql/schemas/auth/permissions.cjs.map +1 -0
  38. package/dist/lib/mysql/schemas/auth/permissions.d.ts +100 -0
  39. package/dist/lib/mysql/schemas/auth/permissions.js +12 -0
  40. package/dist/lib/mysql/schemas/auth/permissions.js.map +1 -0
  41. package/dist/lib/mysql/schemas/auth/role-permissions.cjs +200 -0
  42. package/dist/lib/mysql/schemas/auth/role-permissions.cjs.map +1 -0
  43. package/dist/lib/mysql/schemas/auth/role-permissions.d.ts +89 -0
  44. package/dist/lib/mysql/schemas/auth/role-permissions.js +12 -0
  45. package/dist/lib/mysql/schemas/auth/role-permissions.js.map +1 -0
  46. package/dist/lib/mysql/schemas/auth/roles.cjs +157 -0
  47. package/dist/lib/mysql/schemas/auth/roles.cjs.map +1 -0
  48. package/dist/lib/mysql/schemas/auth/roles.d.ts +100 -0
  49. package/dist/lib/mysql/schemas/auth/roles.js +12 -0
  50. package/dist/lib/mysql/schemas/auth/roles.js.map +1 -0
  51. package/dist/lib/mysql/schemas/auth/sessions.cjs +156 -0
  52. package/dist/lib/mysql/schemas/auth/sessions.cjs.map +1 -0
  53. package/dist/lib/mysql/schemas/auth/sessions.d.ts +52 -0
  54. package/dist/lib/mysql/schemas/auth/sessions.js +13 -0
  55. package/dist/lib/mysql/schemas/auth/sessions.js.map +1 -0
  56. package/dist/lib/mysql/schemas/auth/user-permissions.cjs +207 -0
  57. package/dist/lib/mysql/schemas/auth/user-permissions.cjs.map +1 -0
  58. package/dist/lib/mysql/schemas/auth/user-permissions.d.ts +89 -0
  59. package/dist/lib/mysql/schemas/auth/user-permissions.js +12 -0
  60. package/dist/lib/mysql/schemas/auth/user-permissions.js.map +1 -0
  61. package/dist/lib/mysql/schemas/auth/user-roles.cjs +205 -0
  62. package/dist/lib/mysql/schemas/auth/user-roles.cjs.map +1 -0
  63. package/dist/lib/mysql/schemas/auth/user-roles.d.ts +89 -0
  64. package/dist/lib/mysql/schemas/auth/user-roles.js +12 -0
  65. package/dist/lib/mysql/schemas/auth/user-roles.js.map +1 -0
  66. package/dist/lib/mysql/schemas/auth/users.cjs +364 -0
  67. package/dist/lib/mysql/schemas/auth/users.cjs.map +1 -0
  68. package/dist/lib/mysql/schemas/auth/users.d.ts +105 -0
  69. package/dist/lib/mysql/schemas/auth/users.js +12 -0
  70. package/dist/lib/mysql/schemas/auth/users.js.map +1 -0
  71. package/dist/lib/mysql/schemas/auth/verification-tokens.cjs +57 -0
  72. package/dist/lib/mysql/schemas/auth/verification-tokens.cjs.map +1 -0
  73. package/dist/lib/mysql/schemas/auth/verification-tokens.d.ts +60 -0
  74. package/dist/lib/mysql/schemas/auth/verification-tokens.js +8 -0
  75. package/dist/lib/mysql/schemas/auth/verification-tokens.js.map +1 -0
  76. package/dist/lib/mysql/schemas/commerce/coupon.cjs +81 -0
  77. package/dist/lib/mysql/schemas/commerce/coupon.cjs.map +1 -0
  78. package/dist/lib/mysql/schemas/commerce/coupon.d.ts +168 -0
  79. package/dist/lib/mysql/schemas/commerce/coupon.js +8 -0
  80. package/dist/lib/mysql/schemas/commerce/coupon.js.map +1 -0
  81. package/dist/lib/mysql/schemas/commerce/merchant-account.cjs +61 -0
  82. package/dist/lib/mysql/schemas/commerce/merchant-account.cjs.map +1 -0
  83. package/dist/lib/mysql/schemas/commerce/merchant-account.d.ts +72 -0
  84. package/dist/lib/mysql/schemas/commerce/merchant-account.js +8 -0
  85. package/dist/lib/mysql/schemas/commerce/merchant-account.js.map +1 -0
  86. package/dist/lib/mysql/schemas/commerce/merchant-charge.cjs +71 -0
  87. package/dist/lib/mysql/schemas/commerce/merchant-charge.cjs.map +1 -0
  88. package/dist/lib/mysql/schemas/commerce/merchant-charge.d.ts +108 -0
  89. package/dist/lib/mysql/schemas/commerce/merchant-charge.js +8 -0
  90. package/dist/lib/mysql/schemas/commerce/merchant-charge.js.map +1 -0
  91. package/dist/lib/mysql/schemas/commerce/merchant-coupon.cjs +64 -0
  92. package/dist/lib/mysql/schemas/commerce/merchant-coupon.cjs.map +1 -0
  93. package/dist/lib/mysql/schemas/commerce/merchant-coupon.d.ts +84 -0
  94. package/dist/lib/mysql/schemas/commerce/merchant-coupon.js +8 -0
  95. package/dist/lib/mysql/schemas/commerce/merchant-coupon.js.map +1 -0
  96. package/dist/lib/mysql/schemas/commerce/merchant-customer.cjs +65 -0
  97. package/dist/lib/mysql/schemas/commerce/merchant-customer.cjs.map +1 -0
  98. package/dist/lib/mysql/schemas/commerce/merchant-customer.d.ts +84 -0
  99. package/dist/lib/mysql/schemas/commerce/merchant-customer.js +8 -0
  100. package/dist/lib/mysql/schemas/commerce/merchant-customer.js.map +1 -0
  101. package/dist/lib/mysql/schemas/commerce/merchant-price.cjs +68 -0
  102. package/dist/lib/mysql/schemas/commerce/merchant-price.cjs.map +1 -0
  103. package/dist/lib/mysql/schemas/commerce/merchant-price.d.ts +96 -0
  104. package/dist/lib/mysql/schemas/commerce/merchant-price.js +8 -0
  105. package/dist/lib/mysql/schemas/commerce/merchant-price.js.map +1 -0
  106. package/dist/lib/mysql/schemas/commerce/merchant-product.cjs +65 -0
  107. package/dist/lib/mysql/schemas/commerce/merchant-product.cjs.map +1 -0
  108. package/dist/lib/mysql/schemas/commerce/merchant-product.d.ts +84 -0
  109. package/dist/lib/mysql/schemas/commerce/merchant-product.js +8 -0
  110. package/dist/lib/mysql/schemas/commerce/merchant-product.js.map +1 -0
  111. package/dist/lib/mysql/schemas/commerce/merchant-session.cjs +55 -0
  112. package/dist/lib/mysql/schemas/commerce/merchant-session.cjs.map +1 -0
  113. package/dist/lib/mysql/schemas/commerce/merchant-session.d.ts +48 -0
  114. package/dist/lib/mysql/schemas/commerce/merchant-session.js +8 -0
  115. package/dist/lib/mysql/schemas/commerce/merchant-session.js.map +1 -0
  116. package/dist/lib/mysql/schemas/commerce/price.cjs +66 -0
  117. package/dist/lib/mysql/schemas/commerce/price.cjs.map +1 -0
  118. package/dist/lib/mysql/schemas/commerce/price.d.ts +96 -0
  119. package/dist/lib/mysql/schemas/commerce/price.js +8 -0
  120. package/dist/lib/mysql/schemas/commerce/price.js.map +1 -0
  121. package/dist/lib/mysql/schemas/commerce/product.cjs +63 -0
  122. package/dist/lib/mysql/schemas/commerce/product.cjs.map +1 -0
  123. package/dist/lib/mysql/schemas/commerce/product.d.ts +96 -0
  124. package/dist/lib/mysql/schemas/commerce/product.js +8 -0
  125. package/dist/lib/mysql/schemas/commerce/product.js.map +1 -0
  126. package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.cjs +88 -0
  127. package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.cjs.map +1 -0
  128. package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.d.ts +132 -0
  129. package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.js +8 -0
  130. package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.js.map +1 -0
  131. package/dist/lib/mysql/schemas/commerce/purchase.cjs +99 -0
  132. package/dist/lib/mysql/schemas/commerce/purchase.cjs.map +1 -0
  133. package/dist/lib/mysql/schemas/commerce/purchase.d.ts +216 -0
  134. package/dist/lib/mysql/schemas/commerce/purchase.js +8 -0
  135. package/dist/lib/mysql/schemas/commerce/purchase.js.map +1 -0
  136. package/dist/lib/mysql/schemas/communication/communication-channel.cjs +59 -0
  137. package/dist/lib/mysql/schemas/communication/communication-channel.cjs.map +1 -0
  138. package/dist/lib/mysql/schemas/communication/communication-channel.d.ts +96 -0
  139. package/dist/lib/mysql/schemas/communication/communication-channel.js +8 -0
  140. package/dist/lib/mysql/schemas/communication/communication-channel.js.map +1 -0
  141. package/dist/lib/mysql/schemas/communication/communication-preference-types.cjs +57 -0
  142. package/dist/lib/mysql/schemas/communication/communication-preference-types.cjs.map +1 -0
  143. package/dist/lib/mysql/schemas/communication/communication-preference-types.d.ts +96 -0
  144. package/dist/lib/mysql/schemas/communication/communication-preference-types.js +8 -0
  145. package/dist/lib/mysql/schemas/communication/communication-preference-types.js.map +1 -0
  146. package/dist/lib/mysql/schemas/communication/communication-preferences.cjs +253 -0
  147. package/dist/lib/mysql/schemas/communication/communication-preferences.cjs.map +1 -0
  148. package/dist/lib/mysql/schemas/communication/communication-preferences.d.ts +150 -0
  149. package/dist/lib/mysql/schemas/communication/communication-preferences.js +12 -0
  150. package/dist/lib/mysql/schemas/communication/communication-preferences.js.map +1 -0
  151. package/dist/lib/mysql/schemas/content/content-contributions.cjs +252 -0
  152. package/dist/lib/mysql/schemas/content/content-contributions.cjs.map +1 -0
  153. package/dist/lib/mysql/schemas/content/content-contributions.d.ts +114 -0
  154. package/dist/lib/mysql/schemas/content/content-contributions.js +12 -0
  155. package/dist/lib/mysql/schemas/content/content-contributions.js.map +1 -0
  156. package/dist/lib/mysql/schemas/content/content-resource-resource.cjs +179 -0
  157. package/dist/lib/mysql/schemas/content/content-resource-resource.cjs.map +1 -0
  158. package/dist/lib/mysql/schemas/content/content-resource-resource.d.ts +101 -0
  159. package/dist/lib/mysql/schemas/content/content-resource-resource.js +12 -0
  160. package/dist/lib/mysql/schemas/content/content-resource-resource.js.map +1 -0
  161. package/dist/lib/mysql/schemas/content/content-resource.cjs +246 -0
  162. package/dist/lib/mysql/schemas/content/content-resource.cjs.map +1 -0
  163. package/dist/lib/mysql/schemas/content/content-resource.d.ts +103 -0
  164. package/dist/lib/mysql/schemas/content/content-resource.js +12 -0
  165. package/dist/lib/mysql/schemas/content/content-resource.js.map +1 -0
  166. package/dist/lib/mysql/schemas/content/contribution-types.cjs +162 -0
  167. package/dist/lib/mysql/schemas/content/contribution-types.cjs.map +1 -0
  168. package/dist/lib/mysql/schemas/content/contribution-types.d.ts +112 -0
  169. package/dist/lib/mysql/schemas/content/contribution-types.js +12 -0
  170. package/dist/lib/mysql/schemas/content/contribution-types.js.map +1 -0
  171. package/dist/lib/mysql/schemas/content/resource-progress.cjs +69 -0
  172. package/dist/lib/mysql/schemas/content/resource-progress.cjs.map +1 -0
  173. package/dist/lib/mysql/schemas/content/resource-progress.d.ts +84 -0
  174. package/dist/lib/mysql/schemas/content/resource-progress.js +8 -0
  175. package/dist/lib/mysql/schemas/content/resource-progress.js.map +1 -0
  176. package/dist/lib/pg.cjs +247 -0
  177. package/dist/lib/pg.cjs.map +1 -0
  178. package/{lib → dist/lib}/pg.d.ts +44 -41
  179. package/dist/lib/pg.js +10 -0
  180. package/dist/lib/pg.js.map +1 -0
  181. package/dist/lib/sqlite.cjs +259 -0
  182. package/dist/lib/sqlite.cjs.map +1 -0
  183. package/{lib → dist/lib}/sqlite.d.ts +53 -49
  184. package/dist/lib/sqlite.js +11 -0
  185. package/dist/lib/sqlite.js.map +1 -0
  186. package/dist/lib/utils.cjs +39 -0
  187. package/dist/lib/utils.cjs.map +1 -0
  188. package/dist/lib/utils.d.ts +28 -0
  189. package/dist/lib/utils.js +8 -0
  190. package/dist/lib/utils.js.map +1 -0
  191. package/package.json +20 -11
  192. package/src/index.ts +16 -11
  193. package/src/lib/mysql/index.ts +424 -0
  194. package/src/lib/mysql/schemas/auth/accounts.ts +52 -0
  195. package/src/lib/mysql/schemas/auth/permissions.ts +44 -0
  196. package/src/lib/mysql/schemas/auth/role-permissions.ts +56 -0
  197. package/src/lib/mysql/schemas/auth/roles.ts +46 -0
  198. package/src/lib/mysql/schemas/auth/sessions.ts +28 -0
  199. package/src/lib/mysql/schemas/auth/user-permissions.ts +56 -0
  200. package/src/lib/mysql/schemas/auth/user-roles.ts +56 -0
  201. package/src/lib/mysql/schemas/auth/users.ts +58 -0
  202. package/src/lib/mysql/schemas/auth/verification-tokens.ts +24 -0
  203. package/src/lib/mysql/schemas/commerce/coupon.ts +47 -0
  204. package/src/lib/mysql/schemas/commerce/merchant-account.ts +31 -0
  205. package/src/lib/mysql/schemas/commerce/merchant-charge.ts +44 -0
  206. package/src/lib/mysql/schemas/commerce/merchant-coupon.ts +38 -0
  207. package/src/lib/mysql/schemas/commerce/merchant-customer.ts +38 -0
  208. package/src/lib/mysql/schemas/commerce/merchant-price.ts +41 -0
  209. package/src/lib/mysql/schemas/commerce/merchant-product.ts +38 -0
  210. package/src/lib/mysql/schemas/commerce/merchant-session.ts +22 -0
  211. package/src/lib/mysql/schemas/commerce/price.ts +32 -0
  212. package/src/lib/mysql/schemas/commerce/product.ts +31 -0
  213. package/src/lib/mysql/schemas/commerce/purchase-user-transfer.ts +46 -0
  214. package/src/lib/mysql/schemas/commerce/purchase.ts +48 -0
  215. package/src/lib/mysql/schemas/communication/communication-channel.ts +35 -0
  216. package/src/lib/mysql/schemas/communication/communication-preference-types.ts +30 -0
  217. package/src/lib/mysql/schemas/communication/communication-preferences.ts +78 -0
  218. package/src/lib/mysql/schemas/content/content-contributions.ts +70 -0
  219. package/src/lib/mysql/schemas/content/content-resource-resource.ts +60 -0
  220. package/src/lib/mysql/schemas/content/content-resource.ts +57 -0
  221. package/src/lib/mysql/schemas/content/contribution-types.ts +49 -0
  222. package/src/lib/mysql/schemas/content/resource-progress.ts +38 -0
  223. package/src/lib/pg.ts +272 -252
  224. package/src/lib/sqlite.ts +261 -201
  225. package/src/lib/utils.ts +24 -21
  226. package/index.d.ts +0 -6
  227. package/index.d.ts.map +0 -1
  228. package/index.js +0 -20
  229. package/lib/mysql.d.ts +0 -505
  230. package/lib/mysql.d.ts.map +0 -1
  231. package/lib/mysql.js +0 -319
  232. package/lib/pg.d.ts.map +0 -1
  233. package/lib/pg.js +0 -231
  234. package/lib/sqlite.d.ts.map +0 -1
  235. package/lib/sqlite.js +0 -189
  236. package/lib/utils.d.ts +0 -26
  237. package/lib/utils.d.ts.map +0 -1
  238. package/lib/utils.js +0 -7
  239. package/src/lib/mysql.ts +0 -402
@@ -0,0 +1,424 @@
1
+ import type { AdapterSession, AdapterUser } from '@auth/core/adapters'
2
+ import { addSeconds, isAfter } from 'date-fns'
3
+ import { and, eq, sql } from 'drizzle-orm'
4
+ import {
5
+ mysqlTable as defaultMySqlTableFn,
6
+ MySqlDatabase,
7
+ MySqlTableFn,
8
+ } from 'drizzle-orm/mysql-core'
9
+
10
+ import { type CourseBuilderAdapter } from '@coursebuilder/core/adapters'
11
+ import { VideoResourceSchema } from '@coursebuilder/core/schemas/video-resource'
12
+
13
+ import {
14
+ getAccountsRelationsSchema,
15
+ getAccountsSchema,
16
+ } from './schemas/auth/accounts'
17
+ import {
18
+ getPermissionsRelationsSchema,
19
+ getPermissionsSchema,
20
+ } from './schemas/auth/permissions'
21
+ import {
22
+ getRolePermissionsRelationsSchema,
23
+ getRolePermissionsSchema,
24
+ } from './schemas/auth/role-permissions'
25
+ import { getRolesRelationsSchema, getRolesSchema } from './schemas/auth/roles'
26
+ import {
27
+ getSessionRelationsSchema,
28
+ getSessionsSchema,
29
+ } from './schemas/auth/sessions'
30
+ import {
31
+ getUserPermissionsRelationsSchema,
32
+ getUserPermissionsSchema,
33
+ } from './schemas/auth/user-permissions'
34
+ import {
35
+ getUserRolesRelationsSchema,
36
+ getUserRolesSchema,
37
+ } from './schemas/auth/user-roles'
38
+ import { getUsersRelationsSchema, getUsersSchema } from './schemas/auth/users'
39
+ import { getVerificationTokensSchema } from './schemas/auth/verification-tokens'
40
+ import { getCouponSchema } from './schemas/commerce/coupon'
41
+ import { getMerchantAccountSchema } from './schemas/commerce/merchant-account'
42
+ import { getMerchantChargeSchema } from './schemas/commerce/merchant-charge'
43
+ import { getMerchantCouponSchema } from './schemas/commerce/merchant-coupon'
44
+ import { getMerchantCustomerSchema } from './schemas/commerce/merchant-customer'
45
+ import { getMerchantPriceSchema } from './schemas/commerce/merchant-price'
46
+ import { getMerchantProductSchema } from './schemas/commerce/merchant-product'
47
+ import { getMerchantSessionSchema } from './schemas/commerce/merchant-session'
48
+ import { getPriceSchema } from './schemas/commerce/price'
49
+ import { getProductSchema } from './schemas/commerce/product'
50
+ import { getPurchaseSchema } from './schemas/commerce/purchase'
51
+ import { getPurchaseUserTransferSchema } from './schemas/commerce/purchase-user-transfer'
52
+ import { getCommunicationChannelSchema } from './schemas/communication/communication-channel'
53
+ import { getCommunicationPreferenceTypesSchema } from './schemas/communication/communication-preference-types'
54
+ import {
55
+ getCommunicationPreferencesRelationsSchema,
56
+ getCommunicationPreferencesSchema,
57
+ } from './schemas/communication/communication-preferences'
58
+ import {
59
+ getContentContributionRelationsSchema,
60
+ getContentContributionsSchema,
61
+ } from './schemas/content/content-contributions'
62
+ import {
63
+ getContentResourceRelationsSchema,
64
+ getContentResourceSchema,
65
+ } from './schemas/content/content-resource'
66
+ import {
67
+ getContentResourceResourceRelationsSchema,
68
+ getContentResourceResourceSchema,
69
+ } from './schemas/content/content-resource-resource'
70
+ import {
71
+ getContributionTypesRelationsSchema,
72
+ getContributionTypesSchema,
73
+ } from './schemas/content/contribution-types'
74
+ import { getResourceProgressSchema } from './schemas/content/resource-progress'
75
+
76
+ export function getCourseBuilderSchema(mysqlTable: MySqlTableFn) {
77
+ return {
78
+ accounts: getAccountsSchema(mysqlTable),
79
+ accountsRelations: getAccountsRelationsSchema(mysqlTable),
80
+ permissions: getPermissionsSchema(mysqlTable),
81
+ permissionsRelations: getPermissionsRelationsSchema(mysqlTable),
82
+ rolePermissions: getRolePermissionsSchema(mysqlTable),
83
+ rolePermissionsRelations: getRolePermissionsRelationsSchema(mysqlTable),
84
+ roles: getRolesSchema(mysqlTable),
85
+ rolesRelations: getRolesRelationsSchema(mysqlTable),
86
+ sessions: getSessionsSchema(mysqlTable),
87
+ sessionsRelations: getSessionRelationsSchema(mysqlTable),
88
+ userPermissions: getUserPermissionsSchema(mysqlTable),
89
+ userPermissionsRelations: getUserPermissionsRelationsSchema(mysqlTable),
90
+ userRoles: getUserRolesSchema(mysqlTable),
91
+ userRolesRelations: getUserRolesRelationsSchema(mysqlTable),
92
+ users: getUsersSchema(mysqlTable),
93
+ usersRelations: getUsersRelationsSchema(mysqlTable),
94
+ verificationTokens: getVerificationTokensSchema(mysqlTable),
95
+ coupon: getCouponSchema(mysqlTable),
96
+ merchantAccount: getMerchantAccountSchema(mysqlTable),
97
+ merchantCharge: getMerchantChargeSchema(mysqlTable),
98
+ merchantCoupon: getMerchantCouponSchema(mysqlTable),
99
+ merchantCustomer: getMerchantCustomerSchema(mysqlTable),
100
+ merchantPrice: getMerchantPriceSchema(mysqlTable),
101
+ merchantProduct: getMerchantProductSchema(mysqlTable),
102
+ merchantSession: getMerchantSessionSchema(mysqlTable),
103
+ price: getPriceSchema(mysqlTable),
104
+ product: getProductSchema(mysqlTable),
105
+ purchase: getPurchaseSchema(mysqlTable),
106
+ purchaseUserTransfer: getPurchaseUserTransferSchema(mysqlTable),
107
+ communicationChannel: getCommunicationChannelSchema(mysqlTable),
108
+ communicationPreferenceTypes:
109
+ getCommunicationPreferenceTypesSchema(mysqlTable),
110
+ communicationPreferences: getCommunicationPreferencesSchema(mysqlTable),
111
+ communicationPreferencesRelations:
112
+ getCommunicationPreferencesRelationsSchema(mysqlTable),
113
+ contentContributions: getContentContributionsSchema(mysqlTable),
114
+ contentContributionRelations:
115
+ getContentContributionRelationsSchema(mysqlTable),
116
+ contentResource: getContentResourceSchema(mysqlTable),
117
+ contentResourceRelations: getContentResourceRelationsSchema(mysqlTable),
118
+ contentResourceResource: getContentResourceResourceSchema(mysqlTable),
119
+ contentResourceResourceRelations:
120
+ getContentResourceResourceRelationsSchema(mysqlTable),
121
+ contributionTypes: getContributionTypesSchema(mysqlTable),
122
+ contributionTypesRelations: getContributionTypesRelationsSchema(mysqlTable),
123
+ resourceProgress: getResourceProgressSchema(mysqlTable),
124
+ } as const
125
+ }
126
+
127
+ export function createTables(mySqlTable: MySqlTableFn) {
128
+ return getCourseBuilderSchema(mySqlTable)
129
+ }
130
+
131
+ export type DefaultSchema = ReturnType<typeof createTables>
132
+
133
+ export function mySqlDrizzleAdapter(
134
+ client: InstanceType<typeof MySqlDatabase>,
135
+ tableFn = defaultMySqlTableFn,
136
+ ): CourseBuilderAdapter {
137
+ const {
138
+ users,
139
+ accounts,
140
+ sessions,
141
+ verificationTokens,
142
+ contentResource,
143
+ contentResourceResource,
144
+ purchase,
145
+ purchaseUserTransfer,
146
+ coupon,
147
+ merchantCoupon,
148
+ merchantCharge,
149
+ merchantAccount,
150
+ merchantPrice,
151
+ merchantCustomer,
152
+ merchantSession,
153
+ merchantProduct,
154
+ price,
155
+ product,
156
+ } = createTables(tableFn)
157
+
158
+ return {
159
+ async updateContentResourceFields(options) {
160
+ if (!options.id) {
161
+ throw new Error('No content resource id.')
162
+ }
163
+
164
+ const currentResource = await client
165
+ .select()
166
+ .from(contentResource)
167
+ .where(eq(contentResource.id, options.id))
168
+ .then((res) => res[0])
169
+
170
+ await client
171
+ .update(contentResource)
172
+ .set({ fields: { ...currentResource.fields, ...options.fields } })
173
+ .where(eq(contentResource.id, options.id))
174
+
175
+ return await client
176
+ .select()
177
+ .from(contentResource)
178
+ .where(eq(contentResource.id, options.id))
179
+ .then((res) => res[0])
180
+ },
181
+ async getVideoResource(id) {
182
+ if (!id) {
183
+ throw new Error('videoResourceId is required')
184
+ }
185
+
186
+ const query = sql`
187
+ SELECT
188
+ id as _id,
189
+ CAST(updatedAt AS DATETIME) as _updatedAt,
190
+ CAST(createdAt AS DATETIME) as _createdAt,
191
+ JSON_EXTRACT (${contentResource.fields}, "$.state") AS state,
192
+ JSON_EXTRACT (${contentResource.fields}, "$.duration") AS duration,
193
+ JSON_EXTRACT (${contentResource.fields}, "$.muxPlaybackId") AS muxPlaybackId,
194
+ JSON_EXTRACT (${contentResource.fields}, "$.muxAssetId") AS muxAssetId,
195
+ JSON_EXTRACT (${contentResource.fields}, "$.transcript") AS transcript
196
+ FROM
197
+ ${contentResource}
198
+ WHERE
199
+ type = 'videoResource'
200
+ AND (id = ${id});
201
+
202
+ `
203
+ return client
204
+ .execute(query)
205
+ .then((result: any) => {
206
+ const parsedResource = VideoResourceSchema.safeParse(result.rows[0])
207
+ return parsedResource.success ? parsedResource.data : null
208
+ })
209
+ .catch((error) => {
210
+ console.error(error)
211
+ return error
212
+ })
213
+ },
214
+ async createContentResource(data) {
215
+ const id = data.id || crypto.randomUUID()
216
+
217
+ await client.insert(contentResource).values({ ...data, id })
218
+
219
+ return await client
220
+ .select()
221
+ .from(contentResource)
222
+ .where(eq(contentResource.id, id))
223
+ .then((res) => res[0])
224
+ },
225
+ async getContentResource(data) {
226
+ return (
227
+ (await client
228
+ .select()
229
+ .from(contentResource)
230
+ .where(eq(contentResource.id, data))
231
+ .then((res) => res[0])) ?? null
232
+ )
233
+ },
234
+ async createUser(data) {
235
+ const id = crypto.randomUUID()
236
+
237
+ await client.insert(users).values({ ...data, id })
238
+
239
+ return await client
240
+ .select()
241
+ .from(users)
242
+ .where(eq(users.id, id))
243
+ .then((res) => res[0] as AdapterUser)
244
+ },
245
+ async getUser(data) {
246
+ return (
247
+ (await client
248
+ .select()
249
+ .from(users)
250
+ .where(eq(users.id, data))
251
+ .then((res) => res[0])) ?? null
252
+ )
253
+ },
254
+ async getUserByEmail(data) {
255
+ return (
256
+ (await client
257
+ .select()
258
+ .from(users)
259
+ .where(eq(users.email, data))
260
+ .then((res) => res[0])) ?? null
261
+ )
262
+ },
263
+ async createSession(data) {
264
+ await client.insert(sessions).values(data)
265
+
266
+ return await client
267
+ .select()
268
+ .from(sessions)
269
+ .where(eq(sessions.sessionToken, data.sessionToken))
270
+ .then((res) => res[0] as AdapterSession)
271
+ },
272
+ async getSessionAndUser(data) {
273
+ return (
274
+ (await client
275
+ .select({
276
+ session: sessions,
277
+ user: users,
278
+ })
279
+ .from(sessions)
280
+ .where(eq(sessions.sessionToken, data))
281
+ .innerJoin(users, eq(users.id, sessions.userId))
282
+ .then((res) => res[0])) ?? null
283
+ )
284
+ },
285
+ async updateUser(data) {
286
+ if (!data.id) {
287
+ throw new Error('No user id.')
288
+ }
289
+
290
+ await client.update(users).set(data).where(eq(users.id, data.id))
291
+
292
+ return await client
293
+ .select()
294
+ .from(users)
295
+ .where(eq(users.id, data.id))
296
+ .then((res) => res[0] as AdapterUser)
297
+ },
298
+ async updateSession(data) {
299
+ await client
300
+ .update(sessions)
301
+ .set(data)
302
+ .where(eq(sessions.sessionToken, data.sessionToken))
303
+
304
+ return await client
305
+ .select()
306
+ .from(sessions)
307
+ .where(eq(sessions.sessionToken, data.sessionToken))
308
+ .then((res) => res[0])
309
+ },
310
+ async linkAccount(rawAccount) {
311
+ await client.insert(accounts).values(rawAccount)
312
+ },
313
+ async getUserByAccount(account) {
314
+ const dbAccount =
315
+ (await client
316
+ .select()
317
+ .from(accounts)
318
+ .where(
319
+ and(
320
+ eq(accounts.providerAccountId, account.providerAccountId),
321
+ eq(accounts.provider, account.provider),
322
+ ),
323
+ )
324
+ .leftJoin(users, eq(accounts.userId, users.id))
325
+ .then((res) => res[0])) ?? null
326
+
327
+ if (!dbAccount) {
328
+ return null
329
+ }
330
+
331
+ return dbAccount.user
332
+ },
333
+ async deleteSession(sessionToken) {
334
+ const session =
335
+ (await client
336
+ .select()
337
+ .from(sessions)
338
+ .where(eq(sessions.sessionToken, sessionToken))
339
+ .then((res) => res[0])) ?? null
340
+
341
+ await client
342
+ .delete(sessions)
343
+ .where(eq(sessions.sessionToken, sessionToken))
344
+
345
+ return session
346
+ },
347
+ async createVerificationToken(token) {
348
+ await client.insert(verificationTokens).values(token)
349
+
350
+ return await client
351
+ .select()
352
+ .from(verificationTokens)
353
+ .where(eq(verificationTokens.identifier, token.identifier))
354
+ .then((res) => res[0])
355
+ },
356
+ async useVerificationToken(token) {
357
+ try {
358
+ const deletedToken =
359
+ (await client
360
+ .select()
361
+ .from(verificationTokens)
362
+ .where(
363
+ and(
364
+ eq(verificationTokens.identifier, token.identifier),
365
+ eq(verificationTokens.token, token.token),
366
+ ),
367
+ )
368
+ .then((res) => res[0])) ?? null
369
+
370
+ if (deletedToken?.createdAt) {
371
+ const TIMEOUT_IN_SECONDS = 90
372
+ const expireMultipleClicks = addSeconds(
373
+ deletedToken.createdAt,
374
+ TIMEOUT_IN_SECONDS,
375
+ )
376
+ const now = new Date()
377
+
378
+ if (isAfter(expireMultipleClicks, now)) {
379
+ // @ts-ignore
380
+ const { id: _, ...verificationToken } = token
381
+ return deletedToken
382
+ } else {
383
+ await client
384
+ .delete(verificationTokens)
385
+ .where(
386
+ and(
387
+ eq(verificationTokens.identifier, token.identifier),
388
+ eq(verificationTokens.token, token.token),
389
+ ),
390
+ )
391
+ return deletedToken
392
+ }
393
+ }
394
+
395
+ return deletedToken
396
+ } catch (err) {
397
+ throw new Error('No verification token found.')
398
+ }
399
+ },
400
+ async deleteUser(id) {
401
+ const user = await client
402
+ .select()
403
+ .from(users)
404
+ .where(eq(users.id, id))
405
+ .then((res) => res[0] ?? null)
406
+
407
+ await client.delete(users).where(eq(users.id, id))
408
+
409
+ return user
410
+ },
411
+ async unlinkAccount(account) {
412
+ await client
413
+ .delete(accounts)
414
+ .where(
415
+ and(
416
+ eq(accounts.providerAccountId, account.providerAccountId),
417
+ eq(accounts.provider, account.provider),
418
+ ),
419
+ )
420
+
421
+ return undefined
422
+ },
423
+ }
424
+ }
@@ -0,0 +1,52 @@
1
+ import { AdapterAccount } from '@auth/core/adapters'
2
+ import { relations } from 'drizzle-orm'
3
+ import {
4
+ index,
5
+ int,
6
+ MySqlTableFn,
7
+ primaryKey,
8
+ text,
9
+ varchar,
10
+ } from 'drizzle-orm/mysql-core'
11
+
12
+ import { getUsersSchema } from './users'
13
+
14
+ export function getAccountsSchema(mysqlTable: MySqlTableFn) {
15
+ return mysqlTable(
16
+ 'account',
17
+ {
18
+ userId: varchar('userId', { length: 255 }).notNull(),
19
+ type: varchar('type', { length: 255 })
20
+ .$type<AdapterAccount['type']>()
21
+ .notNull(),
22
+ provider: varchar('provider', { length: 255 }).notNull(),
23
+ providerAccountId: varchar('providerAccountId', {
24
+ length: 255,
25
+ }).notNull(),
26
+ refresh_token: text('refresh_token'),
27
+ access_token: text('access_token'),
28
+ oauth_token: text('oauth_token'),
29
+ oauth_token_secret: text('oauth_token_secret'),
30
+ expires_at: int('expires_at'),
31
+ token_type: varchar('token_type', { length: 255 }),
32
+ scope: varchar('scope', { length: 255 }),
33
+ id_token: text('id_token'),
34
+ session_state: varchar('session_state', { length: 255 }),
35
+ refresh_token_expires_in: int('refresh_token_expires_in'),
36
+ },
37
+ (account) => ({
38
+ pk: primaryKey({
39
+ columns: [account.provider, account.providerAccountId],
40
+ }),
41
+ userIdIdx: index('userId_idx').on(account.userId),
42
+ }),
43
+ )
44
+ }
45
+
46
+ export function getAccountsRelationsSchema(mysqlTable: MySqlTableFn) {
47
+ const accounts = getAccountsSchema(mysqlTable)
48
+ const users = getUsersSchema(mysqlTable)
49
+ return relations(accounts, ({ one }) => ({
50
+ user: one(users, { fields: [accounts.userId], references: [users.id] }),
51
+ }))
52
+ }
@@ -0,0 +1,44 @@
1
+ import { relations } from 'drizzle-orm'
2
+ import {
3
+ boolean,
4
+ index,
5
+ MySqlTableFn,
6
+ text,
7
+ timestamp,
8
+ varchar,
9
+ } from 'drizzle-orm/mysql-core'
10
+
11
+ import { getRolePermissionsSchema } from './role-permissions'
12
+
13
+ export function getPermissionsSchema(mysqlTable: MySqlTableFn) {
14
+ return mysqlTable(
15
+ 'permission',
16
+ {
17
+ id: varchar('id', { length: 255 }).notNull().primaryKey(),
18
+ name: varchar('name', { length: 255 }).notNull().unique(),
19
+ description: text('description'),
20
+ active: boolean('active').notNull().default(true),
21
+ createdAt: timestamp('createdAt', {
22
+ mode: 'date',
23
+ fsp: 3,
24
+ }).defaultNow(),
25
+ updatedAt: timestamp('updatedAt', {
26
+ mode: 'date',
27
+ fsp: 3,
28
+ }).defaultNow(),
29
+ deletedAt: timestamp('deletedAt', {
30
+ mode: 'date',
31
+ fsp: 3,
32
+ }),
33
+ },
34
+ (permission) => ({
35
+ nameIdx: index('name_idx').on(permission.name),
36
+ }),
37
+ )
38
+ }
39
+
40
+ export function getPermissionsRelationsSchema(mysqlTable: MySqlTableFn) {
41
+ return relations(getPermissionsSchema(mysqlTable), ({ many }) => ({
42
+ rolePermissions: many(getRolePermissionsSchema(mysqlTable)),
43
+ }))
44
+ }
@@ -0,0 +1,56 @@
1
+ import { relations } from 'drizzle-orm'
2
+ import {
3
+ boolean,
4
+ index,
5
+ MySqlTableFn,
6
+ primaryKey,
7
+ timestamp,
8
+ varchar,
9
+ } from 'drizzle-orm/mysql-core'
10
+
11
+ import { getPermissionsSchema } from './permissions'
12
+ import { getRolesSchema } from './roles'
13
+
14
+ export function getRolePermissionsSchema(mysqlTable: MySqlTableFn) {
15
+ return mysqlTable(
16
+ 'rolePermission',
17
+ {
18
+ roleId: varchar('roleId', { length: 255 }).notNull(),
19
+ permissionId: varchar('permissionId', { length: 255 }).notNull(),
20
+ active: boolean('active').notNull().default(true),
21
+ createdAt: timestamp('createdAt', {
22
+ mode: 'date',
23
+ fsp: 3,
24
+ }).defaultNow(),
25
+ updatedAt: timestamp('updatedAt', {
26
+ mode: 'date',
27
+ fsp: 3,
28
+ }).defaultNow(),
29
+ deletedAt: timestamp('deletedAt', {
30
+ mode: 'date',
31
+ fsp: 3,
32
+ }),
33
+ },
34
+ (rp) => ({
35
+ pk: primaryKey({ columns: [rp.roleId, rp.permissionId] }),
36
+ roleIdIdx: index('roleId_idx').on(rp.roleId),
37
+ permissionIdIdx: index('permissionId_idx').on(rp.permissionId),
38
+ }),
39
+ )
40
+ }
41
+
42
+ export function getRolePermissionsRelationsSchema(mysqlTable: MySqlTableFn) {
43
+ const permissions = getPermissionsSchema(mysqlTable)
44
+ const roles = getRolesSchema(mysqlTable)
45
+ const rolePermissions = getRolePermissionsSchema(mysqlTable)
46
+ return relations(rolePermissions, ({ one }) => ({
47
+ role: one(roles, {
48
+ fields: [rolePermissions.roleId],
49
+ references: [roles.id],
50
+ }),
51
+ permission: one(permissions, {
52
+ fields: [rolePermissions.permissionId],
53
+ references: [permissions.id],
54
+ }),
55
+ }))
56
+ }
@@ -0,0 +1,46 @@
1
+ import { relations } from 'drizzle-orm'
2
+ import {
3
+ boolean,
4
+ index,
5
+ MySqlTableFn,
6
+ text,
7
+ timestamp,
8
+ varchar,
9
+ } from 'drizzle-orm/mysql-core'
10
+
11
+ import { getUserRolesSchema } from './user-roles'
12
+
13
+ export function getRolesSchema(mysqlTable: MySqlTableFn) {
14
+ return mysqlTable(
15
+ 'role',
16
+ {
17
+ id: varchar('id', { length: 255 }).notNull().primaryKey(),
18
+ name: varchar('name', { length: 255 }).notNull().unique(),
19
+ description: text('description'),
20
+ active: boolean('active').notNull().default(true),
21
+ createdAt: timestamp('createdAt', {
22
+ mode: 'date',
23
+ fsp: 3,
24
+ }).defaultNow(),
25
+ updatedAt: timestamp('updatedAt', {
26
+ mode: 'date',
27
+ fsp: 3,
28
+ }).defaultNow(),
29
+ deletedAt: timestamp('deletedAt', {
30
+ mode: 'date',
31
+ fsp: 3,
32
+ }),
33
+ },
34
+ (role) => ({
35
+ nameIdx: index('name_idx').on(role.name),
36
+ }),
37
+ )
38
+ }
39
+
40
+ export function getRolesRelationsSchema(mysqlTable: MySqlTableFn) {
41
+ const roles = getRolesSchema(mysqlTable)
42
+ const userRoles = getUserRolesSchema(mysqlTable)
43
+ return relations(roles, ({ many }) => ({
44
+ userRoles: many(userRoles),
45
+ }))
46
+ }
@@ -0,0 +1,28 @@
1
+ import { relations } from 'drizzle-orm'
2
+ import { index, MySqlTableFn, timestamp, varchar } from 'drizzle-orm/mysql-core'
3
+
4
+ import { getUsersSchema } from './users'
5
+
6
+ export function getSessionsSchema(mysqlTable: MySqlTableFn) {
7
+ return mysqlTable(
8
+ 'session',
9
+ {
10
+ sessionToken: varchar('sessionToken', { length: 255 })
11
+ .notNull()
12
+ .primaryKey(),
13
+ userId: varchar('userId', { length: 255 }).notNull(),
14
+ expires: timestamp('expires', { mode: 'date' }).notNull(),
15
+ },
16
+ (session) => ({
17
+ userIdIdx: index('userId_idx').on(session.userId),
18
+ }),
19
+ )
20
+ }
21
+
22
+ export function getSessionRelationsSchema(mysqlTable: MySqlTableFn) {
23
+ const sessions = getSessionsSchema(mysqlTable)
24
+ const users = getUsersSchema(mysqlTable)
25
+ return relations(sessions, ({ one }) => ({
26
+ user: one(users, { fields: [sessions.userId], references: [users.id] }),
27
+ }))
28
+ }
@@ -0,0 +1,56 @@
1
+ import { relations } from 'drizzle-orm'
2
+ import {
3
+ boolean,
4
+ index,
5
+ MySqlTableFn,
6
+ primaryKey,
7
+ timestamp,
8
+ varchar,
9
+ } from 'drizzle-orm/mysql-core'
10
+
11
+ import { getPermissionsSchema } from './permissions'
12
+ import { getUsersSchema } from './users'
13
+
14
+ export function getUserPermissionsSchema(mysqlTable: MySqlTableFn) {
15
+ return mysqlTable(
16
+ 'userPermission',
17
+ {
18
+ userId: varchar('userId', { length: 255 }).notNull(),
19
+ permissionId: varchar('permissionId', { length: 255 }).notNull(),
20
+ active: boolean('active').notNull().default(true),
21
+ createdAt: timestamp('createdAt', {
22
+ mode: 'date',
23
+ fsp: 3,
24
+ }).defaultNow(),
25
+ updatedAt: timestamp('updatedAt', {
26
+ mode: 'date',
27
+ fsp: 3,
28
+ }).defaultNow(),
29
+ deletedAt: timestamp('deletedAt', {
30
+ mode: 'date',
31
+ fsp: 3,
32
+ }),
33
+ },
34
+ (up) => ({
35
+ pk: primaryKey({ columns: [up.userId, up.permissionId] }),
36
+ userIdIdx: index('userId_idx').on(up.userId),
37
+ permissionIdIdx: index('permissionId_idx').on(up.permissionId),
38
+ }),
39
+ )
40
+ }
41
+
42
+ export function getUserPermissionsRelationsSchema(mysqlTable: MySqlTableFn) {
43
+ const userPermissions = getUserPermissionsSchema(mysqlTable)
44
+ const users = getUsersSchema(mysqlTable)
45
+ const permissions = getPermissionsSchema(mysqlTable)
46
+ return relations(userPermissions, ({ one }) => ({
47
+ user: one(users, {
48
+ fields: [userPermissions.userId],
49
+ references: [users.id],
50
+ }),
51
+ permission: one(permissions, {
52
+ fields: [userPermissions.permissionId],
53
+ references: [permissions.id],
54
+ }),
55
+ }))
56
+ }