diff --git a/integration-tests/api/__tests__/admin/fulfillment-sets.spec.ts b/integration-tests/api/__tests__/admin/fulfillment-sets.spec.ts index 9499ce2ce2..0682db48da 100644 --- a/integration-tests/api/__tests__/admin/fulfillment-sets.spec.ts +++ b/integration-tests/api/__tests__/admin/fulfillment-sets.spec.ts @@ -191,6 +191,18 @@ medusaIntegrationTestRunner({ }), }) ) + + const serviceZoneResponse = await api + .get( + `/admin/fulfillment-sets/${fulfillmentSetId}/service-zones/${serviceZoneId}`, + adminHeaders + ) + .catch((err) => err.response) + + expect(serviceZoneResponse.status).toEqual(404) + expect(serviceZoneResponse.data.message).toEqual( + `Service zone with id: ${serviceZoneId} not found` + ) }) it("should throw if invalid type is passed", async () => { @@ -344,9 +356,9 @@ medusaIntegrationTestRunner({ }, adminHeaders ) - + const stockLocationId = stockLocationResponse.data.stock_location.id - + const locationWithFSetResponse = await api.post( `/admin/stock-locations/${stockLocationId}/fulfillment-sets?fields=id,*fulfillment_sets`, { @@ -355,7 +367,7 @@ medusaIntegrationTestRunner({ }, adminHeaders ) - + const fulfillmentSetId = locationWithFSetResponse.data.stock_location.fulfillment_sets[0].id diff --git a/packages/core-flows/src/fulfillment/steps/delete-service-zones.ts b/packages/core-flows/src/fulfillment/steps/delete-service-zones.ts index 8cbe4bf7da..75cd8f87c4 100644 --- a/packages/core-flows/src/fulfillment/steps/delete-service-zones.ts +++ b/packages/core-flows/src/fulfillment/steps/delete-service-zones.ts @@ -10,7 +10,7 @@ export const deleteServiceZonesStep = createStep( ModuleRegistrationName.FULFILLMENT ) - await service.softDelete(ids) + await service.softDeleteServiceZones(ids) return new StepResponse(void 0, ids) }, @@ -23,6 +23,6 @@ export const deleteServiceZonesStep = createStep( ModuleRegistrationName.FULFILLMENT ) - await service.restore(prevIds) + await service.restoreServiceZones(prevIds) } ) diff --git a/packages/medusa/src/api-v2/admin/fulfillment-sets/[id]/service-zones/[zone_id]/route.ts b/packages/medusa/src/api-v2/admin/fulfillment-sets/[id]/service-zones/[zone_id]/route.ts index 7875761c4a..805f523cbc 100644 --- a/packages/medusa/src/api-v2/admin/fulfillment-sets/[id]/service-zones/[zone_id]/route.ts +++ b/packages/medusa/src/api-v2/admin/fulfillment-sets/[id]/service-zones/[zone_id]/route.ts @@ -6,6 +6,7 @@ import { ModuleRegistrationName } from "@medusajs/modules-sdk" import { AdminFulfillmentSetResponse, AdminServiceZoneDeleteResponse, + AdminServiceZoneResponse, IFulfillmentModuleService, } from "@medusajs/types" import { @@ -20,6 +21,32 @@ import { } from "../../../../../../types/routing" import { AdminUpdateFulfillmentSetServiceZonesType } from "../../../validators" +export const GET = async ( + req: AuthenticatedMedusaRequest, + res: MedusaResponse +) => { + const remoteQuery = req.scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY) + + const [service_zone] = await remoteQuery( + remoteQueryObjectFromString({ + entryPoint: "service_zones", + variables: { + id: req.params.zone_id, + }, + fields: req.remoteQueryConfig.fields, + }) + ) + + if (!service_zone) { + throw new MedusaError( + MedusaError.Types.NOT_FOUND, + `Service zone with id ${req.params.zone_id} not found` + ) + } + + res.status(200).json({ service_zone }) +} + export const POST = async ( req: MedusaRequest, res: MedusaResponse diff --git a/packages/medusa/src/api-v2/admin/fulfillment-sets/middlewares.ts b/packages/medusa/src/api-v2/admin/fulfillment-sets/middlewares.ts index cac37205cc..899542b7d6 100644 --- a/packages/medusa/src/api-v2/admin/fulfillment-sets/middlewares.ts +++ b/packages/medusa/src/api-v2/admin/fulfillment-sets/middlewares.ts @@ -6,6 +6,7 @@ import * as QueryConfig from "./query-config" import { AdminCreateFulfillmentSetServiceZonesSchema, AdminFulfillmentSetParams, + AdminServiceZonesParams, AdminUpdateFulfillmentSetServiceZonesSchema, } from "./validators" @@ -42,4 +43,14 @@ export const adminFulfillmentSetsRoutesMiddlewares: MiddlewareRoute[] = [ ), ], }, + { + method: ["GET"], + matcher: "/admin/fulfillment-sets/:id/service-zones/:zone_id", + middlewares: [ + validateAndTransformQuery( + AdminServiceZonesParams, + QueryConfig.retrieveServiceZoneTransformQueryConfig + ), + ], + }, ] diff --git a/packages/medusa/src/api-v2/admin/fulfillment-sets/query-config.ts b/packages/medusa/src/api-v2/admin/fulfillment-sets/query-config.ts index fa9bf7bdb4..ca5084f7d9 100644 --- a/packages/medusa/src/api-v2/admin/fulfillment-sets/query-config.ts +++ b/packages/medusa/src/api-v2/admin/fulfillment-sets/query-config.ts @@ -18,3 +18,16 @@ export const listTransformQueryConfig = { ...retrieveTransformQueryConfig, isList: true, } + +export const retrieveServiceZoneTransformQueryConfig = { + defaults: [ + "id", + "name", + "type", + "created_at", + "updated_at", + "deleted_at", + "*geo_zones", + ], + isList: false, +} diff --git a/packages/medusa/src/api-v2/admin/fulfillment-sets/validators.ts b/packages/medusa/src/api-v2/admin/fulfillment-sets/validators.ts index 39195d216e..6b2ee46a3d 100644 --- a/packages/medusa/src/api-v2/admin/fulfillment-sets/validators.ts +++ b/packages/medusa/src/api-v2/admin/fulfillment-sets/validators.ts @@ -7,6 +7,11 @@ import { geoZoneZipSchema, } from "./validators/geo-zone" +export const AdminServiceZonesParams = createFindParams() +export type AdminServiceZonesParamsType = z.infer< + typeof AdminServiceZonesParams +> + export const AdminCreateFulfillmentSetServiceZonesSchema = z .object({ name: z.string(), diff --git a/packages/types/src/http/fulfillment/admin/fulfillment-set.ts b/packages/types/src/http/fulfillment/admin/fulfillment-set.ts index 04d6669bc2..2b932c55ce 100644 --- a/packages/types/src/http/fulfillment/admin/fulfillment-set.ts +++ b/packages/types/src/http/fulfillment/admin/fulfillment-set.ts @@ -1,4 +1,4 @@ -import { AdminServiceZoneResponse } from "./service-zone" +import { ServiceZoneResponse } from "./service-zone" /** * @experimental @@ -8,7 +8,7 @@ export interface FulfillmentSetResponse { name: string type: string metadata: Record | null - service_zones: AdminServiceZoneResponse[] + service_zones: ServiceZoneResponse[] created_at: Date updated_at: Date deleted_at: Date | null diff --git a/packages/types/src/http/fulfillment/admin/service-zone.ts b/packages/types/src/http/fulfillment/admin/service-zone.ts index d76334e259..36df1e0c8b 100644 --- a/packages/types/src/http/fulfillment/admin/service-zone.ts +++ b/packages/types/src/http/fulfillment/admin/service-zone.ts @@ -5,13 +5,7 @@ import { AdminGeoZoneResponse } from "./geo-zone" * @experimental */ export interface AdminServiceZoneResponse { - id: string - name: string - metadata: Record | null - geo_zones: AdminGeoZoneResponse[] - created_at: Date - updated_at: Date - deleted_at: Date | null + service_zone: ServiceZoneResponse } /** @@ -23,3 +17,16 @@ export interface AdminServiceZoneDeleteResponse { deleted: boolean parent: FulfillmentSetResponse } + +/** + * @experimental + */ +export interface ServiceZoneResponse { + id: string + name: string + metadata: Record | null + geo_zones: AdminGeoZoneResponse[] + created_at: Date + updated_at: Date + deleted_at: Date | null +}