@coursebuilder/adapter-drizzle 2.1.0 → 3.0.0-canary.0.0c9beb2ae

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 (307) hide show
  1. package/dist/{chunk-KIQLUFJX.js → chunk-2GW3BJE2.js} +2 -2
  2. package/dist/{chunk-M3WM5Q7W.js → chunk-33ZN7FN7.js} +2 -2
  3. package/dist/chunk-4VZJQAPV.js +74 -0
  4. package/dist/chunk-5FLS4ZBX.js +109 -0
  5. package/dist/chunk-5YR5M22S.js +147 -0
  6. package/dist/chunk-6XQ6C3IX.js +18 -0
  7. package/dist/chunk-AIDM2CH6.js +146 -0
  8. package/dist/chunk-ALTODDUX.js +173 -0
  9. package/dist/chunk-AZY2VRAE.js +63 -0
  10. package/dist/chunk-BS7T27VL.js +239 -0
  11. package/dist/chunk-CN3FCRLR.js +55 -0
  12. package/dist/chunk-EAXC4CQD.js +245 -0
  13. package/dist/chunk-EDDG2YFS.js +249 -0
  14. package/dist/chunk-EDKWCMA7.js +210 -0
  15. package/dist/{chunk-CFSRMUNC.js → chunk-EDM6DKA5.js} +2 -2
  16. package/dist/{chunk-EZEQQJNH.js → chunk-EIQBTF5J.js} +2 -2
  17. package/dist/chunk-FYT7RTVW.js +248 -0
  18. package/dist/{chunk-DUFH5L2F.js → chunk-INZTF6QV.js} +2 -2
  19. package/dist/{chunk-3AF6MZQ7.js → chunk-JVHX4JHA.js} +2 -2
  20. package/dist/chunk-LWEKWDLC.js +300 -0
  21. package/dist/chunk-OJPEBGGE.js +139 -0
  22. package/dist/chunk-QKOSV34V.js +16268 -0
  23. package/dist/chunk-QO3QE3LE.js +330 -0
  24. package/dist/chunk-QQKNNFFB.js +399 -0
  25. package/dist/chunk-RBHCV3UW.js +20 -0
  26. package/dist/chunk-TNH2C27F.js +252 -0
  27. package/dist/chunk-TNWNW666.js +133 -0
  28. package/dist/chunk-VBEXYQ6L.js +156 -0
  29. package/dist/chunk-W3ILNMLD.js +265 -0
  30. package/dist/chunk-WJ2ZUXL3.js +71 -0
  31. package/dist/{chunk-4SWTV7Z3.js → chunk-WUMDFFN3.js} +2 -2
  32. package/dist/{chunk-FJGNLVE4.js → chunk-X7DRYXB7.js} +2 -2
  33. package/dist/{chunk-PNPTKVJ4.js → chunk-XUBZKYH6.js} +24 -15
  34. package/dist/{chunk-MYG6PCE3.js → chunk-ZY4AFKUQ.js} +2 -2
  35. package/dist/index.d.ts +5 -11
  36. package/dist/index.js +42 -19
  37. package/dist/lib/mysql/cms-resource-actions.cjs +15932 -4129
  38. package/dist/lib/mysql/cms-resource-actions.cjs.map +1 -1
  39. package/dist/lib/mysql/cms-resource-actions.d.cts +10 -25
  40. package/dist/lib/mysql/cms-resource-actions.d.ts +10 -25
  41. package/dist/lib/mysql/cms-resource-actions.js +2 -1
  42. package/dist/lib/mysql/context.cjs +3380 -0
  43. package/dist/lib/mysql/context.cjs.map +1 -0
  44. package/dist/lib/mysql/context.d.cts +15 -0
  45. package/dist/lib/mysql/context.d.ts +15 -0
  46. package/dist/lib/mysql/context.js +34 -0
  47. package/dist/lib/mysql/context.js.map +1 -0
  48. package/dist/lib/mysql/index.cjs +21648 -15013
  49. package/dist/lib/mysql/index.cjs.map +1 -1
  50. package/dist/lib/mysql/index.d.cts +24 -14300
  51. package/dist/lib/mysql/index.d.ts +24 -14300
  52. package/dist/lib/mysql/index.js +47 -23
  53. package/dist/lib/mysql/ports/auth-storage.cjs +84 -0
  54. package/dist/lib/mysql/ports/auth-storage.cjs.map +1 -0
  55. package/dist/lib/mysql/ports/auth-storage.d.cts +22 -0
  56. package/dist/lib/mysql/ports/auth-storage.d.ts +22 -0
  57. package/dist/lib/mysql/ports/auth-storage.js +8 -0
  58. package/dist/lib/mysql/ports/auth-storage.js.map +1 -0
  59. package/dist/lib/mysql/ports/catalog.cjs +16688 -0
  60. package/dist/lib/mysql/ports/catalog.cjs.map +1 -0
  61. package/dist/lib/mysql/ports/catalog.d.cts +24 -0
  62. package/dist/lib/mysql/ports/catalog.d.ts +24 -0
  63. package/dist/lib/mysql/ports/catalog.js +9 -0
  64. package/dist/lib/mysql/ports/catalog.js.map +1 -0
  65. package/dist/lib/mysql/ports/content-resource.cjs +321 -0
  66. package/dist/lib/mysql/ports/content-resource.cjs.map +1 -0
  67. package/dist/lib/mysql/ports/content-resource.d.cts +23 -0
  68. package/dist/lib/mysql/ports/content-resource.d.ts +23 -0
  69. package/dist/lib/mysql/ports/content-resource.js +8 -0
  70. package/dist/lib/mysql/ports/content-resource.js.map +1 -0
  71. package/dist/lib/mysql/ports/coupon.cjs +16524 -0
  72. package/dist/lib/mysql/ports/coupon.cjs.map +1 -0
  73. package/dist/lib/mysql/ports/coupon.d.cts +22 -0
  74. package/dist/lib/mysql/ports/coupon.d.ts +22 -0
  75. package/dist/lib/mysql/ports/coupon.js +9 -0
  76. package/dist/lib/mysql/ports/coupon.js.map +1 -0
  77. package/dist/lib/mysql/ports/entitlement.cjs +16350 -0
  78. package/dist/lib/mysql/ports/entitlement.cjs.map +1 -0
  79. package/dist/lib/mysql/ports/entitlement.d.cts +22 -0
  80. package/dist/lib/mysql/ports/entitlement.d.ts +22 -0
  81. package/dist/lib/mysql/ports/entitlement.js +9 -0
  82. package/dist/lib/mysql/ports/entitlement.js.map +1 -0
  83. package/dist/lib/mysql/ports/identity.cjs +154 -0
  84. package/dist/lib/mysql/ports/identity.cjs.map +1 -0
  85. package/dist/lib/mysql/ports/identity.d.cts +22 -0
  86. package/dist/lib/mysql/ports/identity.d.ts +22 -0
  87. package/dist/lib/mysql/ports/identity.js +8 -0
  88. package/dist/lib/mysql/ports/identity.js.map +1 -0
  89. package/dist/lib/mysql/ports/merchant.cjs +194 -0
  90. package/dist/lib/mysql/ports/merchant.cjs.map +1 -0
  91. package/dist/lib/mysql/ports/merchant.d.cts +22 -0
  92. package/dist/lib/mysql/ports/merchant.d.ts +22 -0
  93. package/dist/lib/mysql/ports/merchant.js +8 -0
  94. package/dist/lib/mysql/ports/merchant.js.map +1 -0
  95. package/dist/lib/mysql/ports/organization.cjs +16426 -0
  96. package/dist/lib/mysql/ports/organization.cjs.map +1 -0
  97. package/dist/lib/mysql/ports/organization.d.cts +22 -0
  98. package/dist/lib/mysql/ports/organization.d.ts +22 -0
  99. package/dist/lib/mysql/ports/organization.js +9 -0
  100. package/dist/lib/mysql/ports/organization.js.map +1 -0
  101. package/dist/lib/mysql/ports/progress.cjs +16544 -0
  102. package/dist/lib/mysql/ports/progress.cjs.map +1 -0
  103. package/dist/lib/mysql/ports/progress.d.cts +22 -0
  104. package/dist/lib/mysql/ports/progress.d.ts +22 -0
  105. package/dist/lib/mysql/ports/progress.js +9 -0
  106. package/dist/lib/mysql/ports/progress.js.map +1 -0
  107. package/dist/lib/mysql/ports/purchase.cjs +16609 -0
  108. package/dist/lib/mysql/ports/purchase.cjs.map +1 -0
  109. package/dist/lib/mysql/ports/purchase.d.cts +23 -0
  110. package/dist/lib/mysql/ports/purchase.d.ts +23 -0
  111. package/dist/lib/mysql/ports/purchase.js +9 -0
  112. package/dist/lib/mysql/ports/purchase.js.map +1 -0
  113. package/dist/lib/mysql/ports/subscription.cjs +76 -0
  114. package/dist/lib/mysql/ports/subscription.cjs.map +1 -0
  115. package/dist/lib/mysql/ports/subscription.d.cts +22 -0
  116. package/dist/lib/mysql/ports/subscription.d.ts +22 -0
  117. package/dist/lib/mysql/ports/subscription.js +8 -0
  118. package/dist/lib/mysql/ports/subscription.js.map +1 -0
  119. package/dist/lib/mysql/schema.cjs +3373 -0
  120. package/dist/lib/mysql/schema.cjs.map +1 -0
  121. package/dist/lib/mysql/schema.d.cts +14385 -0
  122. package/dist/lib/mysql/schema.d.ts +14385 -0
  123. package/dist/lib/mysql/schema.js +35 -0
  124. package/dist/lib/mysql/schema.js.map +1 -0
  125. package/dist/lib/mysql/schemas/auth/accounts.cjs.map +1 -1
  126. package/dist/lib/mysql/schemas/auth/accounts.js +6 -6
  127. package/dist/lib/mysql/schemas/auth/device-access-token.cjs.map +1 -1
  128. package/dist/lib/mysql/schemas/auth/device-access-token.js +7 -7
  129. package/dist/lib/mysql/schemas/auth/device-verification.cjs.map +1 -1
  130. package/dist/lib/mysql/schemas/auth/device-verification.js +7 -7
  131. package/dist/lib/mysql/schemas/auth/personal-access-token.cjs.map +1 -1
  132. package/dist/lib/mysql/schemas/auth/personal-access-token.js +7 -7
  133. package/dist/lib/mysql/schemas/auth/profiles.cjs.map +1 -1
  134. package/dist/lib/mysql/schemas/auth/profiles.js +6 -6
  135. package/dist/lib/mysql/schemas/auth/role-permissions.cjs.map +1 -1
  136. package/dist/lib/mysql/schemas/auth/role-permissions.js +7 -7
  137. package/dist/lib/mysql/schemas/auth/roles.cjs.map +1 -1
  138. package/dist/lib/mysql/schemas/auth/roles.js +6 -6
  139. package/dist/lib/mysql/schemas/auth/sessions.cjs.map +1 -1
  140. package/dist/lib/mysql/schemas/auth/sessions.js +7 -7
  141. package/dist/lib/mysql/schemas/auth/user-permissions.cjs.map +1 -1
  142. package/dist/lib/mysql/schemas/auth/user-permissions.js +6 -6
  143. package/dist/lib/mysql/schemas/auth/user-prefs.cjs.map +1 -1
  144. package/dist/lib/mysql/schemas/auth/user-prefs.js +6 -6
  145. package/dist/lib/mysql/schemas/auth/user-roles.cjs.map +1 -1
  146. package/dist/lib/mysql/schemas/auth/user-roles.js +6 -6
  147. package/dist/lib/mysql/schemas/auth/users.cjs +5 -1
  148. package/dist/lib/mysql/schemas/auth/users.cjs.map +1 -1
  149. package/dist/lib/mysql/schemas/auth/users.js +6 -6
  150. package/dist/lib/mysql/schemas/commerce/coupon.cjs.map +1 -1
  151. package/dist/lib/mysql/schemas/commerce/coupon.js +6 -6
  152. package/dist/lib/mysql/schemas/commerce/merchant-charge.cjs.map +1 -1
  153. package/dist/lib/mysql/schemas/commerce/merchant-charge.js +6 -6
  154. package/dist/lib/mysql/schemas/commerce/merchant-subscription.cjs.map +1 -1
  155. package/dist/lib/mysql/schemas/commerce/merchant-subscription.js +6 -6
  156. package/dist/lib/mysql/schemas/commerce/price.cjs.map +1 -1
  157. package/dist/lib/mysql/schemas/commerce/price.js +6 -6
  158. package/dist/lib/mysql/schemas/commerce/product.cjs.map +1 -1
  159. package/dist/lib/mysql/schemas/commerce/product.js +6 -6
  160. package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.cjs.map +1 -1
  161. package/dist/lib/mysql/schemas/commerce/purchase-user-transfer.js +7 -7
  162. package/dist/lib/mysql/schemas/commerce/purchase.cjs +11 -2
  163. package/dist/lib/mysql/schemas/commerce/purchase.cjs.map +1 -1
  164. package/dist/lib/mysql/schemas/commerce/purchase.js +6 -6
  165. package/dist/lib/mysql/schemas/commerce/subscription.cjs +6 -1
  166. package/dist/lib/mysql/schemas/commerce/subscription.cjs.map +1 -1
  167. package/dist/lib/mysql/schemas/commerce/subscription.js +6 -6
  168. package/dist/lib/mysql/schemas/commerce/upgradable-products.cjs.map +1 -1
  169. package/dist/lib/mysql/schemas/commerce/upgradable-products.js +7 -7
  170. package/dist/lib/mysql/schemas/communication/comment.cjs +5 -1
  171. package/dist/lib/mysql/schemas/communication/comment.cjs.map +1 -1
  172. package/dist/lib/mysql/schemas/communication/comment.js +6 -6
  173. package/dist/lib/mysql/schemas/communication/communication-preferences.cjs +5 -1
  174. package/dist/lib/mysql/schemas/communication/communication-preferences.cjs.map +1 -1
  175. package/dist/lib/mysql/schemas/communication/communication-preferences.js +6 -6
  176. package/dist/lib/mysql/schemas/communication/question-response.cjs.map +1 -1
  177. package/dist/lib/mysql/schemas/communication/question-response.js +7 -7
  178. package/dist/lib/mysql/schemas/content/content-contributions.cjs +5 -1
  179. package/dist/lib/mysql/schemas/content/content-contributions.cjs.map +1 -1
  180. package/dist/lib/mysql/schemas/content/content-contributions.js +6 -6
  181. package/dist/lib/mysql/schemas/content/content-resource-product.cjs.map +1 -1
  182. package/dist/lib/mysql/schemas/content/content-resource-product.js +6 -6
  183. package/dist/lib/mysql/schemas/content/content-resource-resource.cjs.map +1 -1
  184. package/dist/lib/mysql/schemas/content/content-resource-resource.js +6 -6
  185. package/dist/lib/mysql/schemas/content/content-resource-tag.cjs.map +1 -1
  186. package/dist/lib/mysql/schemas/content/content-resource-tag.js +6 -6
  187. package/dist/lib/mysql/schemas/content/content-resource-version.cjs.map +1 -1
  188. package/dist/lib/mysql/schemas/content/content-resource-version.js +6 -6
  189. package/dist/lib/mysql/schemas/content/content-resource.cjs +5 -1
  190. package/dist/lib/mysql/schemas/content/content-resource.cjs.map +1 -1
  191. package/dist/lib/mysql/schemas/content/content-resource.js +6 -6
  192. package/dist/lib/mysql/schemas/content/tag-tag.cjs.map +1 -1
  193. package/dist/lib/mysql/schemas/content/tag-tag.js +6 -6
  194. package/dist/lib/mysql/schemas/content/tag.cjs.map +1 -1
  195. package/dist/lib/mysql/schemas/content/tag.js +6 -6
  196. package/dist/lib/mysql/schemas/entitlements/entitlement.cjs +11 -2
  197. package/dist/lib/mysql/schemas/entitlements/entitlement.cjs.map +1 -1
  198. package/dist/lib/mysql/schemas/entitlements/entitlement.js +7 -7
  199. package/dist/lib/mysql/schemas/org/organization-membership-roles.cjs +11 -2
  200. package/dist/lib/mysql/schemas/org/organization-membership-roles.cjs.map +1 -1
  201. package/dist/lib/mysql/schemas/org/organization-membership-roles.js +6 -6
  202. package/dist/lib/mysql/schemas/org/organization-memberships.cjs +11 -2
  203. package/dist/lib/mysql/schemas/org/organization-memberships.cjs.map +1 -1
  204. package/dist/lib/mysql/schemas/org/organization-memberships.d.cts +16 -0
  205. package/dist/lib/mysql/schemas/org/organization-memberships.d.ts +16 -0
  206. package/dist/lib/mysql/schemas/org/organization-memberships.js +6 -6
  207. package/dist/lib/mysql/schemas/org/organizations.cjs +11 -2
  208. package/dist/lib/mysql/schemas/org/organizations.cjs.map +1 -1
  209. package/dist/lib/mysql/schemas/org/organizations.d.cts +16 -0
  210. package/dist/lib/mysql/schemas/org/organizations.d.ts +16 -0
  211. package/dist/lib/mysql/schemas/org/organizations.js +6 -6
  212. package/dist/lib/mysql/workflows/content-resource-workflow-utils.cjs +40 -0
  213. package/dist/lib/mysql/workflows/content-resource-workflow-utils.cjs.map +1 -0
  214. package/dist/lib/mysql/workflows/content-resource-workflow-utils.d.cts +4 -0
  215. package/dist/lib/mysql/workflows/content-resource-workflow-utils.d.ts +4 -0
  216. package/dist/lib/mysql/workflows/content-resource-workflow-utils.js +10 -0
  217. package/dist/lib/mysql/workflows/content-resource-workflow-utils.js.map +1 -0
  218. package/dist/lib/mysql/workflows/create-cohort.cjs +184 -0
  219. package/dist/lib/mysql/workflows/create-cohort.cjs.map +1 -0
  220. package/dist/lib/mysql/workflows/create-cohort.d.cts +24 -0
  221. package/dist/lib/mysql/workflows/create-cohort.d.ts +24 -0
  222. package/dist/lib/mysql/workflows/create-cohort.js +9 -0
  223. package/dist/lib/mysql/workflows/create-cohort.js.map +1 -0
  224. package/dist/lib/mysql/workflows/create-event-series.cjs +283 -0
  225. package/dist/lib/mysql/workflows/create-event-series.cjs.map +1 -0
  226. package/dist/lib/mysql/workflows/create-event-series.d.cts +24 -0
  227. package/dist/lib/mysql/workflows/create-event-series.d.ts +24 -0
  228. package/dist/lib/mysql/workflows/create-event-series.js +9 -0
  229. package/dist/lib/mysql/workflows/create-event-series.js.map +1 -0
  230. package/dist/lib/mysql/workflows/create-event.cjs +194 -0
  231. package/dist/lib/mysql/workflows/create-event.cjs.map +1 -0
  232. package/dist/lib/mysql/workflows/create-event.d.cts +24 -0
  233. package/dist/lib/mysql/workflows/create-event.d.ts +24 -0
  234. package/dist/lib/mysql/workflows/create-event.js +9 -0
  235. package/dist/lib/mysql/workflows/create-event.js.map +1 -0
  236. package/dist/lib/mysql/workflows/create-merchant-charge-and-purchase.cjs +231 -0
  237. package/dist/lib/mysql/workflows/create-merchant-charge-and-purchase.cjs.map +1 -0
  238. package/dist/lib/mysql/workflows/create-merchant-charge-and-purchase.d.cts +22 -0
  239. package/dist/lib/mysql/workflows/create-merchant-charge-and-purchase.d.ts +22 -0
  240. package/dist/lib/mysql/workflows/create-merchant-charge-and-purchase.js +8 -0
  241. package/dist/lib/mysql/workflows/create-merchant-charge-and-purchase.js.map +1 -0
  242. package/dist/lib/mysql/workflows/create-workshop.cjs +286 -0
  243. package/dist/lib/mysql/workflows/create-workshop.cjs.map +1 -0
  244. package/dist/lib/mysql/workflows/create-workshop.d.cts +24 -0
  245. package/dist/lib/mysql/workflows/create-workshop.d.ts +24 -0
  246. package/dist/lib/mysql/workflows/create-workshop.js +9 -0
  247. package/dist/lib/mysql/workflows/create-workshop.js.map +1 -0
  248. package/dist/lib/mysql/workflows/redeem-full-price-coupon.cjs +130 -0
  249. package/dist/lib/mysql/workflows/redeem-full-price-coupon.cjs.map +1 -0
  250. package/dist/lib/mysql/workflows/redeem-full-price-coupon.d.cts +24 -0
  251. package/dist/lib/mysql/workflows/redeem-full-price-coupon.d.ts +24 -0
  252. package/dist/lib/mysql/workflows/redeem-full-price-coupon.js +8 -0
  253. package/dist/lib/mysql/workflows/redeem-full-price-coupon.js.map +1 -0
  254. package/dist/lib/mysql/workflows/transfer-purchase-to-user.cjs +95 -0
  255. package/dist/lib/mysql/workflows/transfer-purchase-to-user.cjs.map +1 -0
  256. package/dist/lib/mysql/workflows/transfer-purchase-to-user.d.cts +30 -0
  257. package/dist/lib/mysql/workflows/transfer-purchase-to-user.d.ts +30 -0
  258. package/dist/lib/mysql/workflows/transfer-purchase-to-user.js +8 -0
  259. package/dist/lib/mysql/workflows/transfer-purchase-to-user.js.map +1 -0
  260. package/dist/lib/utils.d.cts +1 -10
  261. package/dist/lib/utils.d.ts +1 -10
  262. package/dist/types.d.ts +14 -0
  263. package/dist/types.js +1 -0
  264. package/package.json +9 -5
  265. package/src/index.ts +3 -2
  266. package/src/lib/mysql/cms-resource-actions.ts +37 -0
  267. package/src/lib/mysql/context.ts +20 -0
  268. package/src/lib/mysql/index.ts +118 -4872
  269. package/src/lib/mysql/ports/auth-storage.ts +139 -0
  270. package/src/lib/mysql/ports/catalog.ts +610 -0
  271. package/src/lib/mysql/ports/content-resource.ts +442 -0
  272. package/src/lib/mysql/ports/coupon.ts +387 -0
  273. package/src/lib/mysql/ports/entitlement.ts +96 -0
  274. package/src/lib/mysql/ports/identity.ts +160 -0
  275. package/src/lib/mysql/ports/merchant.ts +274 -0
  276. package/src/lib/mysql/ports/organization.ts +216 -0
  277. package/src/lib/mysql/ports/progress.ts +366 -0
  278. package/src/lib/mysql/ports/purchase.ts +517 -0
  279. package/src/lib/mysql/ports/subscription.ts +93 -0
  280. package/src/lib/mysql/schema.ts +374 -0
  281. package/src/lib/mysql/schemas/org/organization-memberships.ts +7 -0
  282. package/src/lib/mysql/schemas/org/organizations.ts +8 -0
  283. package/src/lib/mysql/workflows/content-resource-workflow-utils.ts +22 -0
  284. package/src/lib/mysql/workflows/create-cohort.ts +239 -0
  285. package/src/lib/mysql/workflows/create-event-series.ts +384 -0
  286. package/src/lib/mysql/workflows/create-event.ts +232 -0
  287. package/src/lib/mysql/workflows/create-merchant-charge-and-purchase.ts +365 -0
  288. package/src/lib/mysql/workflows/create-workshop.ts +372 -0
  289. package/src/lib/mysql/workflows/redeem-full-price-coupon.ts +179 -0
  290. package/src/lib/mysql/workflows/transfer-purchase-to-user.ts +142 -0
  291. package/src/types.ts +33 -0
  292. package/dist/authjs.d.ts +0 -27
  293. package/dist/authjs.js +0 -1
  294. package/dist/chunk-25RKHMRM.js +0 -8729
  295. package/dist/chunk-2AW5KYAK.js +0 -101
  296. package/dist/chunk-3EF5ZXLG.js +0 -101
  297. package/dist/chunk-7FBSP3VD.js +0 -78
  298. package/dist/chunk-AP5HBIV4.js +0 -112
  299. package/dist/chunk-F56AI52P.js +0 -49
  300. package/dist/chunk-HAQZSRJL.js +0 -4696
  301. package/dist/chunk-I2U5PTWN.js +0 -79
  302. package/dist/chunk-IBQGXFEX.js +0 -8729
  303. package/dist/chunk-PJORQUQP.js +0 -58
  304. package/dist/chunk-W6RPAAKG.js +0 -2144
  305. package/dist/chunk-WKJTU24D.js +0 -88
  306. package/dist/chunk-WWBSNLRC.js +0 -63
  307. package/src/authjs.ts +0 -34
@@ -0,0 +1,384 @@
1
+ import slugify from '@sindresorhus/slugify'
2
+ import { asc, eq } from 'drizzle-orm'
3
+
4
+ import type {
5
+ CatalogPort,
6
+ ContentResourcePort,
7
+ CouponPort,
8
+ } from '@coursebuilder/core/ports'
9
+ import {
10
+ ContentResourceSchema,
11
+ type ContentResource,
12
+ } from '@coursebuilder/core/schemas/content-resource-schema'
13
+ import { logger as baseLogger } from '@coursebuilder/utils/logger'
14
+
15
+ import type { MySqlContext } from '../context.js'
16
+ import {
17
+ guid,
18
+ normalizeExpirationDate,
19
+ } from './content-resource-workflow-utils.js'
20
+
21
+ const logger = baseLogger as unknown as {
22
+ debug: (message: string, attrs?: Record<string, unknown>) => void
23
+ error: (error: Error, attrs?: Record<string, unknown>) => void
24
+ }
25
+
26
+ type CreateEventSeriesOperations = Pick<
27
+ CatalogPort,
28
+ 'createProduct' | 'addResourceToProduct'
29
+ > &
30
+ Pick<CouponPort, 'createCoupon'>
31
+
32
+ /**
33
+ * Creates the private event series creation workflow.
34
+ *
35
+ * @param context - The shared MySQL client and table set.
36
+ * @param operations - Narrow catalog, coupon, and content resource operations.
37
+ * @returns The content resource creation operation.
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * const workflow = createEventSeriesWorkflow(context, operations)
42
+ * ```
43
+ */
44
+ export function createEventSeriesWorkflow(
45
+ { client, tables }: MySqlContext,
46
+ operations: CreateEventSeriesOperations,
47
+ ): Pick<ContentResourcePort, 'createEventSeries'> {
48
+ const { contentResource, contentResourceResource, contentResourceTag } =
49
+ tables
50
+
51
+ return {
52
+ async createEventSeries(
53
+ input: {
54
+ eventSeries: {
55
+ type: 'event-series'
56
+ fields: {
57
+ title: string
58
+ description?: string | undefined
59
+ tagIds?:
60
+ | { id: string; fields: { label: string; name: string } }[]
61
+ | null
62
+ | undefined
63
+ }
64
+ sharedFields: {
65
+ price: number | null | undefined
66
+ quantity: number | null | undefined
67
+ }
68
+ }
69
+ childEvents: Array<{
70
+ type: 'event'
71
+ fields: {
72
+ title: string
73
+ startsAt: Date | null | undefined
74
+ endsAt: Date | null | undefined
75
+ description?: string | undefined
76
+ tagIds?:
77
+ | { id: string; fields: { label: string; name: string } }[]
78
+ | null
79
+ | undefined
80
+ }
81
+ }>
82
+ coupon?:
83
+ | {
84
+ enabled: boolean
85
+ expires?: Date | undefined
86
+ percentageDiscount?: string | undefined
87
+ }
88
+ | undefined
89
+ },
90
+ userId: string,
91
+ ) {
92
+ const { eventSeries: eventSeriesInput, childEvents: childEventsInput } =
93
+ input
94
+
95
+ if (childEventsInput.length === 0) {
96
+ throw new Error('At least one event is required')
97
+ }
98
+
99
+ // Execute all database operations within a transaction
100
+ const result = await client.transaction(async (tx) => {
101
+ // Step 1: Create the event series resource
102
+ const eventSeriesHash = guid()
103
+ const eventSeriesResourceId = slugify(`event-series~${eventSeriesHash}`)
104
+
105
+ const newEventSeries = {
106
+ id: eventSeriesResourceId,
107
+ type: 'event-series',
108
+ fields: {
109
+ ...eventSeriesInput.fields,
110
+ title: eventSeriesInput.fields.title,
111
+ state: 'draft',
112
+ visibility: 'public',
113
+ slug: slugify(
114
+ `${eventSeriesInput.fields.title}~${eventSeriesHash}`,
115
+ ),
116
+ },
117
+ createdById: userId,
118
+ }
119
+
120
+ await tx.insert(contentResource).values(newEventSeries)
121
+
122
+ // Fetch the created event series with relations
123
+ const eventSeriesResource = await tx.query.contentResource.findFirst({
124
+ where: eq(contentResource.id, eventSeriesResourceId),
125
+ with: {
126
+ resources: {
127
+ with: {
128
+ resource: {
129
+ with: {
130
+ resources: {
131
+ with: {
132
+ resource: true,
133
+ },
134
+ orderBy: asc(contentResourceResource.position),
135
+ },
136
+ },
137
+ },
138
+ },
139
+ orderBy: asc(contentResourceResource.position),
140
+ },
141
+ tags: {
142
+ with: {
143
+ tag: true,
144
+ },
145
+ orderBy: asc(contentResourceTag.position),
146
+ },
147
+ resourceProducts: {
148
+ with: {
149
+ product: {
150
+ with: {
151
+ price: true,
152
+ },
153
+ },
154
+ },
155
+ },
156
+ },
157
+ })
158
+
159
+ const parsedEventSeries =
160
+ ContentResourceSchema.safeParse(eventSeriesResource)
161
+ if (!parsedEventSeries.success) {
162
+ throw new Error('Error parsing event series resource')
163
+ }
164
+
165
+ // Step 2: Associate tags with event series
166
+ if (eventSeriesInput.fields.tagIds) {
167
+ await tx.insert(contentResourceTag).values(
168
+ eventSeriesInput.fields.tagIds.map((tag) => ({
169
+ contentResourceId: eventSeriesResourceId,
170
+ tagId: tag.id,
171
+ createdAt: new Date(),
172
+ updatedAt: new Date(),
173
+ position: 0,
174
+ })),
175
+ )
176
+ }
177
+
178
+ // Step 3: Create child events and associate them
179
+ const createdChildEvents = []
180
+
181
+ for (let i = 0; i < childEventsInput.length; i++) {
182
+ const childEventInput = childEventsInput[i]
183
+
184
+ if (!childEventInput) {
185
+ throw new Error(`Child event input is required`)
186
+ }
187
+
188
+ // Create child event
189
+ const childEventHash = guid()
190
+ const childEventResourceId = slugify(`event~${childEventHash}`)
191
+
192
+ const newChildEvent = {
193
+ id: childEventResourceId,
194
+ type: 'event',
195
+ fields: {
196
+ title: childEventInput.fields.title,
197
+ startsAt: childEventInput.fields.startsAt,
198
+ endsAt: childEventInput.fields.endsAt,
199
+ description: childEventInput.fields.description,
200
+ state: 'draft',
201
+ visibility: 'public',
202
+ slug: slugify(
203
+ `${childEventInput.fields.title}~${childEventHash}`,
204
+ ),
205
+ // No price/quantity - they're on the event series
206
+ price: null,
207
+ quantity: null,
208
+ },
209
+ createdById: userId,
210
+ }
211
+
212
+ await tx.insert(contentResource).values(newChildEvent)
213
+
214
+ // Fetch the created child event with relations
215
+ const childEventResource = await tx.query.contentResource.findFirst({
216
+ where: eq(contentResource.id, childEventResourceId),
217
+ with: {
218
+ resources: {
219
+ with: {
220
+ resource: {
221
+ with: {
222
+ resources: {
223
+ with: {
224
+ resource: true,
225
+ },
226
+ orderBy: asc(contentResourceResource.position),
227
+ },
228
+ },
229
+ },
230
+ },
231
+ orderBy: asc(contentResourceResource.position),
232
+ },
233
+ tags: {
234
+ with: {
235
+ tag: true,
236
+ },
237
+ orderBy: asc(contentResourceTag.position),
238
+ },
239
+ resourceProducts: {
240
+ with: {
241
+ product: {
242
+ with: {
243
+ price: true,
244
+ },
245
+ },
246
+ },
247
+ },
248
+ },
249
+ })
250
+
251
+ const parsedChildEvent =
252
+ ContentResourceSchema.safeParse(childEventResource)
253
+ if (!parsedChildEvent.success) {
254
+ throw new Error(`Error parsing child event resource ${i + 1}`)
255
+ }
256
+
257
+ // Associate tags with child event
258
+ if (childEventInput.fields.tagIds) {
259
+ await tx.insert(contentResourceTag).values(
260
+ childEventInput.fields.tagIds.map((tag) => ({
261
+ contentResourceId: childEventResourceId,
262
+ tagId: tag.id,
263
+ createdAt: new Date(),
264
+ updatedAt: new Date(),
265
+ position: 0,
266
+ })),
267
+ )
268
+ }
269
+
270
+ // Associate child event with event series
271
+ await tx.insert(contentResourceResource).values({
272
+ resourceOfId: eventSeriesResourceId,
273
+ resourceId: childEventResourceId,
274
+ position: i,
275
+ })
276
+
277
+ createdChildEvents.push(parsedChildEvent.data)
278
+ }
279
+
280
+ return {
281
+ eventSeries: parsedEventSeries.data,
282
+ childEvents: createdChildEvents,
283
+ }
284
+ })
285
+
286
+ const { eventSeries, childEvents } = result
287
+
288
+ // Step 4: Handle product creation outside transaction
289
+ if (
290
+ eventSeriesInput.sharedFields.price &&
291
+ eventSeriesInput.sharedFields.price > 0
292
+ ) {
293
+ try {
294
+ const product = await operations.createProduct({
295
+ name: eventSeriesInput.fields.title,
296
+ price: eventSeriesInput.sharedFields.price,
297
+ quantityAvailable: eventSeriesInput.sharedFields.quantity ?? -1,
298
+ type: 'live',
299
+ state: 'published',
300
+ visibility: 'public',
301
+ })
302
+ if (product) {
303
+ await operations.addResourceToProduct({
304
+ resource: eventSeries,
305
+ productId: product.id,
306
+ userId,
307
+ })
308
+
309
+ // Create coupon if enabled
310
+ if (
311
+ input.coupon?.enabled &&
312
+ input.coupon.percentageDiscount &&
313
+ input.coupon.expires
314
+ ) {
315
+ try {
316
+ let finalExpires = input.coupon.expires
317
+ if (finalExpires instanceof Date) {
318
+ finalExpires = new Date(
319
+ Date.UTC(
320
+ finalExpires.getUTCFullYear(),
321
+ finalExpires.getUTCMonth(),
322
+ finalExpires.getUTCDate(),
323
+ 23,
324
+ 59,
325
+ 59,
326
+ 0,
327
+ ),
328
+ )
329
+ }
330
+ const couponInput = {
331
+ quantity: '1',
332
+ maxUses: 1,
333
+ expires: finalExpires,
334
+ restrictedToProductId: product.id,
335
+ percentageDiscount: input.coupon.percentageDiscount,
336
+ status: 1,
337
+ default: true,
338
+ fields: {},
339
+ }
340
+ await operations.createCoupon(couponInput)
341
+ logger.debug('event.series.coupon.success', {
342
+ eventSeriesId: eventSeries.id,
343
+ productId: product.id,
344
+ userId,
345
+ percentageDiscount: input.coupon.percentageDiscount,
346
+ })
347
+ } catch (couponError) {
348
+ logger.error(
349
+ new Error(
350
+ `Error creating coupon for event series: ${couponError}`,
351
+ ),
352
+ )
353
+ logger.debug('event.series.coupon.failed', {
354
+ eventSeriesId: eventSeries.id,
355
+ productId: product.id,
356
+ userId,
357
+ })
358
+ // Don't throw here - event series creation should succeed even if coupon fails
359
+ }
360
+ }
361
+ } else {
362
+ logger.error(new Error('Failed to create product'))
363
+ logger.debug('event.series.product.failed', {
364
+ eventSeriesId: eventSeries.id,
365
+ userId,
366
+ price: eventSeriesInput.sharedFields.price,
367
+ })
368
+ }
369
+ } catch (error) {
370
+ logger.error(
371
+ new Error(`Error creating and associating product: ${error}`),
372
+ )
373
+ logger.debug('event.series.product.creation.failed', {
374
+ eventSeriesId: eventSeries.id,
375
+ userId,
376
+ })
377
+ // Note: We don't throw here since the core data is already committed
378
+ }
379
+ }
380
+
381
+ return { eventSeries, childEvents }
382
+ },
383
+ }
384
+ }
@@ -0,0 +1,232 @@
1
+ import slugify from '@sindresorhus/slugify'
2
+ import { asc, eq } from 'drizzle-orm'
3
+
4
+ import type {
5
+ CatalogPort,
6
+ ContentResourcePort,
7
+ CouponPort,
8
+ } from '@coursebuilder/core/ports'
9
+ import {
10
+ ContentResourceSchema,
11
+ type ContentResource,
12
+ } from '@coursebuilder/core/schemas/content-resource-schema'
13
+ import { logger as baseLogger } from '@coursebuilder/utils/logger'
14
+
15
+ import type { MySqlContext } from '../context.js'
16
+ import {
17
+ guid,
18
+ normalizeExpirationDate,
19
+ } from './content-resource-workflow-utils.js'
20
+
21
+ const logger = baseLogger as unknown as {
22
+ debug: (message: string, attrs?: Record<string, unknown>) => void
23
+ error: (error: Error, attrs?: Record<string, unknown>) => void
24
+ }
25
+
26
+ type CreateEventOperations = Pick<ContentResourcePort, 'getEvent'> &
27
+ Pick<CatalogPort, 'createProduct' | 'addResourceToProduct'> &
28
+ Pick<CouponPort, 'createCoupon'>
29
+
30
+ /**
31
+ * Creates the private event creation workflow.
32
+ *
33
+ * @param context - The shared MySQL client and table set.
34
+ * @param operations - Narrow catalog, coupon, and content resource operations.
35
+ * @returns The content resource creation operation.
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * const workflow = createEventWorkflow(context, operations)
40
+ * ```
41
+ */
42
+ export function createEventWorkflow(
43
+ { client, tables }: MySqlContext,
44
+ operations: CreateEventOperations,
45
+ ): Pick<ContentResourcePort, 'createEvent'> {
46
+ const { contentResource, contentResourceTag } = tables
47
+
48
+ return {
49
+ async createEvent(
50
+ input: {
51
+ type: 'event'
52
+ fields: {
53
+ title: string
54
+ startsAt?: Date | null | undefined
55
+ endsAt?: Date | null | undefined
56
+ description?: string | null | undefined
57
+ price?: number | null | undefined
58
+ quantity?: number | null | undefined
59
+ state?: string | null | undefined
60
+ visibility?: string | null | undefined
61
+ slug?: string | null | undefined
62
+ tagIds?:
63
+ | { id: string; fields: Record<string, any> }[]
64
+ | null
65
+ | undefined
66
+ }
67
+ coupon?: {
68
+ enabled: boolean
69
+ percentageDiscount: string
70
+ expires: Date
71
+ }
72
+ },
73
+ userId: string,
74
+ ) {
75
+ const hash = guid()
76
+ const newEventId = slugify(`${input.type}~${hash}`)
77
+
78
+ const newEvent = {
79
+ id: newEventId,
80
+ type: 'event',
81
+ fields: {
82
+ title: input.fields.title,
83
+ state: 'draft',
84
+ visibility: 'public',
85
+ slug: slugify(`${input.fields.title}~${hash}`),
86
+ description: input.fields.description,
87
+ startsAt: input.fields.startsAt,
88
+ endsAt: input.fields.endsAt,
89
+ },
90
+ createdById: userId,
91
+ }
92
+
93
+ await client.insert(contentResource).values(newEvent)
94
+ const event = await operations.getEvent(newEventId, {
95
+ withResources: true,
96
+ withTags: true,
97
+ withProducts: true,
98
+ withPricing: true,
99
+ })
100
+
101
+ const parsedEvent = ContentResourceSchema.safeParse(event)
102
+
103
+ if (!parsedEvent.success) {
104
+ logger.error(new Error('Error parsing event resource'))
105
+ throw new Error('Error parsing event resource')
106
+ }
107
+
108
+ // if price is provided, create a product and associate it with the event
109
+ if (input.fields.price && input.fields.price > 0) {
110
+ try {
111
+ const product = await operations.createProduct({
112
+ name: input.fields.title,
113
+ price: input.fields.price,
114
+ quantityAvailable: input.fields.quantity ?? -1,
115
+ type: 'live',
116
+ state: 'published',
117
+ visibility: 'public',
118
+ })
119
+ if (product) {
120
+ const resourceProduct = await operations.addResourceToProduct({
121
+ resource: parsedEvent.data,
122
+ productId: product.id,
123
+ userId,
124
+ })
125
+ if (!resourceProduct) {
126
+ logger.error(new Error('Failed to add resource to product'))
127
+ logger.debug('event.addResourceToProduct.failed', {
128
+ eventId: newEventId,
129
+ productId: product.id,
130
+ userId,
131
+ })
132
+ } else {
133
+ logger.debug('event.addResourceToProduct.success', {
134
+ eventId: newEventId,
135
+ productId: product.id,
136
+ userId,
137
+ })
138
+ }
139
+ // Create coupon if enabled
140
+ if (
141
+ input.coupon?.enabled &&
142
+ input.coupon.percentageDiscount &&
143
+ input.coupon.expires
144
+ ) {
145
+ try {
146
+ const finalExpires = normalizeExpirationDate(
147
+ input.coupon.expires,
148
+ )
149
+ const couponInput = {
150
+ quantity: '1',
151
+ maxUses: -1,
152
+ expires: finalExpires || null,
153
+ restrictedToProductId: product.id,
154
+ percentageDiscount: input.coupon.percentageDiscount,
155
+ status: 1,
156
+ default: true,
157
+ fields: {
158
+ bypassSoldOut: false,
159
+ },
160
+ }
161
+ await operations.createCoupon(couponInput)
162
+ logger.debug('event.create.coupon.success', {
163
+ eventId: newEventId,
164
+ productId: product.id,
165
+ userId,
166
+ percentageDiscount: input.coupon.percentageDiscount,
167
+ })
168
+ } catch (couponError) {
169
+ logger.error(
170
+ new Error(
171
+ `Failed to create coupon for event: ${couponError}`,
172
+ ),
173
+ )
174
+ logger.debug('event.create.coupon.failed', {
175
+ eventId: newEventId,
176
+ productId: product.id,
177
+ userId,
178
+ })
179
+ // Don't throw here - event creation should succeed even if coupon fails
180
+ }
181
+ }
182
+ } else {
183
+ logger.error(new Error('Failed to create product'))
184
+ logger.debug('event.create.product.failed', {
185
+ eventId: newEventId,
186
+ userId,
187
+ price: input.fields.price,
188
+ })
189
+ }
190
+ } catch (error) {
191
+ logger.error(
192
+ new Error(`Error creating and associating product: ${error}`),
193
+ )
194
+ logger.debug('event.create.product.failed', {
195
+ eventId: newEventId,
196
+ userId,
197
+ price: input.fields.price,
198
+ })
199
+ }
200
+ }
201
+
202
+ // if we provide tagIds, we need to associate them with the event
203
+ if (input.fields.tagIds) {
204
+ try {
205
+ await client.insert(contentResourceTag).values(
206
+ input.fields.tagIds.map((tag) => ({
207
+ contentResourceId: newEventId,
208
+ tagId: tag.id,
209
+ createdAt: new Date(),
210
+ updatedAt: new Date(),
211
+ position: 0,
212
+ })),
213
+ )
214
+ logger.debug('event.create.tags.success', {
215
+ eventId: newEventId,
216
+ userId,
217
+ tagIds: input.fields.tagIds,
218
+ })
219
+ } catch (error) {
220
+ logger.error(new Error(`Error associating tags with event: ${error}`))
221
+ logger.debug('event.create.tags.failed', {
222
+ eventId: newEventId,
223
+ userId,
224
+ tagIds: input.fields.tagIds,
225
+ })
226
+ }
227
+ }
228
+
229
+ return parsedEvent.data
230
+ },
231
+ }
232
+ }