@@ -3,41 +3,48 @@ import {
33 getConnectionToken ,
44 getRepositoryToken ,
55} from './utils/cassandra-orm.utils' ;
6- import { EXPRESS_CASSANDRA_MODULE_OPTIONS } from './express-cassandra.constant' ;
76import { defer } from 'rxjs' ;
87import { loadModel , Repository } from './orm' ;
98import { getEntity } from './orm/utils/decorator.utils' ;
9+ import { Provider } from '@nestjs/common' ;
10+ import { RepositoryFactory } from './orm/repositories/repository.factory' ;
1011
1112export function createExpressCassandraProviders (
1213 entities ?: Function [ ] ,
1314 connection ?: string | any ,
1415) {
1516 const providerModel = entity => ( {
1617 provide : getModelToken ( entity ) ,
17- useFactory : async ( client : any , options ) => {
18+ useFactory : async ( client : any ) => {
1819 return await defer ( ( ) => loadModel ( client , entity ) ) . toPromise ( ) ;
1920 } ,
20- inject : [ getConnectionToken ( connection ) , EXPRESS_CASSANDRA_MODULE_OPTIONS ] ,
21+ inject : [ getConnectionToken ( connection ) ] ,
2122 } ) ;
2223
23- const provideRepository = EntityRepository => {
24- const entitySchema = getEntity ( EntityRepository ) ;
24+ const provideRepository = entity => ( {
25+ provide : getRepositoryToken ( entity ) ,
26+ useFactory : async ( model : any ) => RepositoryFactory . create ( entity , model ) ,
27+ inject : [ getModelToken ( entity ) ] ,
28+ } ) ;
29+
30+ const provideCustomRepository = EntityRepository => {
31+ const entity = getEntity ( EntityRepository ) ;
2532 return {
2633 provide : getRepositoryToken ( EntityRepository ) ,
27- useFactory : async model => createRepository ( EntityRepository , model ) ,
28- inject : [ getModelToken ( entitySchema ) ] ,
34+ useFactory : async model =>
35+ RepositoryFactory . create ( entity , model , EntityRepository ) ,
36+ inject : [ getModelToken ( entity ) ] ,
2937 } ;
3038 } ;
3139
32- const models = ( entities || [ ] ) . map ( entity => {
40+ const providers : Provider [ ] = [ ] ;
41+ ( entities || [ ] ) . forEach ( entity => {
3342 if ( entity . prototype instanceof Repository ) {
34- return provideRepository ( entity ) ;
43+ providers . push ( provideCustomRepository ( entity ) ) ;
44+ return ;
3545 }
36- return providerModel ( entity ) ;
46+ providers . push ( providerModel ( entity ) , provideRepository ( entity ) ) ;
3747 } ) ;
38- return [ ...models ] ;
39- }
4048
41- const createRepository = ( EntityRepository , model : any ) : Repository => {
42- return Object . assign ( new EntityRepository ( ) , { entity : model } ) ;
43- } ;
49+ return [ ...providers ] ;
50+ }
0 commit comments