diff --git a/apps/backend/medusa-config.ts b/apps/backend/medusa-config.ts index efc2bc4d..24aa5ebd 100644 --- a/apps/backend/medusa-config.ts +++ b/apps/backend/medusa-config.ts @@ -15,6 +15,9 @@ module.exports = defineConfig({ cookieSecret: process.env.COOKIE_SECRET || 'supersecret' } }, + featureFlags: { + index: true + }, plugins: [ { resolve: '@mercurjs/b2c-core', @@ -82,6 +85,9 @@ module.exports = defineConfig({ } ] } + }, + { + resolve: '@medusajs/index' } ] }) diff --git a/apps/backend/package.json b/apps/backend/package.json index a79cc268..001e31d5 100644 --- a/apps/backend/package.json +++ b/apps/backend/package.json @@ -32,16 +32,17 @@ "@medusajs/admin-sdk": "2.10.2", "@medusajs/cli": "2.10.2", "@medusajs/framework": "2.10.2", + "@medusajs/index": "2.10.2", "@medusajs/medusa": "2.10.2", - "@mercurjs/framework": "*", + "@mercurjs/algolia": "*", "@mercurjs/b2c-core": "*", "@mercurjs/commission": "*", - "@mercurjs/reviews": "*", + "@mercurjs/framework": "*", + "@mercurjs/payment-stripe-connect": "*", "@mercurjs/requests": "*", - "@mercurjs/algolia": "*", "@mercurjs/resend": "*", + "@mercurjs/reviews": "*", "@mercurjs/stripe-tax-provider": "*", - "@mercurjs/payment-stripe-connect": "*", "@mikro-orm/core": "6.4.3", "@mikro-orm/knex": "6.4.3", "@mikro-orm/migrations": "6.4.3", diff --git a/packages/framework/package.json b/packages/framework/package.json index 0b2859f2..7abb16e4 100644 --- a/packages/framework/package.json +++ b/packages/framework/package.json @@ -33,6 +33,7 @@ }, "devDependencies": { "@medusajs/framework": "2.10.2", + "@medusajs/index": "2.10.2", "@medusajs/test-utils": "2.10.2", "@mikro-orm/cli": "6.4.3", "@mikro-orm/core": "6.4.3", diff --git a/packages/modules/algolia/package.json b/packages/modules/algolia/package.json index 391e9922..8e369bfc 100644 --- a/packages/modules/algolia/package.json +++ b/packages/modules/algolia/package.json @@ -39,6 +39,7 @@ "@medusajs/cli": "2.10.2", "@medusajs/framework": "2.10.2", "@medusajs/icons": "2.10.2", + "@medusajs/index": "2.10.2", "@medusajs/medusa": "2.10.2", "@medusajs/test-utils": "2.10.2", "@medusajs/ui": "4.0.25", diff --git a/packages/modules/b2c-core/package.json b/packages/modules/b2c-core/package.json index d90e5457..002b8b05 100644 --- a/packages/modules/b2c-core/package.json +++ b/packages/modules/b2c-core/package.json @@ -38,6 +38,7 @@ "@medusajs/admin-sdk": "2.10.2", "@medusajs/cli": "2.10.2", "@medusajs/framework": "2.10.2", + "@medusajs/index": "2.10.2", "@medusajs/medusa": "2.10.2", "@medusajs/test-utils": "2.10.2", "@medusajs/ui": "4.0.25", diff --git a/packages/modules/b2c-core/src/api/vendor/customer-groups/route.ts b/packages/modules/b2c-core/src/api/vendor/customer-groups/route.ts index 96adcb97..35b34846 100644 --- a/packages/modules/b2c-core/src/api/vendor/customer-groups/route.ts +++ b/packages/modules/b2c-core/src/api/vendor/customer-groups/route.ts @@ -1,13 +1,11 @@ +import { AuthenticatedMedusaRequest, MedusaResponse } from '@medusajs/framework' import { - AuthenticatedMedusaRequest, - MedusaResponse, -} from "@medusajs/framework"; -import { ContainerRegistrationKeys } from "@medusajs/framework/utils"; + ContainerRegistrationKeys, +} from '@medusajs/framework/utils' -import sellerCustomerGroup from "../../../links/seller-customer-group"; -import { fetchSellerByAuthActorId } from "../../../shared/infra/http/utils"; -import { createSellerCustomerGroupWorkflow } from "../../../workflows/customer-groups/workflows"; -import { VendorCreateCustomerGroupType } from "./validators"; +import { fetchSellerByAuthActorId } from '../../../shared/infra/http/utils' +import { createSellerCustomerGroupWorkflow } from '../../../workflows/customer-groups/workflows' +import { VendorCreateCustomerGroupType } from './validators' /** * @oas [get] /vendor/customer-groups @@ -62,27 +60,37 @@ export const GET = async ( req: AuthenticatedMedusaRequest, res: MedusaResponse ) => { - const query = req.scope.resolve(ContainerRegistrationKeys.QUERY); + const query = req.scope.resolve(ContainerRegistrationKeys.QUERY) - const { data: customer_groups, metadata } = await query.graph({ - entity: sellerCustomerGroup.entryPoint, - fields: req.queryConfig.fields.map((field) => `customer_group.${field}`), + const { seller_id, ...customerGroupFilters } = req.filterableFields + + const filters: any = { + ...customerGroupFilters, + deleted_at: { + $eq: null + } + } + + if (seller_id) { + filters.seller = { + id: seller_id + } + } + + const { data: customer_groups, metadata } = await query.index({ + entity: 'customer_group', + fields: req.queryConfig.fields, pagination: req.queryConfig.pagination, - filters: { - ...req.filterableFields, - deleted_at: { - $eq: null, - }, - }, - }); + filters + }) res.json({ customer_groups, - count: metadata?.count, - offset: metadata?.skip, - limit: metadata?.take, - }); -}; + count: metadata?.estimate_count ?? customer_groups.length, + offset: metadata?.skip ?? 0, + limit: metadata?.take ?? customer_groups.length + }) +} /** * @oas [post] /vendor/customer-groups @@ -118,7 +126,7 @@ export const POST = async ( const seller = await fetchSellerByAuthActorId( req.auth_context.actor_id, req.scope - ); + ) const { result: customer_group } = await createSellerCustomerGroupWorkflow.run({ @@ -126,11 +134,11 @@ export const POST = async ( input: { ...req.validatedBody, created_by: req.auth_context.actor_id, - seller_id: seller.id, - }, - }); + seller_id: seller.id + } + }) res.status(201).json({ - customer_group, - }); -}; + customer_group + }) +} diff --git a/packages/modules/b2c-core/src/api/vendor/customer-groups/validators.ts b/packages/modules/b2c-core/src/api/vendor/customer-groups/validators.ts index f08942e3..c9e04197 100644 --- a/packages/modules/b2c-core/src/api/vendor/customer-groups/validators.ts +++ b/packages/modules/b2c-core/src/api/vendor/customer-groups/validators.ts @@ -1,6 +1,52 @@ import { z } from 'zod' -import { createFindParams } from '@medusajs/medusa/api/utils/validators' +import { applyAndAndOrOperators } from '@medusajs/medusa/api/utils/common-validators/common' +import { + createFindParams, + createOperatorMap, + createSelectParams +} from '@medusajs/medusa/api/utils/validators' + +export type VendorGetCustomerGroupParamsType = z.infer< + typeof VendorGetCustomerGroupParams +> +export const VendorGetCustomerGroupParams = createSelectParams() + +export const VendorCustomerInGroupFilters = z.object({ + id: z.union([z.string(), z.array(z.string())]).optional(), + email: z + .union([z.string(), z.array(z.string()), createOperatorMap()]) + .optional(), + default_billing_address_id: z + .union([z.string(), z.array(z.string())]) + .optional(), + default_shipping_address_id: z + .union([z.string(), z.array(z.string())]) + .optional(), + company_name: z.union([z.string(), z.array(z.string())]).optional(), + first_name: z.union([z.string(), z.array(z.string())]).optional(), + last_name: z.union([z.string(), z.array(z.string())]).optional(), + created_by: z.union([z.string(), z.array(z.string())]).optional(), + created_at: createOperatorMap().optional(), + updated_at: createOperatorMap().optional(), + deleted_at: createOperatorMap().optional() +}) + +export const VendorGetCustomerGroupsParamsFields = z.object({ + q: z.string().optional(), + id: z.union([z.string(), z.array(z.string())]).optional(), + name: z + .union([z.string(), z.array(z.string())]) + .optional() + .or(createOperatorMap()), + customers: z + .union([z.string(), z.array(z.string()), VendorCustomerInGroupFilters]) + .optional(), + created_by: z.union([z.string(), z.array(z.string())]).optional(), + created_at: createOperatorMap().optional(), + updated_at: createOperatorMap().optional(), + deleted_at: createOperatorMap().optional() +}) export type VendorGetCustomerGroupsParamsType = z.infer< typeof VendorGetCustomerGroupsParams @@ -9,6 +55,8 @@ export const VendorGetCustomerGroupsParams = createFindParams({ offset: 0, limit: 50 }) + .merge(VendorGetCustomerGroupsParamsFields) + .merge(applyAndAndOrOperators(VendorGetCustomerGroupsParamsFields)) /** * @schema VendorCreateCustomerGroup diff --git a/packages/modules/b2c-core/src/api/vendor/promotions/rule-value-options/[rule_type]/[rule_attribute_id]/route.ts b/packages/modules/b2c-core/src/api/vendor/promotions/rule-value-options/[rule_type]/[rule_attribute_id]/route.ts index 7aa95aeb..52c9aa0d 100644 --- a/packages/modules/b2c-core/src/api/vendor/promotions/rule-value-options/[rule_type]/[rule_attribute_id]/route.ts +++ b/packages/modules/b2c-core/src/api/vendor/promotions/rule-value-options/[rule_type]/[rule_attribute_id]/route.ts @@ -99,7 +99,7 @@ export const GET = async ( delete filterableFields.value } - validateRuleType(ruleType) + validateRuleType(ruleType as any) validateRuleAttribute({ promotionType: promotionType as PromotionTypeValues, ruleType: ruleType as RuleTypeValues, diff --git a/packages/modules/b2c-core/src/links/seller-customer-group.ts b/packages/modules/b2c-core/src/links/seller-customer-group.ts index e6d0d7f5..97d305d7 100644 --- a/packages/modules/b2c-core/src/links/seller-customer-group.ts +++ b/packages/modules/b2c-core/src/links/seller-customer-group.ts @@ -1,9 +1,16 @@ -import { defineLink } from "@medusajs/framework/utils"; -import CustomerModule from "@medusajs/medusa/customer"; +import { defineLink } from '@medusajs/framework/utils' +import CustomerModule from '@medusajs/medusa/customer' -import SellerModule from "../modules/seller"; +import SellerModule from '../modules/seller' -export default defineLink(SellerModule.linkable.seller, { - linkable: CustomerModule.linkable.customerGroup, - isList: true, -}); +export default defineLink( + { + linkable: SellerModule.linkable.seller, + filterable: ['id', 'name', 'created_at', 'updated_at', 'deleted_at'] + }, + { + linkable: CustomerModule.linkable.customerGroup, + isList: true, + filterable: ['id', 'name', 'created_at', 'updated_at', 'deleted_at'] + } +) diff --git a/packages/modules/commission/package.json b/packages/modules/commission/package.json index d2bd17a4..3b603fb0 100644 --- a/packages/modules/commission/package.json +++ b/packages/modules/commission/package.json @@ -38,6 +38,7 @@ "@medusajs/admin-sdk": "2.10.2", "@medusajs/cli": "2.10.2", "@medusajs/framework": "2.10.2", + "@medusajs/index": "2.10.2", "@medusajs/medusa": "2.10.2", "@medusajs/test-utils": "2.10.2", "@medusajs/ui": "4.0.25", diff --git a/packages/modules/payment-stripe-connect/package.json b/packages/modules/payment-stripe-connect/package.json index ddc66f66..9611c09a 100644 --- a/packages/modules/payment-stripe-connect/package.json +++ b/packages/modules/payment-stripe-connect/package.json @@ -39,6 +39,7 @@ "@medusajs/cli": "2.10.2", "@medusajs/framework": "2.10.2", "@medusajs/icons": "2.10.2", + "@medusajs/index": "2.10.2", "@medusajs/medusa": "2.10.2", "@medusajs/test-utils": "2.10.2", "@medusajs/ui": "4.0.25", diff --git a/packages/modules/requests/package.json b/packages/modules/requests/package.json index a67dc192..4e69812c 100644 --- a/packages/modules/requests/package.json +++ b/packages/modules/requests/package.json @@ -38,6 +38,7 @@ "@medusajs/admin-sdk": "2.10.2", "@medusajs/cli": "2.10.2", "@medusajs/framework": "2.10.2", + "@medusajs/index": "2.10.2", "@medusajs/medusa": "2.10.2", "@medusajs/test-utils": "2.10.2", "@medusajs/ui": "4.0.25", diff --git a/packages/modules/requests/src/api/store/return-request/middlewares.ts b/packages/modules/requests/src/api/store/return-request/middlewares.ts index e4cb6c7c..40e7380a 100644 --- a/packages/modules/requests/src/api/store/return-request/middlewares.ts +++ b/packages/modules/requests/src/api/store/return-request/middlewares.ts @@ -2,54 +2,55 @@ import { AuthenticatedMedusaRequest, MiddlewareRoute, validateAndTransformBody, - validateAndTransformQuery, -} from "@medusajs/framework"; + validateAndTransformQuery +} from '@medusajs/framework' -import { checkCustomerResourceOwnershipByResourceId } from "@mercurjs/framework"; -import { storeReturnOrderRequestQueryConfig } from "./query-config"; +import { checkCustomerResourceOwnershipByResourceId } from '@mercurjs/framework' + +import { storeReturnOrderRequestQueryConfig } from './query-config' import { StoreCreateReturnRequest, StoreCreateReturnRequestType, - StoreGetOrderReturnRequestParams, -} from "./validators"; + StoreGetOrderReturnRequestParams +} from './validators' export const storeOrderReturnRequestsMiddlewares: MiddlewareRoute[] = [ { - method: ["GET"], - matcher: "/store/return-request", + method: ['GET'], + matcher: '/store/return-request', middlewares: [ validateAndTransformQuery( StoreGetOrderReturnRequestParams, storeReturnOrderRequestQueryConfig.list - ), - ], + ) + ] }, { - method: ["POST"], - matcher: "/store/return-request", + method: ['POST'], + matcher: '/store/return-request', middlewares: [ validateAndTransformBody(StoreCreateReturnRequest), checkCustomerResourceOwnershipByResourceId({ - entryPoint: "order", + entryPoint: 'order', resourceId: ( req: AuthenticatedMedusaRequest ) => { - return req.validatedBody.order_id; - }, - }), - ], + return req.validatedBody.order_id + } + }) + ] }, { - method: ["GET"], - matcher: "/store/return-request/:id", + method: ['GET'], + matcher: '/store/return-request/:id', middlewares: [ checkCustomerResourceOwnershipByResourceId({ - entryPoint: "order_return_request", + entryPoint: 'order_return_request' }), validateAndTransformQuery( StoreGetOrderReturnRequestParams, storeReturnOrderRequestQueryConfig.retrieve - ), - ], - }, -]; + ) + ] + } +] diff --git a/packages/modules/resend/package.json b/packages/modules/resend/package.json index 11a82983..4261388e 100644 --- a/packages/modules/resend/package.json +++ b/packages/modules/resend/package.json @@ -34,6 +34,7 @@ "@medusajs/cli": "2.10.2", "@medusajs/framework": "2.10.2", "@medusajs/icons": "2.10.2", + "@medusajs/index": "2.10.2", "@medusajs/medusa": "2.10.2", "@medusajs/test-utils": "2.10.2", "@medusajs/ui": "4.0.25", diff --git a/packages/modules/reviews/package.json b/packages/modules/reviews/package.json index 6ecf7dc8..b79ebb85 100644 --- a/packages/modules/reviews/package.json +++ b/packages/modules/reviews/package.json @@ -38,6 +38,7 @@ "@medusajs/admin-sdk": "2.10.2", "@medusajs/cli": "2.10.2", "@medusajs/framework": "2.10.2", + "@medusajs/index": "2.10.2", "@medusajs/medusa": "2.10.2", "@medusajs/test-utils": "2.10.2", "@medusajs/ui": "4.0.25", diff --git a/packages/modules/stripe-tax-provider/package.json b/packages/modules/stripe-tax-provider/package.json index d2e4183a..6f5133a5 100644 --- a/packages/modules/stripe-tax-provider/package.json +++ b/packages/modules/stripe-tax-provider/package.json @@ -38,6 +38,7 @@ "@medusajs/admin-sdk": "2.10.2", "@medusajs/cli": "2.10.2", "@medusajs/framework": "2.10.2", + "@medusajs/index": "2.10.2", "@medusajs/medusa": "2.10.2", "@medusajs/test-utils": "2.10.2", "@medusajs/ui": "4.0.25",