@dudousxd/nestjs-filter-mikro-orm
v1.5.0
Published
MikroORM adapter for @dudousxd/nestjs-filter.
Downloads
2,074
Readme
@dudousxd/nestjs-filter-mikro-orm
MikroORM 7 adapter for @dudousxd/nestjs-filter.
Provides MikroOrmFilter, MikroOrmAdapter, and MikroOrmFilterModule.
Install
pnpm add @dudousxd/nestjs-filter @dudousxd/nestjs-filter-mikro-ormPeer dependencies: @mikro-orm/core >= 7, @mikro-orm/sql >= 7, @mikro-orm/nestjs >= 7, @nestjs/common >= 10, @nestjs/core >= 10.
Quick Start
import { Module } from '@nestjs/common';
import { FilterModule, Filterable, FilterFor, ApplyFilter } from '@dudousxd/nestjs-filter';
import { MikroOrmFilter, MikroOrmFilterModule } from '@dudousxd/nestjs-filter-mikro-orm';
import { Injectable, Controller, Get } from '@nestjs/common';
import type { QueryBuilder } from '@mikro-orm/sql';
// Entity
@Entity()
class User {
@PrimaryKey() id!: number;
@Property() name!: string;
@Property() age!: number;
}
// Filter
@Injectable()
@Filterable({ entity: User })
class UserFilter extends MikroOrmFilter<User> {
@FilterFor('name')
applyName(value: string) {
this.$query.andWhere({ name: { $like: `%${value}%` } });
}
@FilterFor('minAge')
applyMinAge(value: number) {
this.$query.andWhere({ age: { $gte: value } });
}
}
// Module
@Module({
imports: [
MikroOrmModule.forRoot({ /* ... */ }),
FilterModule.forRoot({ inputNormalizer: 'camelCase' }),
MikroOrmFilterModule.forRoot(),
FilterModule.forFeature([UserFilter]),
],
controllers: [UsersController],
})
class AppModule {}
// Controller
@Controller('users')
class UsersController {
@Get()
list(@ApplyFilter(UserFilter) qb: QueryBuilder<User>) {
return qb.getResultList();
}
}API Reference
MikroOrmFilter<E>
Abstract base class extending BaseFilter<QueryBuilder<E>>. Your filter classes should extend this.
MikroOrmFilterModule.forRoot()
Registers the MikroOrmAdapter globally. Requires @mikro-orm/nestjs MikroOrmModule to be imported first (it provides the EntityManager).
MikroOrmAdapter
Implements FilterAdapter. Creates query builders via em.createQueryBuilder(entity).
See the root README for full documentation.
