Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/krsbx/prisma-fqp
Filter Query Parser for Prisma ORM
https://github.com/krsbx/prisma-fqp
express filter javascript nodejs prisma prisma-client query typescript
Last synced: 25 days ago
JSON representation
Filter Query Parser for Prisma ORM
- Host: GitHub
- URL: https://github.com/krsbx/prisma-fqp
- Owner: krsbx
- License: mit
- Created: 2022-04-02T08:36:20.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-06-01T10:02:24.000Z (over 1 year ago)
- Last Synced: 2024-07-30T20:10:29.654Z (3 months ago)
- Topics: express, filter, javascript, nodejs, prisma, prisma-client, query, typescript
- Language: TypeScript
- Homepage:
- Size: 733 KB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# Prisma Filter Query Parser
Filter Query Parser for Prisma ORM
Using [filter-query-parser](https://github.com/VJD7/filter-query-parser/) as the base
# How To Use
1. 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](https://www.npmjs.com/package/express)
- Javascript
```js
// Files : parser.jsconst 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
```ts
// Files : parser.jsimport 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](https://www.npmjs.com/package/express-asyncmw) to return a response error automatically on every Errors in your backend
2. Use FQP Results in baseRepository/abstract class BaseRepository
- Javascript
```js
// Files : baseRepository.jsexports.findAll = (
conditions = {},
filterQueryParams = {},
options = {},
include = {}
) => {
/* {...} */const where = { ...conditions, ...filterQueryParams, ...otherOptions };
/* {...} */
};
```- Typescript
```ts
// Files : baseRepository.tsasync findAll(conditions: Where, filterQueryParams: AnyRecord = {}, options: AnyRecord = {}, include: Include = {} as Include) {
/* {...} */const where = { ...conditions, ...filterQueryParams, ...otherOptions };
/* {...} */
}
```> This `baseRepository.ts` is using baseRepository that [prisma-repo](https://www.npmjs.com/package/prisma-repo) generate
# Keep In Mind
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
```ts
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
# Case Sensitive filters
The `caseSensitive` is only available on certain databse provider. Read more about it in [Case-insensitive filtering](https://www.prisma.io/docs/concepts/components/prisma-client/filtering-and-sorting#case-insensitive-filtering).
# Options
```ts
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 use `insensitive` mode on filtering the results.