@coursebuilder/adapter-drizzle 2.1.1 → 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 (296) 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-7FBSP3VD.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-F56AI52P.js → chunk-INZTF6QV.js} +2 -2
  19. package/dist/{chunk-AP5HBIV4.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-PJORQUQP.js → chunk-WUMDFFN3.js} +2 -2
  32. package/dist/{chunk-2AW5KYAK.js → chunk-X7DRYXB7.js} +2 -2
  33. package/dist/{chunk-PNPTKVJ4.js → chunk-XUBZKYH6.js} +24 -15
  34. package/dist/{chunk-WWBSNLRC.js → chunk-ZY4AFKUQ.js} +2 -2
  35. package/dist/index.d.ts +5 -11
  36. package/dist/index.js +41 -18
  37. package/dist/lib/mysql/cms-resource-actions.cjs +15912 -4127
  38. package/dist/lib/mysql/cms-resource-actions.cjs.map +1 -1
  39. package/dist/lib/mysql/cms-resource-actions.d.cts +8 -38
  40. package/dist/lib/mysql/cms-resource-actions.d.ts +8 -38
  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 +21875 -15261
  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 +46 -22
  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 +4 -4
  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 +5 -5
  129. package/dist/lib/mysql/schemas/auth/device-verification.cjs.map +1 -1
  130. package/dist/lib/mysql/schemas/auth/device-verification.js +5 -5
  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 +5 -5
  133. package/dist/lib/mysql/schemas/auth/profiles.cjs.map +1 -1
  134. package/dist/lib/mysql/schemas/auth/profiles.js +4 -4
  135. package/dist/lib/mysql/schemas/auth/role-permissions.cjs.map +1 -1
  136. package/dist/lib/mysql/schemas/auth/role-permissions.js +5 -5
  137. package/dist/lib/mysql/schemas/auth/roles.cjs.map +1 -1
  138. package/dist/lib/mysql/schemas/auth/roles.js +4 -4
  139. package/dist/lib/mysql/schemas/auth/sessions.cjs.map +1 -1
  140. package/dist/lib/mysql/schemas/auth/sessions.js +5 -5
  141. package/dist/lib/mysql/schemas/auth/user-permissions.cjs.map +1 -1
  142. package/dist/lib/mysql/schemas/auth/user-permissions.js +4 -4
  143. package/dist/lib/mysql/schemas/auth/user-prefs.cjs.map +1 -1
  144. package/dist/lib/mysql/schemas/auth/user-prefs.js +4 -4
  145. package/dist/lib/mysql/schemas/auth/user-roles.cjs.map +1 -1
  146. package/dist/lib/mysql/schemas/auth/user-roles.js +4 -4
  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 +4 -4
  150. package/dist/lib/mysql/schemas/commerce/coupon.cjs.map +1 -1
  151. package/dist/lib/mysql/schemas/commerce/coupon.js +4 -4
  152. package/dist/lib/mysql/schemas/commerce/merchant-charge.cjs.map +1 -1
  153. package/dist/lib/mysql/schemas/commerce/merchant-charge.js +4 -4
  154. package/dist/lib/mysql/schemas/commerce/merchant-subscription.cjs.map +1 -1
  155. package/dist/lib/mysql/schemas/commerce/merchant-subscription.js +4 -4
  156. package/dist/lib/mysql/schemas/commerce/price.cjs.map +1 -1
  157. package/dist/lib/mysql/schemas/commerce/price.js +4 -4
  158. package/dist/lib/mysql/schemas/commerce/product.cjs.map +1 -1
  159. package/dist/lib/mysql/schemas/commerce/product.js +4 -4
  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 +5 -5
  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 +4 -4
  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 +4 -4
  168. package/dist/lib/mysql/schemas/commerce/upgradable-products.cjs.map +1 -1
  169. package/dist/lib/mysql/schemas/commerce/upgradable-products.js +5 -5
  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 +4 -4
  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 +4 -4
  176. package/dist/lib/mysql/schemas/communication/question-response.cjs.map +1 -1
  177. package/dist/lib/mysql/schemas/communication/question-response.js +5 -5
  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 +4 -4
  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 +4 -4
  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 +4 -4
  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 +4 -4
  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 +4 -4
  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 +4 -4
  192. package/dist/lib/mysql/schemas/content/tag-tag.cjs.map +1 -1
  193. package/dist/lib/mysql/schemas/content/tag-tag.js +4 -4
  194. package/dist/lib/mysql/schemas/content/tag.cjs.map +1 -1
  195. package/dist/lib/mysql/schemas/content/tag.js +4 -4
  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 +5 -5
  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 +4 -4
  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 +4 -4
  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 +4 -4
  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/context.ts +20 -0
  267. package/src/lib/mysql/index.ts +118 -4873
  268. package/src/lib/mysql/ports/auth-storage.ts +139 -0
  269. package/src/lib/mysql/ports/catalog.ts +610 -0
  270. package/src/lib/mysql/ports/content-resource.ts +442 -0
  271. package/src/lib/mysql/ports/coupon.ts +387 -0
  272. package/src/lib/mysql/ports/entitlement.ts +96 -0
  273. package/src/lib/mysql/ports/identity.ts +160 -0
  274. package/src/lib/mysql/ports/merchant.ts +274 -0
  275. package/src/lib/mysql/ports/organization.ts +216 -0
  276. package/src/lib/mysql/ports/progress.ts +366 -0
  277. package/src/lib/mysql/ports/purchase.ts +517 -0
  278. package/src/lib/mysql/ports/subscription.ts +93 -0
  279. package/src/lib/mysql/schema.ts +374 -0
  280. package/src/lib/mysql/schemas/org/organization-memberships.ts +7 -0
  281. package/src/lib/mysql/schemas/org/organizations.ts +8 -0
  282. package/src/lib/mysql/workflows/content-resource-workflow-utils.ts +22 -0
  283. package/src/lib/mysql/workflows/create-cohort.ts +239 -0
  284. package/src/lib/mysql/workflows/create-event-series.ts +384 -0
  285. package/src/lib/mysql/workflows/create-event.ts +232 -0
  286. package/src/lib/mysql/workflows/create-merchant-charge-and-purchase.ts +365 -0
  287. package/src/lib/mysql/workflows/create-workshop.ts +372 -0
  288. package/src/lib/mysql/workflows/redeem-full-price-coupon.ts +179 -0
  289. package/src/lib/mysql/workflows/transfer-purchase-to-user.ts +142 -0
  290. package/src/types.ts +33 -0
  291. package/dist/authjs.d.ts +0 -27
  292. package/dist/authjs.js +0 -1
  293. package/dist/chunk-62VSIVME.js +0 -4714
  294. package/dist/chunk-RVXF3JZ7.js +0 -8732
  295. package/dist/chunk-WEJL5OFI.js +0 -8732
  296. package/src/authjs.ts +0 -34
@@ -0,0 +1,245 @@
1
+ import {
2
+ external_exports
3
+ } from "./chunk-QKOSV34V.js";
4
+ import {
5
+ __name
6
+ } from "./chunk-2X5XVNDN.js";
7
+
8
+ // src/lib/mysql/ports/coupon.ts
9
+ import { and, desc, eq, gte, inArray, isNull, or, sql } from "drizzle-orm";
10
+ import { customAlphabet } from "nanoid";
11
+ import { v4 } from "uuid";
12
+ import { couponSchema, merchantCouponSchema, purchaseSchema } from "@coursebuilder/core/schemas";
13
+ import { logger as baseLogger } from "@coursebuilder/utils/logger";
14
+ var guid = customAlphabet("1234567890abcdefghijklmnopqrstuvwxyz", 5);
15
+ var logger = baseLogger;
16
+ function createCouponPort({ client, tables }) {
17
+ const { coupon, merchantCoupon, purchases: purchaseTable } = tables;
18
+ return {
19
+ incrementCouponUsedCount: async (couponId) => {
20
+ await client.update(coupon).set({
21
+ usedCount: sql`${coupon.usedCount} + 1`
22
+ }).where(eq(coupon.id, couponId));
23
+ },
24
+ createMerchantCoupon: async (options) => {
25
+ await client.insert(merchantCoupon).values({
26
+ id: `mcoupon_${v4()}`,
27
+ identifier: options.identifier,
28
+ merchantAccountId: options.merchantAccountId,
29
+ type: options.type,
30
+ amountDiscount: Math.floor(options.amountDiscount),
31
+ status: 1
32
+ });
33
+ return merchantCouponSchema.parse(await client.query.merchantCoupon.findFirst({
34
+ where: eq(merchantCoupon.identifier, options.identifier)
35
+ }));
36
+ },
37
+ async couponForIdOrCode(options) {
38
+ if (!options.couponId && !options.code)
39
+ return null;
40
+ const couponForIdOrCode = await client.query.coupon.findFirst({
41
+ where: or(and(or(options.code ? eq(coupon.code, options.code) : void 0, options.couponId ? eq(coupon.id, options.couponId) : void 0), gte(coupon.expires, /* @__PURE__ */ new Date())), and(or(options.code ? eq(coupon.code, options.code) : void 0, options.couponId ? eq(coupon.id, options.couponId) : void 0), isNull(coupon.expires))),
42
+ with: {
43
+ merchantCoupon: true
44
+ }
45
+ });
46
+ if (!couponForIdOrCode)
47
+ return null;
48
+ const parsedCoupon = couponSchema.extend({
49
+ merchantCoupon: merchantCouponSchema
50
+ }).safeParse(couponForIdOrCode);
51
+ if (!parsedCoupon.success) {
52
+ logger.error(parsedCoupon.error, {
53
+ code: options.code,
54
+ couponId: options.couponId,
55
+ event: "adapter.coupon.parse_failed"
56
+ });
57
+ return null;
58
+ }
59
+ return parsedCoupon.data;
60
+ },
61
+ async getCoupon(couponIdOrCode) {
62
+ const loadedCoupon = await client.query.coupon.findFirst({
63
+ where: or(eq(coupon.id, couponIdOrCode), eq(coupon.code, couponIdOrCode))
64
+ }) || null;
65
+ logger.debug("getCoupon", {
66
+ couponIdOrCode,
67
+ found: !!loadedCoupon
68
+ });
69
+ return couponSchema.nullable().parse(loadedCoupon);
70
+ },
71
+ async getCouponWithBulkPurchases(couponId) {
72
+ logger.debug("getCouponWithBulkPurchases", {
73
+ couponId
74
+ });
75
+ let couponData;
76
+ let bulkCouponPurchases = [];
77
+ try {
78
+ couponData = await client.query.coupon.findFirst({
79
+ where: eq(coupon.id, couponId),
80
+ with: {
81
+ bulkPurchases: true,
82
+ redeemedBulkCouponPurchases: true
83
+ }
84
+ }) || null;
85
+ } catch (e) {
86
+ logger.error(e, {
87
+ method: "getCouponWithBulkPurchases",
88
+ couponId,
89
+ step: "load-coupon"
90
+ });
91
+ }
92
+ try {
93
+ bulkCouponPurchases = await client.query.purchases.findMany({
94
+ where: eq(purchaseTable.redeemedBulkCouponId, couponId),
95
+ with: {
96
+ user: true
97
+ }
98
+ });
99
+ logger.debug("getCouponWithBulkPurchases.redeemed", {
100
+ couponId,
101
+ count: bulkCouponPurchases?.length ?? 0
102
+ });
103
+ } catch (e) {
104
+ logger.error(e, {
105
+ method: "getCouponWithBulkPurchases",
106
+ couponId,
107
+ step: "load-redeemed-purchases"
108
+ });
109
+ }
110
+ if (!couponData) {
111
+ logger.debug("getCouponWithBulkPurchases", {
112
+ couponId,
113
+ error: "no coupon found"
114
+ });
115
+ return null;
116
+ }
117
+ const couponWithBulkPurchases = {
118
+ ...couponData,
119
+ redeemedBulkCouponPurchases: bulkCouponPurchases || []
120
+ };
121
+ const parsedCoupon = couponSchema.merge(external_exports.object({
122
+ redeemedBulkCouponPurchases: external_exports.array(purchaseSchema)
123
+ })).nullable().safeParse(couponWithBulkPurchases);
124
+ if (!parsedCoupon.success) {
125
+ logger.error(parsedCoupon.error, {
126
+ couponId: couponData?.id ?? couponId,
127
+ event: "adapter.coupon.parse_failed",
128
+ redeemedBulkCouponPurchasesCount: bulkCouponPurchases?.length ?? 0
129
+ });
130
+ return null;
131
+ }
132
+ return parsedCoupon.data;
133
+ },
134
+ async getDefaultCoupon(productIds) {
135
+ const activeSaleCoupon = await client.query.coupon.findFirst({
136
+ where: and(eq(coupon.status, 1), eq(coupon.default, true), gte(coupon.expires, /* @__PURE__ */ new Date()), or(productIds ? inArray(coupon.restrictedToProductId, productIds) : void 0, isNull(coupon.restrictedToProductId))),
137
+ orderBy: desc(coupon.percentageDiscount),
138
+ with: {
139
+ merchantCoupon: true,
140
+ product: true
141
+ }
142
+ });
143
+ if (activeSaleCoupon) {
144
+ const { restrictedToProductId } = activeSaleCoupon;
145
+ const validForProdcutId = restrictedToProductId ? productIds?.includes(restrictedToProductId) : true;
146
+ const { merchantCoupon: defaultMerchantCoupon, ...defaultCoupon } = activeSaleCoupon;
147
+ if (validForProdcutId) {
148
+ return {
149
+ defaultMerchantCoupon: merchantCouponSchema.parse(defaultMerchantCoupon),
150
+ defaultCoupon: couponSchema.parse(defaultCoupon)
151
+ };
152
+ }
153
+ }
154
+ return null;
155
+ },
156
+ async getMerchantCouponsForTypeAndPercent(params) {
157
+ return external_exports.array(merchantCouponSchema).parse(await client.query.merchantCoupon.findMany({
158
+ where: and(eq(merchantCoupon.type, params.type), eq(merchantCoupon.percentageDiscount, params.percentageDiscount.toString()))
159
+ }));
160
+ },
161
+ async getMerchantCouponForTypeAndPercent(params) {
162
+ const foundMerchantCoupon = await client.query.merchantCoupon.findFirst({
163
+ where: and(eq(merchantCoupon.type, params.type), eq(merchantCoupon.percentageDiscount, params.percentageDiscount.toString()))
164
+ });
165
+ const parsed = merchantCouponSchema.nullable().safeParse(foundMerchantCoupon);
166
+ if (parsed.success) {
167
+ return parsed.data;
168
+ }
169
+ return null;
170
+ },
171
+ async getMerchantCouponForTypeAndAmount(params) {
172
+ const foundMerchantCoupon = await client.query.merchantCoupon.findFirst({
173
+ where: and(eq(merchantCoupon.type, params.type), eq(merchantCoupon.amountDiscount, params.amountDiscount))
174
+ });
175
+ const parsed = merchantCouponSchema.nullable().safeParse(foundMerchantCoupon);
176
+ if (parsed.success) {
177
+ return parsed.data;
178
+ }
179
+ return null;
180
+ },
181
+ async getMerchantCoupon(merchantCouponId) {
182
+ const foundMerchantCoupon = await client.query.merchantCoupon.findFirst({
183
+ where: eq(merchantCoupon.id, merchantCouponId)
184
+ });
185
+ const parsed = merchantCouponSchema.nullable().safeParse(foundMerchantCoupon);
186
+ if (parsed.success) {
187
+ return parsed.data;
188
+ }
189
+ return null;
190
+ },
191
+ async createCoupon(input) {
192
+ function findClosestDiscount(percentOff) {
193
+ percentOff = percentOff <= 1 ? percentOff : percentOff / 100;
194
+ return [
195
+ 1,
196
+ 0.95,
197
+ 0.9,
198
+ 0.75,
199
+ 0.6,
200
+ 0.5,
201
+ 0.4,
202
+ 0.25,
203
+ 0.1
204
+ ].reduce((a, b) => {
205
+ let aDiff = Math.abs(a - percentOff);
206
+ let bDiff = Math.abs(b - percentOff);
207
+ if (aDiff === bDiff) {
208
+ return a > b ? a : b;
209
+ } else {
210
+ return bDiff < aDiff ? b : a;
211
+ }
212
+ });
213
+ }
214
+ __name(findClosestDiscount, "findClosestDiscount");
215
+ const percentageDiscount = findClosestDiscount(Number(input.percentageDiscount) * 100);
216
+ const merchantCouponResult = percentageDiscount < 1 ? await client.query.merchantCoupon.findFirst({
217
+ where: and(eq(merchantCoupon.percentageDiscount, percentageDiscount.toString()), eq(merchantCoupon.type, "special"))
218
+ }) : null;
219
+ if (!merchantCouponResult) {
220
+ return [];
221
+ }
222
+ const codesArray = [];
223
+ const requestedQuantity = Number(input.quantity);
224
+ const couponQuantity = requestedQuantity < 0 ? 1 : requestedQuantity;
225
+ await client.transaction(async (trx) => {
226
+ for (let i = 0; i < couponQuantity; i++) {
227
+ const id = `coupon_${guid()}`;
228
+ await trx.insert(coupon).values({
229
+ ...input,
230
+ merchantCouponId: merchantCouponResult.id,
231
+ id
232
+ });
233
+ codesArray.push(id);
234
+ }
235
+ });
236
+ return codesArray;
237
+ }
238
+ };
239
+ }
240
+ __name(createCouponPort, "createCouponPort");
241
+
242
+ export {
243
+ createCouponPort
244
+ };
245
+ //# sourceMappingURL=chunk-EAXC4CQD.js.map
@@ -0,0 +1,249 @@
1
+ import {
2
+ guid
3
+ } from "./chunk-6XQ6C3IX.js";
4
+ import {
5
+ __name
6
+ } from "./chunk-2X5XVNDN.js";
7
+
8
+ // src/lib/mysql/workflows/create-event-series.ts
9
+ import slugify from "@sindresorhus/slugify";
10
+ import { asc, eq } from "drizzle-orm";
11
+ import { ContentResourceSchema } from "@coursebuilder/core/schemas/content-resource-schema";
12
+ import { logger as baseLogger } from "@coursebuilder/utils/logger";
13
+ var logger = baseLogger;
14
+ function createEventSeriesWorkflow({ client, tables }, operations) {
15
+ const { contentResource, contentResourceResource, contentResourceTag } = tables;
16
+ return {
17
+ async createEventSeries(input, userId) {
18
+ const { eventSeries: eventSeriesInput, childEvents: childEventsInput } = input;
19
+ if (childEventsInput.length === 0) {
20
+ throw new Error("At least one event is required");
21
+ }
22
+ const result = await client.transaction(async (tx) => {
23
+ const eventSeriesHash = guid();
24
+ const eventSeriesResourceId = slugify(`event-series~${eventSeriesHash}`);
25
+ const newEventSeries = {
26
+ id: eventSeriesResourceId,
27
+ type: "event-series",
28
+ fields: {
29
+ ...eventSeriesInput.fields,
30
+ title: eventSeriesInput.fields.title,
31
+ state: "draft",
32
+ visibility: "public",
33
+ slug: slugify(`${eventSeriesInput.fields.title}~${eventSeriesHash}`)
34
+ },
35
+ createdById: userId
36
+ };
37
+ await tx.insert(contentResource).values(newEventSeries);
38
+ const eventSeriesResource = await tx.query.contentResource.findFirst({
39
+ where: eq(contentResource.id, eventSeriesResourceId),
40
+ with: {
41
+ resources: {
42
+ with: {
43
+ resource: {
44
+ with: {
45
+ resources: {
46
+ with: {
47
+ resource: true
48
+ },
49
+ orderBy: asc(contentResourceResource.position)
50
+ }
51
+ }
52
+ }
53
+ },
54
+ orderBy: asc(contentResourceResource.position)
55
+ },
56
+ tags: {
57
+ with: {
58
+ tag: true
59
+ },
60
+ orderBy: asc(contentResourceTag.position)
61
+ },
62
+ resourceProducts: {
63
+ with: {
64
+ product: {
65
+ with: {
66
+ price: true
67
+ }
68
+ }
69
+ }
70
+ }
71
+ }
72
+ });
73
+ const parsedEventSeries = ContentResourceSchema.safeParse(eventSeriesResource);
74
+ if (!parsedEventSeries.success) {
75
+ throw new Error("Error parsing event series resource");
76
+ }
77
+ if (eventSeriesInput.fields.tagIds) {
78
+ await tx.insert(contentResourceTag).values(eventSeriesInput.fields.tagIds.map((tag) => ({
79
+ contentResourceId: eventSeriesResourceId,
80
+ tagId: tag.id,
81
+ createdAt: /* @__PURE__ */ new Date(),
82
+ updatedAt: /* @__PURE__ */ new Date(),
83
+ position: 0
84
+ })));
85
+ }
86
+ const createdChildEvents = [];
87
+ for (let i = 0; i < childEventsInput.length; i++) {
88
+ const childEventInput = childEventsInput[i];
89
+ if (!childEventInput) {
90
+ throw new Error(`Child event input is required`);
91
+ }
92
+ const childEventHash = guid();
93
+ const childEventResourceId = slugify(`event~${childEventHash}`);
94
+ const newChildEvent = {
95
+ id: childEventResourceId,
96
+ type: "event",
97
+ fields: {
98
+ title: childEventInput.fields.title,
99
+ startsAt: childEventInput.fields.startsAt,
100
+ endsAt: childEventInput.fields.endsAt,
101
+ description: childEventInput.fields.description,
102
+ state: "draft",
103
+ visibility: "public",
104
+ slug: slugify(`${childEventInput.fields.title}~${childEventHash}`),
105
+ // No price/quantity - they're on the event series
106
+ price: null,
107
+ quantity: null
108
+ },
109
+ createdById: userId
110
+ };
111
+ await tx.insert(contentResource).values(newChildEvent);
112
+ const childEventResource = await tx.query.contentResource.findFirst({
113
+ where: eq(contentResource.id, childEventResourceId),
114
+ with: {
115
+ resources: {
116
+ with: {
117
+ resource: {
118
+ with: {
119
+ resources: {
120
+ with: {
121
+ resource: true
122
+ },
123
+ orderBy: asc(contentResourceResource.position)
124
+ }
125
+ }
126
+ }
127
+ },
128
+ orderBy: asc(contentResourceResource.position)
129
+ },
130
+ tags: {
131
+ with: {
132
+ tag: true
133
+ },
134
+ orderBy: asc(contentResourceTag.position)
135
+ },
136
+ resourceProducts: {
137
+ with: {
138
+ product: {
139
+ with: {
140
+ price: true
141
+ }
142
+ }
143
+ }
144
+ }
145
+ }
146
+ });
147
+ const parsedChildEvent = ContentResourceSchema.safeParse(childEventResource);
148
+ if (!parsedChildEvent.success) {
149
+ throw new Error(`Error parsing child event resource ${i + 1}`);
150
+ }
151
+ if (childEventInput.fields.tagIds) {
152
+ await tx.insert(contentResourceTag).values(childEventInput.fields.tagIds.map((tag) => ({
153
+ contentResourceId: childEventResourceId,
154
+ tagId: tag.id,
155
+ createdAt: /* @__PURE__ */ new Date(),
156
+ updatedAt: /* @__PURE__ */ new Date(),
157
+ position: 0
158
+ })));
159
+ }
160
+ await tx.insert(contentResourceResource).values({
161
+ resourceOfId: eventSeriesResourceId,
162
+ resourceId: childEventResourceId,
163
+ position: i
164
+ });
165
+ createdChildEvents.push(parsedChildEvent.data);
166
+ }
167
+ return {
168
+ eventSeries: parsedEventSeries.data,
169
+ childEvents: createdChildEvents
170
+ };
171
+ });
172
+ const { eventSeries, childEvents } = result;
173
+ if (eventSeriesInput.sharedFields.price && eventSeriesInput.sharedFields.price > 0) {
174
+ try {
175
+ const product = await operations.createProduct({
176
+ name: eventSeriesInput.fields.title,
177
+ price: eventSeriesInput.sharedFields.price,
178
+ quantityAvailable: eventSeriesInput.sharedFields.quantity ?? -1,
179
+ type: "live",
180
+ state: "published",
181
+ visibility: "public"
182
+ });
183
+ if (product) {
184
+ await operations.addResourceToProduct({
185
+ resource: eventSeries,
186
+ productId: product.id,
187
+ userId
188
+ });
189
+ if (input.coupon?.enabled && input.coupon.percentageDiscount && input.coupon.expires) {
190
+ try {
191
+ let finalExpires = input.coupon.expires;
192
+ if (finalExpires instanceof Date) {
193
+ finalExpires = new Date(Date.UTC(finalExpires.getUTCFullYear(), finalExpires.getUTCMonth(), finalExpires.getUTCDate(), 23, 59, 59, 0));
194
+ }
195
+ const couponInput = {
196
+ quantity: "1",
197
+ maxUses: 1,
198
+ expires: finalExpires,
199
+ restrictedToProductId: product.id,
200
+ percentageDiscount: input.coupon.percentageDiscount,
201
+ status: 1,
202
+ default: true,
203
+ fields: {}
204
+ };
205
+ await operations.createCoupon(couponInput);
206
+ logger.debug("event.series.coupon.success", {
207
+ eventSeriesId: eventSeries.id,
208
+ productId: product.id,
209
+ userId,
210
+ percentageDiscount: input.coupon.percentageDiscount
211
+ });
212
+ } catch (couponError) {
213
+ logger.error(new Error(`Error creating coupon for event series: ${couponError}`));
214
+ logger.debug("event.series.coupon.failed", {
215
+ eventSeriesId: eventSeries.id,
216
+ productId: product.id,
217
+ userId
218
+ });
219
+ }
220
+ }
221
+ } else {
222
+ logger.error(new Error("Failed to create product"));
223
+ logger.debug("event.series.product.failed", {
224
+ eventSeriesId: eventSeries.id,
225
+ userId,
226
+ price: eventSeriesInput.sharedFields.price
227
+ });
228
+ }
229
+ } catch (error) {
230
+ logger.error(new Error(`Error creating and associating product: ${error}`));
231
+ logger.debug("event.series.product.creation.failed", {
232
+ eventSeriesId: eventSeries.id,
233
+ userId
234
+ });
235
+ }
236
+ }
237
+ return {
238
+ eventSeries,
239
+ childEvents
240
+ };
241
+ }
242
+ };
243
+ }
244
+ __name(createEventSeriesWorkflow, "createEventSeriesWorkflow");
245
+
246
+ export {
247
+ createEventSeriesWorkflow
248
+ };
249
+ //# sourceMappingURL=chunk-EDDG2YFS.js.map