Chore/rm main entity concept (#7709)
**What** Update the `MedusaService` class, factory and types to remove the concept of main modules. The idea being that all method will be explicitly named and suffixes to represent the object you are trying to manipulate. This pr also includes various fixes in different modules Co-authored-by: Stevche Radevski <4820812+sradevski@users.noreply.github.com> Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com>
This commit is contained in:
co-authored by
Stevche Radevski
Oli Juhl
parent
2895ccfba8
commit
48963f55ef
@@ -1,7 +1,7 @@
|
||||
import { moduleDefinition } from "./module-definition"
|
||||
import { ModuleExports } from "@medusajs/types"
|
||||
import { SalesChannelModuleService } from "@services"
|
||||
|
||||
const moduleDefinition: ModuleExports = {
|
||||
service: SalesChannelModuleService,
|
||||
}
|
||||
export default moduleDefinition
|
||||
|
||||
export * from "./types"
|
||||
export * from "./models"
|
||||
export * from "./services"
|
||||
|
||||
@@ -1,31 +1,11 @@
|
||||
import { Modules } from "@medusajs/modules-sdk"
|
||||
import { ModuleJoinerConfig } from "@medusajs/types"
|
||||
import { MapToConfig } from "@medusajs/utils"
|
||||
import { SalesChannel } from "@models"
|
||||
import {
|
||||
buildEntitiesNameToLinkableKeysMap,
|
||||
defineJoinerConfig,
|
||||
MapToConfig,
|
||||
} from "@medusajs/utils"
|
||||
|
||||
export const LinkableKeys = {
|
||||
sales_channel_id: SalesChannel.name,
|
||||
}
|
||||
export const joinerConfig = defineJoinerConfig(Modules.SALES_CHANNEL)
|
||||
|
||||
const entityLinkableKeysMap: MapToConfig = {}
|
||||
Object.entries(LinkableKeys).forEach(([key, value]) => {
|
||||
entityLinkableKeysMap[value] ??= []
|
||||
entityLinkableKeysMap[value].push({
|
||||
mapTo: key,
|
||||
valueFrom: key.split("_").pop()!,
|
||||
})
|
||||
})
|
||||
|
||||
export const entityNameToLinkableKeysMap: MapToConfig = entityLinkableKeysMap
|
||||
|
||||
export const joinerConfig: ModuleJoinerConfig = {
|
||||
serviceName: Modules.SALES_CHANNEL,
|
||||
primaryKeys: ["id"],
|
||||
linkableKeys: LinkableKeys,
|
||||
alias: [
|
||||
{
|
||||
name: ["sales_channel", "sales_channels"],
|
||||
args: { entity: "SalesChannel" },
|
||||
},
|
||||
],
|
||||
} as ModuleJoinerConfig
|
||||
export const entityNameToLinkableKeysMap: MapToConfig =
|
||||
buildEntitiesNameToLinkableKeysMap(joinerConfig.linkableKeys)
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
import { ModuleExports } from "@medusajs/types"
|
||||
import { SalesChannelModuleService } from "@services"
|
||||
|
||||
const service = SalesChannelModuleService
|
||||
|
||||
export const moduleDefinition: ModuleExports = {
|
||||
service,
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
import { ModulesSdkUtils } from "@medusajs/utils"
|
||||
import { Modules } from "@medusajs/modules-sdk"
|
||||
import * as ProductModels from "@models"
|
||||
import { createSalesChannels } from "../seed-utils"
|
||||
import { EOL } from "os"
|
||||
|
||||
const args = process.argv
|
||||
const path = args.pop() as string
|
||||
|
||||
export default (async () => {
|
||||
const { config } = await import("dotenv")
|
||||
config()
|
||||
if (!path) {
|
||||
throw new Error(
|
||||
`filePath is required.${EOL}Example: medusa-product-seed <filePath>`
|
||||
)
|
||||
}
|
||||
|
||||
const run = ModulesSdkUtils.buildSeedScript({
|
||||
moduleName: Modules.PRODUCT,
|
||||
models: ProductModels,
|
||||
pathToMigrations: __dirname + "/../../migrations",
|
||||
seedHandler: async ({ manager, data }) => {
|
||||
const { salesChannelData } = data
|
||||
await createSalesChannels(manager, salesChannelData)
|
||||
},
|
||||
})
|
||||
await run({ path })
|
||||
})()
|
||||
@@ -1,16 +0,0 @@
|
||||
import { SalesChannel } from "@models"
|
||||
import { RequiredEntityData } from "@mikro-orm/core"
|
||||
import { SqlEntityManager } from "@mikro-orm/postgresql"
|
||||
|
||||
export async function createSalesChannels(
|
||||
manager: SqlEntityManager,
|
||||
data: RequiredEntityData<SalesChannel>[]
|
||||
) {
|
||||
const channels = data.map((channel) => {
|
||||
return manager.create(SalesChannel, channel)
|
||||
})
|
||||
|
||||
await manager.persistAndFlush(channels)
|
||||
|
||||
return channels
|
||||
}
|
||||
@@ -15,7 +15,7 @@ import {
|
||||
InjectTransactionManager,
|
||||
isString,
|
||||
MedusaContext,
|
||||
ModulesSdkUtils,
|
||||
MedusaService,
|
||||
promiseAll,
|
||||
} from "@medusajs/utils"
|
||||
|
||||
@@ -30,18 +30,15 @@ type InjectedDependencies = {
|
||||
salesChannelService: ModulesSdkTypes.IMedusaInternalService<any>
|
||||
}
|
||||
|
||||
export default class SalesChannelModuleService<
|
||||
TEntity extends SalesChannel = SalesChannel
|
||||
>
|
||||
extends ModulesSdkUtils.MedusaService<SalesChannelDTO>(
|
||||
SalesChannel,
|
||||
{},
|
||||
export default class SalesChannelModuleService
|
||||
extends MedusaService<{ SalesChannel: { dto: SalesChannelDTO } }>(
|
||||
{ SalesChannel },
|
||||
entityNameToLinkableKeysMap
|
||||
)
|
||||
implements ISalesChannelModuleService
|
||||
{
|
||||
protected baseRepository_: DAL.RepositoryService
|
||||
protected readonly salesChannelService_: ModulesSdkTypes.IMedusaInternalService<TEntity>
|
||||
protected readonly salesChannelService_: ModulesSdkTypes.IMedusaInternalService<SalesChannel>
|
||||
|
||||
constructor(
|
||||
{ baseRepository, salesChannelService }: InjectedDependencies,
|
||||
@@ -57,22 +54,24 @@ export default class SalesChannelModuleService<
|
||||
return joinerConfig
|
||||
}
|
||||
|
||||
async create(
|
||||
// @ts-expect-error
|
||||
async createSalesChannels(
|
||||
data: CreateSalesChannelDTO[],
|
||||
sharedContext?: Context
|
||||
): Promise<SalesChannelDTO[]>
|
||||
async create(
|
||||
async createSalesChannels(
|
||||
data: CreateSalesChannelDTO,
|
||||
sharedContext?: Context
|
||||
): Promise<SalesChannelDTO>
|
||||
|
||||
@InjectManager("baseRepository_")
|
||||
async create(
|
||||
async createSalesChannels(
|
||||
data: CreateSalesChannelDTO | CreateSalesChannelDTO[],
|
||||
@MedusaContext() sharedContext: Context = {}
|
||||
): Promise<SalesChannelDTO | SalesChannelDTO[]> {
|
||||
const input = Array.isArray(data) ? data : [data]
|
||||
|
||||
const result = await this.create_(input, sharedContext)
|
||||
const result = await this.createSalesChannels_(input, sharedContext)
|
||||
|
||||
return await this.baseRepository_.serialize<SalesChannelDTO[]>(
|
||||
Array.isArray(data) ? result : result[0],
|
||||
@@ -83,25 +82,27 @@ export default class SalesChannelModuleService<
|
||||
}
|
||||
|
||||
@InjectTransactionManager("baseRepository_")
|
||||
async create_(
|
||||
async createSalesChannels_(
|
||||
data: CreateSalesChannelDTO[],
|
||||
@MedusaContext() sharedContext: Context
|
||||
): Promise<SalesChannel[]> {
|
||||
return await this.salesChannelService_.create(data, sharedContext)
|
||||
}
|
||||
|
||||
async update(
|
||||
// @ts-expect-error
|
||||
async updateSalesChannels(
|
||||
id: string,
|
||||
data: UpdateSalesChannelDTO,
|
||||
sharedContext?: Context
|
||||
): Promise<SalesChannelDTO>
|
||||
async update(
|
||||
async updateSalesChannels(
|
||||
selector: FilterableSalesChannelProps,
|
||||
data: UpdateSalesChannelDTO,
|
||||
sharedContext?: Context
|
||||
): Promise<SalesChannelDTO[]>
|
||||
|
||||
@InjectManager("baseRepository_")
|
||||
async update(
|
||||
async updateSalesChannels(
|
||||
idOrSelector: string | FilterableSalesChannelProps,
|
||||
data: UpdateSalesChannelDTO | UpdateSalesChannelDTO[],
|
||||
@MedusaContext() sharedContext: Context = {}
|
||||
@@ -122,7 +123,10 @@ export default class SalesChannelModuleService<
|
||||
}))
|
||||
}
|
||||
|
||||
const result = await this.update_(normalizedInput, sharedContext)
|
||||
const result = await this.updateSalesChannels_(
|
||||
normalizedInput,
|
||||
sharedContext
|
||||
)
|
||||
|
||||
return await this.baseRepository_.serialize<SalesChannelDTO[]>(
|
||||
Array.isArray(data) ? result : result[0],
|
||||
@@ -133,20 +137,23 @@ export default class SalesChannelModuleService<
|
||||
}
|
||||
|
||||
@InjectTransactionManager("baseRepository_")
|
||||
async update_(data: UpdateSalesChannelDTO[], sharedContext: Context) {
|
||||
async updateSalesChannels_(
|
||||
data: UpdateSalesChannelDTO[],
|
||||
sharedContext: Context
|
||||
) {
|
||||
return await this.salesChannelService_.update(data, sharedContext)
|
||||
}
|
||||
|
||||
async upsert(
|
||||
async upsertSalesChannels(
|
||||
data: UpsertSalesChannelDTO[],
|
||||
sharedContext?: Context
|
||||
): Promise<SalesChannelDTO[]>
|
||||
async upsert(
|
||||
async upsertSalesChannels(
|
||||
data: UpsertSalesChannelDTO,
|
||||
sharedContext?: Context
|
||||
): Promise<SalesChannelDTO>
|
||||
@InjectTransactionManager("baseRepository_")
|
||||
async upsert(
|
||||
async upsertSalesChannels(
|
||||
data: UpsertSalesChannelDTO | UpsertSalesChannelDTO[],
|
||||
@MedusaContext() sharedContext: Context = {}
|
||||
): Promise<SalesChannelDTO | SalesChannelDTO[]> {
|
||||
@@ -161,10 +168,10 @@ export default class SalesChannelModuleService<
|
||||
const operations: Promise<SalesChannel[]>[] = []
|
||||
|
||||
if (forCreate.length) {
|
||||
operations.push(this.create_(forCreate, sharedContext))
|
||||
operations.push(this.createSalesChannels_(forCreate, sharedContext))
|
||||
}
|
||||
if (forUpdate.length) {
|
||||
operations.push(this.update_(forUpdate, sharedContext))
|
||||
operations.push(this.updateSalesChannels_(forUpdate, sharedContext))
|
||||
}
|
||||
|
||||
const result = (await promiseAll(operations)).flat()
|
||||
|
||||
Reference in New Issue
Block a user