feat(types, product, utils, medusa): Include shared connection for modules (#4626)

This commit is contained in:
Adrien de Peretti authored and GitHub committed 2023-08-08 15:10:34 +00:00
1 parent a2d7540e40
commit 3f3a84262c
26 files changed
+476 -168

No files matched your search

+2 -1
View File
@@ -13,7 +13,8 @@ export const initialize = async (
options?:
| ModulesSdkTypes.ModuleServiceInitializeOptions
| ModulesSdkTypes.ModuleServiceInitializeCustomDataLayerOptions
| ExternalModuleDeclaration,
| ExternalModuleDeclaration
| InternalModuleDeclaration,
injectedDependencies?: InitializeModuleInjectableDependencies
): Promise<IProductModuleService> => {
const serviceKey = Modules.PRODUCT
+11 -52
View File
@@ -1,68 +1,27 @@
import { asValue } from "awilix"
import {
InternalModuleDeclaration,
LoaderOptions,
MODULE_RESOURCE_TYPE,
MODULE_SCOPE,
} from "@medusajs/modules-sdk"
import { DALUtils, MedusaError, ModulesSdkUtils } from "@medusajs/utils"
import { InternalModuleDeclaration, LoaderOptions } from "@medusajs/modules-sdk"
import { ModulesSdkTypes } from "@medusajs/types"
import { ModulesSdkUtils } from "@medusajs/utils"
import * as ProductModels from "../models"
import { EntitySchema } from "@mikro-orm/core"
import * as ProductModels from "@models"
import { ConfigModule, ModulesSdkTypes } from "@medusajs/types"
export default async (
{
options,
container,
logger,
}: LoaderOptions<
| ModulesSdkTypes.ModuleServiceInitializeOptions
| ModulesSdkTypes.ModuleServiceInitializeCustomDataLayerOptions
>,
moduleDeclaration?: InternalModuleDeclaration
): Promise<void> => {
if (
moduleDeclaration?.scope === MODULE_SCOPE.INTERNAL &&
moduleDeclaration.resources === MODULE_RESOURCE_TYPE.SHARED
) {
const { projectConfig } = container.resolve("configModule") as ConfigModule
options = {
database: {
clientUrl: projectConfig.database_url!,
driverOptions: projectConfig.database_extra!,
schema: projectConfig.database_schema!,
},
}
}
const customManager = (
options as ModulesSdkTypes.ModuleServiceInitializeCustomDataLayerOptions
)?.manager
if (!customManager) {
const dbData = ModulesSdkUtils.loadDatabaseConfig("product", options)
await loadDefault({ database: dbData, container })
} else {
container.register({
manager: asValue(customManager),
})
}
}
async function loadDefault({ database, container }) {
if (!database) {
throw new MedusaError(
MedusaError.Types.INVALID_ARGUMENT,
`Database config is not present at module config "options.database"`
)
}
const entities = Object.values(ProductModels) as unknown as EntitySchema[]
const orm = await DALUtils.mikroOrmCreateConnection(database, entities)
container.register({
manager: asValue(orm.em.fork()),
await ModulesSdkUtils.mikroOrmConnectionLoader({
entities,
container,
options,
moduleDeclaration,
logger,
})
}
+2 -2
View File
@@ -51,9 +51,9 @@ export default async ({
})
if (customRepositories) {
await loadCustomRepositories({ customRepositories, container })
loadCustomRepositories({ customRepositories, container })
} else {
await loadDefaultRepositories({ container })
loadDefaultRepositories({ container })
}
}
@@ -16,15 +16,12 @@ export async function revertMigration({
options,
logger,
}: Pick<
LoaderOptions<
| ModulesSdkTypes.ModuleServiceInitializeOptions
| ModulesSdkTypes.ModuleServiceInitializeCustomDataLayerOptions
>,
LoaderOptions<ModulesSdkTypes.ModuleServiceInitializeOptions>,
"options" | "logger"
> = {}) {
logger ??= console as unknown as Logger
const dbData = ModulesSdkUtils.loadDatabaseConfig("product", options)
const dbData = ModulesSdkUtils.loadDatabaseConfig("product", options)!
const entities = Object.values(ProductModels) as unknown as EntitySchema[]
const orm = await DALUtils.mikroOrmCreateConnection(dbData, entities)
+2 -5
View File
@@ -14,15 +14,12 @@ export async function runMigrations({
options,
logger,
}: Pick<
LoaderOptions<
| ModulesSdkTypes.ModuleServiceInitializeOptions
| ModulesSdkTypes.ModuleServiceInitializeCustomDataLayerOptions
>,
LoaderOptions<ModulesSdkTypes.ModuleServiceInitializeOptions>,
"options" | "logger"
> = {}) {
logger ??= console as unknown as Logger
const dbData = ModulesSdkUtils.loadDatabaseConfig("product", options)
const dbData = ModulesSdkUtils.loadDatabaseConfig("product", options)!
const entities = Object.values(ProductModels) as unknown as EntitySchema[]
const orm = await DALUtils.mikroOrmCreateConnection(dbData, entities)
+2 -5
View File
@@ -13,10 +13,7 @@ export async function run({
path,
}: Partial<
Pick<
LoaderOptions<
| ModulesSdkTypes.ModuleServiceInitializeOptions
| ModulesSdkTypes.ModuleServiceInitializeCustomDataLayerOptions
>,
LoaderOptions<ModulesSdkTypes.ModuleServiceInitializeOptions>,
"options" | "logger"
>
> & {
@@ -34,7 +31,7 @@ export async function run({
logger ??= console as unknown as Logger
const dbData = ModulesSdkUtils.loadDatabaseConfig("product", options)
const dbData = ModulesSdkUtils.loadDatabaseConfig("product", options)!
const entities = Object.values(ProductModels) as unknown as EntitySchema[]
const orm = await DALUtils.mikroOrmCreateConnection(dbData, entities)
@@ -22,10 +22,10 @@ import {
CreateProductOnlyDTO,
DAL,
FindConfig,
IEventBusModuleService,
InternalModuleDeclaration,
JoinerServiceConfig,
ProductTypes,
IEventBusModuleService,
} from "@medusajs/types"
import ProductImageService from "./product-image"
@@ -739,12 +739,6 @@ export default class ProductModuleService<
productVariantsMap.set(productData.handle!, variants ?? [])
productOptionsMap.set(productData.handle!, options ?? [])
if (!productData.thumbnail && productData.images?.length) {
productData.thumbnail = isString(productData.images[0])
? (productData.images[0] as string)
: (productData.images[0] as { url: string }).url
}
if (productData.is_giftcard) {
productData.discountable = false
}
@@ -1084,7 +1078,7 @@ export default class ProductModuleService<
},
sharedContext: Context = {}
): Promise<Record<Lowercase<keyof typeof LinkableKeys>, string[]> | void> {
let [products, cascadedEntitiesMap] = await this.softDelete_(
const [products, cascadedEntitiesMap] = await this.softDelete_(
productIds,
sharedContext
)
+2 -1
View File
@@ -1,8 +1,9 @@
export * from "./services"
import { IEventBusModuleService } from "@medusajs/types"
import { IEventBusModuleService, Logger } from "@medusajs/types"
export type InitializeModuleInjectableDependencies = {
logger?: Logger
eventBusModuleService?: IEventBusModuleService
}