import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { <%= entityClass %>Controller } from '../api/rest/<%= entityFileName %>.controller';
import { <%= entityClass %>RepositoryImpl, <%= entityClass %>RepositoryORM } from '../repository/<%= entityFileName %>.repository';
import { <%= entityClass %>Interactor } from '../domain/interactors/<%= entityFileName %>.interactor';
import {<%= entityClass %>Repository} from "../domain/repository/<%= entityFileName %>.repository";

const <%= entityClass %>RepositoryFactory = {
provide: '<%= entityClass %>Repository',
useExisting: <%= entityClass %>RepositoryImpl
};

const <%= entityClass %>Factory = {
  provide: '<%= entityClass %>Interactor',
  useFactory: (<%= asEntity(entityInstance) %>Repo: <%= entityClass %>Repository) => {
      return new <%= entityClass %>Interactor(<%= asEntity(entityInstance) %>Repo);
  },
  inject: ['<%= entityClass %>Repository'],
};

@Module({
  imports: [TypeOrmModule.forFeature([<%= entityClass %>RepositoryORM])],
  controllers: [<%= entityClass %>Controller],
  providers: [<%= entityClass %>Factory, <%= entityClass %>RepositoryFactory, <%= entityClass %>RepositoryImpl],
  exports: [<%= entityClass %>Factory],
})
export class <%= entityClass %>Module {}
