feat(cart): POST /store/carts/:id (#6274)

Depends on:
- #6262 
- #6273
This commit is contained in:
Oli Juhl
2024-02-14 15:03:02 +00:00
committed by GitHub
parent 6500f18b9b
commit 1ed5f918c3
17 changed files with 378 additions and 49 deletions
+52 -21
View File
@@ -190,43 +190,74 @@ export default class CartModuleService<
return createdCarts
}
async update(data: CartTypes.UpdateCartDTO[]): Promise<CartTypes.CartDTO[]>
async update(
data: CartTypes.UpdateCartDTO[],
cartId: string,
data: CartTypes.UpdateCartDataDTO,
sharedContext?: Context
): Promise<CartTypes.CartDTO>
async update(
selector: Partial<CartTypes.CartDTO>,
data: CartTypes.UpdateCartDataDTO,
sharedContext?: Context
): Promise<CartTypes.CartDTO[]>
async update(
data: CartTypes.UpdateCartDTO,
sharedContext?: Context
): Promise<CartTypes.CartDTO>
@InjectManager("baseRepository_")
async update(
data: CartTypes.UpdateCartDTO[] | CartTypes.UpdateCartDTO,
dataOrIdOrSelector:
| CartTypes.UpdateCartDTO[]
| string
| Partial<CartTypes.CartDTO>,
data?: CartTypes.UpdateCartDataDTO,
@MedusaContext() sharedContext: Context = {}
): Promise<CartTypes.CartDTO[] | CartTypes.CartDTO> {
const input = Array.isArray(data) ? data : [data]
const carts = await this.update_(input, sharedContext)
const result = await this.update_(dataOrIdOrSelector, data, sharedContext)
const result = await this.list(
{ id: carts.map((p) => p!.id) },
{
relations: ["shipping_address", "billing_address"],
},
sharedContext
)
const serializedResult = await this.baseRepository_.serialize<
CartTypes.CartDTO[]
>(result, {
populate: true,
})
return (Array.isArray(data) ? result : result[0]) as
| CartTypes.CartDTO
| CartTypes.CartDTO[]
return isString(dataOrIdOrSelector) ? serializedResult[0] : serializedResult
}
@InjectTransactionManager("baseRepository_")
protected async update_(
data: CartTypes.UpdateCartDTO[],
dataOrIdOrSelector:
| CartTypes.UpdateCartDTO[]
| string
| Partial<CartTypes.CartDTO>,
data?: CartTypes.UpdateCartDataDTO,
@MedusaContext() sharedContext: Context = {}
) {
return await this.cartService_.update(data, sharedContext)
let toUpdate: CartTypes.UpdateCartDTO[] = []
if (isString(dataOrIdOrSelector)) {
toUpdate = [
{
id: dataOrIdOrSelector,
...data,
},
]
} else if (Array.isArray(dataOrIdOrSelector)) {
toUpdate = dataOrIdOrSelector
} else {
const carts = await this.cartService_.list(
{ ...dataOrIdOrSelector },
{ select: ["id"] },
sharedContext
)
toUpdate = carts.map((cart) => {
return {
...data,
id: cart.id,
}
})
}
const result = await this.cartService_.update(toUpdate, sharedContext)
return result
}
addLineItems(