@shophost/rest-api 2.0.32 → 2.0.34

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 (348) hide show
  1. package/package.json +13 -14
  2. package/src/app.js +53 -1
  3. package/src/app.js.map +1 -0
  4. package/src/core/auth/auth.schema.js +41 -1
  5. package/src/core/auth/auth.schema.js.map +1 -0
  6. package/src/core/auth/auth.util.js +44 -1
  7. package/src/core/auth/auth.util.js.map +1 -0
  8. package/src/core/auth/better-auth.lib.js +100 -1
  9. package/src/core/auth/better-auth.lib.js.map +1 -0
  10. package/src/core/auth/generate-password-hash.util.d.ts +3 -0
  11. package/src/core/auth/generate-password-hash.util.js +30 -1
  12. package/src/core/auth/generate-password-hash.util.js.map +1 -0
  13. package/src/core/auth/headers.schema.js +22 -1
  14. package/src/core/auth/headers.schema.js.map +1 -0
  15. package/src/core/auth/user.schema.js +30 -1
  16. package/src/core/auth/user.schema.js.map +1 -0
  17. package/src/core/db/__generated__/client/browser.d.ts +128 -0
  18. package/src/core/db/__generated__/client/browser.js +18 -1
  19. package/src/core/db/__generated__/client/browser.js.map +1 -0
  20. package/src/core/db/__generated__/client/client.d.ts +143 -0
  21. package/src/core/db/__generated__/client/client.js +35 -1
  22. package/src/core/db/__generated__/client/client.js.map +1 -0
  23. package/src/core/db/__generated__/client/commonInputTypes.js +11 -1
  24. package/src/core/db/__generated__/client/commonInputTypes.js.map +1 -0
  25. package/src/core/db/__generated__/client/enums.js +200 -1
  26. package/src/core/db/__generated__/client/enums.js.map +1 -0
  27. package/src/core/db/__generated__/client/internal/class.d.ts +343 -0
  28. package/src/core/db/__generated__/client/internal/class.js +55 -1
  29. package/src/core/db/__generated__/client/internal/class.js.map +1 -0
  30. package/src/core/db/__generated__/client/internal/prismaNamespace.d.ts +234 -0
  31. package/src/core/db/__generated__/client/internal/prismaNamespace.js +541 -1
  32. package/src/core/db/__generated__/client/internal/prismaNamespace.js.map +1 -0
  33. package/src/core/db/__generated__/client/internal/prismaNamespaceBrowser.d.ts +15 -0
  34. package/src/core/db/__generated__/client/internal/prismaNamespaceBrowser.js +512 -1
  35. package/src/core/db/__generated__/client/internal/prismaNamespaceBrowser.js.map +1 -0
  36. package/src/core/db/__generated__/client/models/Account.d.ts +633 -0
  37. package/src/core/db/__generated__/client/models/Account.js +2 -1
  38. package/src/core/db/__generated__/client/models/Account.js.map +1 -0
  39. package/src/core/db/__generated__/client/models/Address.d.ts +706 -0
  40. package/src/core/db/__generated__/client/models/Address.js +2 -1
  41. package/src/core/db/__generated__/client/models/Address.js.map +1 -0
  42. package/src/core/db/__generated__/client/models/Campaign.d.ts +643 -0
  43. package/src/core/db/__generated__/client/models/Campaign.js +2 -1
  44. package/src/core/db/__generated__/client/models/Campaign.js.map +1 -0
  45. package/src/core/db/__generated__/client/models/ClosingTimes.d.ts +639 -0
  46. package/src/core/db/__generated__/client/models/ClosingTimes.js +2 -1
  47. package/src/core/db/__generated__/client/models/ClosingTimes.js.map +1 -0
  48. package/src/core/db/__generated__/client/models/File.d.ts +757 -0
  49. package/src/core/db/__generated__/client/models/File.js +2 -1
  50. package/src/core/db/__generated__/client/models/File.js.map +1 -0
  51. package/src/core/db/__generated__/client/models/Invitation.d.ts +633 -0
  52. package/src/core/db/__generated__/client/models/Invitation.js +2 -1
  53. package/src/core/db/__generated__/client/models/Invitation.js.map +1 -0
  54. package/src/core/db/__generated__/client/models/LegalEntity.d.ts +657 -0
  55. package/src/core/db/__generated__/client/models/LegalEntity.js +2 -1
  56. package/src/core/db/__generated__/client/models/LegalEntity.js.map +1 -0
  57. package/src/core/db/__generated__/client/models/Manufacturer.d.ts +684 -0
  58. package/src/core/db/__generated__/client/models/Manufacturer.js +2 -1
  59. package/src/core/db/__generated__/client/models/Manufacturer.js.map +1 -0
  60. package/src/core/db/__generated__/client/models/ManufacturerTranslation.d.ts +633 -0
  61. package/src/core/db/__generated__/client/models/ManufacturerTranslation.js +2 -1
  62. package/src/core/db/__generated__/client/models/ManufacturerTranslation.js.map +1 -0
  63. package/src/core/db/__generated__/client/models/Member.d.ts +633 -0
  64. package/src/core/db/__generated__/client/models/Member.js +2 -1
  65. package/src/core/db/__generated__/client/models/Member.js.map +1 -0
  66. package/src/core/db/__generated__/client/models/Modifier.d.ts +667 -0
  67. package/src/core/db/__generated__/client/models/Modifier.js +2 -1
  68. package/src/core/db/__generated__/client/models/Modifier.js.map +1 -0
  69. package/src/core/db/__generated__/client/models/ModifierGroup.d.ts +691 -0
  70. package/src/core/db/__generated__/client/models/ModifierGroup.js +2 -1
  71. package/src/core/db/__generated__/client/models/ModifierGroup.js.map +1 -0
  72. package/src/core/db/__generated__/client/models/ModifierGroupTranslation.d.ts +633 -0
  73. package/src/core/db/__generated__/client/models/ModifierGroupTranslation.js +2 -1
  74. package/src/core/db/__generated__/client/models/ModifierGroupTranslation.js.map +1 -0
  75. package/src/core/db/__generated__/client/models/OpeningTimes.d.ts +639 -0
  76. package/src/core/db/__generated__/client/models/OpeningTimes.js +2 -1
  77. package/src/core/db/__generated__/client/models/OpeningTimes.js.map +1 -0
  78. package/src/core/db/__generated__/client/models/Order.d.ts +705 -0
  79. package/src/core/db/__generated__/client/models/Order.js +2 -1
  80. package/src/core/db/__generated__/client/models/Order.js.map +1 -0
  81. package/src/core/db/__generated__/client/models/OrderItem.d.ts +691 -0
  82. package/src/core/db/__generated__/client/models/OrderItem.js +2 -1
  83. package/src/core/db/__generated__/client/models/OrderItem.js.map +1 -0
  84. package/src/core/db/__generated__/client/models/OrderItemTranslation.d.ts +633 -0
  85. package/src/core/db/__generated__/client/models/OrderItemTranslation.js +2 -1
  86. package/src/core/db/__generated__/client/models/OrderItemTranslation.js.map +1 -0
  87. package/src/core/db/__generated__/client/models/Organization.d.ts +816 -0
  88. package/src/core/db/__generated__/client/models/Organization.js +2 -1
  89. package/src/core/db/__generated__/client/models/Organization.js.map +1 -0
  90. package/src/core/db/__generated__/client/models/OrganizationConfiguration.d.ts +681 -0
  91. package/src/core/db/__generated__/client/models/OrganizationConfiguration.js +2 -1
  92. package/src/core/db/__generated__/client/models/OrganizationConfiguration.js.map +1 -0
  93. package/src/core/db/__generated__/client/models/Payment.d.ts +673 -0
  94. package/src/core/db/__generated__/client/models/Payment.js +2 -1
  95. package/src/core/db/__generated__/client/models/Payment.js.map +1 -0
  96. package/src/core/db/__generated__/client/models/PaymentSession.d.ts +643 -0
  97. package/src/core/db/__generated__/client/models/PaymentSession.js +2 -1
  98. package/src/core/db/__generated__/client/models/PaymentSession.js.map +1 -0
  99. package/src/core/db/__generated__/client/models/Product.d.ts +751 -0
  100. package/src/core/db/__generated__/client/models/Product.js +2 -1
  101. package/src/core/db/__generated__/client/models/Product.js.map +1 -0
  102. package/src/core/db/__generated__/client/models/ProductCategory.d.ts +694 -0
  103. package/src/core/db/__generated__/client/models/ProductCategory.js +2 -1
  104. package/src/core/db/__generated__/client/models/ProductCategory.js.map +1 -0
  105. package/src/core/db/__generated__/client/models/ProductCategoryTranslation.d.ts +633 -0
  106. package/src/core/db/__generated__/client/models/ProductCategoryTranslation.js +2 -1
  107. package/src/core/db/__generated__/client/models/ProductCategoryTranslation.js.map +1 -0
  108. package/src/core/db/__generated__/client/models/ProductSnapshot.d.ts +669 -0
  109. package/src/core/db/__generated__/client/models/ProductSnapshot.js +2 -1
  110. package/src/core/db/__generated__/client/models/ProductSnapshot.js.map +1 -0
  111. package/src/core/db/__generated__/client/models/ProductTranslation.d.ts +633 -0
  112. package/src/core/db/__generated__/client/models/ProductTranslation.js +2 -1
  113. package/src/core/db/__generated__/client/models/ProductTranslation.js.map +1 -0
  114. package/src/core/db/__generated__/client/models/Reservation.d.ts +655 -0
  115. package/src/core/db/__generated__/client/models/Reservation.js +2 -1
  116. package/src/core/db/__generated__/client/models/Reservation.js.map +1 -0
  117. package/src/core/db/__generated__/client/models/Session.d.ts +633 -0
  118. package/src/core/db/__generated__/client/models/Session.js +2 -1
  119. package/src/core/db/__generated__/client/models/Session.js.map +1 -0
  120. package/src/core/db/__generated__/client/models/ShippingMethod.d.ts +684 -0
  121. package/src/core/db/__generated__/client/models/ShippingMethod.js +2 -1
  122. package/src/core/db/__generated__/client/models/ShippingMethod.js.map +1 -0
  123. package/src/core/db/__generated__/client/models/ShippingZone.d.ts +643 -0
  124. package/src/core/db/__generated__/client/models/ShippingZone.js +2 -1
  125. package/src/core/db/__generated__/client/models/ShippingZone.js.map +1 -0
  126. package/src/core/db/__generated__/client/models/User.d.ts +741 -0
  127. package/src/core/db/__generated__/client/models/User.js +2 -1
  128. package/src/core/db/__generated__/client/models/User.js.map +1 -0
  129. package/src/core/db/__generated__/client/models/Verification.d.ts +597 -0
  130. package/src/core/db/__generated__/client/models/Verification.js +2 -1
  131. package/src/core/db/__generated__/client/models/Verification.js.map +1 -0
  132. package/src/core/db/__generated__/client/models.js +2 -1
  133. package/src/core/db/__generated__/client/models.js.map +1 -0
  134. package/src/core/db/index.js +2 -1
  135. package/src/core/db/index.js.map +1 -0
  136. package/src/core/exceptions/http-exception.js +9 -1
  137. package/src/core/exceptions/http-exception.js.map +1 -0
  138. package/src/core/hono/hono.js +123 -1
  139. package/src/core/hono/hono.js.map +1 -0
  140. package/src/core/lib/prisma.js +11 -1
  141. package/src/core/lib/prisma.js.map +1 -0
  142. package/src/core/logging/pino.js +5 -1
  143. package/src/core/logging/pino.js.map +1 -0
  144. package/src/core/notifications/email.service.d.ts +15 -0
  145. package/src/core/notifications/email.service.js +116 -1
  146. package/src/core/notifications/email.service.js.map +1 -0
  147. package/src/core/openapi/openapi.lib.js +26 -1
  148. package/src/core/openapi/openapi.lib.js.map +1 -0
  149. package/src/core/types/google-maps.types.js +2 -1
  150. package/src/core/types/google-maps.types.js.map +1 -0
  151. package/src/core/utils/currency.util.js +11 -1
  152. package/src/core/utils/currency.util.js.map +1 -0
  153. package/src/core/utils/env.util.js +8 -1
  154. package/src/core/utils/env.util.js.map +1 -0
  155. package/src/core/utils/object.util.d.ts +10 -0
  156. package/src/core/utils/object.util.js +39 -1
  157. package/src/core/utils/object.util.js.map +1 -0
  158. package/src/core/utils/translations.util.js +2 -0
  159. package/src/core/utils/translations.util.js.map +1 -0
  160. package/src/core/utils/zod.util.d.ts +12 -0
  161. package/src/core/utils/zod.util.js +85 -1
  162. package/src/core/utils/zod.util.js.map +1 -0
  163. package/src/db.js +3 -1
  164. package/src/db.js.map +1 -0
  165. package/src/features/access/access.handler.js +91 -1
  166. package/src/features/access/access.handler.js.map +1 -0
  167. package/src/features/access/access.route.js +220 -1
  168. package/src/features/access/access.route.js.map +1 -0
  169. package/src/features/access/access.schema.js +108 -1
  170. package/src/features/access/access.schema.js.map +1 -0
  171. package/src/features/access/access.service.js +294 -1
  172. package/src/features/access/access.service.js.map +1 -0
  173. package/src/features/cart/cart.handler.js +17 -1
  174. package/src/features/cart/cart.handler.js.map +1 -0
  175. package/src/features/cart/cart.route.js +32 -1
  176. package/src/features/cart/cart.route.js.map +1 -0
  177. package/src/features/cart/cart.schema.js +39 -1
  178. package/src/features/cart/cart.schema.js.map +1 -0
  179. package/src/features/cart/cart.service.d.ts +7 -0
  180. package/src/features/cart/cart.service.js +97 -1
  181. package/src/features/cart/cart.service.js.map +1 -0
  182. package/src/features/cart/cart.util.js +76 -1
  183. package/src/features/cart/cart.util.js.map +1 -0
  184. package/src/features/file/file.handler.js +23 -1
  185. package/src/features/file/file.handler.js.map +1 -0
  186. package/src/features/file/file.route.js +34 -1
  187. package/src/features/file/file.route.js.map +1 -0
  188. package/src/features/file/file.schema.js +77 -1
  189. package/src/features/file/file.schema.js.map +1 -0
  190. package/src/features/file/file.service.d.ts +6 -0
  191. package/src/features/file/file.service.js +66 -1
  192. package/src/features/file/file.service.js.map +1 -0
  193. package/src/features/health/health.handler.js +10 -1
  194. package/src/features/health/health.handler.js.map +1 -0
  195. package/src/features/health/health.route.js +25 -1
  196. package/src/features/health/health.route.js.map +1 -0
  197. package/src/features/index.js +16 -1
  198. package/src/features/index.js.map +1 -0
  199. package/src/features/location/location.handler.js +25 -1
  200. package/src/features/location/location.handler.js.map +1 -0
  201. package/src/features/location/location.route.js +56 -1
  202. package/src/features/location/location.route.js.map +1 -0
  203. package/src/features/location/location.schema.js +50 -1
  204. package/src/features/location/location.schema.js.map +1 -0
  205. package/src/features/location/location.service.d.ts +3 -0
  206. package/src/features/location/location.service.js +141 -1
  207. package/src/features/location/location.service.js.map +1 -0
  208. package/src/features/manufacturer/manufacturer.handler.js +53 -1
  209. package/src/features/manufacturer/manufacturer.handler.js.map +1 -0
  210. package/src/features/manufacturer/manufacturer.route.js +97 -1
  211. package/src/features/manufacturer/manufacturer.route.js.map +1 -0
  212. package/src/features/manufacturer/manufacturer.schema.js +125 -1
  213. package/src/features/manufacturer/manufacturer.schema.js.map +1 -0
  214. package/src/features/manufacturer/manufacturer.service.d.ts +19 -0
  215. package/src/features/manufacturer/manufacturer.service.js +190 -1
  216. package/src/features/manufacturer/manufacturer.service.js.map +1 -0
  217. package/src/features/order/emails/order-confirmation.email.js +229 -1
  218. package/src/features/order/emails/order-confirmation.email.js.map +1 -0
  219. package/src/features/order/emails/order-notification.email.js +229 -1
  220. package/src/features/order/emails/order-notification.email.js.map +1 -0
  221. package/src/features/order/fulfilment.schema.js +3 -1
  222. package/src/features/order/fulfilment.schema.js.map +1 -0
  223. package/src/features/order/order.handler.js +54 -1
  224. package/src/features/order/order.handler.js.map +1 -0
  225. package/src/features/order/order.route.js +111 -1
  226. package/src/features/order/order.route.js.map +1 -0
  227. package/src/features/order/order.schema.js +158 -1
  228. package/src/features/order/order.schema.js.map +1 -0
  229. package/src/features/order/order.service.d.ts +15 -0
  230. package/src/features/order/order.service.js +306 -1
  231. package/src/features/order/order.service.js.map +1 -0
  232. package/src/features/order/recipient.schema.js +38 -1
  233. package/src/features/order/recipient.schema.js.map +1 -0
  234. package/src/features/organization/legal-entity.schema.js +83 -1
  235. package/src/features/organization/legal-entity.schema.js.map +1 -0
  236. package/src/features/organization/organization-configuration.schema.js +115 -1
  237. package/src/features/organization/organization-configuration.schema.js.map +1 -0
  238. package/src/features/organization/organization.handler.js +48 -1
  239. package/src/features/organization/organization.handler.js.map +1 -0
  240. package/src/features/organization/organization.route.js +84 -1
  241. package/src/features/organization/organization.route.js.map +1 -0
  242. package/src/features/organization/organization.schema.js +64 -1
  243. package/src/features/organization/organization.schema.js.map +1 -0
  244. package/src/features/organization/organization.service.d.ts +15 -0
  245. package/src/features/organization/organization.service.js +334 -1
  246. package/src/features/organization/organization.service.js.map +1 -0
  247. package/src/features/payment/payment.handler.js +16 -1
  248. package/src/features/payment/payment.handler.js.map +1 -0
  249. package/src/features/payment/payment.route.js +22 -1
  250. package/src/features/payment/payment.route.js.map +1 -0
  251. package/src/features/payment/payment.schema.js +46 -1
  252. package/src/features/payment/payment.schema.js.map +1 -0
  253. package/src/features/payment/payment.service.js +100 -1
  254. package/src/features/payment/payment.service.js.map +1 -0
  255. package/src/features/payment/stripe.service.js +164 -1
  256. package/src/features/payment/stripe.service.js.map +1 -0
  257. package/src/features/product/product-modifier.schema.js +84 -1
  258. package/src/features/product/product-modifier.schema.js.map +1 -0
  259. package/src/features/product/product.handler.js +87 -1
  260. package/src/features/product/product.handler.js.map +1 -0
  261. package/src/features/product/product.route.js +179 -1
  262. package/src/features/product/product.route.js.map +1 -0
  263. package/src/features/product/product.schema.js +143 -1
  264. package/src/features/product/product.schema.js.map +1 -0
  265. package/src/features/product/product.service.d.ts +25 -0
  266. package/src/features/product/product.service.js +440 -1
  267. package/src/features/product/product.service.js.map +1 -0
  268. package/src/features/product-category/product-category.handler.js +59 -1
  269. package/src/features/product-category/product-category.handler.js.map +1 -0
  270. package/src/features/product-category/product-category.route.js +139 -1
  271. package/src/features/product-category/product-category.route.js.map +1 -0
  272. package/src/features/product-category/product-category.schema.js +86 -1
  273. package/src/features/product-category/product-category.schema.js.map +1 -0
  274. package/src/features/product-category/product-category.service.d.ts +22 -0
  275. package/src/features/product-category/product-category.service.js +220 -1
  276. package/src/features/product-category/product-category.service.js.map +1 -0
  277. package/src/features/reservation/emails/reservation-cancellation.email.js +82 -1
  278. package/src/features/reservation/emails/reservation-cancellation.email.js.map +1 -0
  279. package/src/features/reservation/emails/reservation-confirmation.email.js +82 -1
  280. package/src/features/reservation/emails/reservation-confirmation.email.js.map +1 -0
  281. package/src/features/reservation/emails/reservation-notification.email.js +93 -1
  282. package/src/features/reservation/emails/reservation-notification.email.js.map +1 -0
  283. package/src/features/reservation/reservation.handler.js +65 -1
  284. package/src/features/reservation/reservation.handler.js.map +1 -0
  285. package/src/features/reservation/reservation.route.js +167 -1
  286. package/src/features/reservation/reservation.route.js.map +1 -0
  287. package/src/features/reservation/reservation.schema.js +51 -1
  288. package/src/features/reservation/reservation.schema.js.map +1 -0
  289. package/src/features/reservation/reservation.service.d.ts +18 -0
  290. package/src/features/reservation/reservation.service.js +231 -1
  291. package/src/features/reservation/reservation.service.js.map +1 -0
  292. package/src/features/shipping/shipping.handler.js +32 -1
  293. package/src/features/shipping/shipping.handler.js.map +1 -0
  294. package/src/features/shipping/shipping.route.js +51 -1
  295. package/src/features/shipping/shipping.route.js.map +1 -0
  296. package/src/features/shipping/shipping.service.d.ts +7 -0
  297. package/src/features/shipping/shipping.service.js +96 -1
  298. package/src/features/shipping/shipping.service.js.map +1 -0
  299. package/src/features/shipping-method/shipping-method.handler.js +60 -1
  300. package/src/features/shipping-method/shipping-method.handler.js.map +1 -0
  301. package/src/features/shipping-method/shipping-method.route.js +144 -1
  302. package/src/features/shipping-method/shipping-method.route.js.map +1 -0
  303. package/src/features/shipping-method/shipping-method.schema.js +48 -1
  304. package/src/features/shipping-method/shipping-method.schema.js.map +1 -0
  305. package/src/features/shipping-method/shipping-method.service.d.ts +25 -0
  306. package/src/features/shipping-method/shipping-method.service.js +229 -1
  307. package/src/features/shipping-method/shipping-method.service.js.map +1 -0
  308. package/src/features/shipping-method/shipping-zone.schema.js +31 -1
  309. package/src/features/shipping-method/shipping-zone.schema.js.map +1 -0
  310. package/src/features/webhook/webhook.handler.js +50 -1
  311. package/src/features/webhook/webhook.handler.js.map +1 -0
  312. package/src/features/webhook/webhook.route.js +33 -1
  313. package/src/features/webhook/webhook.route.js.map +1 -0
  314. package/src/index.js +6 -1
  315. package/src/index.js.map +1 -0
  316. package/src/integrations/next.js +82 -1
  317. package/src/integrations/next.js.map +1 -0
  318. package/src/schemas/address.schema.d.ts +8 -0
  319. package/src/schemas/address.schema.js +112 -1
  320. package/src/schemas/address.schema.js.map +1 -0
  321. package/src/schemas/currency.schema.d.ts +42 -0
  322. package/src/schemas/currency.schema.js +118 -1
  323. package/src/schemas/currency.schema.js.map +1 -0
  324. package/src/schemas/error.schema.js +12 -1
  325. package/src/schemas/error.schema.js.map +1 -0
  326. package/src/schemas/index.js +29 -1
  327. package/src/schemas/index.js.map +1 -0
  328. package/src/schemas/locales.schema.js +238 -1
  329. package/src/schemas/locales.schema.js.map +1 -0
  330. package/src/schemas/number.schema.js +29 -1
  331. package/src/schemas/number.schema.js.map +1 -0
  332. package/src/schemas/pagination.schema.js +54 -1
  333. package/src/schemas/pagination.schema.js.map +1 -0
  334. package/src/schemas/params.schema.js +20 -1
  335. package/src/schemas/params.schema.js.map +1 -0
  336. package/src/schemas/queries.schema.js +6 -1
  337. package/src/schemas/queries.schema.js.map +1 -0
  338. package/src/test/global-setup.js +37 -1
  339. package/src/test/global-setup.js.map +1 -0
  340. package/src/test/integration/api-fixtures.js +160 -1
  341. package/src/test/integration/api-fixtures.js.map +1 -0
  342. package/src/test/integration/seed.js +368 -1
  343. package/src/test/integration/seed.js.map +1 -0
  344. package/src/test/integration/test-helpers.js +154 -1
  345. package/src/test/integration/test-helpers.js.map +1 -0
  346. package/src/test/setup-test-env.js +7 -1
  347. package/src/test/setup-test-env.js.map +1 -0
  348. package/scripts/minify.mjs +0 -123
@@ -1 +1,158 @@
1
- import{z as e}from"@hono/zod-openapi";import{AddressSchema as t}from"../../schemas/address.schema";import{currency as i}from"../../schemas/currency.schema";import{locale as r}from"../../schemas/locales.schema";import{CartItemSchema as a,CartSchema as o}from"../cart/cart.schema";import{FileSchema as p}from"../file/file.schema";import{PaymentMethodSchema as n,PaymentProviderSchema as d,PaymentSchema as c}from"../payment/payment.schema";import{ShippingMethodSchema as l}from"../shipping-method/shipping-method.schema";import{fulfilmentMethod as s}from"./fulfilment.schema";export const OrderStatusSchema=e.enum(["draft","pending","accepted","ready-for-dispatch","dispatched","completed","cancelled"]).openapi({description:"Status of the order",example:"accepted"});export const OrderItemSchema=e.object({translations:e.array(e.object({locale:r.openapi({description:"Locale of the translation",example:"en-US"}),title:e.string().openapi({description:"Title of the ordered product",example:"Premium Watch"}),subtitle:e.string().openapi({description:"Additional details about the ordered item, including modifiers",example:"Color: Silver, Size: Large"})})).openapi({description:"Translations for the order item"}),rawData:a,unitPrice:e.number().min(0).openapi({description:"Price per unit of the item",example:299.99}),image:p.nullable().optional(),totalPrice:e.number().min(0).openapi({description:"Total price for this item (unitPrice × quantity)",example:599.98}),quantity:e.number().min(1).openapi({description:"Number of units ordered",example:2}),productSnapshotId:e.string().cuid()}).openapi("OrderItem");export const OrderSchema=e.object({id:e.string().openapi({description:"Unique identifier for the order",example:"clj1234567890abcdef"}),referenceId:e.string().openapi({description:"External reference ID for the order",example:"ORD-12345"}),status:OrderStatusSchema.optional(),token:e.string().openapi({description:"Security token for order verification",example:"a1b2c3d4e5f6g7h8i9j0"}),expiresAt:e.date().openapi({description:"Expiration date for the order",example:"2023-12-31T23:59:59Z"}),items:e.array(OrderItemSchema).min(1).openapi({description:"Array of items in the order"}),shippingMethod:l.nullable().openapi({description:"Shipping method selected for the order"}),acceptedAt:e.date().nullable().optional().openapi({description:"Date when the order was accepted",example:"2023-06-15T14:30:00Z"}),dispatchedAt:e.date().nullable().optional().openapi({description:"Date when the order was dispatched",example:"2023-06-16T09:15:00Z"}),readyForDispatchAt:e.date().nullable().optional().openapi({description:"Date when the order was ready for dispatch",example:"2023-06-16T09:15:00Z"}),createdAt:e.date().openapi({description:"Date when the order was created",example:"2023-06-15T14:30:00Z"}),completedAt:e.date().nullable().optional().openapi({description:"Date when the order was completed",example:"2023-06-18T11:45:00Z"}),cancelledAt:e.date().nullable().optional().openapi({description:"Date when the order was cancelled",example:"2023-06-14T16:20:00Z"}),shippingAddress:t.nullable().optional(),fulfilmentMethod:s.openapi({description:"Method of order fulfilment (pickup or delivery)",example:"delivery"}),currency:i.openapi({description:"Currency used for the order",example:"USD"}),payment:c}).transform(e=>{let t;return t=e.cancelledAt?"cancelled":e.completedAt?"completed":e.dispatchedAt?"dispatched":e.readyForDispatchAt?"ready-for-dispatch":e.acceptedAt?"accepted":"pending",Object.assign(Object.assign({},e),{status:t})}).openapi("Order");export const CreateOrderSchema=o.extend({fulfilmentMethod:s.default("delivery"),payment:e.object({provider:d,method:n}),checkoutBaseUrl:e.string().url()}).refine(e=>"delivery"!==e.fulfilmentMethod||void 0!==e.shippingMethodId,{message:"shippingMethodId is required when fulfilmentMethod is 'delivery'",path:["shippingMethodId"]}).openapi("CreateOrder");
1
+ import { z } from "@hono/zod-openapi";
2
+ import { AddressSchema } from "../../schemas/address.schema";
3
+ import { currency } from "../../schemas/currency.schema";
4
+ import { locale } from "../../schemas/locales.schema";
5
+ import { CartItemSchema, CartSchema } from "../cart/cart.schema";
6
+ import { FileSchema } from "../file/file.schema";
7
+ import { PaymentMethodSchema, PaymentProviderSchema, PaymentSchema, } from "../payment/payment.schema";
8
+ import { ShippingMethodSchema } from "../shipping-method/shipping-method.schema";
9
+ import { fulfilmentMethod } from "./fulfilment.schema";
10
+ export const OrderStatusSchema = z
11
+ .enum([
12
+ "draft",
13
+ "pending",
14
+ "accepted",
15
+ "ready-for-dispatch",
16
+ "dispatched",
17
+ "completed",
18
+ "cancelled",
19
+ ])
20
+ .openapi({
21
+ description: "Status of the order",
22
+ example: "accepted",
23
+ });
24
+ export const OrderItemSchema = z
25
+ .object({
26
+ translations: z
27
+ .array(z.object({
28
+ locale: locale.openapi({
29
+ description: "Locale of the translation",
30
+ example: "en-US",
31
+ }),
32
+ title: z.string().openapi({
33
+ description: "Title of the ordered product",
34
+ example: "Premium Watch",
35
+ }),
36
+ subtitle: z.string().openapi({
37
+ description: "Additional details about the ordered item, including modifiers",
38
+ example: "Color: Silver, Size: Large",
39
+ }),
40
+ }))
41
+ .openapi({
42
+ description: "Translations for the order item",
43
+ }),
44
+ rawData: CartItemSchema,
45
+ unitPrice: z.number().min(0).openapi({
46
+ description: "Price per unit of the item",
47
+ example: 299.99,
48
+ }),
49
+ image: FileSchema.nullable().optional(),
50
+ totalPrice: z.number().min(0).openapi({
51
+ description: "Total price for this item (unitPrice × quantity)",
52
+ example: 599.98,
53
+ }),
54
+ quantity: z.number().min(1).openapi({
55
+ description: "Number of units ordered",
56
+ example: 2,
57
+ }),
58
+ productSnapshotId: z.string().cuid(),
59
+ })
60
+ .openapi("OrderItem");
61
+ export const OrderSchema = z
62
+ .object({
63
+ id: z.string().openapi({
64
+ description: "Unique identifier for the order",
65
+ example: "clj1234567890abcdef",
66
+ }),
67
+ referenceId: z.string().openapi({
68
+ description: "External reference ID for the order",
69
+ example: "ORD-12345",
70
+ }),
71
+ status: OrderStatusSchema.optional(),
72
+ token: z.string().openapi({
73
+ description: "Security token for order verification",
74
+ example: "a1b2c3d4e5f6g7h8i9j0",
75
+ }),
76
+ expiresAt: z.date().openapi({
77
+ description: "Expiration date for the order",
78
+ example: "2023-12-31T23:59:59Z",
79
+ }),
80
+ items: z.array(OrderItemSchema).min(1).openapi({
81
+ description: "Array of items in the order",
82
+ }),
83
+ shippingMethod: ShippingMethodSchema.nullable().openapi({
84
+ description: "Shipping method selected for the order",
85
+ }),
86
+ acceptedAt: z.date().nullable().optional().openapi({
87
+ description: "Date when the order was accepted",
88
+ example: "2023-06-15T14:30:00Z",
89
+ }),
90
+ dispatchedAt: z.date().nullable().optional().openapi({
91
+ description: "Date when the order was dispatched",
92
+ example: "2023-06-16T09:15:00Z",
93
+ }),
94
+ readyForDispatchAt: z.date().nullable().optional().openapi({
95
+ description: "Date when the order was ready for dispatch",
96
+ example: "2023-06-16T09:15:00Z",
97
+ }),
98
+ createdAt: z.date().openapi({
99
+ description: "Date when the order was created",
100
+ example: "2023-06-15T14:30:00Z",
101
+ }),
102
+ completedAt: z.date().nullable().optional().openapi({
103
+ description: "Date when the order was completed",
104
+ example: "2023-06-18T11:45:00Z",
105
+ }),
106
+ cancelledAt: z.date().nullable().optional().openapi({
107
+ description: "Date when the order was cancelled",
108
+ example: "2023-06-14T16:20:00Z",
109
+ }),
110
+ shippingAddress: AddressSchema.nullable().optional(),
111
+ fulfilmentMethod: fulfilmentMethod.openapi({
112
+ description: "Method of order fulfilment (pickup or delivery)",
113
+ example: "delivery",
114
+ }),
115
+ currency: currency.openapi({
116
+ description: "Currency used for the order",
117
+ example: "USD",
118
+ }),
119
+ payment: PaymentSchema,
120
+ })
121
+ .transform((order) => {
122
+ let status;
123
+ if (order.cancelledAt) {
124
+ status = "cancelled";
125
+ }
126
+ else if (order.completedAt) {
127
+ status = "completed";
128
+ }
129
+ else if (order.dispatchedAt) {
130
+ status = "dispatched";
131
+ }
132
+ else if (order.readyForDispatchAt) {
133
+ status = "ready-for-dispatch";
134
+ }
135
+ else if (order.acceptedAt) {
136
+ status = "accepted";
137
+ }
138
+ else {
139
+ status = "pending";
140
+ }
141
+ return Object.assign(Object.assign({}, order), { status });
142
+ })
143
+ .openapi("Order");
144
+ export const CreateOrderSchema = CartSchema.extend({
145
+ fulfilmentMethod: fulfilmentMethod.default("delivery"),
146
+ payment: z.object({
147
+ provider: PaymentProviderSchema,
148
+ method: PaymentMethodSchema,
149
+ }),
150
+ checkoutBaseUrl: z.string().url(),
151
+ })
152
+ .refine((data) => data.fulfilmentMethod !== "delivery" ||
153
+ data.shippingMethodId !== undefined, {
154
+ message: "shippingMethodId is required when fulfilmentMethod is 'delivery'",
155
+ path: ["shippingMethodId"],
156
+ })
157
+ .openapi("CreateOrder");
158
+ //# sourceMappingURL=order.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order.schema.js","sourceRoot":"","sources":["../../../../../../packages/rest-api/src/features/order/order.schema.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,9 @@ declare class OrderService {
7
7
  private readonly paymentOptions;
8
8
  private paymentService;
9
9
  constructor(prisma: PrismaClientType, paymentOptions: PaymentServiceOptions);
10
+ /**
11
+ * Create a draft order
12
+ */
10
13
  createOrder(organizationId: string, user: User, body: z.infer<typeof CreateOrderSchema>): Promise<{
11
14
  redirectUrl: string | undefined;
12
15
  order: {
@@ -110,6 +113,9 @@ declare class OrderService {
110
113
  } | null | undefined;
111
114
  };
112
115
  }>;
116
+ /**
117
+ * Get a specific order by ID
118
+ */
113
119
  getOrder(user: User, organizationId: string, orderId: string): Promise<{
114
120
  status: "pending" | "accepted" | "ready-for-dispatch" | "dispatched" | "completed" | "cancelled";
115
121
  id: string;
@@ -210,6 +216,9 @@ declare class OrderService {
210
216
  deliveryInstructions?: string | null | undefined;
211
217
  } | null | undefined;
212
218
  }>;
219
+ /**
220
+ * Get a paginated list of orders
221
+ */
213
222
  getOrders(organizationId: string, query: {
214
223
  page: number;
215
224
  limit: number;
@@ -324,7 +333,13 @@ declare class OrderService {
324
333
  } | null | undefined;
325
334
  }[];
326
335
  }>;
336
+ /**
337
+ * Delete an order (soft delete)
338
+ */
327
339
  deleteOrder(organizationId: string, orderId: string, userId: string): Promise<void>;
340
+ /**
341
+ * Update order status
342
+ */
328
343
  updateStatus(organizationId: string, orderId: string, operation: OrderStatus): Promise<{
329
344
  status: "pending" | "accepted" | "ready-for-dispatch" | "dispatched" | "completed" | "cancelled";
330
345
  id: string;
@@ -1 +1,306 @@
1
- import{__awaiter as e}from"tslib";import{z as i}from"@hono/zod-openapi";import{customAlphabet as t}from"nanoid";import{HttpException as n}from"../../core/exceptions/http-exception";import{OrderSchema as r,PaginationMetaSchema as d}from"../../schemas";import{transformCartItemToOrderItem as s}from"../cart/cart.util";import{PaymentService as o}from"../payment/payment.service";const a=t("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ",6);class p{constructor(e,i){this.prisma=e,this.paymentOptions=i,this.paymentService=new o(e,i)}createOrder(i,t,d){return e(this,void 0,void 0,function*(){var e,o,p,c,l;const h=yield this.prisma.organization.findFirst({where:{id:i},include:{configuration:!0}});if(!h)throw new n(404,"Organization not found");const u=yield this.prisma.address.findFirst({where:{users:{some:{id:t.id}},isDefault:!0}});if("delivery"===d.fulfilmentMethod&&!u)throw new n(400,"This user does not have a default shipping address");const m=yield Promise.all(d.items.map(s(this.prisma))),g=yield this.prisma.shippingMethod.findFirst({where:{id:d.shippingMethodId},include:{shippingZones:!0}}),f=null!==(o=null===(e=null==g?void 0:g.shippingZones[0])||void 0===e?void 0:e.price)&&void 0!==o?o:0,y=m.reduce((e,i)=>e+i.totalPrice,0),v=y+f,w=yield this.prisma.order.create({data:Object.assign(Object.assign({token:a(),referenceId:a(),organization:{connect:{id:i}},fulfilmentMethod:d.fulfilmentMethod,shippingMethod:d.shippingMethodId?{connect:{id:d.shippingMethodId}}:void 0,currency:h.configuration.defaultCurrency,sourceIp:"127.0.0.1",items:{create:m}},u?{shippingAddress:{create:Object.assign(Object.assign({},u),{id:void 0})}}:{}),{user:{connect:{id:t.id}},payment:{create:{method:d.payment.method,provider:d.payment.provider,shipping:null!==(c=null===(p=null==g?void 0:g.shippingZones[0])||void 0===p?void 0:p.price)&&void 0!==c?c:0,subtotal:y,total:v,discount:0,currency:h.configuration.defaultCurrency}}}),include:{items:{include:{translations:!0,image:!0}},payment:!0,shippingMethod:{include:{shippingZones:!0}}}}),A=r.parse(w);return{redirectUrl:null!==(l=(yield this.paymentService.createCheckoutSession(t,A,{locale:"en",successUrl:`${d.checkoutBaseUrl}/account/orders/${w.id}?clearCart=true`,cancelUrl:`${d.checkoutBaseUrl}/checkout/shipping-and-payment`})).redirectUrl)&&void 0!==l?l:void 0,order:r.parse(w)}})}getOrder(i,t,d){return e(this,void 0,void 0,function*(){const e=yield this.prisma.order.findUnique({where:{id:d,organizationId:t,deletedAt:null,user:{id:i.id}},include:{items:{include:{translations:!0,image:!0}},shippingAddress:!0,shippingMethod:{include:{shippingZones:!0}},payment:!0}});if(!e)throw new n(404,"Order not found");return r.parse(e)})}getOrders(t,n){return e(this,void 0,void 0,function*(){const{page:e=1,limit:s=10}=n,[o,a]=yield this.prisma.order.paginate({where:{organizationId:t,deletedAt:null},include:{items:{include:{translations:!0,image:!0}},shippingAddress:!0,shippingMethod:{include:{shippingZones:!0}},payment:!0},orderBy:{createdAt:"desc"}}).withPages({page:e,limit:s});return{meta:d.parse(a),list:i.array(r).parse(o)}})}deleteOrder(i,t,r){return e(this,void 0,void 0,function*(){if(!(yield this.prisma.order.findUnique({where:{id:t,organizationId:i,deletedAt:null}})))throw new n(404,"Order not found");yield this.prisma.order.update({where:{id:t,organizationId:i,deletedAt:null},data:{deletedAt:new Date,deletedBy:r}})})}updateStatus(i,t,d){return e(this,void 0,void 0,function*(){if(!(yield this.prisma.order.findUnique({where:{id:t,organizationId:i,deletedAt:null},include:{items:!0,shippingMethod:{include:{shippingZones:!0}}}})))throw new n(404,"Order not found");let e={};switch(d){case"accepted":e={acceptedAt:new Date};break;case"ready-for-dispatch":e={readyForDispatchAt:new Date};break;case"dispatched":e={dispatchedAt:new Date};break;case"completed":e={completedAt:new Date};break;case"cancelled":e={cancelledAt:new Date}}const s=yield this.prisma.order.update({where:{id:t},data:e,include:{items:{include:{translations:!0,image:!0}},shippingAddress:!0,shippingMethod:{include:{shippingZones:!0}},payment:!0}});return r.parse(s)})}}export{p as OrderService};
1
+ import { __awaiter } from "tslib";
2
+ import { z } from "@hono/zod-openapi";
3
+ import { customAlphabet } from "nanoid";
4
+ import { HttpException } from "../../core/exceptions/http-exception";
5
+ import { OrderSchema, PaginationMetaSchema, } from "../../schemas";
6
+ import { transformCartItemToOrderItem } from "../cart/cart.util";
7
+ import { PaymentService, } from "../payment/payment.service";
8
+ const nanoid = customAlphabet("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ", 6);
9
+ class OrderService {
10
+ constructor(prisma, paymentOptions) {
11
+ this.prisma = prisma;
12
+ this.paymentOptions = paymentOptions;
13
+ this.paymentService = new PaymentService(prisma, paymentOptions);
14
+ }
15
+ /**
16
+ * Create a draft order
17
+ */
18
+ createOrder(organizationId, user, body) {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ var _a, _b, _c, _d, _e;
21
+ const organization = yield this.prisma.organization.findFirst({
22
+ where: {
23
+ id: organizationId,
24
+ },
25
+ include: {
26
+ configuration: true,
27
+ },
28
+ });
29
+ if (!organization) {
30
+ throw new HttpException(404, "Organization not found");
31
+ }
32
+ const shippingAddress = yield this.prisma.address.findFirst({
33
+ where: {
34
+ users: {
35
+ some: {
36
+ id: user.id,
37
+ },
38
+ },
39
+ isDefault: true,
40
+ },
41
+ });
42
+ if (body.fulfilmentMethod === "delivery" && !shippingAddress) {
43
+ throw new HttpException(400, "This user does not have a default shipping address");
44
+ }
45
+ const items = yield Promise.all(body.items.map(transformCartItemToOrderItem(this.prisma)));
46
+ const shippingMethod = yield this.prisma.shippingMethod.findFirst({
47
+ where: {
48
+ id: body.shippingMethodId,
49
+ },
50
+ include: {
51
+ shippingZones: true,
52
+ },
53
+ });
54
+ const shipping = (_b = (_a = shippingMethod === null || shippingMethod === void 0 ? void 0 : shippingMethod.shippingZones[0]) === null || _a === void 0 ? void 0 : _a.price) !== null && _b !== void 0 ? _b : 0;
55
+ const subtotal = items.reduce((acc, item) => acc + item.totalPrice, 0);
56
+ const total = subtotal + shipping;
57
+ // Create the order
58
+ const order = yield this.prisma.order.create({
59
+ data: Object.assign(Object.assign({
60
+ // TODO: add guest order flow
61
+ token: nanoid(), referenceId: nanoid(), organization: {
62
+ connect: {
63
+ id: organizationId,
64
+ },
65
+ }, fulfilmentMethod: body.fulfilmentMethod, shippingMethod: body.shippingMethodId
66
+ ? {
67
+ connect: {
68
+ id: body.shippingMethodId,
69
+ },
70
+ }
71
+ : undefined, currency: organization.configuration.defaultCurrency,
72
+ // TODO: add user IP address
73
+ sourceIp: "127.0.0.1", items: {
74
+ create: items,
75
+ } }, (shippingAddress
76
+ ? {
77
+ shippingAddress: {
78
+ create: Object.assign(Object.assign({}, shippingAddress), { id: undefined }),
79
+ },
80
+ }
81
+ : {})), { user: {
82
+ connect: {
83
+ id: user.id,
84
+ },
85
+ }, payment: {
86
+ create: {
87
+ method: body.payment.method,
88
+ provider: body.payment.provider,
89
+ shipping: (_d = (_c = shippingMethod === null || shippingMethod === void 0 ? void 0 : shippingMethod.shippingZones[0]) === null || _c === void 0 ? void 0 : _c.price) !== null && _d !== void 0 ? _d : 0,
90
+ subtotal,
91
+ total,
92
+ discount: 0,
93
+ currency: organization.configuration.defaultCurrency,
94
+ },
95
+ } }),
96
+ include: {
97
+ items: {
98
+ include: {
99
+ translations: true,
100
+ image: true,
101
+ },
102
+ },
103
+ payment: true,
104
+ shippingMethod: {
105
+ include: {
106
+ shippingZones: true,
107
+ },
108
+ },
109
+ },
110
+ });
111
+ const formattedOrder = OrderSchema.parse(order);
112
+ const session = yield this.paymentService.createCheckoutSession(user, formattedOrder, {
113
+ locale: "en",
114
+ successUrl: `${body.checkoutBaseUrl}/account/orders/${order.id}?clearCart=true`,
115
+ cancelUrl: `${body.checkoutBaseUrl}/checkout/shipping-and-payment`,
116
+ });
117
+ return {
118
+ redirectUrl: (_e = session.redirectUrl) !== null && _e !== void 0 ? _e : undefined,
119
+ order: OrderSchema.parse(order),
120
+ };
121
+ });
122
+ }
123
+ /**
124
+ * Get a specific order by ID
125
+ */
126
+ getOrder(user, organizationId, orderId) {
127
+ return __awaiter(this, void 0, void 0, function* () {
128
+ const order = yield this.prisma.order.findUnique({
129
+ where: {
130
+ id: orderId,
131
+ organizationId: organizationId,
132
+ deletedAt: null,
133
+ user: {
134
+ id: user.id,
135
+ },
136
+ },
137
+ include: {
138
+ items: {
139
+ include: {
140
+ translations: true,
141
+ image: true,
142
+ },
143
+ },
144
+ shippingAddress: true,
145
+ shippingMethod: {
146
+ include: {
147
+ shippingZones: true,
148
+ },
149
+ },
150
+ payment: true,
151
+ },
152
+ });
153
+ if (!order) {
154
+ throw new HttpException(404, "Order not found");
155
+ }
156
+ return OrderSchema.parse(order);
157
+ });
158
+ }
159
+ /**
160
+ * Get a paginated list of orders
161
+ */
162
+ getOrders(organizationId, query) {
163
+ return __awaiter(this, void 0, void 0, function* () {
164
+ const { page = 1, limit = 10 } = query;
165
+ const [list, meta] = yield this.prisma.order
166
+ .paginate({
167
+ where: {
168
+ organizationId: organizationId,
169
+ deletedAt: null,
170
+ },
171
+ include: {
172
+ items: {
173
+ include: {
174
+ translations: true,
175
+ image: true,
176
+ },
177
+ },
178
+ shippingAddress: true,
179
+ shippingMethod: {
180
+ include: {
181
+ shippingZones: true,
182
+ },
183
+ },
184
+ payment: true,
185
+ },
186
+ orderBy: {
187
+ createdAt: "desc",
188
+ },
189
+ })
190
+ .withPages({
191
+ page,
192
+ limit,
193
+ });
194
+ return {
195
+ meta: PaginationMetaSchema.parse(meta),
196
+ list: z.array(OrderSchema).parse(list),
197
+ };
198
+ });
199
+ }
200
+ /**
201
+ * Delete an order (soft delete)
202
+ */
203
+ deleteOrder(organizationId, orderId, userId) {
204
+ return __awaiter(this, void 0, void 0, function* () {
205
+ const order = yield this.prisma.order.findUnique({
206
+ where: {
207
+ id: orderId,
208
+ organizationId: organizationId,
209
+ deletedAt: null,
210
+ },
211
+ });
212
+ if (!order) {
213
+ throw new HttpException(404, "Order not found");
214
+ }
215
+ yield this.prisma.order.update({
216
+ where: {
217
+ id: orderId,
218
+ organizationId: organizationId,
219
+ deletedAt: null,
220
+ },
221
+ data: {
222
+ deletedAt: new Date(),
223
+ deletedBy: userId,
224
+ },
225
+ });
226
+ return;
227
+ });
228
+ }
229
+ /**
230
+ * Update order status
231
+ */
232
+ updateStatus(organizationId, orderId, operation) {
233
+ return __awaiter(this, void 0, void 0, function* () {
234
+ const order = yield this.prisma.order.findUnique({
235
+ where: {
236
+ id: orderId,
237
+ organizationId: organizationId,
238
+ deletedAt: null,
239
+ },
240
+ include: {
241
+ items: true,
242
+ shippingMethod: {
243
+ include: {
244
+ shippingZones: true,
245
+ },
246
+ },
247
+ },
248
+ });
249
+ if (!order) {
250
+ throw new HttpException(404, "Order not found");
251
+ }
252
+ let updateData = {};
253
+ switch (operation) {
254
+ case "accepted":
255
+ updateData = {
256
+ acceptedAt: new Date(),
257
+ };
258
+ break;
259
+ case "ready-for-dispatch":
260
+ updateData = {
261
+ readyForDispatchAt: new Date(),
262
+ };
263
+ break;
264
+ case "dispatched":
265
+ updateData = {
266
+ dispatchedAt: new Date(),
267
+ };
268
+ break;
269
+ case "completed":
270
+ updateData = {
271
+ completedAt: new Date(),
272
+ };
273
+ break;
274
+ case "cancelled":
275
+ updateData = {
276
+ cancelledAt: new Date(),
277
+ };
278
+ break;
279
+ }
280
+ const updatedOrder = yield this.prisma.order.update({
281
+ where: {
282
+ id: orderId,
283
+ },
284
+ data: updateData,
285
+ include: {
286
+ items: {
287
+ include: {
288
+ translations: true,
289
+ image: true,
290
+ },
291
+ },
292
+ shippingAddress: true,
293
+ shippingMethod: {
294
+ include: {
295
+ shippingZones: true,
296
+ },
297
+ },
298
+ payment: true,
299
+ },
300
+ });
301
+ return OrderSchema.parse(updatedOrder);
302
+ });
303
+ }
304
+ }
305
+ export { OrderService };
306
+ //# sourceMappingURL=order.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order.service.js","sourceRoot":"","sources":["../../../../../../packages/rest-api/src/features/order/order.service.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAErE,OAAO,EAEL,WAAW,EAEX,oBAAoB,GAErB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EACL,cAAc,GAEf,MAAM,4BAA4B,CAAC;AAEpC,MAAM,MAAM,GAAG,cAAc,CAAC,sCAAsC,EAAE,CAAC,CAAC,CAAC;AAEzE,MAAM,YAAY;IAGhB,YACmB,MAAwB,EACxB,cAAqC;QADrC,WAAM,GAAN,MAAM,CAAkB;QACxB,mBAAc,GAAd,cAAc,CAAuB;QAEtD,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACnE,CAAC;IAED;;OAEG;IACU,WAAW,CACtB,cAAsB,EACtB,IAAU,EACV,IAAuC;;;YAEvC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC;gBAC5D,KAAK,EAAE;oBACL,EAAE,EAAE,cAAc;iBACnB;gBACD,OAAO,EAAE;oBACP,aAAa,EAAE,IAAI;iBACpB;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;YACzD,CAAC;YAED,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;gBAC1D,KAAK,EAAE;oBACL,KAAK,EAAE;wBACL,IAAI,EAAE;4BACJ,EAAE,EAAE,IAAI,CAAC,EAAE;yBACZ;qBACF;oBACD,SAAS,EAAE,IAAI;iBAChB;aACF,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,gBAAgB,KAAK,UAAU,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC7D,MAAM,IAAI,aAAa,CACrB,GAAG,EACH,oDAAoD,CACrD,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAC1D,CAAC;YAEF,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC;gBAChE,KAAK,EAAE;oBACL,EAAE,EAAE,IAAI,CAAC,gBAAgB;iBAC1B;gBACD,OAAO,EAAE;oBACP,aAAa,EAAE,IAAI;iBACpB;aACF,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,MAAA,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,aAAa,CAAC,CAAC,CAAC,0CAAE,KAAK,mCAAI,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YACvE,MAAM,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;YAElC,mBAAmB;YACnB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;gBAC3C,IAAI;oBACF,6BAA6B;oBAC7B,KAAK,EAAE,MAAM,EAAE,EACf,WAAW,EAAE,MAAM,EAAE,EACrB,YAAY,EAAE;wBACZ,OAAO,EAAE;4BACP,EAAE,EAAE,cAAc;yBACnB;qBACF,EACD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EACvC,cAAc,EAAE,IAAI,CAAC,gBAAgB;wBACnC,CAAC,CAAC;4BACE,OAAO,EAAE;gCACP,EAAE,EAAE,IAAI,CAAC,gBAAgB;6BAC1B;yBACF;wBACH,CAAC,CAAC,SAAS,EACb,QAAQ,EAAE,YAAY,CAAC,aAAa,CAAC,eAAe;oBACpD,4BAA4B;oBAC5B,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE;wBACL,MAAM,EAAE,KAAK;qBACd,IACE,CAAC,eAAe;oBACjB,CAAC,CAAC;wBACE,eAAe,EAAE;4BACf,MAAM,kCACD,eAAe,KAClB,EAAE,EAAE,SAAS,GACd;yBACF;qBACF;oBACH,CAAC,CAAC,EAAE,CAAC,KACP,IAAI,EAAE;wBACJ,OAAO,EAAE;4BACP,EAAE,EAAE,IAAI,CAAC,EAAE;yBACZ;qBACF,EACD,OAAO,EAAE;wBACP,MAAM,EAAE;4BACN,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;4BAC3B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;4BAC/B,QAAQ,EAAE,MAAA,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,aAAa,CAAC,CAAC,CAAC,0CAAE,KAAK,mCAAI,CAAC;4BACtD,QAAQ;4BACR,KAAK;4BACL,QAAQ,EAAE,CAAC;4BACX,QAAQ,EAAE,YAAY,CAAC,aAAa,CAAC,eAAe;yBACrD;qBACF,GACF;gBACD,OAAO,EAAE;oBACP,KAAK,EAAE;wBACL,OAAO,EAAE;4BACP,YAAY,EAAE,IAAI;4BAClB,KAAK,EAAE,IAAI;yBACZ;qBACF;oBACD,OAAO,EAAE,IAAI;oBACb,cAAc,EAAE;wBACd,OAAO,EAAE;4BACP,aAAa,EAAE,IAAI;yBACpB;qBACF;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAC7D,IAAI,EACJ,cAAc,EACd;gBACE,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,GAAG,IAAI,CAAC,eAAe,mBAAmB,KAAK,CAAC,EAAE,iBAAiB;gBAC/E,SAAS,EAAE,GAAG,IAAI,CAAC,eAAe,gCAAgC;aACnE,CACF,CAAC;YAEF,OAAO;gBACL,WAAW,EAAE,MAAA,OAAO,CAAC,WAAW,mCAAI,SAAS;gBAC7C,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;aAChC,CAAC;QACJ,CAAC;KAAA;IAED;;OAEG;IACU,QAAQ,CAAC,IAAU,EAAE,cAAsB,EAAE,OAAe;;YACvE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC/C,KAAK,EAAE;oBACL,EAAE,EAAE,OAAO;oBACX,cAAc,EAAE,cAAc;oBAC9B,SAAS,EAAE,IAAI;oBACf,IAAI,EAAE;wBACJ,EAAE,EAAE,IAAI,CAAC,EAAE;qBACZ;iBACF;gBACD,OAAO,EAAE;oBACP,KAAK,EAAE;wBACL,OAAO,EAAE;4BACP,YAAY,EAAE,IAAI;4BAClB,KAAK,EAAE,IAAI;yBACZ;qBACF;oBACD,eAAe,EAAE,IAAI;oBACrB,cAAc,EAAE;wBACd,OAAO,EAAE;4BACP,aAAa,EAAE,IAAI;yBACpB;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;YAClD,CAAC;YAED,OAAO,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;KAAA;IAED;;OAEG;IACU,SAAS,CACpB,cAAsB,EACtB,KAAsC;;YAEtC,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC;YAEvC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK;iBACzC,QAAQ,CAAC;gBACR,KAAK,EAAE;oBACL,cAAc,EAAE,cAAc;oBAC9B,SAAS,EAAE,IAAI;iBAChB;gBACD,OAAO,EAAE;oBACP,KAAK,EAAE;wBACL,OAAO,EAAE;4BACP,YAAY,EAAE,IAAI;4BAClB,KAAK,EAAE,IAAI;yBACZ;qBACF;oBACD,eAAe,EAAE,IAAI;oBACrB,cAAc,EAAE;wBACd,OAAO,EAAE;4BACP,aAAa,EAAE,IAAI;yBACpB;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd;gBACD,OAAO,EAAE;oBACP,SAAS,EAAE,MAAM;iBAClB;aACF,CAAC;iBACD,SAAS,CAAC;gBACT,IAAI;gBACJ,KAAK;aACN,CAAC,CAAC;YAEL,OAAO;gBACL,IAAI,EAAE,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC;gBACtC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;aACvC,CAAC;QACJ,CAAC;KAAA;IAED;;OAEG;IACU,WAAW,CACtB,cAAsB,EACtB,OAAe,EACf,MAAc;;YAEd,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC/C,KAAK,EAAE;oBACL,EAAE,EAAE,OAAO;oBACX,cAAc,EAAE,cAAc;oBAC9B,SAAS,EAAE,IAAI;iBAChB;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;YAClD,CAAC;YAED,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;gBAC7B,KAAK,EAAE;oBACL,EAAE,EAAE,OAAO;oBACX,cAAc,EAAE,cAAc;oBAC9B,SAAS,EAAE,IAAI;iBAChB;gBACD,IAAI,EAAE;oBACJ,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,SAAS,EAAE,MAAM;iBAClB;aACF,CAAC,CAAC;YAEH,OAAO;QACT,CAAC;KAAA;IAED;;OAEG;IACU,YAAY,CACvB,cAAsB,EACtB,OAAe,EACf,SAAsB;;YAEtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC/C,KAAK,EAAE;oBACL,EAAE,EAAE,OAAO;oBACX,cAAc,EAAE,cAAc;oBAC9B,SAAS,EAAE,IAAI;iBAChB;gBACD,OAAO,EAAE;oBACP,KAAK,EAAE,IAAI;oBACX,cAAc,EAAE;wBACd,OAAO,EAAE;4BACP,aAAa,EAAE,IAAI;yBACpB;qBACF;iBACF;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;YAClD,CAAC;YAED,IAAI,UAAU,GAAG,EAAE,CAAC;YAEpB,QAAQ,SAAS,EAAE,CAAC;gBAClB,KAAK,UAAU;oBACb,UAAU,GAAG;wBACX,UAAU,EAAE,IAAI,IAAI,EAAE;qBACvB,CAAC;oBACF,MAAM;gBACR,KAAK,oBAAoB;oBACvB,UAAU,GAAG;wBACX,kBAAkB,EAAE,IAAI,IAAI,EAAE;qBAC/B,CAAC;oBACF,MAAM;gBACR,KAAK,YAAY;oBACf,UAAU,GAAG;wBACX,YAAY,EAAE,IAAI,IAAI,EAAE;qBACzB,CAAC;oBACF,MAAM;gBACR,KAAK,WAAW;oBACd,UAAU,GAAG;wBACX,WAAW,EAAE,IAAI,IAAI,EAAE;qBACxB,CAAC;oBACF,MAAM;gBACR,KAAK,WAAW;oBACd,UAAU,GAAG;wBACX,WAAW,EAAE,IAAI,IAAI,EAAE;qBACxB,CAAC;oBACF,MAAM;YACV,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;gBAClD,KAAK,EAAE;oBACL,EAAE,EAAE,OAAO;iBACZ;gBACD,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE;oBACP,KAAK,EAAE;wBACL,OAAO,EAAE;4BACP,YAAY,EAAE,IAAI;4BAClB,KAAK,EAAE,IAAI;yBACZ;qBACF;oBACD,eAAe,EAAE,IAAI;oBACrB,cAAc,EAAE;wBACd,OAAO,EAAE;4BACP,aAAa,EAAE,IAAI;yBACpB;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd;aACF,CAAC,CAAC;YAEH,OAAO,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACzC,CAAC;KAAA;CACF;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -1 +1,38 @@
1
- import{z as e}from"@hono/zod-openapi";import{AddressSchema as o,CreateAddressSchema as t}from"../../schemas/address.schema";export const RecipientSchema=e.object({id:e.string().openapi({example:"clf9876543210abcdef",description:"ID of the customer"}),firstname:e.string().nullable().optional().openapi({example:"John Doe",description:"Name of the customer"}),email:e.string().nullable().optional().openapi({example:"john.doe@example.com",description:"Email of the customer"}),phone:e.string().nullable().optional().openapi({example:"+1234567890",description:"Phone number of the customer"}),address:o.nullable().optional().openapi({description:"Address of the customer"}),createdAt:e.date(),updatedAt:e.date()}).openapi("Customer");export const CreateRecipientSchema=RecipientSchema.pick({firstname:!0,email:!0,phone:!0}).extend({address:t}).openapi("Customer");export const UpdateCustomerSchema=CreateRecipientSchema.partial().openapi("UpdateCustomer");
1
+ import { z } from "@hono/zod-openapi";
2
+ import { AddressSchema, CreateAddressSchema, } from "../../schemas/address.schema";
3
+ export const RecipientSchema = z
4
+ .object({
5
+ id: z.string().openapi({
6
+ example: "clf9876543210abcdef",
7
+ description: "ID of the customer",
8
+ }),
9
+ firstname: z.string().nullable().optional().openapi({
10
+ example: "John Doe",
11
+ description: "Name of the customer",
12
+ }),
13
+ email: z.string().nullable().optional().openapi({
14
+ example: "john.doe@example.com",
15
+ description: "Email of the customer",
16
+ }),
17
+ phone: z.string().nullable().optional().openapi({
18
+ example: "+1234567890",
19
+ description: "Phone number of the customer",
20
+ }),
21
+ address: AddressSchema.nullable().optional().openapi({
22
+ description: "Address of the customer",
23
+ }),
24
+ createdAt: z.date(),
25
+ updatedAt: z.date(),
26
+ })
27
+ .openapi("Customer");
28
+ export const CreateRecipientSchema = RecipientSchema.pick({
29
+ firstname: true,
30
+ email: true,
31
+ phone: true,
32
+ })
33
+ .extend({
34
+ address: CreateAddressSchema,
35
+ })
36
+ .openapi("Customer");
37
+ export const UpdateCustomerSchema = CreateRecipientSchema.partial().openapi("UpdateCustomer");
38
+ //# sourceMappingURL=recipient.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipient.schema.js","sourceRoot":"","sources":["../../../../../../packages/rest-api/src/features/order/recipient.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAEtC,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC;KAC7B,MAAM,CAAC;IACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC;QACrB,OAAO,EAAE,qBAAqB;QAC9B,WAAW,EAAE,oBAAoB;KAClC,CAAC;IACF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC;QAClD,OAAO,EAAE,UAAU;QACnB,WAAW,EAAE,sBAAsB;KACpC,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC;QAC9C,OAAO,EAAE,sBAAsB;QAC/B,WAAW,EAAE,uBAAuB;KACrC,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC;QAC9C,OAAO,EAAE,aAAa;QACtB,WAAW,EAAE,8BAA8B;KAC5C,CAAC;IACF,OAAO,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC;QACnD,WAAW,EAAE,yBAAyB;KACvC,CAAC;IACF,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE;IACnB,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE;CACpB,CAAC;KACD,OAAO,CAAC,UAAU,CAAC,CAAC;AAEvB,MAAM,CAAC,MAAM,qBAAqB,GAAG,eAAe,CAAC,IAAI,CAAC;IACxD,SAAS,EAAE,IAAI;IACf,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;CACZ,CAAC;KACC,MAAM,CAAC;IACN,OAAO,EAAE,mBAAmB;CAC7B,CAAC;KACD,OAAO,CAAC,UAAU,CAAC,CAAC;AAEvB,MAAM,CAAC,MAAM,oBAAoB,GAC/B,qBAAqB,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC"}