feat(core-flows,fulfillment, fulfillment-manual, types): make fulfillment typings more specific (#10677)
**What** - attempt to add more specific type definitions around fulfillment provider APIs --- CLOSES CMRC-814 CLOSES CMRC-816 CLOSES CMRC-817
This commit is contained in:
@@ -17,6 +17,7 @@ import {
|
||||
SoftDeleteReturn,
|
||||
UpdateFulfillmentSetDTO,
|
||||
UpdateServiceZoneDTO,
|
||||
ValidateFulfillmentDataContext,
|
||||
} from "@medusajs/framework/types"
|
||||
import {
|
||||
arrayDifference,
|
||||
@@ -650,7 +651,7 @@ export default class FulfillmentModuleService
|
||||
fulfillmentData || {},
|
||||
items.map((i) => i),
|
||||
order,
|
||||
fulfillmentRest
|
||||
fulfillmentRest as unknown as Partial<FulfillmentDTO>
|
||||
)
|
||||
await this.fulfillmentService_.update(
|
||||
{
|
||||
@@ -710,11 +711,22 @@ export default class FulfillmentModuleService
|
||||
sharedContext
|
||||
)
|
||||
|
||||
const shippingOption = await this.shippingOptionService_.retrieve(
|
||||
fulfillment.shipping_option_id!,
|
||||
{
|
||||
select: ["id", "name", "data", "metadata"],
|
||||
},
|
||||
sharedContext
|
||||
)
|
||||
|
||||
try {
|
||||
const providerResult =
|
||||
await this.fulfillmentProviderService_.createReturn(
|
||||
fulfillment.provider_id!, // TODO: should we add a runtime check on provider_id being provided?,
|
||||
fulfillment as Record<any, any>
|
||||
{
|
||||
...fulfillment,
|
||||
shipping_option: shippingOption,
|
||||
} as Record<any, any>
|
||||
)
|
||||
await this.fulfillmentService_.update(
|
||||
{
|
||||
@@ -2002,7 +2014,7 @@ export default class FulfillmentModuleService
|
||||
providerId: string,
|
||||
optionData: Record<string, unknown>,
|
||||
data: Record<string, unknown>,
|
||||
context: Record<string, unknown>
|
||||
context: ValidateFulfillmentDataContext
|
||||
): Promise<Record<string, unknown>> {
|
||||
return await this.fulfillmentProviderService_.validateFulfillmentData(
|
||||
providerId,
|
||||
@@ -2012,6 +2024,7 @@ export default class FulfillmentModuleService
|
||||
)
|
||||
}
|
||||
|
||||
// TODO: seems not to be used, what is the purpose of this method?
|
||||
async validateFulfillmentOption(
|
||||
providerId: string,
|
||||
data: Record<string, unknown>
|
||||
@@ -2058,10 +2071,7 @@ export default class FulfillmentModuleService
|
||||
}
|
||||
|
||||
const promises = shippingOptionsData.map((option) =>
|
||||
this.fulfillmentProviderService_.canCalculate(
|
||||
option.provider_id,
|
||||
option as unknown as Record<string, unknown>
|
||||
)
|
||||
this.fulfillmentProviderService_.canCalculate(option.provider_id, option)
|
||||
)
|
||||
|
||||
return await promiseAll(promises)
|
||||
|
||||
@@ -1,11 +1,17 @@
|
||||
import {
|
||||
CalculateShippingOptionPriceDTO,
|
||||
Constructor,
|
||||
CreateFulfillmentResult,
|
||||
CreateShippingOptionDTO,
|
||||
DAL,
|
||||
FulfillmentDTO,
|
||||
FulfillmentItemDTO,
|
||||
FulfillmentOption,
|
||||
FulfillmentOrderDTO,
|
||||
FulfillmentTypes,
|
||||
IFulfillmentProvider,
|
||||
Logger,
|
||||
ValidateFulfillmentDataContext,
|
||||
} from "@medusajs/framework/types"
|
||||
import {
|
||||
MedusaError,
|
||||
@@ -91,7 +97,7 @@ export default class FulfillmentProviderService extends ModulesSdkUtils.MedusaIn
|
||||
providerId: string,
|
||||
optionData: Record<string, unknown>,
|
||||
data: Record<string, unknown>,
|
||||
context: Record<string, unknown>
|
||||
context: ValidateFulfillmentDataContext
|
||||
) {
|
||||
const provider = this.retrieveProviderRegistration(providerId)
|
||||
return await provider.validateFulfillmentData(optionData, data, context)
|
||||
@@ -102,7 +108,7 @@ export default class FulfillmentProviderService extends ModulesSdkUtils.MedusaIn
|
||||
return await provider.validateOption(data)
|
||||
}
|
||||
|
||||
async canCalculate(providerId: string, data: Record<string, unknown>) {
|
||||
async canCalculate(providerId: string, data: CreateShippingOptionDTO) {
|
||||
const provider = this.retrieveProviderRegistration(providerId)
|
||||
return await provider.canCalculate(data)
|
||||
}
|
||||
@@ -119,11 +125,11 @@ export default class FulfillmentProviderService extends ModulesSdkUtils.MedusaIn
|
||||
|
||||
async createFulfillment(
|
||||
providerId: string,
|
||||
data: object,
|
||||
items: object[],
|
||||
order: object | undefined,
|
||||
fulfillment: Record<string, unknown>
|
||||
): Promise<Record<string, unknown>> {
|
||||
data: Record<string, unknown>,
|
||||
items: Partial<Omit<FulfillmentItemDTO, "fulfillment">>[],
|
||||
order: Partial<FulfillmentOrderDTO> | undefined,
|
||||
fulfillment: Partial<Omit<FulfillmentDTO, "provider_id" | "data" | "items">>
|
||||
): Promise<CreateFulfillmentResult> {
|
||||
const provider = this.retrieveProviderRegistration(providerId)
|
||||
return await provider.createFulfillment(data, items, order, fulfillment)
|
||||
}
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
import { AbstractFulfillmentProviderService } from "@medusajs/framework/utils"
|
||||
import {
|
||||
CalculatedShippingOptionPrice,
|
||||
CalculateShippingOptionPriceContext,
|
||||
CreateFulfillmentResult,
|
||||
FulfillmentOption,
|
||||
ValidateFulfillmentDataContext,
|
||||
} from "@medusajs/types"
|
||||
|
||||
// TODO rework type and DTO's
|
||||
@@ -28,7 +31,7 @@ export class ManualFulfillmentService extends AbstractFulfillmentProviderService
|
||||
async validateFulfillmentData(
|
||||
optionData: Record<string, unknown>,
|
||||
data: Record<string, unknown>,
|
||||
context: Record<string, unknown>
|
||||
context: ValidateFulfillmentDataContext
|
||||
): Promise<any> {
|
||||
return data
|
||||
}
|
||||
@@ -36,7 +39,7 @@ export class ManualFulfillmentService extends AbstractFulfillmentProviderService
|
||||
async calculatePrice(
|
||||
optionData: Record<string, unknown>,
|
||||
data: Record<string, unknown>,
|
||||
context: Record<string, unknown>
|
||||
context: CalculateShippingOptionPriceContext
|
||||
): Promise<CalculatedShippingOptionPrice> {
|
||||
throw new Error("Manual fulfillment does not support price calculation")
|
||||
}
|
||||
@@ -49,16 +52,22 @@ export class ManualFulfillmentService extends AbstractFulfillmentProviderService
|
||||
return true
|
||||
}
|
||||
|
||||
async createFulfillment(): Promise<Record<string, any>> {
|
||||
async createFulfillment(): Promise<CreateFulfillmentResult> {
|
||||
// No data is being sent anywhere
|
||||
return {}
|
||||
return {
|
||||
data: {},
|
||||
labels: [],
|
||||
}
|
||||
}
|
||||
|
||||
async cancelFulfillment(): Promise<any> {
|
||||
return {}
|
||||
}
|
||||
|
||||
async createReturnFulfillment(): Promise<any> {
|
||||
return {}
|
||||
async createReturnFulfillment(): Promise<CreateFulfillmentResult> {
|
||||
return {
|
||||
data: {},
|
||||
labels: [],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user