From ffc65dfbe9da2a73a9cf719836d1f572716e1e5c Mon Sep 17 00:00:00 2001 From: TheNightmareX Date: Wed, 7 Apr 2021 19:41:42 +0800 Subject: [PATCH] feat(crud-typeorm): ignore entity decorators when saving The `@Exclude()` decorator is used to exclude some fields in the entity in responses, but will cause confusion when creating entities because the fields will also be excluded before saving to the database. --- .../crud-typeorm/src/typeorm-crud.service.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/crud-typeorm/src/typeorm-crud.service.ts b/packages/crud-typeorm/src/typeorm-crud.service.ts index 32a9d9f1..5859ff01 100644 --- a/packages/crud-typeorm/src/typeorm-crud.service.ts +++ b/packages/crud-typeorm/src/typeorm-crud.service.ts @@ -181,7 +181,9 @@ export class TypeOrmCrudService extends CrudService { const toSave = !allowParamsOverride ? { ...found, ...dto, ...paramsFilters, ...req.parsed.authPersist } : { ...found, ...dto, ...req.parsed.authPersist }; - const updated = await this.repo.save(plainToClass(this.entityType, toSave)); + const updated = await this.repo.save( + plainToClass(this.entityType, toSave, { ignoreDecorators: true }), + ); if (returnShallow) { return updated; @@ -221,7 +223,9 @@ export class TypeOrmCrudService extends CrudService { ...dto, ...req.parsed.authPersist, }; - const replaced = await this.repo.save(plainToClass(this.entityType, toSave)); + const replaced = await this.repo.save( + plainToClass(this.entityType, toSave, { ignoreDecorators: true }), + ); if (returnShallow) { return replaced; @@ -249,7 +253,7 @@ export class TypeOrmCrudService extends CrudService { const { returnDeleted } = req.options.routes.deleteOneBase; const found = await this.getOneOrFail(req, returnDeleted); const toReturn = returnDeleted - ? plainToClass(this.entityType, { ...found }) + ? plainToClass(this.entityType, { ...found }, { ignoreDecorators: true }) : undefined; const deleted = req.options.query.softDelete === true @@ -448,7 +452,11 @@ export class TypeOrmCrudService extends CrudService { return dto instanceof this.entityType ? Object.assign(dto, parsed.authPersist) - : plainToClass(this.entityType, { ...dto, ...parsed.authPersist }); + : plainToClass( + this.entityType, + { ...dto, ...parsed.authPersist }, + { ignoreDecorators: true }, + ); } protected getAllowedColumns(columns: string[], options: QueryOptions): string[] {