chore: Hide repository creation if they are not custom + add upsert support by default (#6127)
This commit is contained in:
1 parent
8a8a7183b8
commit
5e655dd59b
124 files changed
+1516
-2559
No files matched your search
@@ -1,7 +1,9 @@
|
||||
import { SqlEntityManager } from "@mikro-orm/postgresql"
|
||||
import { AddressRepository } from "../../../../src/repositories"
|
||||
import { AddressService } from "../../../../src/services"
|
||||
import { MikroOrmWrapper } from "../../../utils"
|
||||
import { createMedusaContainer } from "@medusajs/utils"
|
||||
import { asValue } from "awilix"
|
||||
import ContainerLoader from "../../../../src/loaders/container"
|
||||
|
||||
jest.setTimeout(30000)
|
||||
|
||||
@@ -15,13 +17,12 @@ describe("Address Service", () => {
|
||||
repositoryManager = await MikroOrmWrapper.forkManager()
|
||||
testManager = await MikroOrmWrapper.forkManager()
|
||||
|
||||
const addressRepository = new AddressRepository({
|
||||
manager: repositoryManager,
|
||||
})
|
||||
const container = createMedusaContainer()
|
||||
container.register("manager", asValue(repositoryManager))
|
||||
|
||||
service = new AddressService({
|
||||
addressRepository: addressRepository,
|
||||
})
|
||||
await ContainerLoader({ container })
|
||||
|
||||
service = container.resolve("addressService")
|
||||
})
|
||||
|
||||
afterEach(async () => {
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
import { SqlEntityManager } from "@mikro-orm/postgresql"
|
||||
import { CartRepository } from "../../../../src/repositories"
|
||||
import { CartService } from "../../../../src/services"
|
||||
import { createCarts } from "../../../__fixtures__/cart"
|
||||
import { MikroOrmWrapper } from "../../../utils"
|
||||
import { createMedusaContainer } from "@medusajs/utils"
|
||||
import { asValue } from "awilix"
|
||||
import ContainerLoader from "../../../../src/loaders/container"
|
||||
|
||||
jest.setTimeout(30000)
|
||||
|
||||
@@ -16,13 +18,12 @@ describe("Cart Service", () => {
|
||||
repositoryManager = await MikroOrmWrapper.forkManager()
|
||||
testManager = await MikroOrmWrapper.forkManager()
|
||||
|
||||
const cartRepository = new CartRepository({
|
||||
manager: repositoryManager
|
||||
})
|
||||
const container = createMedusaContainer()
|
||||
container.register("manager", asValue(repositoryManager))
|
||||
|
||||
service = new CartService({
|
||||
cartRepository: cartRepository,
|
||||
})
|
||||
await ContainerLoader({ container })
|
||||
|
||||
service = container.resolve("cartService")
|
||||
|
||||
await createCarts(testManager)
|
||||
})
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
"node": ">=16"
|
||||
},
|
||||
"bin": {
|
||||
"medusa-cart-migrations-down": "dist/scripts/bin/run-migration-down.js",
|
||||
"medusa-cart-migrations-up": "dist/scripts/bin/run-migration-up.js",
|
||||
"medusa-cart-seed": "dist/scripts/bin/run-seed.js"
|
||||
},
|
||||
"repository": {
|
||||
|
||||
@@ -1,7 +1,22 @@
|
||||
import { moduleDefinition } from "./module-definition"
|
||||
import { Modules } from "@medusajs/modules-sdk"
|
||||
import * as Models from "@models"
|
||||
import { ModulesSdkUtils } from "@medusajs/utils"
|
||||
|
||||
export default moduleDefinition
|
||||
|
||||
const migrationScriptOptions = {
|
||||
moduleName: Modules.CART,
|
||||
models: Models,
|
||||
pathToMigrations: __dirname + "/migrations",
|
||||
}
|
||||
|
||||
export const runMigrations = ModulesSdkUtils.buildMigrationScript(
|
||||
migrationScriptOptions
|
||||
)
|
||||
export const revertMigration = ModulesSdkUtils.buildRevertMigrationScript(
|
||||
migrationScriptOptions
|
||||
)
|
||||
|
||||
export * from "./initialize"
|
||||
export * from "./loaders"
|
||||
export * from "./scripts"
|
||||
@@ -1,54 +1,10 @@
|
||||
import * as defaultRepositories from "@repositories"
|
||||
import { ModulesSdkUtils } from "@medusajs/utils"
|
||||
import * as ModuleModels from "@models"
|
||||
import * as ModuleRepositories from "@repositories"
|
||||
import * as ModuleServices from "@services"
|
||||
|
||||
import { LoaderOptions } from "@medusajs/modules-sdk"
|
||||
import { ModulesSdkTypes } from "@medusajs/types"
|
||||
import { loadCustomRepositories } from "@medusajs/utils"
|
||||
import * as defaultServices from "@services"
|
||||
import { asClass } from "awilix"
|
||||
|
||||
export default async ({
|
||||
container,
|
||||
options,
|
||||
}: LoaderOptions<
|
||||
| ModulesSdkTypes.ModuleServiceInitializeOptions
|
||||
| ModulesSdkTypes.ModuleServiceInitializeCustomDataLayerOptions
|
||||
>): Promise<void> => {
|
||||
const customRepositories = (
|
||||
options as ModulesSdkTypes.ModuleServiceInitializeCustomDataLayerOptions
|
||||
)?.repositories
|
||||
|
||||
container.register({
|
||||
cartService: asClass(defaultServices.CartService).singleton(),
|
||||
addressService: asClass(defaultServices.AddressService).singleton(),
|
||||
shippingMethodService: asClass(
|
||||
defaultServices.ShippingMethodService
|
||||
).singleton(),
|
||||
lineItemService: asClass(defaultServices.LineItemService).singleton(),
|
||||
})
|
||||
|
||||
if (customRepositories) {
|
||||
loadCustomRepositories({
|
||||
defaultRepositories,
|
||||
customRepositories,
|
||||
container,
|
||||
})
|
||||
} else {
|
||||
loadDefaultRepositories({ container })
|
||||
}
|
||||
}
|
||||
|
||||
function loadDefaultRepositories({ container }) {
|
||||
container.register({
|
||||
baseRepository: asClass(defaultRepositories.BaseRepository).singleton(),
|
||||
cartRepository: asClass(defaultRepositories.CartRepository).singleton(),
|
||||
addressRepository: asClass(
|
||||
defaultRepositories.AddressRepository
|
||||
).singleton(),
|
||||
lineItemRepository: asClass(
|
||||
defaultRepositories.LineItemRepository
|
||||
).singleton(),
|
||||
shippingMethodRepository: asClass(
|
||||
defaultRepositories.ShippingMethodRepository
|
||||
).singleton(),
|
||||
})
|
||||
}
|
||||
export default ModulesSdkUtils.moduleContainerLoaderFactory({
|
||||
moduleModels: ModuleModels,
|
||||
moduleRepositories: ModuleRepositories,
|
||||
moduleServices: ModuleServices,
|
||||
})
|
||||
@@ -1,16 +0,0 @@
|
||||
import { DALUtils } from "@medusajs/utils"
|
||||
import { Address } from "@models"
|
||||
import { CreateAddressDTO, UpdateAddressDTO } from "../types"
|
||||
|
||||
export class AddressRepository extends DALUtils.mikroOrmBaseRepositoryFactory<
|
||||
Address,
|
||||
{
|
||||
create: CreateAddressDTO
|
||||
update: UpdateAddressDTO
|
||||
}
|
||||
>(Address) {
|
||||
constructor(...args: any[]) {
|
||||
// @ts-ignore
|
||||
super(...arguments)
|
||||
}
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
import { DALUtils } from "@medusajs/utils"
|
||||
import { Cart } from "@models"
|
||||
import { CreateCartDTO, UpdateCartDTO } from "@types"
|
||||
|
||||
export class CartRepository extends DALUtils.mikroOrmBaseRepositoryFactory<
|
||||
Cart,
|
||||
{
|
||||
create: CreateCartDTO
|
||||
update: UpdateCartDTO
|
||||
}
|
||||
>(Cart) {
|
||||
constructor(...args: any[]) {
|
||||
// @ts-ignore
|
||||
super(...arguments)
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1 @@
|
||||
export { MikroOrmBaseRepository as BaseRepository } from "@medusajs/utils"
|
||||
export * from "./address"
|
||||
export * from "./cart"
|
||||
export * from "./line-item"
|
||||
export * from "./shipping-method"
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
import { DALUtils } from "@medusajs/utils"
|
||||
import { LineItem } from "@models"
|
||||
import { CreateLineItemDTO, UpdateLineItemDTO } from "../types"
|
||||
|
||||
export class LineItemRepository extends DALUtils.mikroOrmBaseRepositoryFactory<
|
||||
LineItem,
|
||||
{
|
||||
create: CreateLineItemDTO
|
||||
update: UpdateLineItemDTO
|
||||
}
|
||||
>(LineItem) {
|
||||
constructor(...args: any[]) {
|
||||
// @ts-ignore
|
||||
super(...arguments)
|
||||
}
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
import { DALUtils } from "@medusajs/utils"
|
||||
import { ShippingMethod } from "@models"
|
||||
import { CreateShippingMethodDTO, UpdateShippingMethodDTO } from "@types"
|
||||
|
||||
export class ShippingMethodRepository extends DALUtils.mikroOrmBaseRepositoryFactory<
|
||||
ShippingMethod,
|
||||
{
|
||||
create: CreateShippingMethodDTO
|
||||
update: UpdateShippingMethodDTO
|
||||
}
|
||||
>(ShippingMethod) {
|
||||
constructor(...args: any[]) {
|
||||
// @ts-ignore
|
||||
super(...arguments)
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
export default (async () => {
|
||||
const { revertMigration } = await import("../migration-down")
|
||||
const { config } = await import("dotenv")
|
||||
config()
|
||||
await revertMigration()
|
||||
})()
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
export default (async () => {
|
||||
const { runMigrations } = await import("../migration-up")
|
||||
const { config } = await import("dotenv")
|
||||
config()
|
||||
await runMigrations()
|
||||
})()
|
||||
@@ -1,2 +0,0 @@
|
||||
export * from "./migration-up"
|
||||
export * from "./migration-down"
|
||||
@@ -1,50 +0,0 @@
|
||||
import { Modules } from "@medusajs/modules-sdk";
|
||||
import { LoaderOptions, Logger, ModulesSdkTypes } from "@medusajs/types";
|
||||
import { DALUtils, ModulesSdkUtils } from "@medusajs/utils";
|
||||
import { EntitySchema } from "@mikro-orm/core";
|
||||
import * as CartModels from "@models";
|
||||
|
||||
/**
|
||||
* This script is only valid for mikro orm managers. If a user provide a custom manager
|
||||
* he is in charge of reverting the migrations.
|
||||
* @param options
|
||||
* @param logger
|
||||
* @param moduleDeclaration
|
||||
*/
|
||||
export async function revertMigration({
|
||||
options,
|
||||
logger,
|
||||
}: Pick<
|
||||
LoaderOptions<ModulesSdkTypes.ModuleServiceInitializeOptions>,
|
||||
"options" | "logger"
|
||||
> = {}) {
|
||||
logger ??= console as unknown as Logger
|
||||
|
||||
const dbData = ModulesSdkUtils.loadDatabaseConfig(
|
||||
Modules.CART,
|
||||
options
|
||||
)!
|
||||
const entities = Object.values(
|
||||
CartModels
|
||||
) as unknown as EntitySchema[]
|
||||
const pathToMigrations = __dirname + "/../migrations"
|
||||
|
||||
const orm = await DALUtils.mikroOrmCreateConnection(
|
||||
dbData,
|
||||
entities,
|
||||
pathToMigrations
|
||||
)
|
||||
|
||||
try {
|
||||
const migrator = orm.getMigrator()
|
||||
await migrator.down()
|
||||
|
||||
logger?.info("Cart module migration executed")
|
||||
} catch (error) {
|
||||
logger?.error(
|
||||
`Cart module migration failed to run - Error: ${error}`
|
||||
)
|
||||
}
|
||||
|
||||
await orm.close()
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
import { Modules } from "@medusajs/modules-sdk";
|
||||
import { LoaderOptions, Logger, ModulesSdkTypes } from "@medusajs/types";
|
||||
import { DALUtils, ModulesSdkUtils } from "@medusajs/utils";
|
||||
import { EntitySchema } from "@mikro-orm/core";
|
||||
import * as CartModels from "@models";
|
||||
|
||||
/**
|
||||
* This script is only valid for mikro orm managers. If a user provide a custom manager
|
||||
* he is in charge of running the migrations.
|
||||
* @param options
|
||||
* @param logger
|
||||
* @param moduleDeclaration
|
||||
*/
|
||||
export async function runMigrations({
|
||||
options,
|
||||
logger,
|
||||
}: Pick<
|
||||
LoaderOptions<ModulesSdkTypes.ModuleServiceInitializeOptions>,
|
||||
"options" | "logger"
|
||||
> = {}) {
|
||||
logger ??= console as unknown as Logger
|
||||
|
||||
const dbData = ModulesSdkUtils.loadDatabaseConfig(
|
||||
Modules.CART,
|
||||
options
|
||||
)!
|
||||
const entities = Object.values(
|
||||
CartModels
|
||||
) as unknown as EntitySchema[]
|
||||
const pathToMigrations = __dirname + "/../migrations"
|
||||
|
||||
const orm = await DALUtils.mikroOrmCreateConnection(
|
||||
dbData,
|
||||
entities,
|
||||
pathToMigrations
|
||||
)
|
||||
|
||||
try {
|
||||
const migrator = orm.getMigrator()
|
||||
|
||||
const pendingMigrations = await migrator.getPendingMigrations()
|
||||
logger.info(
|
||||
`Running pending migrations: ${JSON.stringify(
|
||||
pendingMigrations,
|
||||
null,
|
||||
2
|
||||
)}`
|
||||
)
|
||||
|
||||
await migrator.up({
|
||||
migrations: pendingMigrations.map((m) => m.name),
|
||||
})
|
||||
|
||||
logger.info("Cart module migration executed")
|
||||
} catch (error) {
|
||||
logger.error(
|
||||
`Cart module migration failed to run - Error: ${error}`
|
||||
)
|
||||
}
|
||||
|
||||
await orm.close()
|
||||
}
|
||||
@@ -1,8 +1,10 @@
|
||||
import { Logger } from "@medusajs/types"
|
||||
|
||||
export * from "./address"
|
||||
export * from "./cart"
|
||||
export * from "./line-item"
|
||||
export * from "./shipping-method"
|
||||
export * from "./repositories"
|
||||
|
||||
export type InitializeModuleInjectableDependencies = {
|
||||
logger?: Logger
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
import { DAL } from "@medusajs/types"
|
||||
import { Cart, LineItem, ShippingMethod } from "@models"
|
||||
import { CreateAddressDTO, UpdateAddressDTO } from "./address"
|
||||
import { CreateCartDTO, UpdateCartDTO } from "./cart"
|
||||
import { CreateLineItemDTO, UpdateLineItemDTO } from "./line-item"
|
||||
import {
|
||||
CreateShippingMethodDTO,
|
||||
UpdateShippingMethodDTO,
|
||||
} from "./shipping-method"
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
||||
export interface IAddressRepository<TEntity extends Cart = Cart>
|
||||
extends DAL.RepositoryService<
|
||||
TEntity,
|
||||
{
|
||||
create: CreateAddressDTO
|
||||
update: UpdateAddressDTO
|
||||
}
|
||||
> {}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
||||
export interface ICartRepository<TEntity extends Cart = Cart>
|
||||
extends DAL.RepositoryService<
|
||||
TEntity,
|
||||
{
|
||||
create: CreateCartDTO
|
||||
update: UpdateCartDTO
|
||||
}
|
||||
> {}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
||||
export interface ILineItemRepository<TEntity extends LineItem = LineItem>
|
||||
extends DAL.RepositoryService<
|
||||
TEntity,
|
||||
{
|
||||
create: CreateLineItemDTO
|
||||
update: UpdateLineItemDTO
|
||||
}
|
||||
> {}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
||||
export interface IShippingMethodRepository<
|
||||
TEntity extends ShippingMethod = ShippingMethod
|
||||
> extends DAL.RepositoryService<
|
||||
TEntity,
|
||||
{
|
||||
create: CreateShippingMethodDTO
|
||||
update: UpdateShippingMethodDTO
|
||||
}
|
||||
> {}
|
||||
Reference in new issue
Block a user