feat(cart): Partial module service implementation (#6012)

Awaiting #6000 #6008  

**What**
- CRUD for Address in Cart Module service
- Tests for CRUD Carts + Address

**Not**
- Line items, shipping methods, tax lines, adjustment lines
This commit is contained in:
Oli Juhl
2024-01-12 10:30:57 +00:00
committed by GitHub
parent 8472460f53
commit 192bc336cc
16 changed files with 433 additions and 39 deletions
+98 -9
View File
@@ -1,4 +1,6 @@
import {
AddressDTO,
CartAddressDTO,
CartDTO,
Context,
CreateCartDTO,
@@ -11,11 +13,13 @@ import {
UpdateCartDTO,
} from "@medusajs/types"
import { FilterableAddressProps } from "@medusajs/types"
import {
InjectManager,
InjectTransactionManager,
MedusaContext,
} from "@medusajs/utils"
import { CreateAddressDTO, UpdateAddressDTO } from "@types"
import { joinerConfig } from "../joiner-config"
import AddressService from "./address"
import CartService from "./cart"
@@ -32,10 +36,12 @@ export default class CartModuleService implements ICartModuleService {
protected addressService_: AddressService
constructor(
{ baseRepository }: InjectedDependencies,
{ baseRepository, cartService, addressService }: InjectedDependencies,
protected readonly moduleDeclaration: InternalModuleDeclaration
) {
this.baseRepository_ = baseRepository
this.cartService_ = cartService
this.addressService_ = addressService
}
__joinerConfig(): ModuleJoinerConfig {
@@ -157,15 +163,9 @@ export default class CartModuleService implements ICartModuleService {
return await this.cartService_.update(data, sharedContext)
}
async delete(
ids: string[],
sharedContext?: Context
): Promise<void>
async delete(ids: string[], sharedContext?: Context): Promise<void>
async delete(
ids: string,
sharedContext?: Context
): Promise<void>
async delete(ids: string, sharedContext?: Context): Promise<void>
@InjectTransactionManager("baseRepository_")
async delete(
@@ -175,4 +175,93 @@ export default class CartModuleService implements ICartModuleService {
const cartIds = Array.isArray(ids) ? ids : [ids]
await this.cartService_.delete(cartIds, sharedContext)
}
@InjectManager("baseRepository_")
async listAddresses(
filters: FilterableAddressProps = {},
config: FindConfig<AddressDTO> = {},
@MedusaContext() sharedContext: Context = {}
) {
const addresses = await this.addressService_.list(
filters,
config,
sharedContext
)
return await this.baseRepository_.serialize<CartAddressDTO[]>(addresses, {
populate: true,
})
}
async createAddresses(data: CreateAddressDTO, sharedContext?: Context)
async createAddresses(data: CreateAddressDTO[], sharedContext?: Context)
@InjectManager("baseRepository_")
async createAddresses(
data: CreateAddressDTO[] | CreateAddressDTO,
@MedusaContext() sharedContext: Context = {}
) {
const input = Array.isArray(data) ? data : [data]
const addresses = await this.createAddresses_(input, sharedContext)
const result = await this.listAddresses(
{ id: addresses.map((p) => p.id) },
{},
sharedContext
)
return (Array.isArray(data) ? result : result[0]) as
| AddressDTO
| AddressDTO[]
}
@InjectTransactionManager("baseRepository_")
protected async createAddresses_(
data: CreateAddressDTO[],
@MedusaContext() sharedContext: Context = {}
) {
return await this.addressService_.create(data, sharedContext)
}
async updateAddresses(data: UpdateAddressDTO, sharedContext?: Context)
async updateAddresses(data: UpdateAddressDTO[], sharedContext?: Context)
@InjectManager("baseRepository_")
async updateAddresses(
data: UpdateAddressDTO[] | UpdateAddressDTO,
@MedusaContext() sharedContext: Context = {}
) {
const input = Array.isArray(data) ? data : [data]
const addresses = await this.updateAddresses_(input, sharedContext)
const result = await this.listAddresses(
{ id: addresses.map((p) => p.id) },
{},
sharedContext
)
return (Array.isArray(data) ? result : result[0]) as
| AddressDTO
| AddressDTO[]
}
@InjectTransactionManager("baseRepository_")
protected async updateAddresses_(
data: UpdateAddressDTO[],
@MedusaContext() sharedContext: Context = {}
) {
return await this.addressService_.update(data, sharedContext)
}
async deleteAddresses(ids: string[], sharedContext?: Context)
async deleteAddresses(ids: string, sharedContext?: Context)
@InjectTransactionManager("baseRepository_")
async deleteAddresses(
ids: string[] | string,
@MedusaContext() sharedContext: Context = {}
) {
const addressIds = Array.isArray(ids) ? ids : [ids]
await this.addressService_.delete(addressIds, sharedContext)
}
}