Skip to content

Commit

Permalink
refactor[repo-orm]: fixed issues with arangodb
Browse files Browse the repository at this point in the history
  • Loading branch information
juicycleff committed Mar 7, 2021
1 parent 57f725b commit 60bde1f
Show file tree
Hide file tree
Showing 19 changed files with 517 additions and 306 deletions.
2 changes: 1 addition & 1 deletion globalConfig.json
@@ -1 +1 @@
{"mongoUri":"mongodb://127.0.0.1:56759/efaacd81-3468-4e4a-9a36-6a50db16bf3d?"}
{"mongoUri":"mongodb://127.0.0.1:61311/f648834c-9196-4500-ad71-527aa535f206?"}
12 changes: 12 additions & 0 deletions libs/repo-orm/src/constants/shared.constants.ts
Expand Up @@ -20,3 +20,15 @@ export const ARANGO_DEFAULT_DATABASE_CONTAINER_NAME =
'Arango' + DEFAULT_DATABASE_CONTAINER_NAME;
export const ARANGO_DEFAULT_DATABASE_CONNECTION_NAME =
'Arango' + DEFAULT_DATABASE_CONNECTION_NAME;

export const RAVEN_DATABASE_CONNECTIONS_CONTAINER =
'Raven' + DATABASE_CONNECTIONS_CONTAINER;
export const RAVEN_DATABASE_CONTAINER_NAME = 'Raven' + DATABASE_CONTAINER_NAME;
export const RAVEN_DATABASE_CONNECTION_NAME =
'Raven' + DATABASE_CONNECTION_NAME;
export const RAVEN_DATABASE_MODULE_OPTIONS = 'Raven' + DATABASE_MODULE_OPTIONS;

export const RAVEN_DEFAULT_DATABASE_CONTAINER_NAME =
'Raven' + DEFAULT_DATABASE_CONTAINER_NAME;
export const RAVEN_DEFAULT_DATABASE_CONNECTION_NAME =
'Raven' + DEFAULT_DATABASE_CONNECTION_NAME;
32 changes: 13 additions & 19 deletions libs/repo-orm/src/database/arango/arango-core.module.ts
Expand Up @@ -10,11 +10,7 @@ import {
import * as hash from 'object-hash';

import { getCurrentTenantToken } from '../../utils';
import {
getArangoClientToken,
getArangoContainerToken,
getArangoDbToken,
} from './database.util';
import { getArangoContainerToken, getArangoDbToken } from './database.util';
import {
ARANGO_DEFAULT_DATABASE_CONTAINER_NAME,
ARANGO_DATABASE_CONTAINER_NAME,
Expand Down Expand Up @@ -45,9 +41,8 @@ export class ArangoCoreModule implements OnModuleDestroy {
}

static forRoot(
uri: string | string[],
dbName: string,
clientOptions: ArangoClientOption = DEFAULT_ARANGO_DATABASE_OPTIONS,
clientOptions: ArangoClientOption,
containerName: string = ARANGO_DEFAULT_DATABASE_CONTAINER_NAME,
): DynamicModule {
const containerNameProvider = {
Expand All @@ -64,7 +59,7 @@ export class ArangoCoreModule implements OnModuleDestroy {
provide: getArangoDbToken(containerName),
useFactory: async (connections: Map<any, Database>) => {
const key = hash.sha1({
uri,
dbName,
clientOptions,
});
if (connections.has(key)) {
Expand All @@ -84,7 +79,6 @@ export class ArangoCoreModule implements OnModuleDestroy {
useValue: {
tenantId: null,
},
inject: [getArangoClientToken(containerName)],
};

return {
Expand All @@ -100,28 +94,28 @@ export class ArangoCoreModule implements OnModuleDestroy {
}

static forRootAsync(options: ArangoModuleAsyncOptions): DynamicModule {
const mongoContainerName =
const arangoContainerName =
options.containerName || ARANGO_DEFAULT_DATABASE_CONTAINER_NAME;

const containerNameProvider = {
provide: ARANGO_DATABASE_CONTAINER_NAME,
useValue: mongoContainerName,
useValue: arangoContainerName,
};

const connectionContainerProvider = {
provide: getArangoContainerToken(mongoContainerName),
provide: getArangoContainerToken(arangoContainerName),
useFactory: () => new Map<any, Database>(),
};

const dbProvider = {
provide: getArangoDbToken(mongoContainerName),
provide: getArangoDbToken(arangoContainerName),
useFactory: async (
connections: Map<any, Database>,
mongoModuleOptions: ArangoModuleOptions,
arangoModuleOptions: ArangoModuleOptions,
) => {
const { uri, clientOptions } = mongoModuleOptions;
const { dbName, clientOptions } = arangoModuleOptions;
const key = hash.sha1({
uri,
dbName,
clientOptions,
});
if (connections.has(key)) {
Expand All @@ -130,14 +124,14 @@ export class ArangoCoreModule implements OnModuleDestroy {

const connection = new ArangoDatabaseClient();
const client = await connection.connect(
mongoModuleOptions.dbName,
arangoModuleOptions.dbName,
clientOptions,
);
connections.set(key, client);
return client;
},
inject: [
getArangoContainerToken(mongoContainerName),
getArangoContainerToken(arangoContainerName),
ARANGO_MODULE_OPTIONS,
],
};
Expand Down Expand Up @@ -240,7 +234,7 @@ export class ArangoCoreModule implements OnModuleDestroy {
inject: [options.useClass],
};
} else {
throw new Error('Invalid ArangoModule options');
throw new Error('Invalid RavenModule options');
}
}
}
3 changes: 1 addition & 2 deletions libs/repo-orm/src/database/arango/arango.constants.ts
Expand Up @@ -2,8 +2,7 @@ import { ArangoClientOption } from './interfaces';

export const ARANGO_MODULE_OPTIONS = 'ArangoModuleOptions';

// @ts-ignore
export const DEFAULT_ARANGO_DATABASE_OPTIONS: ArangoClientOption = {
export const DEFAULT_ARANGO_DATABASE_OPTIONS: Partial<ArangoClientOption> = {
loadBalancingStrategy: 'ROUND_ROBIN',
};

Expand Down
12 changes: 7 additions & 5 deletions libs/repo-orm/src/database/arango/arango.module.ts
@@ -1,4 +1,4 @@
import { Module, DynamicModule } from '@nestjs/common';
import { Module, DynamicModule, Global } from '@nestjs/common';
import { ArangoCoreModule } from './arango-core.module';
import {
createArangoProviders,
Expand All @@ -9,6 +9,7 @@ import { ArangoClientOption, ArangoModuleAsyncOptions } from './interfaces';
/**
* Module for the MongoDB driver
*/
@Global()
@Module({})
export class ArangoModule {
/**
Expand All @@ -17,10 +18,12 @@ export class ArangoModule {
* @param option
*/
static register(option: ArangoModuleOption): DynamicModule {
const { uri, dbName, options, connectionName } = option;
const { dbName, clientOptions, connectionName } = option;
return {
module: ArangoModule,
imports: [ArangoCoreModule.forRoot(uri, dbName, options, connectionName)],
imports: [
ArangoCoreModule.forRoot(dbName, clientOptions, connectionName),
],
};
}

Expand Down Expand Up @@ -60,8 +63,7 @@ export class ArangoModule {
}

interface ArangoModuleOption {
uri: string;
dbName: string;
options?: ArangoClientOption;
clientOptions: ArangoClientOption;
connectionName?: string;
}
@@ -1,13 +1,13 @@
import { ModuleMetadata, Type } from '@nestjs/common/interfaces';
import { ArangoClientOption } from '@juicycleff/repo-orm/database';

/**
* Options that ultimately need to be provided to create a MongoDB connection
*/
export interface ArangoModuleOptions {
connectionName?: string;
uri: string | string[];
dbName: string;
clientOptions?: any;
clientOptions: ArangoClientOption;
tenantName?: string;
}

Expand Down

0 comments on commit 60bde1f

Please sign in to comment.