@shophost/rest-api 2.0.67 → 2.0.68
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.
- package/package.json +1 -1
- package/scripts/shophost-rest-api.mjs +198 -1
- package/src/bootstrap.js +1 -1
- package/src/container.js +1 -1
- package/src/core/auth/auth.schema.js +1 -1
- package/src/core/auth/auth.util.js +1 -1
- package/src/core/auth/better-auth.lib.js +1 -1
- package/src/core/auth/generate-password-hash.util.js +1 -1
- package/src/core/auth/headers.schema.js +1 -1
- package/src/core/auth/user.schema.js +1 -1
- package/src/core/db/__generated__/client/browser.js +1 -1
- package/src/core/db/__generated__/client/client.js +1 -1
- package/src/core/db/__generated__/client/enums.js +1 -1
- package/src/core/db/__generated__/client/internal/class.js +788 -1
- package/src/core/db/__generated__/client/internal/prismaNamespace.js +1 -1
- package/src/core/db/__generated__/client/internal/prismaNamespaceBrowser.js +1 -1
- package/src/core/db/index.js +1 -1
- package/src/core/email/components.js +1 -1
- package/src/core/exceptions/http-exception.js +1 -1
- package/src/core/hono/hono.js +1 -1
- package/src/core/lib/prisma.js +1 -1
- package/src/core/logging/pino.js +1 -1
- package/src/core/notifications/email.service.js +1 -1
- package/src/core/openapi/openapi.lib.js +1 -1
- package/src/core/utils/currency.util.js +1 -1
- package/src/core/utils/env.util.js +1 -1
- package/src/core/utils/object.util.js +1 -1
- package/src/core/utils/translations.util.js +1 -1
- package/src/core/utils/zod.util.js +1 -1
- package/src/db.js +1 -1
- package/src/features/access/access.handler.js +1 -1
- package/src/features/access/access.route.js +1 -1
- package/src/features/access/access.schema.js +1 -1
- package/src/features/access/access.service.js +1 -1
- package/src/features/analytics/analytics.handler.js +1 -1
- package/src/features/analytics/analytics.route.js +1 -1
- package/src/features/analytics/analytics.schema.js +1 -1
- package/src/features/analytics/analytics.service.js +1 -1
- package/src/features/cart/cart.handler.js +1 -1
- package/src/features/cart/cart.route.js +1 -1
- package/src/features/cart/cart.schema.js +1 -1
- package/src/features/cart/cart.service.js +1 -1
- package/src/features/cart/cart.util.js +1 -1
- package/src/features/customer/customer.handler.js +1 -1
- package/src/features/customer/customer.route.js +1 -1
- package/src/features/customer/customer.schema.js +1 -1
- package/src/features/customer/customer.service.js +1 -1
- package/src/features/file/file.handler.js +1 -1
- package/src/features/file/file.route.js +1 -1
- package/src/features/file/file.schema.js +1 -1
- package/src/features/file/file.service.js +1 -1
- package/src/features/health/health.handler.js +1 -1
- package/src/features/health/health.route.js +1 -1
- package/src/features/index.js +1 -1
- package/src/features/integration/integration-config.js +1 -1
- package/src/features/integration/integration-registry.js +1 -1
- package/src/features/integration/integration.handler.js +1 -1
- package/src/features/integration/integration.route.js +1 -1
- package/src/features/integration/integration.schema.js +1 -1
- package/src/features/integration/integration.service.js +1 -1
- package/src/features/inventory/inventory.service.js +1 -1
- package/src/features/location/location.handler.js +1 -1
- package/src/features/location/location.route.js +1 -1
- package/src/features/location/location.schema.js +1 -1
- package/src/features/location/location.service.js +1 -1
- package/src/features/manufacturer/manufacturer.handler.js +1 -1
- package/src/features/manufacturer/manufacturer.route.js +1 -1
- package/src/features/manufacturer/manufacturer.schema.js +1 -1
- package/src/features/manufacturer/manufacturer.service.js +1 -1
- package/src/features/order/emails/order-confirmation.email.js +1 -1
- package/src/features/order/emails/order-notification.email.js +1 -1
- package/src/features/order/fulfilment.schema.js +1 -1
- package/src/features/order/order-fulfillment.service.js +1 -1
- package/src/features/order/order.handler.js +1 -1
- package/src/features/order/order.route.js +1 -1
- package/src/features/order/order.schema.js +1 -1
- package/src/features/order/order.service.js +1 -1
- package/src/features/order/recipient.schema.js +1 -1
- package/src/features/organization/legal-entity.schema.js +1 -1
- package/src/features/organization/organization-configuration.schema.js +1 -1
- package/src/features/organization/organization.handler.js +1 -1
- package/src/features/organization/organization.route.js +1 -1
- package/src/features/organization/organization.schema.js +1 -1
- package/src/features/organization/organization.service.js +1 -1
- package/src/features/payment/payment-webhook.service.js +1 -1
- package/src/features/payment/payment.handler.js +1 -1
- package/src/features/payment/payment.route.js +1 -1
- package/src/features/payment/payment.schema.js +1 -1
- package/src/features/payment/payment.service.js +1 -1
- package/src/features/payment/stripe.service.js +1 -1
- package/src/features/product/product-modifier.schema.js +1 -1
- package/src/features/product/product.handler.js +1 -1
- package/src/features/product/product.route.js +1 -1
- package/src/features/product/product.schema.js +1 -1
- package/src/features/product/product.service.js +1 -1
- package/src/features/product-category/product-category.handler.js +1 -1
- package/src/features/product-category/product-category.route.js +1 -1
- package/src/features/product-category/product-category.schema.js +1 -1
- package/src/features/product-category/product-category.service.js +1 -1
- package/src/features/reservation/emails/reservation-cancellation.email.js +1 -1
- package/src/features/reservation/emails/reservation-confirmation.email.js +1 -1
- package/src/features/reservation/emails/reservation-notification.email.js +1 -1
- package/src/features/reservation/emails/reservation-updated.email.js +1 -1
- package/src/features/reservation/reservation.handler.js +1 -1
- package/src/features/reservation/reservation.route.js +1 -1
- package/src/features/reservation/reservation.schema.js +1 -1
- package/src/features/reservation/reservation.service.js +1 -1
- package/src/features/shipping/shipping.handler.js +1 -1
- package/src/features/shipping/shipping.route.js +1 -1
- package/src/features/shipping/shipping.service.js +1 -1
- package/src/features/shipping-method/shipping-method.handler.js +1 -1
- package/src/features/shipping-method/shipping-method.route.js +1 -1
- package/src/features/shipping-method/shipping-method.schema.js +1 -1
- package/src/features/shipping-method/shipping-method.service.js +1 -1
- package/src/features/shipping-method/shipping-zone.schema.js +1 -1
- package/src/features/webhook/webhook.handler.js +1 -1
- package/src/features/webhook/webhook.route.js +1 -1
- package/src/index.js +1 -1
- package/src/integrations/next.js +1 -1
- package/src/schemas/address.schema.js +1 -1
- package/src/schemas/currency.schema.js +1 -1
- package/src/schemas/error.schema.js +1 -1
- package/src/schemas/index.js +1 -1
- package/src/schemas/locales.schema.js +1 -1
- package/src/schemas/number.schema.js +1 -1
- package/src/schemas/pagination.schema.js +1 -1
- package/src/schemas/params.schema.js +1 -1
- package/src/schemas/queries.schema.js +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{z as e}from"@hono/zod-openapi";export const MemberSchema=e.object({id:e.string().openapi({example:"clf9876543210abcdef",description:"ID of the member"}),organizationId:e.string().openapi({example:"cju0z9k4z0000l1qg5z1z1z1z",description:"ID of the organization"}),userId:e.string().openapi({example:"usr_123",description:"ID of the user"}),role:e.string().openapi({example:"owner",description:"Role of the member in the organization"}),createdAt:e.date(),user:e.object({id:e.string(),firstname:e.string(),lastname:e.string(),email:e.string(),image:e.string().nullable().optional()}).openapi({description:"User details"})}).openapi("Member"),InvitationSchema=e.object({id:e.string().openapi({example:"inv_123",description:"ID of the invitation"}),organizationId:e.string().openapi({example:"cju0z9k4z0000l1qg5z1z1z1z",description:"ID of the organization"}),email:e.string().email().openapi({example:"user@example.com",description:"Email of the invited user"}),role:e.string().nullable().optional().openapi({example:"member",description:"Role assigned to the invitation"}),status:e.string().openapi({example:"pending",description:"Status of the invitation"}),expiresAt:e.date().openapi({description:"Expiration date of the invitation"}),inviterId:e.string().openapi({description:"ID of the user who created the invitation"}),createdAt:e.date().optional()}).openapi("Invitation"),CreateInvitationSchema=e.object({email:e.string().email("A valid email is required").openapi({example:"user@example.com",description:"Email of the user to invite"}),role:e.string().min(1,"Role is required").openapi({example:"member",description:"Role to assign to the invited user"})}).openapi("CreateInvitation"),UpdateMemberRoleSchema=e.object({role:e.string().min(1,"Role is required").openapi({example:"admin",description:"New role for the member"})}).openapi("UpdateMemberRole"),UserInvitationSchema=e.object({id:e.string().openapi({example:"inv_123",description:"ID of the invitation"}),organizationId:e.string().openapi({example:"cju0z9k4z0000l1qg5z1z1z1z",description:"ID of the organization"}),role:e.string().nullable().optional().openapi({example:"member",description:"Role assigned to the invitation"}),expiresAt:e.date().openapi({description:"Expiration date of the invitation"}),organization:e.object({id:e.string(),name:e.string()}).openapi({description:"Organization details"})}).openapi("UserInvitation");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function _0x5668(_0x504e7f,_0x25d9fc){_0x504e7f=_0x504e7f-0x156;const _0x2f3790=_0x2f37();let _0x566806=_0x2f3790[_0x504e7f];if(_0x5668['QiiVFV']===undefined){var _0xfe4e1c=function(_0x246c7b){const _0x3ce523='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0xa606ab='',_0x1ca931='';for(let _0x2f0ab9=0x0,_0x3fcce8,_0x20ea85,_0xb42430=0x0;_0x20ea85=_0x246c7b['charAt'](_0xb42430++);~_0x20ea85&&(_0x3fcce8=_0x2f0ab9%0x4?_0x3fcce8*0x40+_0x20ea85:_0x20ea85,_0x2f0ab9++%0x4)?_0xa606ab+=String['fromCharCode'](0xff&_0x3fcce8>>(-0x2*_0x2f0ab9&0x6)):0x0){_0x20ea85=_0x3ce523['indexOf'](_0x20ea85);}for(let _0x3f581d=0x0,_0x296123=_0xa606ab['length'];_0x3f581d<_0x296123;_0x3f581d++){_0x1ca931+='%'+('00'+_0xa606ab['charCodeAt'](_0x3f581d)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1ca931);};_0x5668['myiUlt']=_0xfe4e1c,_0x5668['SNcNsi']={},_0x5668['QiiVFV']=!![];}const _0xb8ff4c=_0x2f3790[0x0],_0x549aa8=_0x504e7f+_0xb8ff4c,_0x114a65=_0x5668['SNcNsi'][_0x549aa8];return!_0x114a65?(_0x566806=_0x5668['myiUlt'](_0x566806),_0x5668['SNcNsi'][_0x549aa8]=_0x566806):_0x566806=_0x114a65,_0x566806;}const _0x437e36=_0x5668,_0x447e45=_0x5668;(function(_0x437270,_0x5d7012){const _0x41660a=_0x5668,_0x521e5a=_0x5668,_0x5550b6=_0x437270();while(!![]){try{const _0x2d027a=parseInt(_0x41660a(0x199))/0x1*(parseInt(_0x41660a(0x156))/0x2)+parseInt(_0x41660a(0x166))/0x3+-parseInt(_0x521e5a(0x19e))/0x4*(-parseInt(_0x41660a(0x161))/0x5)+parseInt(_0x521e5a(0x18e))/0x6*(-parseInt(_0x521e5a(0x16c))/0x7)+-parseInt(_0x41660a(0x16d))/0x8*(parseInt(_0x521e5a(0x1bc))/0x9)+-parseInt(_0x41660a(0x185))/0xa+parseInt(_0x41660a(0x170))/0xb;if(_0x2d027a===_0x5d7012)break;else _0x5550b6['push'](_0x5550b6['shift']());}catch(_0x126233){_0x5550b6['push'](_0x5550b6['shift']());}}}(_0x2f37,0x87a45));import{__awaiter as _0x231a97}from'tslib';function _0x2f37(){const _0x4a04d=['D2L0AfbHz2u','zgLUzYbPBNy','mJmYmJm1m21Jsg15zW','zMLUzfvUAxe','y3jLyxrLsw4','AxzL','B2jQzwn0','zsbHBM90Agu','BMCGDg8GDgG','BwjLCIbVzIa','igzPCNn0lG','zgvZyW','Aw5Zzw5ZAxq','ihrOzsbVCMC','CIbTzw1Izxi','CgfYC2u','DgHLigXHC3q','yxjYyxK','yxrPB25Z','ig93BMvYlIa','sw52AxrHDgK','AxaGzMLYC3q','BwjLCG','mJK1nZeXmfDHBuDpAq','ywXYzwfKEsa','ywnJzxb0zwq','BwjLCLjVBgu','igXVBMDLCIa','zwfKEsbLEgK','zgvSzxrLtwu','D25LCNnOAxa','v01KwvG','ndi1mtm4nhHwBLfLvG','zsbSyxn0ig8','B3DUzxi','lIbqCM9TB3q','CIbPCYbHBhi','C3qGB3DUzxi','C3rHDhvZ','BM90igeGBwu','B3jNyw5PEMe','DgHLig9Yz2e','twvTyMvYig4','mZi2nxzjEgj2yG','jhrYyw5Zywm','t2HcsuC','ww91igfYzsa','z2v0sw52Axq','mtKZmZm5nNfpDxPpqq','BgyGzNjVBsa','DgHPCYbVCMC','zMLUzezPCNm','B3qGzM91BMq','CIbMAxjZDc4','zMLUze1HBNK','DgLVBG','DxnLCG','ww91ignHBM4','vgHPCYb1C2u','ig9MihrOAxm','DML0yxrPB24','B3vUza','z2v0twvTyMu','y3jLyxrL','C3rZigzVCIa','Aw52AxrHDgK','D25LCI4Gvhi','BgvHDMvpCMC','AxmGDxnLCG','yxrPB24','t25SEsbWzw4','ignHBIbIzsa','B24GAgfZigu','ig93BMvYC2G','CM9Szq','B24GBM90igy','BNzPDgf0Aw8','zw1IzxiGB2y','ovvsufjvsW','DgLVBIbHBhi','DgLVBKLK','zgvSzxrL','CgvUzgLUzW','q2fUBM90igW','yw5ZzMvYig8','zw1HAwW','BML6yxrPB24','BwvTyMvY','BM90igjLBg8','ChjPC21H','B24Gzg9LCYa','mJu4tuTMywfM','zsbPBNzPDge','zsb5B3vYC2u','zIb0AguGBge','qw4Gywn0Axy','AwWGywrKCMu','AMznDhu','zw1VDMuGDgG','DxbKyxrL','yw5PEMf0Aw8','EhbPCMvK','nuPHsvPfuW','q2fUBM90ihi','C0PjCuq','B3LorKG','ywnJzxb0sw4','mtu5mZmZnLHXDMzIDG','ihrVig93BMu','y291BNq','DgHPCYbLBwe','zxHWAxjLC0e','ig9Yz2fUAxO','n0TXyLvLDq','nJK1mJqWu3jMAunV'];_0x2f37=function(){return _0x4a04d;};return _0x2f37();}import{z as _0x343a7c}from'@hono/zod-openapi';import{HttpException as _0x14615f}from'../../core/exceptions/http-exception';import{PaginationMetaSchema as _0x152122}from'../../schemas';import{InvitationSchema as _0x2a6586,MemberSchema as _0x2e8890,UserInvitationSchema as _0x15d923}from'./access.schema';class c{constructor(_0xeb6597){const _0x2533bf=_0x5668;this[_0x2533bf(0x1c7)]=_0xeb6597;}[_0x437e36(0x1ac)+'rs'](_0x5c6d62,_0xb8bb82){return _0x231a97(this,void 0x0,void 0x0,function*(){const _0x459439=_0x5668,_0x16cf2a=_0x5668,{page:_0x15f74a=0x1,limit:_0x3987ae=0xa,search:_0x2e4634}=_0xb8bb82,[_0x43986a,_0x1c310c]=yield this[_0x459439(0x1c7)][_0x16cf2a(0x1c5)]['paginate']({'orderBy':{'createdAt':'desc'},'where':Object['assign']({'organizationId':_0x5c6d62},_0x2e4634&&{'user':{'OR':[{'firstname':{'contains':_0x2e4634,'mode':_0x16cf2a(0x17a)+_0x459439(0x173)}},{'lastname':{'contains':_0x2e4634,'mode':_0x459439(0x17a)+_0x16cf2a(0x173)}},{'email':{'contains':_0x2e4634,'mode':_0x16cf2a(0x17a)+_0x16cf2a(0x173)}}]}}),'include':{'user':{'select':{'id':!0x0,'firstname':!0x0,'lastname':!0x0,'email':!0x0,'image':!0x0}}}})[_0x16cf2a(0x16e)+'s']({'page':_0x15f74a,'limit':_0x3987ae});return _0x343a7c[_0x16cf2a(0x174)]({'meta':_0x152122,'list':_0x343a7c['array'](_0x2e8890)})[_0x16cf2a(0x17d)]({'meta':_0x1c310c,'list':_0x43986a});});}['getMembe'+'r'](_0x1aabb8,_0x5cfcf4){const _0x5c56bd=_0x437e36,_0x96d0e8={'oyNFH':function(_0x39a9b4,_0x2d1643,_0x5d9720,_0x27e709,_0x4ae94e){return _0x39a9b4(_0x2d1643,_0x5d9720,_0x27e709,_0x4ae94e);}};return _0x96d0e8[_0x5c56bd(0x164)](_0x231a97,this,void 0x0,void 0x0,function*(){const _0x3e47f4=_0x5c56bd,_0x1498fe=_0x5c56bd,_0xeb2d7f=yield this[_0x3e47f4(0x1c7)]['member'][_0x1498fe(0x171)+'ue']({'where':{'id':_0x5cfcf4,'organizationId':_0x1aabb8},'include':{'user':{'select':{'id':!0x0,'firstname':!0x0,'lastname':!0x0,'email':!0x0,'image':!0x0}}}});if(!_0xeb2d7f)throw new _0x14615f(0x194,_0x3e47f4(0x198)+_0x1498fe(0x1a2));return _0x2e8890['parse'](_0xeb2d7f);});}['updateMe'+_0x447e45(0x188)](_0xd3ffa8,_0x29fead,_0x139c2d,_0x54c062){return _0x231a97(this,void 0x0,void 0x0,function*(){const _0x6b6681=_0x5668,_0x436670=_0x5668,_0x46aa53=yield this[_0x6b6681(0x1c7)][_0x436670(0x1c5)][_0x6b6681(0x171)+'ue']({'where':{'id':_0x29fead,'organizationId':_0xd3ffa8},'include':{'user':{'select':{'id':!0x0,'firstname':!0x0,'lastname':!0x0,'email':!0x0,'image':!0x0}}}});if(!_0x46aa53)throw new _0x14615f(0x194,_0x6b6681(0x198)+'ot\x20found');if(_0x46aa53[_0x6b6681(0x1b8)]===_0x436670(0x190)&&_0x54c062['role']!==_0x6b6681(0x190)&&(yield this[_0x436670(0x1c7)][_0x436670(0x1c5)]['count']({'where':{'organizationId':_0xd3ffa8,'role':'owner'}}))<=0x1)throw new _0x14615f(0x190,'Cannot\x20c'+'hange\x20th'+'e\x20role\x20o'+_0x6b6681(0x159)+_0x436670(0x193)+_0x6b6681(0x191)+_0x436670(0x175)+_0x436670(0x17c)+_0x6b6681(0x167)+_0x436670(0x1a3));const _0x5df4b7=yield this[_0x436670(0x1c7)][_0x436670(0x1c5)][_0x436670(0x15e)]({'where':{'id':_0x29fead,'organizationId':_0xd3ffa8},'data':{'role':_0x54c062[_0x436670(0x1b8)]},'include':{'user':{'select':{'id':!0x0,'firstname':!0x0,'lastname':!0x0,'email':!0x0,'image':!0x0}}}});return _0x2e8890[_0x436670(0x17d)](_0x5df4b7);});}[_0x447e45(0x18b)+_0x437e36(0x184)](_0x512bed,_0xe4142a,_0x54de8f){const _0x44ccee=_0x437e36,_0x1592f7=_0x437e36,_0x474de3={'WMdYX':_0x44ccee(0x162)+_0x44ccee(0x15d)+_0x44ccee(0x18f)+_0x1592f7(0x1b0)+_0x44ccee(0x1c2)+_0x1592f7(0x18c)+_0x44ccee(0x178)};return _0x231a97(this,void 0x0,void 0x0,function*(){const _0x17269e=_0x44ccee,_0x1fbb58=_0x44ccee,_0x311a85=yield this[_0x17269e(0x1c7)][_0x1fbb58(0x1c5)][_0x1fbb58(0x171)+'ue']({'where':{'id':_0xe4142a,'organizationId':_0x512bed}});if(!_0x311a85)throw new _0x14615f(0x194,_0x17269e(0x198)+_0x17269e(0x1a2));if(_0x311a85['userId']===_0x54de8f)throw new _0x14615f(0x190,_0x17269e(0x1a7)+'ot\x20remov'+_0x17269e(0x158)+_0x1fbb58(0x19f)+_0x1fbb58(0x197)+_0x1fbb58(0x1c4));if(_0x311a85[_0x1fbb58(0x1b8)]===_0x1fbb58(0x190)&&(yield this[_0x1fbb58(0x1c7)]['member'][_0x17269e(0x168)]({'where':{'organizationId':_0x512bed,'role':_0x17269e(0x190)}}))<=0x1)throw new _0x14615f(0x190,_0x474de3[_0x17269e(0x18d)]);yield this[_0x17269e(0x1c7)]['member'][_0x1fbb58(0x1bf)]({'where':{'id':_0xe4142a,'organizationId':_0x512bed}});});}[_0x447e45(0x1b1)+_0x447e45(0x15f)+'n'](_0x4f2328,_0xf94900){return _0x231a97(this,void 0x0,void 0x0,function*(){const _0x25177e=_0x5668,_0x1b5213=_0x5668,_0x10e7f0=yield this['prisma'][_0x25177e(0x1c5)][_0x25177e(0x1a1)+'t']({'where':{'organizationId':_0x4f2328,'userId':_0xf94900}});if(!_0x10e7f0)throw new _0x14615f(0x194,_0x25177e(0x19c)+_0x25177e(0x195)+_0x25177e(0x177)+_0x1b5213(0x1a0)+_0x1b5213(0x15f)+'n');if(_0x10e7f0[_0x25177e(0x1b8)]===_0x25177e(0x190)&&(yield this[_0x25177e(0x1c7)]['member'][_0x25177e(0x168)]({'where':{'organizationId':_0x4f2328,'role':_0x1b5213(0x190)}}))<=0x1)throw new _0x14615f(0x190,_0x25177e(0x1c1)+'eave\x20as\x20'+_0x1b5213(0x17e)+_0x1b5213(0x181)+'Transfer'+_0x1b5213(0x1b7)+_0x1b5213(0x183)+'.');yield this[_0x1b5213(0x1c7)][_0x1b5213(0x1c5)]['delete']({'where':{'id':_0x10e7f0['id'],'organizationId':_0x4f2328}});});}[_0x437e36(0x172)+'vitation'](_0x23c1f8,_0x3f3ce7,_0x3bdce5){return _0x231a97(this,void 0x0,void 0x0,function*(){const _0x58222d=_0x5668,_0x33f520=_0x5668;if(yield this['prisma'][_0x58222d(0x1af)+'on'][_0x33f520(0x1a1)+'t']({'where':{'organizationId':_0x23c1f8,'email':_0x3bdce5['email'],'status':_0x58222d(0x1c0),'expiresAt':{'gt':new Date()}}}))throw new _0x14615f(0x190,_0x33f520(0x15a)+_0x58222d(0x157)+_0x33f520(0x1bd)+_0x58222d(0x18a)+_0x33f520(0x1ae)+_0x58222d(0x169)+_0x33f520(0x15b)+'ss');if(yield this[_0x58222d(0x1c7)][_0x33f520(0x1c5)][_0x58222d(0x1a1)+'t']({'where':{'organizationId':_0x23c1f8,'user':{'email':_0x3bdce5[_0x33f520(0x1c3)]}}}))throw new _0x14615f(0x190,_0x58222d(0x1a8)+_0x33f520(0x192)+'eady\x20a\x20m'+_0x33f520(0x1bb)+_0x33f520(0x17b)+_0x58222d(0x15f)+'n');const _0x4c994f=yield this[_0x33f520(0x1c7)][_0x33f520(0x1af)+'on'][_0x33f520(0x1ad)]({'data':{'id':crypto['randomUU'+'ID'](),'organizationId':_0x23c1f8,'email':_0x3bdce5[_0x33f520(0x1c3)],'role':_0x3bdce5[_0x58222d(0x1b8)],'status':'pending','inviterId':_0x3f3ce7,'expiresAt':new Date(Date['now']()+0x2760*0x3c*0x3e8)}});return _0x2a6586[_0x33f520(0x17d)](_0x4c994f);});}[_0x437e36(0x19d)+_0x447e45(0x180)](_0x16fa6b){return _0x231a97(this,void 0x0,void 0x0,function*(){const _0x278d81=_0x5668,_0x3039e1=_0x5668,_0x5703e0=yield this[_0x278d81(0x1c7)]['invitati'+'on'][_0x3039e1(0x1a4)]({'where':{'organizationId':_0x16fa6b,'status':_0x278d81(0x1c0)},'orderBy':{'expiresAt':_0x278d81(0x179)}});return _0x343a7c[_0x3039e1(0x17f)](_0x2a6586)['parse'](_0x5703e0);});}['deleteIn'+_0x437e36(0x1aa)](_0x2a60d1,_0x4c17b9){const _0x45a6d0={'OhBIG':function(_0x42f4aa,_0x56fb46){return _0x42f4aa!==_0x56fb46;}};return _0x231a97(this,void 0x0,void 0x0,function*(){const _0x4c460c=_0x5668,_0x4913e1=_0x5668,_0x5c94ec=yield this[_0x4c460c(0x1c7)]['invitati'+'on']['findUniq'+'ue']({'where':{'id':_0x4c17b9,'organizationId':_0x2a60d1}});if(!_0x5c94ec)throw new _0x14615f(0x194,_0x4c460c(0x182)+_0x4913e1(0x1b9)+'ound');if(_0x45a6d0[_0x4c460c(0x19b)](_0x5c94ec[_0x4c460c(0x194)],_0x4913e1(0x1c0)))throw new _0x14615f(0x190,_0x4913e1(0x1b4)+_0x4913e1(0x16f)+'itations'+_0x4913e1(0x1b5)+'revoked');yield this[_0x4913e1(0x1c7)][_0x4913e1(0x1af)+'on'][_0x4c460c(0x1bf)]({'where':{'id':_0x4c17b9}});});}['getUserI'+_0x437e36(0x1ba)+'ns'](_0x23b5fe){return _0x231a97(this,void 0x0,void 0x0,function*(){const _0x3f1fd0=_0x5668,_0x56e46f=_0x5668,_0x4403d6=yield this['prisma'][_0x3f1fd0(0x1af)+'on']['findMany']({'where':{'email':_0x23b5fe,'status':_0x3f1fd0(0x1c0),'expiresAt':{'gt':new Date()}},'include':{'organization':{'select':{'id':!0x0,'name':!0x0}}},'orderBy':{'expiresAt':_0x3f1fd0(0x179)}});return _0x343a7c[_0x3f1fd0(0x17f)](_0x15d923)[_0x3f1fd0(0x17d)](_0x4403d6);});}[_0x447e45(0x165)+_0x447e45(0x1aa)](_0x10da49,_0x482b3b){const _0x379654=_0x447e45,_0x115134=_0x447e45,_0xb60460={'kTyuH':_0x379654(0x182)+'on\x20is\x20no'+_0x379654(0x189)+'pending','jfMtu':_0x379654(0x182)+_0x379654(0x1b6)+_0x379654(0x160),'sJIqD':_0x115134(0x182)+_0x379654(0x1c8)+_0x379654(0x1c6)+_0x115134(0x176)+_0x115134(0x1b2)};return _0x231a97(this,void 0x0,void 0x0,function*(){const _0x538df7=_0x115134,_0x14106f=_0x115134;var _0x5f58cc;const _0xc05bfa=yield this['prisma'][_0x538df7(0x1af)+'on'][_0x538df7(0x171)+'ue']({'where':{'id':_0x10da49}});if(!_0xc05bfa)throw new _0x14615f(0x194,_0x14106f(0x182)+_0x14106f(0x1b9)+_0x538df7(0x1ab));if(_0xc05bfa[_0x538df7(0x194)]!==_0x14106f(0x1c0))throw new _0x14615f(0x190,_0xb60460['kTyuH']);if(_0xc05bfa[_0x538df7(0x16a)+'t']<new Date())throw new _0x14615f(0x190,_0xb60460[_0x14106f(0x15c)]);const _0x366212=yield this[_0x538df7(0x1c7)][_0x14106f(0x1a6)][_0x538df7(0x171)+'ue']({'where':{'id':_0x482b3b}});if(!_0x366212||_0x366212['email']!==_0xc05bfa[_0x14106f(0x1c3)])throw new _0x14615f(0x190,_0xb60460[_0x538df7(0x163)]);if(yield this[_0x14106f(0x1c7)][_0x538df7(0x1c5)]['findFirs'+'t']({'where':{'organizationId':_0xc05bfa[_0x538df7(0x196)+_0x14106f(0x1be)],'userId':_0x482b3b}}))throw new _0x14615f(0x190,_0x14106f(0x19c)+_0x538df7(0x186)+'a\x20member'+_0x538df7(0x1a9)+_0x538df7(0x16b)+_0x538df7(0x1b3));const [_0x2b4ab0]=yield this[_0x14106f(0x1c7)][_0x538df7(0x19a)+_0x538df7(0x1a5)]([this['prisma'][_0x538df7(0x1c5)][_0x538df7(0x1ad)]({'data':{'organizationId':_0xc05bfa[_0x14106f(0x196)+_0x538df7(0x1be)],'userId':_0x482b3b,'role':(_0x5f58cc=_0xc05bfa[_0x538df7(0x1b8)])!==null&&_0x5f58cc!==void 0x0?_0x5f58cc:_0x538df7(0x1c5)},'include':{'user':{'select':{'id':!0x0,'firstname':!0x0,'lastname':!0x0,'email':!0x0,'image':!0x0}}}}),this[_0x538df7(0x1c7)]['invitati'+'on'][_0x14106f(0x15e)]({'where':{'id':_0x10da49},'data':{'status':_0x538df7(0x187)}})]);return _0x2e8890['parse'](_0x2b4ab0);});}}export{c as AccessService};
|
|
1
|
+
import{__awaiter as o}from"tslib";import{z as d}from"@hono/zod-openapi";import{HttpException as n}from"../../core/exceptions/http-exception";import{PaginationMetaSchema as l}from"../../schemas";import{InvitationSchema as h,MemberSchema as u,UserInvitationSchema as w}from"./access.schema";class c{constructor(e){this.prisma=e}getMembers(e,i){return o(this,void 0,void 0,function*(){const{page:t=1,limit:r=10,search:s}=i,[a,m]=yield this.prisma.member.paginate({orderBy:{createdAt:"desc"},where:Object.assign({organizationId:e},s&&{user:{OR:[{firstname:{contains:s,mode:"insensitive"}},{lastname:{contains:s,mode:"insensitive"}},{email:{contains:s,mode:"insensitive"}}]}}),include:{user:{select:{id:!0,firstname:!0,lastname:!0,email:!0,image:!0}}}}).withPages({page:t,limit:r});return d.object({meta:l,list:d.array(u)}).parse({meta:m,list:a})})}getMember(e,i){return o(this,void 0,void 0,function*(){const t=yield this.prisma.member.findUnique({where:{id:i,organizationId:e},include:{user:{select:{id:!0,firstname:!0,lastname:!0,email:!0,image:!0}}}});if(!t)throw new n(404,"Member not found");return u.parse(t)})}updateMemberRole(e,i,t,r){return o(this,void 0,void 0,function*(){const s=yield this.prisma.member.findUnique({where:{id:i,organizationId:e},include:{user:{select:{id:!0,firstname:!0,lastname:!0,email:!0,image:!0}}}});if(!s)throw new n(404,"Member not found");if(s.role==="owner"&&r.role!=="owner"&&(yield this.prisma.member.count({where:{organizationId:e,role:"owner"}}))<=1)throw new n(400,"Cannot change the role of the last owner. Promote another member to owner first.");const a=yield this.prisma.member.update({where:{id:i,organizationId:e},data:{role:r.role},include:{user:{select:{id:!0,firstname:!0,lastname:!0,email:!0,image:!0}}}});return u.parse(a)})}deleteMember(e,i,t){return o(this,void 0,void 0,function*(){const r=yield this.prisma.member.findUnique({where:{id:i,organizationId:e}});if(!r)throw new n(404,"Member not found");if(r.userId===t)throw new n(400,"You cannot remove yourself from the organization");if(r.role==="owner"&&(yield this.prisma.member.count({where:{organizationId:e,role:"owner"}}))<=1)throw new n(400,"Cannot remove the last owner. Transfer ownership first.");yield this.prisma.member.delete({where:{id:i,organizationId:e}})})}leaveOrganization(e,i){return o(this,void 0,void 0,function*(){const t=yield this.prisma.member.findFirst({where:{organizationId:e,userId:i}});if(!t)throw new n(404,"You are not a member of this organization");if(t.role==="owner"&&(yield this.prisma.member.count({where:{organizationId:e,role:"owner"}}))<=1)throw new n(400,"Cannot leave as the last owner. Transfer ownership first.");yield this.prisma.member.delete({where:{id:t.id,organizationId:e}})})}createInvitation(e,i,t){return o(this,void 0,void 0,function*(){if(yield this.prisma.invitation.findFirst({where:{organizationId:e,email:t.email,status:"pending",expiresAt:{gt:new Date}}}))throw new n(400,"An active invitation already exists for this email address");if(yield this.prisma.member.findFirst({where:{organizationId:e,user:{email:t.email}}}))throw new n(400,"This user is already a member of the organization");const a=yield this.prisma.invitation.create({data:{id:crypto.randomUUID(),organizationId:e,email:t.email,role:t.role,status:"pending",inviterId:i,expiresAt:new Date(Date.now()+10080*60*1e3)}});return h.parse(a)})}getInvitations(e){return o(this,void 0,void 0,function*(){const i=yield this.prisma.invitation.findMany({where:{organizationId:e,status:"pending"},orderBy:{expiresAt:"desc"}});return d.array(h).parse(i)})}deleteInvitation(e,i){return o(this,void 0,void 0,function*(){const t=yield this.prisma.invitation.findUnique({where:{id:i,organizationId:e}});if(!t)throw new n(404,"Invitation not found");if(t.status!=="pending")throw new n(400,"Only pending invitations can be revoked");yield this.prisma.invitation.delete({where:{id:i}})})}getUserInvitations(e){return o(this,void 0,void 0,function*(){const i=yield this.prisma.invitation.findMany({where:{email:e,status:"pending",expiresAt:{gt:new Date}},include:{organization:{select:{id:!0,name:!0}}},orderBy:{expiresAt:"desc"}});return d.array(w).parse(i)})}acceptInvitation(e,i){return o(this,void 0,void 0,function*(){var t;const r=yield this.prisma.invitation.findUnique({where:{id:e}});if(!r)throw new n(404,"Invitation not found");if(r.status!=="pending")throw new n(400,"Invitation is no longer pending");if(r.expiresAt<new Date)throw new n(400,"Invitation has expired");const s=yield this.prisma.user.findUnique({where:{id:i}});if(!s||s.email!==r.email)throw new n(400,"Invitation does not belong to this user");if(yield this.prisma.member.findFirst({where:{organizationId:r.organizationId,userId:i}}))throw new n(400,"You are already a member of this organization");const[m]=yield this.prisma.$transaction([this.prisma.member.create({data:{organizationId:r.organizationId,userId:i,role:(t=r.role)!==null&&t!==void 0?t:"member"},include:{user:{select:{id:!0,firstname:!0,lastname:!0,email:!0,image:!0}}}}),this.prisma.invitation.update({where:{id:e},data:{status:"accepted"}})]);return u.parse(m)})}}export{c as AccessService};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{__awaiter as s}from"tslib";import{createApiRouter as d}from"../../core/hono/hono";import{analyticsRoute as p}from"./analytics.route";export const registerAnalyticsHandlers=t=>{const e=d();return e.openapi(p.getOverview,r=>s(void 0,void 0,void 0,function*(){const o=r.get("auth"),i=r.req.valid("param"),a=r.req.valid("query");yield o.isGranted("read");const n=yield t.getOverview(i.organizationId,a);return r.json(n,200)})),e};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{createApiRoute as a}from"../../core/hono/hono";import{ErrorSchema as e,HeaderSchema as r,OrganizationParams as t}from"../../schemas";import{AnalyticsOverviewQuerySchema as i,AnalyticsOverviewSchema as o}from"./analytics.schema";const n=a({description:"Returns dashboard analytics for an organization within a date range.",headers:r,method:"GET",operationId:"getAnalyticsOverview",path:"/:organizationId/analytics/overview",pathParams:t,query:i,responses:{200:o,400:e,401:e,404:e},summary:"Get Analytics Overview",tags:["Analytics"]});export const analyticsRoute={getOverview:n};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{z as e}from"@hono/zod-openapi";import{currency as t}from"../../schemas/currency.schema";import{fulfilmentMethod as n}from"../order/fulfilment.schema";const a=e.enum(["card","blik","paypal","bank_transfer","cash_on_delivery"]).openapi({description:"The payment method used for the order",example:"card"});export const AnalyticsOverviewQuerySchema=e.object({from:e.coerce.date().openapi({description:"Start of the reporting range",example:"2026-01-01T00:00:00.000Z"}),to:e.coerce.date().openapi({description:"End of the reporting range",example:"2026-01-30T23:59:59.999Z"})});const r=e.object({from:e.date(),to:e.date()}).openapi("AnalyticsRange"),o=e.object({currency:t,totalSales:e.number().min(0),paidOrders:e.number().int().min(0),averageOrderValue:e.number().min(0),reservations:e.number().int().min(0),guests:e.number().int().min(0)}).openapi("AnalyticsSummary"),i=e.object({date:e.date(),label:e.string(),totalSales:e.number().min(0),paidOrders:e.number().int().min(0)}).openapi("SalesByDayPoint"),m=e.object({date:e.date(),label:e.string(),reservations:e.number().int().min(0),guests:e.number().int().min(0)}).openapi("ReservationsByDayPoint"),s=e.object({method:a,count:e.number().int().min(0),totalSales:e.number().min(0)}).openapi("PaymentMethodBreakdownItem"),c=e.object({method:n,count:e.number().int().min(0),totalSales:e.number().min(0)}).openapi("FulfilmentBreakdownItem");export const AnalyticsOverviewSchema=e.object({range:r,summary:o,salesByDay:e.array(i),reservationsByDay:e.array(m),paymentMethods:e.array(s),fulfilmentMethods:e.array(c)}).openapi("AnalyticsOverview");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{__awaiter as B}from"tslib";import{eachDayOfInterval as k,endOfDay as E,format as l,startOfDay as I}from"date-fns";import{HttpException as _}from"../../core/exceptions/http-exception";import{AnalyticsOverviewSchema as K}from"./analytics.schema";class P{constructor(o){this.prisma=o}getOverview(o,h){return B(this,void 0,void 0,function*(){var c,u,y,m;const n=I(h.from),r=E(h.to);if(n>r)throw new _(400,"`from` must be before or equal to `to`");const g=yield this.prisma.organization.findFirst({where:{id:o},include:{configuration:!0}});if(!g)throw new _(404,"Organization not found");const[b,x]=yield Promise.all([this.prisma.order.findMany({where:{organizationId:o,deletedAt:null,createdAt:{gte:n,lte:r}},select:{createdAt:!0,cancelledAt:!0,fulfilmentMethod:!0,payment:{select:{method:!0,status:!0,total:!0}}}}),this.prisma.reservation.findMany({where:{organizationId:o,date:{gte:n,lte:r}},select:{date:!0,guests:!0,cancelledAt:!0}})]),S=k({start:n,end:r}),d=S.map(t=>({date:t,label:l(t,"MMM d"),totalSales:0,paidOrders:0})),f=S.map(t=>({date:t,label:l(t,"MMM d"),reservations:0,guests:0})),w=new Map(d.map((t,e)=>[l(t.date,"yyyy-MM-dd"),e])),p=new Map,A=new Map(["delivery","pickup"].map(t=>[t,{method:t,count:0,totalSales:0}]));let v=0,i=0;for(const t of b){const e=t.cancelledAt===null&&((c=t.payment)===null||c===void 0?void 0:c.status)==="succeeded",s=l(t.createdAt,"yyyy-MM-dd"),M=w.get(s);if(e&&t.payment&&M!==void 0){d[M].totalSales+=t.payment.total,d[M].paidOrders+=1,v+=t.payment.total,i+=1;const a=(u=p.get(t.payment.method))!==null&&u!==void 0?u:{method:t.payment.method,count:0,totalSales:0};a.count+=1,a.totalSales+=t.payment.total,p.set(t.payment.method,a)}if(t.cancelledAt===null&&t.fulfilmentMethod){const a=A.get(t.fulfilmentMethod);a&&(a.count+=1,a.totalSales+=(m=(y=t.payment)===null||y===void 0?void 0:y.total)!==null&&m!==void 0?m:0)}}let O=0,D=0;for(const t of x){if(t.cancelledAt)continue;const e=l(t.date,"yyyy-MM-dd"),s=w.get(e);s!==void 0&&(f[s].reservations+=1,f[s].guests+=t.guests,O+=1,D+=t.guests)}return K.parse({range:{from:n,to:r},summary:{currency:g.configuration.defaultCurrency,totalSales:v,paidOrders:i,averageOrderValue:i>0?v/i:0,reservations:O,guests:D},salesByDay:d,reservationsByDay:f,paymentMethods:Array.from(p.values()).sort((t,e)=>e.totalSales-t.totalSales),fulfilmentMethods:Array.from(A.values()).sort((t,e)=>e.totalSales-t.totalSales)})})}}export{P as AnalyticsService};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{__awaiter as p}from"tslib";import{createApiRouter as d}from"../../core/hono/hono";import{cartRoute as s}from"./cart.route";export const registerCartHandlers=o=>{const t=d();return t.openapi(s.getCartData,r=>p(void 0,void 0,void 0,function*(){const a=r.req.valid("param"),e=r.req.valid("json"),i=r.req.valid("query"),n=yield o.getCartData(a.organizationId,e,i);return r.json(n,200)})),t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{z as t}from"@hono/zod-openapi";import{createApiRoute as r}from"../../core/hono/hono";import{CartDataSchema as e,CartSchema as o,ErrorSchema as a,HeaderSchema as m,locale as c,OrganizationParams as s}from"../../schemas";const d=r({body:o,description:"Fetches formatted cart data",headers:m,method:"POST",operationId:"getCartData",path:"/:organizationId/cart",pathParams:s,query:t.object({locale:c.default("en")}),responses:{200:e,400:a,401:a},summary:"Get Formatted Cart",tags:["Cart"]});export const cartRoute={getCartData:d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{z as t}from"@hono/zod-openapi";import{LocalizedProductSchema as e}from"../product/product.schema";export const CartProductsMappingSchema=t.record(t.string().openapi({example:"clf9876543210abcdef",description:"ID of the product in the cart"}),e),CartItemSchema=t.object({productId:t.string().cuid().openapi({example:"clf9876543210abcdef",description:"ID of the product in the cart"}),quantity:t.number().default(1).optional().openapi({example:2,description:"Quantity of this item in the cart"}),modifierGroups:t.array(t.object({id:t.string().cuid().openapi({example:"clg1234567890abcdef",description:"ID of the modifier group"}),modifiers:t.array(t.object({id:t.string().cuid().openapi({example:"clh9876543210abcdef",description:"ID of the selected modifier"}),quantity:t.number().default(1).openapi({example:1,description:"Quantity of this modifier"})}))}))}).openapi("CartItem"),CartSchema=t.object({items:t.array(CartItemSchema),shippingMethodId:t.string().cuid().optional()}),CartAdjustmentReasonSchema=t.enum(["invalid_product","out_of_stock","insufficient_stock"]).openapi("CartAdjustmentReason"),CartAdjustmentSchema=t.object({productId:t.string().cuid().openapi({example:"clf9876543210abcdef",description:"ID of the affected product"}),modifierGroups:CartItemSchema.shape.modifierGroups.optional(),reason:CartAdjustmentReasonSchema,requestedQuantity:t.number().int().min(0).openapi({example:3,description:"Quantity requested by the customer"}),resolvedQuantity:t.number().int().min(0).openapi({example:1,description:"Quantity accepted after stock normalization"})}).openapi("CartAdjustment"),CartDataSchema=t.object({invalidProductIds:t.array(t.string()),normalizedItems:t.array(CartItemSchema),adjustments:t.array(CartAdjustmentSchema),products:CartProductsMappingSchema,shipping:t.number().optional(),subtotal:t.number(),total:t.number()}),CartConflictSchema=CartDataSchema.extend({message:t.string()}).openapi("CartConflict");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{__awaiter as v}from"tslib";import{flattenTranslationData as g}from"../../core/utils/zod.util";import{CartDataSchema as w,LocalizedProductSchema as y}from"../../schemas";class I{constructor(o,n){this.prisma=o,this.inventoryService=n}calculatePriceBreakdown(o,n,l){return v(this,void 0,void 0,function*(){var t,a;const i=l?yield this.prisma.shippingMethod.findUnique({where:{id:l},include:{shippingZones:!0}}):null,r=o.reduce((d,m)=>{var c,u;const p=n.find(f=>f.id===m.productId);if(!p)return d;const h=(u=(c=p.discountedBasePrice)!==null&&c!==void 0?c:p.basePrice)!==null&&u!==void 0?u:0;return d+h*(m.quantity||1)},0),s=(t=i?.shippingZones[0])===null||t===void 0?void 0:t.price;return{total:r+(s??0),subtotal:r,shipping:(a=i?.shippingZones[0])===null||a===void 0?void 0:a.price}})}getCartData(o,n,l){return v(this,void 0,void 0,function*(){const{locale:t}=l,a=new Set(n.items.map(e=>e.productId)),i=yield this.prisma.product.findMany({where:{id:{in:Array.from(a)},organizationId:o,deletedAt:null,publishedAt:{not:null}},include:{translations:t?{where:{locale:t}}:!0,images:!0,categories:{include:{translations:{where:{locale:t}}}},modifierGroups:{include:{translations:{where:{locale:t}},modifiers:!0}}}}),r=this.inventoryService.normalizeCartItems(n.items,i.map(e=>({id:e.id,availableQuantity:e.availableQuantity}))),s=yield this.calculatePriceBreakdown(r.normalizedItems,i,n.shippingMethodId);return w.parse(Object.assign(Object.assign({},s),{adjustments:r.adjustments,invalidProductIds:r.invalidProductIds,normalizedItems:r.normalizedItems,products:i.reduce((e,d)=>(e[d.id]=y.parse(g(d)),e),{})}))})}}export{I as CartService};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{__awaiter as q}from"tslib";export const transformCartItemToOrderItem=m=>o=>q(void 0,void 0,void 0,function*(){const t=yield m.product.findUnique({where:{id:o.productId},include:{translations:!0,modifierGroups:{include:{translations:!0,modifiers:!0}},images:!0}});if(!t)throw new Error(`Product with ID ${o.productId} not found`);const e=t.images[0];let s=t.basePrice;const h=t.translations.map(d=>{const f=[];o.modifierGroups.forEach(p=>{var a;const r=t.modifierGroups.find(n=>n.id===p.id);if(r){const n=r.translations.find(i=>i.locale===d.locale),u=[];p.modifiers.forEach(i=>{const l=r.modifiers.find(g=>g.id===i.id);l&&(s+=l.price*i.quantity,u.push(`${l.title}${i.quantity>1?` (${i.quantity}x)`:""}`))}),u.length>0&&f.push(`${n?.title||((a=r.translations[0])===null||a===void 0?void 0:a.title)||""}: ${u.join(", ")}`)}});const I=f.join(", ");return{locale:d.locale,title:d.title||"",subtitle:I||""}}),c=o.quantity||1,v=s*c;return{translations:{create:h},unitPrice:s,totalPrice:v,quantity:c,rawData:o,imageId:e?.id,productSnapshotId:t.latestSnapshotId}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{__awaiter as n}from"tslib";import{createApiRouter as u}from"../../core/hono/hono";import{customerRoute as s}from"./customer.route";export const registerCustomerHandlers=i=>{const r=u();return r.openapi(s.getCustomers,t=>n(void 0,void 0,void 0,function*(){const e=t.get("auth"),o=t.req.valid("param"),a=t.req.valid("query");yield e.isGranted("read");const d=yield i.getCustomers(o.organizationId,a);return t.json(d,200)})),r.openapi(s.getCustomer,t=>n(void 0,void 0,void 0,function*(){const e=t.get("auth"),o=t.req.valid("param");yield e.isGranted("read");const a=yield i.getCustomer(o.organizationId,o.id);return t.json(a,200)})),r};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{z as t}from"@hono/zod-openapi";import{createApiRoute as r}from"../../core/hono/hono";import{AdminCustomerDetailSchema as a,AdminCustomerSchema as m,CustomerListQuerySchema as i,ErrorSchema as e,HeaderSchema as o,OrganizationParams as s,PaginationMetaSchema as n}from"../../schemas";const u=s.extend({id:t.string().min(1,"id is required").openapi({example:"user_123456789",description:"The user ID"})}),d=r({description:"Fetches paginated users who have placed at least one order or reservation in the organization",headers:o,method:"GET",operationId:"getCustomers",path:"/:organizationId/customers",pathParams:s,query:i,responses:{200:t.object({list:t.array(m),meta:n}),400:e,401:e,404:e},summary:"Get Customers",tags:["Customer"]}),c=r({description:"Fetches a customer profile with all orders and reservations for the organization",headers:o,method:"GET",operationId:"getCustomer",path:"/:organizationId/customers/:id",pathParams:u,responses:{200:a,400:e,401:e,404:e},summary:"Get Customer",tags:["Customer"]});export const customerRoute={getCustomer:c,getCustomers:d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{z as e}from"@hono/zod-openapi";import{UserSchema as r}from"../../core/auth/user.schema";import{PaginationQuerySchema as t}from"../../schemas/pagination.schema";import{OrderSchema as o}from"../order/order.schema";import{ReservationSchema as i}from"../reservation/reservation.schema";export const CustomerListQuerySchema=t.pick({page:!0,limit:!0,search:!0}).openapi("AdminCustomerListQuery"),AdminCustomerSchema=r.extend({createdAt:e.date().openapi({description:"Date when the customer account was created",example:"2026-03-29T12:00:00.000Z"}),orderCount:e.number().int().min(0).openapi({description:"Number of orders placed by the customer in this organization",example:3}),reservationCount:e.number().int().min(0).openapi({description:"Number of reservations created by the customer in this organization",example:2})}).openapi("AdminCustomer"),AdminCustomerDetailSchema=e.object({customer:AdminCustomerSchema,orders:e.array(o),reservations:e.array(i)}).openapi("AdminCustomerDetail");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{__awaiter as o}from"tslib";import{z as n}from"@hono/zod-openapi";import{HttpException as C}from"../../core/exceptions/http-exception";import{AdminCustomerDetailSchema as y,AdminCustomerSchema as c,OrderSchema as f,PaginationMetaSchema as g,ReservationSchema as A}from"../../schemas";const S={items:{include:{translations:!0,image:!0}},payment:!0,shippingAddress:!0,shippingMethod:{include:{shippingZones:!0}}};class w{constructor(e){this.prisma=e}getCustomerActivityFilter(e){return{OR:[{orders:{some:{organizationId:e,deletedAt:null}}},{reservations:{some:{organizationId:e}}}]}}getCustomerSearchFilter(e){return{OR:[{firstname:{contains:e,mode:"insensitive"}},{lastname:{contains:e,mode:"insensitive"}},{name:{contains:e,mode:"insensitive"}},{email:{contains:e,mode:"insensitive"}}]}}getCustomerCounts(e,t){return o(this,void 0,void 0,function*(){const[r,s]=yield this.prisma.$transaction([this.prisma.order.count({where:{organizationId:e,userId:t,deletedAt:null}}),this.prisma.reservation.count({where:{organizationId:e,userId:t}})]);return{orderCount:r,reservationCount:s}})}toCustomerSummary(e,t){return c.parse(Object.assign(Object.assign({},e),t))}getCustomers(e,t){return o(this,void 0,void 0,function*(){var r;const{page:s=1,limit:m=10}=t,i=(r=t.search)===null||r===void 0?void 0:r.trim(),a=this.getCustomerActivityFilter(e),d=i?{AND:[a,this.getCustomerSearchFilter(i)]}:a,[l,h]=yield this.prisma.user.paginate({where:d,orderBy:{createdAt:"desc"}}).withPages({page:s,limit:m}),p=yield Promise.all(l.map(u=>o(this,void 0,void 0,function*(){const v=yield this.getCustomerCounts(e,u.id);return this.toCustomerSummary(u,v)})));return n.object({meta:g,list:n.array(c)}).parse({meta:h,list:p})})}getCustomer(e,t){return o(this,void 0,void 0,function*(){const r=yield this.prisma.user.findFirst({where:{AND:[{id:t},this.getCustomerActivityFilter(e)]}});if(!r)throw new C(404,"Customer not found");const[s,m,i]=yield Promise.all([this.prisma.order.findMany({where:{organizationId:e,userId:t,deletedAt:null},include:S,orderBy:{createdAt:"desc"}}),this.prisma.reservation.findMany({where:{organizationId:e,userId:t},orderBy:{createdAt:"desc"}}),this.getCustomerCounts(e,t)]);return y.parse({customer:this.toCustomerSummary(r,i),orders:n.array(f).parse(s),reservations:n.array(A).parse(m)})})}}export{w as CustomerService};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{__awaiter as i}from"tslib";import{createApiRouter as p}from"../../core/hono/hono";import{fileRoute as a}from"./file.route";export const registerFileHandlers=t=>{const o=p();return o.openapi(a.getVercelToken,e=>i(void 0,void 0,void 0,function*(){const r=e.req.valid("json"),n=yield t.getVercelToken(r,e.req.raw);return e.json(n,200)})),o.openapi(a.createTemporaryFile,e=>i(void 0,void 0,void 0,function*(){const r=e.req.valid("json"),s=yield e.get("auth").getCurrentUser(),d=yield t.createTemporaryFile(s.id,r);return e.json(d,201)})),o};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{createApiRoute as e}from"../../core/hono/hono";import{CreateTemporaryFileSchema as o,FileSchema as t,GetVercelTokenBody as a,GetVercelTokenResponse as s,HeaderSchema as r}from"../../schemas";const i=e({body:o,description:"Creates a temporary file record and returns its ID",headers:r,method:"POST",operationId:"createTemporaryFile",path:"/files",responses:{201:t},summary:"Create Temporary File",tags:["File"]}),l=e({body:a,description:"Returns a Vercel token",headers:r,method:"POST",operationId:"getVercelToken",path:"/files/token/vercel",responses:{200:s,204:null},summary:"Get Vercel Token",tags:["File"]});export const fileRoute={createTemporaryFile:i,getVercelToken:l};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{z as e}from"@hono/zod-openapi";const i=e.object({type:e.literal("blob.generate-client-token"),payload:e.object({pathname:e.string(),callbackUrl:e.string(),multipart:e.boolean(),clientPayload:e.string().nullable()})}),t=e.object({type:e.literal("blob.upload-completed"),payload:e.object({blob:e.any(),tokenPayload:e.string().nullable().optional()})});export const GetVercelTokenBody=e.discriminatedUnion("type",[i,t]),GetVercelTokenResponse=e.discriminatedUnion("type",[e.object({type:e.literal("blob.generate-client-token"),clientToken:e.string()}),e.object({type:e.literal("blob.upload-completed"),response:e.literal("ok")})]),CreateTemporaryFileSchema=e.object({mimeType:e.string().min(1,"MIME type is required").openapi({example:"image/png",description:"MIME type of the file"}),size:e.number().min(1,"Size is required").openapi({example:1024,description:"Size of the file in bytes"}),filename:e.string().min(1,"Filename is required").openapi({example:"example.png",description:"Name of the file"}),organizationId:e.string().optional().openapi({example:"clm1234567890abcdef",description:"ID of the organization"})}),FileSchema=e.object({id:e.string().min(1,"ID is required").openapi({example:"clf9876543210abcdef",description:"ID of the file"}),url:e.string().min(1,"Path is required").openapi({example:"/path/to/file",description:"Path of the file"}),mimeType:e.string().min(1,"MIME type is required").openapi({example:"image/png",description:"MIME type of the file"}),size:e.number().min(1,"Size is required").openapi({example:1024,description:"Size of the file in bytes"}),filename:e.string().min(1,"Filename is required").openapi({example:"example.png",description:"Name of the file"})}).openapi("UploadedFile");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{__awaiter as i}from"tslib";import{handleUpload as d}from"@vercel/blob/client";import{logger as s}from"../../core/logging/pino";import{FileSchema as p,GetVercelTokenResponse as c}from"../../schemas";class m{constructor(e){this.prisma=e}getVercelToken(e,r){return i(this,void 0,void 0,function*(){const o=yield d({body:e,request:r,onBeforeGenerateToken:()=>i(this,void 0,void 0,function*(){if(e.type!=="blob.generate-client-token")throw new Error("Invalid type");if(!e.payload.clientPayload)throw new Error("clientPayload is required");return yield r.auth.getCurrentUser(),{addRandomSuffix:!0,allowedContentTypes:["image/jpeg","image/png","image/gif"],tokenPayload:e.payload.clientPayload}}),onUploadCompleted:n=>i(this,[n],void 0,function*({blob:t,tokenPayload:a}){if(s.info({blob:t,tokenPayload:a},"blob upload completed"),!a)throw new Error("tokenPayload is required");const{fileId:l}=JSON.parse(a);yield this.prisma.file.update({where:{id:l},data:{filename:t.pathname,url:t.url,mimeType:t.contentType,status:"completed"}})})});return c.parse(o)})}createTemporaryFile(e,r){return i(this,void 0,void 0,function*(){const o=yield this.prisma.file.create({data:Object.assign(Object.assign({},r),{url:"-",createdBy:e})});return p.parse(o)})}}export{m as FileService};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{createApiRouter as t}from"../../core/hono/hono";import{healthRoute as o}from"./health.route";export const registerHealthHandlers=()=>{const r=t();return r.openapi(o.ping,e=>e.json({ok:!0},200)),r};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{z as e}from"@hono/zod-openapi";import{createApiRoute as i}from"../../core/hono/hono";import{ErrorSchema as o,HeaderSchema as t}from"../../schemas";const r=i({description:"Pings the relevancy score service to check its availability",headers:t,method:"GET",operationId:"ping",path:"/ping",responses:{200:e.object({ok:e.boolean().openapi({description:"Indicates if the service is available",example:!0})}),500:o},summary:"Ping",tags:["Health"]});export const healthRoute={ping:r};
|