Filter Query Parser for Prisma ORM
Using filter-query-parser as the base
- Create a new Middleware that can be use for all routes e.g.
parserMw
This examples is an examples for a Backend that use Express.js
- Javascript
// Files : parser.js
const prismaFQP = require('@krsbx/prisma-fqp');
exports.queryParserMw = (req, res, next) => {
req.filterQueryParams = req.query.filters ? prismaFQP(req.query.filters) : {};
delete req.query.filters;
return next();
};
- Typescript
// Files : parser.js
import prismaFQP from '@krsbx/prisma-fqp';
export const queryParserMw = (req, res, next) => {
req.filterQueryParams = req.query.filters
? prismaFQP(req.query.filters as string)
: {};
delete req.query.filters;
return next();
};
Use express-asyncmw to return a response error automatically on every Errors in your backend
- Use FQP Results in baseRepository/abstract class BaseRepository
- Javascript
// Files : baseRepository.js
exports.findAll = (
conditions = {},
filterQueryParams = {},
options = {},
include = {}
) => {
/* {...} */
const where = { ...conditions, ...filterQueryParams, ...otherOptions };
/* {...} */
};
- Typescript
// Files : baseRepository.ts
async findAll<T extends typeof this.model>(conditions: Where, filterQueryParams: AnyRecord = {}, options: AnyRecord = {}, include: Include = {} as Include) {
/* {...} */
const where = { ...conditions, ...filterQueryParams, ...otherOptions };
/* {...} */
}
This
baseRepository.ts
is using baseRepository that prisma-repo generate
If you use a filter that split with .
e.g. user.email
and combine it with OR
- user.username
, it will use OR
in the top level filter, so prisma
will read it like this
where: {
OR: {
user: { // In here it read as user that
email: { // email is ... `AND` username is ...
equals: '[email protected]'
},
username: {
equals: 'user',
},
}
}
}
Anyone who want to contribute to fix this issue are always welcome
The caseSensitive
is only available on certain databse provider. Read more about it in Case-insensitive filtering.
caseSensitive: boolean;
!!! We deprecate this features in v0.2.5+ !!! Determine whether use a caseSensitive filters or not. Default is
false
which use the default value from Prisma. But, if it true it will useinsensitive
mode on filtering the results.