feat(region): Region create, delete, update admin endpoints (#6332)
**What** Add `POST /admin/regions` Add `POST /admin/regions/:id` Add `DELETE /admin/regions/:id` All are added for v2 using API Routes and workflows. In follow-up PRs, I will add support for passing countries in update and create. Update: First follow-up PR is #6372
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
export * from "./customer"
|
||||
export * from "./customer-group"
|
||||
export * from "./definition"
|
||||
export * from "./definitions"
|
||||
export * as Handlers from "./handlers"
|
||||
export * from "./promotion"
|
||||
export * from "./customer"
|
||||
export * from "./customer-group"
|
||||
export * from "./user"
|
||||
export * from "./invite"
|
||||
export * from "./promotion"
|
||||
export * from "./region"
|
||||
export * from "./user"
|
||||
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
export * from "./steps"
|
||||
export * from "./workflows"
|
||||
@@ -0,0 +1,31 @@
|
||||
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
|
||||
import { CreateRegionDTO, IRegionModuleService } from "@medusajs/types"
|
||||
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
|
||||
|
||||
export const createRegionsStepId = "create-regions"
|
||||
export const createRegionsStep = createStep(
|
||||
createRegionsStepId,
|
||||
async (data: CreateRegionDTO[], { container }) => {
|
||||
const service = container.resolve<IRegionModuleService>(
|
||||
ModuleRegistrationName.REGION
|
||||
)
|
||||
|
||||
const created = await service.create(data)
|
||||
|
||||
return new StepResponse(
|
||||
created,
|
||||
created.map((region) => region.id)
|
||||
)
|
||||
},
|
||||
async (createdIds, { container }) => {
|
||||
if (!createdIds?.length) {
|
||||
return
|
||||
}
|
||||
|
||||
const service = container.resolve<IRegionModuleService>(
|
||||
ModuleRegistrationName.REGION
|
||||
)
|
||||
|
||||
await service.delete(createdIds)
|
||||
}
|
||||
)
|
||||
@@ -0,0 +1,28 @@
|
||||
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
|
||||
import { IRegionModuleService } from "@medusajs/types"
|
||||
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
|
||||
|
||||
export const deleteRegionsStepId = "delete-regions"
|
||||
export const deleteRegionsStep = createStep(
|
||||
deleteRegionsStepId,
|
||||
async (ids: string[], { container }) => {
|
||||
const service = container.resolve<IRegionModuleService>(
|
||||
ModuleRegistrationName.REGION
|
||||
)
|
||||
|
||||
await service.softDelete(ids)
|
||||
|
||||
return new StepResponse(void 0, ids)
|
||||
},
|
||||
async (prevIds, { container }) => {
|
||||
if (!prevIds?.length) {
|
||||
return
|
||||
}
|
||||
|
||||
const service = container.resolve<IRegionModuleService>(
|
||||
ModuleRegistrationName.REGION
|
||||
)
|
||||
|
||||
await service.restore(prevIds)
|
||||
}
|
||||
)
|
||||
@@ -0,0 +1,3 @@
|
||||
export * from "./create-regions"
|
||||
export * from "./delete-regions"
|
||||
export * from "./update-regions"
|
||||
@@ -0,0 +1,54 @@
|
||||
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
|
||||
import {
|
||||
FilterableRegionProps,
|
||||
IRegionModuleService,
|
||||
UpdatableRegionFields,
|
||||
} from "@medusajs/types"
|
||||
import { getSelectsAndRelationsFromObjectArray } from "@medusajs/utils"
|
||||
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
|
||||
|
||||
type UpdateRegionsStepInput = {
|
||||
selector: FilterableRegionProps
|
||||
update: UpdatableRegionFields
|
||||
}
|
||||
|
||||
export const updateRegionsStepId = "update-region"
|
||||
export const updateRegionsStep = createStep(
|
||||
updateRegionsStepId,
|
||||
async (data: UpdateRegionsStepInput, { container }) => {
|
||||
const service = container.resolve<IRegionModuleService>(
|
||||
ModuleRegistrationName.REGION
|
||||
)
|
||||
|
||||
const { selects, relations } = getSelectsAndRelationsFromObjectArray([
|
||||
data.update,
|
||||
])
|
||||
|
||||
const prevData = await service.list(data.selector, {
|
||||
select: selects,
|
||||
relations,
|
||||
})
|
||||
|
||||
const regions = await service.update(data.selector, data.update)
|
||||
|
||||
return new StepResponse(regions, prevData)
|
||||
},
|
||||
async (prevData, { container }) => {
|
||||
if (!prevData?.length) {
|
||||
return
|
||||
}
|
||||
|
||||
const service = container.resolve<IRegionModuleService>(
|
||||
ModuleRegistrationName.REGION
|
||||
)
|
||||
|
||||
await service.update(
|
||||
prevData.map((r) => ({
|
||||
id: r.id,
|
||||
name: r.name,
|
||||
currency_code: r.currency_code,
|
||||
metadata: r.metadata,
|
||||
}))
|
||||
)
|
||||
}
|
||||
)
|
||||
@@ -0,0 +1,13 @@
|
||||
import { CreateRegionDTO, RegionDTO } from "@medusajs/types"
|
||||
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk"
|
||||
import { createRegionsStep } from "../steps"
|
||||
|
||||
type WorkflowInput = { regionsData: CreateRegionDTO[] }
|
||||
|
||||
export const createRegionsWorkflowId = "create-regions"
|
||||
export const createRegionsWorkflow = createWorkflow(
|
||||
createRegionsWorkflowId,
|
||||
(input: WorkflowData<WorkflowInput>): WorkflowData<RegionDTO[]> => {
|
||||
return createRegionsStep(input.regionsData)
|
||||
}
|
||||
)
|
||||
@@ -0,0 +1,12 @@
|
||||
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk"
|
||||
import { deleteRegionsStep } from "../steps"
|
||||
|
||||
type WorkflowInput = { ids: string[] }
|
||||
|
||||
export const deleteRegionsWorkflowId = "delete-regions"
|
||||
export const deleteRegionsWorkflow = createWorkflow(
|
||||
deleteRegionsWorkflowId,
|
||||
(input: WorkflowData<WorkflowInput>): WorkflowData<void> => {
|
||||
return deleteRegionsStep(input.ids)
|
||||
}
|
||||
)
|
||||
@@ -0,0 +1,3 @@
|
||||
export * from "./create-regions"
|
||||
export * from "./delete-regions"
|
||||
export * from "./update-regions"
|
||||
@@ -0,0 +1,22 @@
|
||||
import {
|
||||
FilterableRegionProps,
|
||||
RegionDTO,
|
||||
UpdatableRegionFields,
|
||||
} from "@medusajs/types"
|
||||
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk"
|
||||
import { updateRegionsStep } from "../steps"
|
||||
|
||||
type UpdateRegionsStepInput = {
|
||||
selector: FilterableRegionProps
|
||||
update: UpdatableRegionFields
|
||||
}
|
||||
|
||||
type WorkflowInput = UpdateRegionsStepInput
|
||||
|
||||
export const updateRegionsWorkflowId = "update-regions"
|
||||
export const updateRegionsWorkflow = createWorkflow(
|
||||
updateRegionsWorkflowId,
|
||||
(input: WorkflowData<WorkflowInput>): WorkflowData<RegionDTO[]> => {
|
||||
return updateRegionsStep(input)
|
||||
}
|
||||
)
|
||||
Reference in New Issue
Block a user