Skip to content

Instantly share code, notes, and snippets.

@stefanolaterrainghilterra
Created September 30, 2022 16:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stefanolaterrainghilterra/a014cc0396e758cd3f057907c81cfe8b to your computer and use it in GitHub Desktop.
Save stefanolaterrainghilterra/a014cc0396e758cd3f057907c81cfe8b to your computer and use it in GitHub Desktop.
Facroty to create typeOrm repositories
import {
EntityManager,
EntityMetadata,
EntityTarget,
QueryRunner,
Repository,
TreeRepository,
} from 'typeorm';
import { Injectable } from '@nestjs/common';
/**
* Factory used to create different types of repositories.
*/
@Injectable()
export class RepositoryFactory {
/**
* Creates a repository.
*/
create<T>(
target: EntityTarget<T>,
manager: EntityManager,
metadata: EntityMetadata,
queryRunner?: QueryRunner,
): Repository<T> {
if (metadata.treeType) {
const repository = new TreeRepository<T>(target, manager, queryRunner);
Object.keys(metadata).forEach(
(m) => (repository.metadata[m] = metadata[m]),
);
return repository;
} else {
const repository = new Repository<T>(target, manager, queryRunner);
Object.keys(metadata).forEach(
(m) => (repository.metadata[m] = metadata[m]),
);
return repository;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment