Skip to content

Commit

Permalink
feat(): allow injecting models for specific connection
Browse files Browse the repository at this point in the history
Resolves #1014
  • Loading branch information
Ginden committed Jan 15, 2022
1 parent 44e8c0c commit 231d3da
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 9 deletions.
2 changes: 1 addition & 1 deletion lib/common/mongoose.decorators.ts
@@ -1,7 +1,7 @@
import { Inject } from '@nestjs/common';
import { getConnectionToken, getModelToken } from './mongoose.utils';

export const InjectModel = (model: string) => Inject(getModelToken(model));
export const InjectModel = (model: string, connectionName?: string) => Inject(getModelToken(model, connectionName));

export const InjectConnection = (name?: string) =>
Inject(getConnectionToken(name));
7 changes: 5 additions & 2 deletions lib/common/mongoose.utils.ts
Expand Up @@ -3,8 +3,11 @@ import { Observable } from 'rxjs';
import { delay, retryWhen, scan } from 'rxjs/operators';
import { DEFAULT_DB_CONNECTION } from '../mongoose.constants';

export function getModelToken(model: string) {
return `${model}Model`;
export function getModelToken(model: string, connectionName?: string) {
if (connectionName === undefined) {
return `${model}Model`;
}
return `${getConnectionToken(connectionName)}/${model}Model`;
}

export function getConnectionToken(name?: string) {
Expand Down
12 changes: 6 additions & 6 deletions lib/mongoose.providers.ts
Expand Up @@ -11,13 +11,13 @@ export function createMongooseProviders(
(providers, option) => [
...providers,
...(option.discriminators || []).map((d) => ({
provide: getModelToken(d.name),
provide: getModelToken(d.name, connectionName),
useFactory: (model: Model<Document>) =>
model.discriminator(d.name, d.schema),
inject: [getModelToken(option.name)],
inject: [getModelToken(option.name, connectionName)],
})),
{
provide: getModelToken(option.name),
provide: getModelToken(option.name, connectionName),
useFactory: (connection: Connection) => {
const model = connection.model(
option.name,
Expand All @@ -41,7 +41,7 @@ export function createMongooseAsyncProviders(
return [
...providers,
{
provide: getModelToken(option.name),
provide: getModelToken(option.name, connectionName),
useFactory: async (connection: Connection, ...args: unknown[]) => {
const schema = await option.useFactory(...args);
const model = connection.model(
Expand All @@ -54,10 +54,10 @@ export function createMongooseAsyncProviders(
inject: [getConnectionToken(connectionName), ...(option.inject || [])],
},
...(option.discriminators || []).map((d) => ({
provide: getModelToken(d.name),
provide: getModelToken(d.name, connectionName),
useFactory: (model: Model<Document>) =>
model.discriminator(d.name, d.schema),
inject: [getModelToken(option.name)],
inject: [getModelToken(option.name, connectionName)],
})),
];
}, [] as Provider[]);
Expand Down

0 comments on commit 231d3da

Please sign in to comment.