feat: Add basic endpoints and workflows for Store module (#6515)

This commit is contained in:
Stevche Radevski
2024-02-28 11:08:11 +01:00
committed by GitHub
parent 70aeb602c9
commit d60f3adc03
26 changed files with 596 additions and 13 deletions

View File

@@ -8,3 +8,4 @@ export * from "./promotion"
export * from "./region"
export * from "./user"
export * from "./api-key"
export * from "./store"

View File

@@ -0,0 +1,2 @@
export * from "./steps"
export * from "./workflows"

View File

@@ -0,0 +1,34 @@
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
import { CreateStoreDTO, IStoreModuleService } from "@medusajs/types"
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
type CreateStoresStepInput = {
stores: CreateStoreDTO[]
}
export const createStoresStepId = "create-stores"
export const createStoresStep = createStep(
createStoresStepId,
async (data: CreateStoresStepInput, { container }) => {
const service = container.resolve<IStoreModuleService>(
ModuleRegistrationName.STORE
)
const created = await service.create(data.stores)
return new StepResponse(
created,
created.map((store) => store.id)
)
},
async (createdIds, { container }) => {
if (!createdIds?.length) {
return
}
const service = container.resolve<IStoreModuleService>(
ModuleRegistrationName.STORE
)
await service.delete(createdIds)
}
)

View File

@@ -0,0 +1,27 @@
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
import { IStoreModuleService } from "@medusajs/types"
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
export const deleteStoresStepId = "delete-stores"
export const deleteStoresStep = createStep(
deleteStoresStepId,
async (ids: string[], { container }) => {
const storeModule = container.resolve<IStoreModuleService>(
ModuleRegistrationName.STORE
)
await storeModule.softDelete(ids)
return new StepResponse(void 0, ids)
},
async (idsToRestore, { container }) => {
if (!idsToRestore?.length) {
return
}
const storeModule = container.resolve<IStoreModuleService>(
ModuleRegistrationName.STORE
)
await storeModule.restore(idsToRestore)
}
)

View File

@@ -0,0 +1,3 @@
export * from "./create-stores"
export * from "./delete-stores"
export * from "./update-stores"

View File

@@ -0,0 +1,51 @@
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
import {
FilterableStoreProps,
IStoreModuleService,
UpdateStoreDTO,
} from "@medusajs/types"
import { getSelectsAndRelationsFromObjectArray } from "@medusajs/utils"
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
type UpdateStoresStepInput = {
selector: FilterableStoreProps
update: UpdateStoreDTO
}
export const updateStoresStepId = "update-stores"
export const updateStoresStep = createStep(
updateStoresStepId,
async (data: UpdateStoresStepInput, { container }) => {
const service = container.resolve<IStoreModuleService>(
ModuleRegistrationName.STORE
)
const { selects, relations } = getSelectsAndRelationsFromObjectArray([
data.update,
])
const prevData = await service.list(data.selector, {
select: selects,
relations,
})
const stores = await service.update(data.selector, data.update)
return new StepResponse(stores, prevData)
},
async (prevData, { container }) => {
if (!prevData?.length) {
return
}
const service = container.resolve<IStoreModuleService>(
ModuleRegistrationName.STORE
)
await service.upsert(
prevData.map((r) => ({
...r,
metadata: r.metadata || undefined,
}))
)
}
)

View File

@@ -0,0 +1,13 @@
import { StoreDTO, CreateStoreDTO } from "@medusajs/types"
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk"
import { createStoresStep } from "../steps"
type WorkflowInput = { stores: CreateStoreDTO[] }
export const createStoresWorkflowId = "create-stores"
export const createStoresWorkflow = createWorkflow(
createStoresWorkflowId,
(input: WorkflowData<WorkflowInput>): WorkflowData<StoreDTO[]> => {
return createStoresStep(input)
}
)

View File

@@ -0,0 +1,12 @@
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk"
import { deleteStoresStep } from "../steps"
type WorkflowInput = { ids: string[] }
export const deleteStoresWorkflowId = "delete-stores"
export const deleteStoresWorkflow = createWorkflow(
deleteStoresWorkflowId,
(input: WorkflowData<WorkflowInput>): WorkflowData<void> => {
return deleteStoresStep(input.ids)
}
)

View File

@@ -0,0 +1,3 @@
export * from "./create-stores"
export * from "./delete-stores"
export * from "./update-stores"

View File

@@ -0,0 +1,18 @@
import { StoreDTO, FilterableStoreProps, UpdateStoreDTO } from "@medusajs/types"
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk"
import { updateStoresStep } from "../steps"
type UpdateStoresStepInput = {
selector: FilterableStoreProps
update: UpdateStoreDTO
}
type WorkflowInput = UpdateStoresStepInput
export const updateStoresWorkflowId = "update-stores"
export const updateStoresWorkflow = createWorkflow(
updateStoresWorkflowId,
(input: WorkflowData<WorkflowInput>): WorkflowData<StoreDTO[]> => {
return updateStoresStep(input)
}
)