generic-typeorm-repository

A basic package aimed at providing a generic and extendable typeorm repository for nestjs apps.


Keywords
generic, typeorm, nestjs, typescript
License
MIT
Install
npm install generic-typeorm-repository@0.0.9

Documentation

Generic TypeORM Repository

This is a little convenience package that allows for abstracting away a lot of boilerplate by simplifying the way in which you can create repositories for your TypeORM database entities in NestJS.

Install

Install with npm:

npm install generic-typeorm-repository --save

Install with yarn:

yarn add generic-typeorm-repository

Available methods

  • findOne
  • findMany
  • findManyAndCount
  • create
  • createMany
  • update
  • updateMany
  • rawQuery
  • delete
  • softDelete
  • count

Is important to notice that this package has a direct dependency from typeorm, so most of the parameters and return types of its methods are types exposed by typeorm.

Use Case

The following example sums up the whole purpose of the package fairly well:

Instead of doing this for each entity in your project

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { EntityOne } from './entities';

@Injectable()
export class EntityOneRepository {
    public constructor(@InjectRepository(EntityOne) repository: Repository<EntityOne>) {}

    public async create(
        parameters // Your expected params
    ) {
        // Your logic
    }

    // And so on...
}

You can simply use this package and end-up with

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { GenericRepository } from 'generic-typeorm-repository';
import { Repository } from 'typeorm';
import { EntityOne } from './entities';

@Injectable()
export class EntityOneRepository extends GenericRepository<EntityOne> {
    public constructor(@InjectRepository(EntityOne) repository: Repository<EntityOne>) {
        super(repository);
    }
    
    // Now you you have access to all the boilerplate methods defined on the GenericRepository
    // and you don't have to repeat yourself extensively each time you define a repository for your
    // entities.

    // If you happen to need extended or custom logic, you can simply override any of the methods available
    // on the GenericRepository (check the contents of the example directory for a more contextual example).
    override async findOne(options: FindOneOptions<EntityOne>): Promise<EntityOne> {
        // Your custom logic.
    }
}

Collaborators

jmj0502
Jorge Martin Juarez
EliezerSPP
Eliezer Peña