Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: nestjsx/crud
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v4.4.0
Choose a base ref
...
head repository: nestjsx/crud
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v4.4.1
Choose a head ref
  • 3 commits
  • 9 files changed
  • 1 contributor

Commits on Dec 28, 2019

  1. Copy the full SHA
    f8c5921 View commit details
  2. Merge pull request #375 from nestjsx/fix/request-exceptions

    fix(request): request validation error code 400
    michaelyali authored Dec 28, 2019
    Copy the full SHA
    9639da5 View commit details
  3. chore: release

    michaelyali committed Dec 28, 2019
    Copy the full SHA
    e7086d4 View commit details
2 changes: 1 addition & 1 deletion lerna.json
Original file line number Diff line number Diff line change
@@ -4,7 +4,7 @@
],
"npmClient": "yarn",
"useWorkspaces": true,
"version": "4.4.0",
"version": "4.4.1",
"command": {
"publish": {
"message": "chore: release"
4 changes: 2 additions & 2 deletions packages/crud-request/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@nestjsx/crud-request",
"description": "NestJs CRUD for RESTful APIs - request query builder",
"version": "4.4.0",
"version": "4.4.1",
"license": "MIT",
"main": "lib/index.js",
"typings": "lib/index.d.ts",
@@ -47,7 +47,7 @@
"build": "npx tsc -b"
},
"dependencies": {
"@nestjsx/util": "^4.4.0",
"@nestjsx/util": "^4.4.1",
"qs": "^6.8.0"
}
}
2 changes: 1 addition & 1 deletion packages/crud-typeorm/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@nestjsx/crud-typeorm",
"description": "NestJs CRUD for RESTful APIs - TypeORM",
"version": "4.4.0",
"version": "4.4.1",
"license": "MIT",
"main": "lib/index.js",
"typings": "lib/index.d.ts",
6 changes: 3 additions & 3 deletions packages/crud/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@nestjsx/crud",
"description": "NestJs CRUD for RESTful APIs",
"version": "4.4.0",
"version": "4.4.1",
"license": "MIT",
"main": "lib/index.js",
"typings": "lib/index.d.ts",
@@ -39,8 +39,8 @@
"build": "npx tsc -b"
},
"dependencies": {
"@nestjsx/crud-request": "^4.4.0",
"@nestjsx/util": "^4.4.0",
"@nestjsx/crud-request": "^4.4.1",
"@nestjsx/util": "^4.4.1",
"deepmerge": "^3.2.0"
},
"peerDependencies": {
51 changes: 32 additions & 19 deletions packages/crud/src/interceptors/crud-request.interceptor.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
import {
BadRequestException,
CallHandler,
ExecutionContext,
Injectable,
NestInterceptor,
} from '@nestjs/common';
import { RequestQueryParser, SCondition, QueryFilter } from '@nestjsx/crud-request';
import {
RequestQueryException,
RequestQueryParser,
SCondition,
QueryFilter,
} from '@nestjsx/crud-request';
import { isNil, isFunction, isArrayFull, hasLength } from '@nestjsx/util';

import { PARSED_CRUD_REQUEST_KEY } from '../constants';
@@ -19,27 +25,34 @@ export class CrudRequestInterceptor extends CrudBaseInterceptor
intercept(context: ExecutionContext, next: CallHandler) {
const req = context.switchToHttp().getRequest();

/* istanbul ignore else */
if (!req[PARSED_CRUD_REQUEST_KEY]) {
const { ctrlOptions, crudOptions, action } = this.getCrudInfo(context);
const parser = RequestQueryParser.create();

parser.parseQuery(req.query);

if (!isNil(ctrlOptions)) {
const search = this.getSearch(parser, crudOptions, action, req.params);
const auth = this.getAuth(parser, crudOptions, req);
parser.search = auth.or
? { $or: [auth.or, { $and: search }] }
: { $and: [auth.filter, ...search] };
} else {
parser.search = { $and: this.getSearch(parser, crudOptions, action) };
try {
/* istanbul ignore else */
if (!req[PARSED_CRUD_REQUEST_KEY]) {
const { ctrlOptions, crudOptions, action } = this.getCrudInfo(context);
const parser = RequestQueryParser.create();

parser.parseQuery(req.query);

if (!isNil(ctrlOptions)) {
const search = this.getSearch(parser, crudOptions, action, req.params);
const auth = this.getAuth(parser, crudOptions, req);
parser.search = auth.or
? { $or: [auth.or, { $and: search }] }
: { $and: [auth.filter, ...search] };
} else {
parser.search = { $and: this.getSearch(parser, crudOptions, action) };
}

req[PARSED_CRUD_REQUEST_KEY] = this.getCrudRequest(parser, crudOptions);
}

req[PARSED_CRUD_REQUEST_KEY] = this.getCrudRequest(parser, crudOptions);
return next.handle();
} catch (error) {
/* istanbul ignore next */
throw error instanceof RequestQueryException
? new BadRequestException(error.message)
: error;
}

return next.handle();
}

getCrudRequest(
12 changes: 6 additions & 6 deletions packages/crud/test/crud.decorator.base.spec.ts
Original file line number Diff line number Diff line change
@@ -55,9 +55,9 @@ describe('#crud', () => {
return request(server)
.get('/test')
.query(query)
.expect(500)
.end((_, res) => {
const expected = { statusCode: 400, message: 'Invalid filter value' };
expect(res.status).toEqual(400);
expect(res.body).toMatchObject(expected);
done();
});
@@ -73,12 +73,12 @@ describe('#crud', () => {
it('should return status 400', (done) => {
return request(server)
.get('/test/invalid')
.expect(400)
.end((_, res) => {
const expected = {
statusCode: 400,
message: 'Invalid param id. Number expected',
};
expect(res.status).toEqual(400);
expect(res.body).toMatchObject(expected);
done();
});
@@ -107,8 +107,8 @@ describe('#crud', () => {
return request(server)
.post('/test')
.send(send)
.expect(400)
.end((_, res) => {
expect(res.status).toEqual(400);
expect(res.body.message[0].property).toBe('age');
done();
});
@@ -145,8 +145,8 @@ describe('#crud', () => {
return request(server)
.post('/test/bulk')
.send(send)
.expect(400)
.end((_, res) => {
expect(res.status).toEqual(400);
expect(res.body.message[0].property).toBe('bulk');
done();
});
@@ -176,8 +176,8 @@ describe('#crud', () => {
return request(server)
.put('/test/1')
.send(send)
.expect(400)
.end((_, res) => {
expect(res.status).toEqual(400);
expect(res.body.message[0].property).toBe('id');
done();
});
@@ -207,8 +207,8 @@ describe('#crud', () => {
return request(server)
.patch('/test/1')
.send(send)
.expect(400)
.end((_, res) => {
expect(res.status).toEqual(400);
expect(res.body.message[0].property).toBe('id');
done();
});
4 changes: 2 additions & 2 deletions packages/crud/test/crud.decorator.override.spec.ts
Original file line number Diff line number Diff line change
@@ -79,9 +79,9 @@ describe('#crud', () => {
return request(server)
.get('/test')
.query(query)
.expect(500)
.end((_, res) => {
const expected = { statusCode: 400, message: 'Invalid filter value' };
expect(res.status).toEqual(400);
expect(res.body).toMatchObject(expected);
done();
});
@@ -124,8 +124,8 @@ describe('#crud', () => {
return request(server)
.post('/test/bulk')
.send(send)
.expect(400)
.end((_, res) => {
expect(res.status).toEqual(400);
expect(res.body.message[0].property).toBe('bulk');
done();
});
4 changes: 2 additions & 2 deletions packages/crud/test/crud.dto.options.spec.ts
Original file line number Diff line number Diff line change
@@ -66,8 +66,8 @@ describe('#crud', () => {
return request(server)
.post('/test')
.send(send)
.expect(400)
.end((_, res) => {
expect(res.status).toEqual(400);
expect(res.body.message[0].property).toBe('age');
done();
});
@@ -97,8 +97,8 @@ describe('#crud', () => {
return request(server)
.patch('/test/1')
.send(send)
.expect(400)
.end((_, res) => {
expect(res.status).toEqual(400);
expect(res.body.message[0].property).toBe('email');
done();
});
2 changes: 1 addition & 1 deletion packages/util/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@nestjsx/util",
"description": "NestJs CRUD for RESTful APIs - util",
"version": "4.4.0",
"version": "4.4.1",
"license": "MIT",
"main": "lib/index.js",
"typings": "lib/index.d.ts",