@prabink/nestjsx-typeorm-curd
TypeScript icon, indicating that this package has built-in type declarations

1.1.0 • Public • Published

Typeorm Curd Generator

This code represent how to use Typeorm Curd Generator

Installation

npm i @prabink/nestjsx-typeorm-curd

Also install the following to work with this packages if not installed

npm i @nestjs/typeorm typeorm @nestjs/swagger

Usage/Examples

Service Using (TypeOrmCurdService)

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { TypeOrmCurdService } from '@Pathto_typeorm-curd/typeorm-curd.service';
import { Repository } from 'typeorm';
import { User } from '../entities/user.entity';

@Injectable()
export class UserService extends TypeOrmCurdService<User> {
  constructor(
    @InjectRepository(User)
    public readonly usersRepository: Repository<User>,
  ) {
    super(usersRepository);
  }
}

Controller Using (TypeOrmCurdControllerFactory(options?: TypeOrmCurdFactoryOptions))

import { Controller } from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger';
import { TypeOrmCurdControllerFactory } from 'src/shared/classes/typeorm-curd/typeorm-curd.factory';
import { CreateUserDto } from '../dto/create-user.dto';
import { UpdateUserDto } from '../dto/update-user.dto';
import { User } from '../entities/user.entity';
import { UserService } from '../services/user.service';

@ApiTags('User Controller')
@Controller('users')
export class UserController extends TypeOrmCurdControllerFactory<User>({
  modal: {
    type: User,
  },
  routes: {
    findAll: {
      decorators: [],
    },
    create: {
      dto: CreateUserDto,
    },
    update: {
      dto: UpdateUserDto,
    },
  },
  query: {
    join: [{ field: 'avatar' }, { field: 'role' }],
  },
}) {
  constructor(public readonly userService: UserService) {
    super(userService);
  }
}

TypeOrmCurdFactoryOptions

modal

  {
    modal: {
      type: any,
    },
  }
Parameter Type Required
type any true
Example:
{
    modal: {
      type: User,
    },
  }

routes

  {
    routes?: {
      findAll?: {
        interceptors?: any[];
        decorators?: (PropertyDecorator | MethodDecorator)[];
      };
      count?: {
        interceptors?: any[];
        decorators?: (PropertyDecorator | MethodDecorator)[];
      };
      findById?: {
        interceptors?: any[];
        decorators?: (PropertyDecorator | MethodDecorator)[];
      };
      create?: {
        interceptors?: any[];
        decorators?: (PropertyDecorator | MethodDecorator)[];
        dto:any
      };
      update?: {
        interceptors?: any[];
        decorators?: (PropertyDecorator | MethodDecorator)[];
        dto:any
      };
      delete?: {
        interceptors?: any[];
        decorators?: (PropertyDecorator | MethodDecorator)[];
      };
    };
  }
Parameter Type Required
findAll object false
Example:
routes: {
    findAll: {
      interceptors: [],
      decorators: [],
    },
  }
Parameter Type Required
count object false
Example:
routes: {
    count: {
      interceptors: [],
      decorators: [],
    },
  }
Parameter Type Required
findById object false
Example:
routes: {
    findById: {
      interceptors: [],
      decorators: [],
    },
  }
Parameter Type Required
create object false
Example:
routes: {
    create: {
      interceptors: [],
      decorators: [],
      dto: CreateUserDto
    },
  }
Parameter Type Required
update object false
Example:
routes: {
    update: {
      interceptors: [],
      decorators: [],
      dto: UpdateUserDto
    },
  }
Parameter Type Required
delete object false
Example:
routes: {
    delete: {
      interceptors: [],
      decorators: []
    },
  }

query

  {
    query: {
      fields: QueryFields;
      filter: QueryFilter[];
      or: QueryFilter[];
      join: QueryJoin[];
      sort: QuerySort[];
      pagination: boolean;
      limit: number;
      offset: number;
      page: number;
      cache: boolean;
      includeDeleted: boolean;
    },
  }
Parameter Type Required
fields Array false
filter Array<{field:string, operator:QueryCondOperator, value?:any}> false
or Array<{field:string, operator:QueryCondOperator, value?:any}> false
join Array<{field:string, select?:Array}> false
sort Array<{field:string, order?:QuerySortOperator}> false
pagination boolean false
limit number false
offset number false
page number false
cache boolean false
includeDeleted boolean false

Reference Type

QuerySortOperator

Value Description
ASC Ascending means smallest to largest, 0 to 9, and/or A to Z
DESC Ascending means a series of data is arranged from high to low or largest to smallest

QueryCondOperator

filter conditions

  • $eq (=, equal)
  • $ne (!=, not equal)
  • $gt (>, greater than)
  • $lt (<, lower that)
  • $gte (>=, greater than or equal)
  • $lte (<=, lower than or equal)
  • $starts (LIKE val%, starts with)
  • $ends (LIKE %val, ends with)
  • $cont (LIKE %val%, contains)
  • $excl (NOT LIKE %val%, not contains)
  • $in (IN, in range, accepts multiple values)
  • $notin (NOT IN, not in range, accepts multiple values)
  • $isnull (IS NULL, is NULL, doesn't accept value)
  • $notnull (IS NOT NULL, not NULL, doesn't accept value)
  • $between (BETWEEN, between, accepts two values)
  • $eqL (LOWER(field) =, equal)
  • $neL (LOWER(field) !=, not equal)
  • $startsL (LIKE|ILIKE val%)
  • $endsL (LIKE|ILIKE %val, ends with)
  • $contL (LIKE|ILIKE %val%, contains)
  • $exclL (NOT LIKE|ILIKE %val%, not contains)
  • $inL (LOWER(field) IN, in range, accepts multiple values)
  • $notinL (LOWER(field) NOT IN, not in range, accepts multiple values)

Frontend usage

From frontend you can pass the query params as follows

Without using qs package

Parameter Usage
fields ?fields[0]=A&fields[1]=B
filter ?filter[0][field]=userName&filter[0][operator]=$eq&filter[0][value]=AB
or ?or[0][field]=userName&or[0][operator]=$eq&or[0][value]=AB
join ?join[0][field]=role // Use?join[0][field]=* for all
sort ?sort[0][field]=role&sort[0][order]=DESC
limit ?limit=50
offset ?offset=0
pagination ?pagination=true
page ?page=1
cache ?cache=false
includeDeleted ?includeDeleted=false

With using qs package

const qs = require('qs');
const query = qs.stringify(
  {
    fields: ['id', 'userName', 'email'], // Use [] for all
    filter: [{ field: 'userName', operator: '$eq', value: 'AB' }],
    or: [{ field: 'userName', operator: '$eq', value: 'AB' }],
    join: [{ field: 'role' }, { field: 'avatar' }], // Use ['*'] for all
    sort: [{ field: 'userName', order: 'DESC' }],
    limit: 50,
    offset: 0,
    pagination: true,
    page: 1,
    cache: false,
    includeDeleted: false,
  },
  {
    encodeValuesOnly: true, // prettify URL
  },
);
await request('/api/users?{query}');

Authors

Tech Stack

Server: Node, Postgress, NestJs, Typescript

Package Sidebar

Install

npm i @prabink/nestjsx-typeorm-curd

Weekly Downloads

2

Version

1.1.0

License

MIT

Unpacked Size

263 kB

Total Files

52

Last publish

Collaborators

  • prabink