Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat(modules-sdk,inventory,stock-location): modules isolated connection #3329

Merged
merged 57 commits into from
Mar 15, 2023
Merged
Show file tree
Hide file tree
Changes from 39 commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
c5d569b
feat: scoped container for modules
carlos-r-l-rodrigues Feb 23, 2023
3d22622
unit tests
carlos-r-l-rodrigues Feb 23, 2023
22195d6
yarn.lock
carlos-r-l-rodrigues Feb 23, 2023
695670b
typo
carlos-r-l-rodrigues Feb 24, 2023
4068c6b
flat before filter
carlos-r-l-rodrigues Feb 24, 2023
c8a6c77
test-request
carlos-r-l-rodrigues Feb 24, 2023
280c83b
MedusaModuleConfig type
carlos-r-l-rodrigues Feb 27, 2023
de45443
dependencies
carlos-r-l-rodrigues Feb 27, 2023
e2ee720
address comments
carlos-r-l-rodrigues Feb 28, 2023
7507a31
add dependencies
carlos-r-l-rodrigues Feb 28, 2023
e3dd118
Merge branch 'develop' into feat/modules-isolated-connection
carlos-r-l-rodrigues Feb 28, 2023
a986379
yarn.lock
carlos-r-l-rodrigues Feb 28, 2023
9d42772
Merge branch 'feat/modules-isolated-connection' of github.com:medusaj…
carlos-r-l-rodrigues Feb 28, 2023
b57d851
Merge branch 'develop' into feat/modules-isolated-connection
carlos-r-l-rodrigues Mar 1, 2023
27df959
es2020 bump
carlos-r-l-rodrigues Mar 1, 2023
92ecdf8
Merge branch 'develop' of github.com:medusajs/medusa into feat/module…
carlos-r-l-rodrigues Mar 1, 2023
4f6a3d5
changeset
carlos-r-l-rodrigues Mar 3, 2023
d66d44e
export all migrations
carlos-r-l-rodrigues Mar 3, 2023
7e2198c
Merge branch 'develop' of github.com:medusajs/medusa into feat/module…
carlos-r-l-rodrigues Mar 3, 2023
73f3b87
Merge branch 'develop' into feat/modules-isolated-connection
carlos-r-l-rodrigues Mar 6, 2023
26b7ca1
Merge branch 'develop' into feat/modules-isolated-connection
carlos-r-l-rodrigues Mar 7, 2023
e6c39db
Merge branch 'develop' into feat/modules-isolated-connection
olivermrbl Mar 8, 2023
761bdbd
export migrations fix
carlos-r-l-rodrigues Mar 8, 2023
0633a15
ignore .d.ts files
carlos-r-l-rodrigues Mar 9, 2023
b510e65
revert migration
carlos-r-l-rodrigues Mar 9, 2023
208fb10
Merge branch 'develop' into feat/modules-isolated-connection
carlos-r-l-rodrigues Mar 9, 2023
ff720df
Merge branch 'develop' into feat/modules-isolated-connection
carlos-r-l-rodrigues Mar 9, 2023
0066091
Merge branch 'develop' into feat/modules-isolated-connection
carlos-r-l-rodrigues Mar 10, 2023
fa3b099
Merge branch 'develop' into feat/modules-isolated-connection
carlos-r-l-rodrigues Mar 10, 2023
057faac
cache modules, export services
carlos-r-l-rodrigues Mar 10, 2023
7fa629f
Merge branch 'develop' of github.com:medusajs/medusa into feat/module…
carlos-r-l-rodrigues Mar 13, 2023
fd4c1db
do not wait for timeout
carlos-r-l-rodrigues Mar 13, 2023
6bb69e2
@medusa/types
carlos-r-l-rodrigues Mar 13, 2023
805ed74
Merge branch 'develop' into feat/modules-isolated-connection
carlos-r-l-rodrigues Mar 13, 2023
dd067fd
tsconfig
carlos-r-l-rodrigues Mar 13, 2023
dd6b771
Merge branch 'feat/modules-isolated-connection' of github.com:medusaj…
carlos-r-l-rodrigues Mar 13, 2023
bab1c3c
remove super
carlos-r-l-rodrigues Mar 13, 2023
c6ac60b
check single service
carlos-r-l-rodrigues Mar 13, 2023
1d5a490
Merge branch 'develop' into feat/modules-isolated-connection
carlos-r-l-rodrigues Mar 13, 2023
e22e1cc
export single service
carlos-r-l-rodrigues Mar 14, 2023
81914c0
Merge branch 'develop' of github.com:medusajs/medusa into feat/module…
carlos-r-l-rodrigues Mar 14, 2023
2c1ab01
yarn.lock
carlos-r-l-rodrigues Mar 14, 2023
0518aab
unit test fix
carlos-r-l-rodrigues Mar 14, 2023
f18f122
remove import
carlos-r-l-rodrigues Mar 14, 2023
d71ca3e
registrationName
carlos-r-l-rodrigues Mar 14, 2023
4216271
Merge branch 'develop' into feat/modules-isolated-connection
carlos-r-l-rodrigues Mar 14, 2023
694ac8e
change timeout
carlos-r-l-rodrigues Mar 14, 2023
3d3b48c
remove .only
carlos-r-l-rodrigues Mar 14, 2023
1f2fd70
remove new test
carlos-r-l-rodrigues Mar 14, 2023
a7131cc
@medujs/utils and inject entity manager
carlos-r-l-rodrigues Mar 14, 2023
20edf37
.withTransaction to call eventbus
carlos-r-l-rodrigues Mar 14, 2023
a356b9e
skip testing
carlos-r-l-rodrigues Mar 14, 2023
0009dbe
missing else
carlos-r-l-rodrigues Mar 15, 2023
8350e90
Merge branch 'develop' into feat/modules-isolated-connection
carlos-r-l-rodrigues Mar 15, 2023
41391ba
medusa context
carlos-r-l-rodrigues Mar 15, 2023
d803af5
Merge branch 'feat/modules-isolated-connection' of github.com:medusaj…
carlos-r-l-rodrigues Mar 15, 2023
0d8e7a4
Merge branch 'develop' into feat/modules-isolated-connection
carlos-r-l-rodrigues Mar 15, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .changeset/spotty-rules-hide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
"@medusajs/stock-location": minor
"@medusajs/inventory": minor
"medusa-core-utils": minor
"@medusajs/modules-sdk": minor
"@medusajs/medusa": minor
---

Inventory and Stock location modules supporting isolated connection
4 changes: 2 additions & 2 deletions packages/cache-inmemory/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ import { ModuleExports } from "@medusajs/modules-sdk"
import InMemoryCacheService from "./services/inmemory-cache"

const loaders = []
const service = InMemoryCacheService
const services = [InMemoryCacheService]

const moduleDefinition: ModuleExports = {
service,
services,
loaders,
}

Expand Down
2 changes: 2 additions & 0 deletions packages/cache-inmemory/src/services/inmemory-cache.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ class InMemoryCacheService implements ICacheService {
this.invalidate(key)
}, ttl * 1000)

ref.unref()

this.timoutRefs.set(key, ref)
this.store.set(key, record)
}
Expand Down
6 changes: 3 additions & 3 deletions packages/cache-redis/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { ModuleExports } from "@medusajs/modules-sdk"

import { RedisCacheService } from "./services"
import Loader from "./loaders"
import { RedisCacheService } from "./services"

const service = RedisCacheService
const services = [RedisCacheService]
const loaders = [Loader]

const moduleDefinition: ModuleExports = {
service,
services,
loaders,
}

Expand Down
8 changes: 4 additions & 4 deletions packages/inventory/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,12 @@
"cross-env": "^5.2.1",
"jest": "^25.5.4",
"ts-jest": "^25.5.1",
"typeorm": "^0.3.11",
"typescript": "^4.4.4"
},
"dependencies": {
"@medusajs/modules-sdk": "*"
"@medusajs/modules-sdk": "*",
"awilix": "^8.0.0",
"typeorm": "^0.3.11"
},
"scripts": {
"watch": "tsc --build --watch",
Expand All @@ -35,7 +36,6 @@
"test:unit": "jest --passWithNoTests"
},
"peerDependencies": {
"@medusajs/medusa": "1.7.12",
"typeorm": "^0.3.11"
"@medusajs/medusa": "1.7.8"
}
}
1 change: 0 additions & 1 deletion packages/inventory/src/config.ts

This file was deleted.

14 changes: 8 additions & 6 deletions packages/inventory/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
import ConnectionLoader from "./loaders/connection"
import loadConnection from "./loaders/connection"
import loadContainer from "./loaders/container"

import InventoryService from "./services/inventory"
import * as InventoryModels from "./models"
import * as SchemaMigration from "./migrations/schema-migrations/1665748086258-inventory_setup"
import migrations from "./migrations"

import { ModuleExports } from "@medusajs/modules-sdk"

const service = InventoryService
const migrations = [SchemaMigration]
const loaders = [ConnectionLoader]
const services = [InventoryService]
const loaders = [loadContainer, loadConnection]
const models = Object.values(InventoryModels)

const moduleDefinition: ModuleExports = {
service,
services,
migrations,
loaders,
models,
Expand Down
48 changes: 44 additions & 4 deletions packages/inventory/src/loaders/connection.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,49 @@
import {
ConfigurableModuleDeclaration,
InternalModuleDeclaration,
LoaderOptions,
MODULE_RESOURCE_TYPE,
MODULE_SCOPE,
} from "@medusajs/modules-sdk"
import { DataSource, DataSourceOptions } from "typeorm"

import * as InventoryModels from "../models"
import { MedusaError } from "medusa-core-utils"
import { asValue } from "awilix"

export default async (
{ configModule }: LoaderOptions,
moduleDeclaration?: ConfigurableModuleDeclaration
): Promise<void> => {}
{ options, container }: LoaderOptions,
moduleDeclaration?: InternalModuleDeclaration
): Promise<void> => {
if (
moduleDeclaration?.scope === MODULE_SCOPE.INTERNAL &&
moduleDeclaration.resources === MODULE_RESOURCE_TYPE.SHARED
) {
return
}

const dbData = options?.database as Record<string, string>

if (!dbData) {
throw new MedusaError(
MedusaError.Types.INVALID_ARGUMENT,
`Database config is not present at module config "options.database"`
)
}

const entities = Object.values(InventoryModels)
const dataSource = new DataSource({
adrien2p marked this conversation as resolved.
Show resolved Hide resolved
type: dbData.database_type,
url: dbData.database_url,
database: dbData.database_database,
extra: dbData.database_extra || {},
schema: dbData.database_schema,
entities,
logging: dbData.database_logging,
} as DataSourceOptions)

await dataSource.initialize()

container.register({
manager: asValue(dataSource.manager),
})
}
20 changes: 20 additions & 0 deletions packages/inventory/src/loaders/container.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { InternalModuleDeclaration, LoaderOptions } from "@medusajs/modules-sdk"

import {
InventoryItemService,
InventoryLevelService,
ReservationItemService,
} from "../services"

import { asClass } from "awilix"

export default async (
{ container }: LoaderOptions,
moduleDeclaration?: InternalModuleDeclaration
): Promise<void> => {
container.register({
inventoryItemService: asClass(InventoryItemService).singleton(),
inventoryLevelService: asClass(InventoryLevelService).singleton(),
reservationItemService: asClass(ReservationItemService).singleton(),
})
}
2 changes: 2 additions & 0 deletions packages/inventory/src/loaders/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export * from "./connection"
export * from "./container"
3 changes: 3 additions & 0 deletions packages/inventory/src/migrations/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import * as setup from "./schema-migrations/1665748086258-inventory_setup"

export default [setup]
Original file line number Diff line number Diff line change
@@ -1,46 +1,4 @@
import { ConfigModule } from "@medusajs/medusa"
import {
createConnection,
ConnectionOptions,
MigrationInterface,
QueryRunner,
} from "typeorm"

import { CONNECTION_NAME } from "../../config"

export const up = async ({ configModule }: { configModule: ConfigModule }) => {
const connection = await createConnection({
name: CONNECTION_NAME,
type: configModule.projectConfig.database_type,
url: configModule.projectConfig.database_url,
extra: configModule.projectConfig.database_extra || {},
schema: configModule.projectConfig.database_schema,
migrations: [inventorySetup1665748086258],
logging: true,
} as ConnectionOptions)

await connection.runMigrations()
await connection.close()
}

export const down = async ({
configModule,
}: {
configModule: ConfigModule
}) => {
const connection = await createConnection({
name: CONNECTION_NAME,
type: configModule.projectConfig.database_type,
url: configModule.projectConfig.database_url,
extra: configModule.projectConfig.database_extra || {},
schema: configModule.projectConfig.database_schema,
migrations: [inventorySetup1665748086258],
logging: true,
} as ConnectionOptions)

await connection.undoLastMigration({ transaction: "all" })
await connection.close()
}
import { MigrationInterface, QueryRunner } from "typeorm"

export class inventorySetup1665748086258 implements MigrationInterface {
name = "inventorySetup1665748086258"
Expand Down
44 changes: 16 additions & 28 deletions packages/inventory/src/services/inventory.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
import {
ConfigurableModuleDeclaration,
MODULE_RESOURCE_TYPE,
} from "@medusajs/modules-sdk"
import { InternalModuleDeclaration } from "@medusajs/modules-sdk"

import {
CreateInventoryItemInput,
Expand All @@ -22,18 +19,20 @@ import {
} from "@medusajs/medusa"
import { MedusaError } from "medusa-core-utils"

import { EntityManager } from "typeorm"
import {
InventoryItemService,
InventoryLevelService,
ReservationItemService,
} from "./"
import { EntityManager } from "typeorm"

type InjectedDependencies = {
manager: EntityManager
eventBusService: IEventBusService
inventoryItemService: InventoryItemService
inventoryLevelService: InventoryLevelService
reservationItemService: ReservationItemService
}

export default class InventoryService
extends TransactionBaseService
implements IInventoryService
Expand All @@ -44,34 +43,23 @@ export default class InventoryService
protected readonly inventoryLevelService_: InventoryLevelService

constructor(
{ eventBusService, manager }: InjectedDependencies,
{
eventBusService,
manager,
inventoryItemService,
inventoryLevelService,
reservationItemService,
}: InjectedDependencies,
options?: unknown,
moduleDeclaration?: ConfigurableModuleDeclaration
moduleDeclaration?: InternalModuleDeclaration
) {
// @ts-ignore
super(...arguments)

if (moduleDeclaration?.resources !== MODULE_RESOURCE_TYPE.SHARED) {
throw new MedusaError(
MedusaError.Types.INVALID_ARGUMENT,
"At the moment this module can only be used with shared resources"
)
}

this.eventBusService_ = eventBusService
this.inventoryItemService_ = new InventoryItemService({
eventBusService,
manager,
})
this.inventoryLevelService_ = new InventoryLevelService({
eventBusService,
manager,
})
this.reservationItemService_ = new ReservationItemService({
eventBusService,
manager,
inventoryLevelService: this.inventoryLevelService_,
})
this.inventoryItemService_ = inventoryItemService
this.inventoryLevelService_ = inventoryLevelService
this.reservationItemService_ = reservationItemService
}

/**
Expand Down
13 changes: 4 additions & 9 deletions packages/inventory/tsconfig.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
{
"compilerOptions": {
"lib": [
"es5",
"es6",
"es2019"
],
"target": "es5",
"lib": ["es2020"],
"target": "ES2020",
"outDir": "./dist",
"esModuleInterop": true,
"declaration": true,
Expand All @@ -19,8 +15,7 @@
"strictFunctionTypes": true,
"noImplicitThis": true,
"allowJs": true,
"skipLibCheck": true,
"downlevelIteration": true // to use ES5 specific tooling
"skipLibCheck": true
},
"include": ["./src/**/*", "index.d.ts"],
carlos-r-l-rodrigues marked this conversation as resolved.
Show resolved Hide resolved
"exclude": [
Expand All @@ -29,4 +24,4 @@
"./src/**/__mocks__",
"node_modules"
]
}
}
7 changes: 1 addition & 6 deletions packages/medusa-core-utils/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,11 @@
"author": "Sebastian Rindom",
"license": "MIT",
"devDependencies": {
"class-transformer": "^0.5.1",
"class-validator": "^0.13.2",
"cross-env": "^5.2.1",
"jest": "^25.5.4",
"ts-jest": "^25.5.1",
"typescript": "^4.4.4"
},
"dependencies": {
"joi": "^17.3.0",
"joi-objectid": "^3.0.1"
},
"dependencies": {},
"gitHead": "a69b1e85be1da3b1b5bc4c5446471252623c8808"
}
6 changes: 5 additions & 1 deletion packages/medusa-core-utils/src/get-config-file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { join } from "path"
function getConfigFile<TConfig = unknown>(
rootDir: string,
configName: string
): { configModule: TConfig; configFilePath: string, error?: any } {
): { configModule: TConfig; configFilePath: string; error?: any } {
const configPath = join(rootDir, configName)
let configFilePath = ``
let configModule
Expand All @@ -22,6 +22,10 @@ function getConfigFile<TConfig = unknown>(
err = e
}

if (configModule && typeof configModule.default === "object") {
configModule = configModule.default
}

return { configModule, configFilePath, error: err }
}

Expand Down
3 changes: 2 additions & 1 deletion packages/medusa-core-utils/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@ export { indexTypes } from "./index-types"
export * from "./is-defined"
export { parseCorsOrigins } from "./parse-cors-origins"
export { transformIdableFields } from "./transform-idable-fields"
export { default as Validator } from "./validator"
export { default as zeroDecimalCurrencies } from "./zero-decimal-currencies"
export * from "./is-defined"
carlos-r-l-rodrigues marked this conversation as resolved.
Show resolved Hide resolved
export * from "./medusa-container"
Loading