Converting Entity to Dto in NestJS

31 views Asked by At

I am trying to convert the categories entity to an categories dto but I am running into some issues here.

CategoriesController

  @Post()
  async createCategory(
    @Body() createCategoryDto: CreateCategoryDto,
  ): Promise<CategoriesDto> {
    return await this._categoryService.createCategory(createCategoryDto);
  }

CategoriesService

  async createCategory(
    createCategoryDto: CreateCategoryDto,
  ): Promise<CategoriesDto> {
    const newCategory =
      await this._categoryRepository.createCategory(createCategoryDto);

    return new CategoriesDto(newCategory);
  }

CategoriesRepository

  async createCategory(
    createCategoryDto: CreateCategoryDto,
  ): Promise<Categories> {
    try {
      const newCategory = this._repository.create(createCategoryDto);
      return await this._repository.save(newCategory);
    } catch (err) {
      throw new InternalServerErrorException(err);
    }
  }

DTO's

export class BaseCategoryDto {
  @IsNotEmpty()
  name: string;
  @Optional()
  description: string;

  constructor(category: Categories) {
    this.name = category.name;
    this.description = category.description;
  }
}

export class CategoriesDto extends BaseCategoryDto {
  id: string;

  constructor(category: Categories) {
    super(category);
    this.id = category.id;
  }
}

export class UpdateCategoriesDto extends CategoriesDto {}

export class CreateCategoryDto extends BaseCategoryDto {}

I was expecting to receive an object looking like this:

"category": {
    "name": "Pije",
    "description": null,
    "id": "644f6010-ddf1-4f13-adef-339a42cfaeb5"
}

but instead I got an error saying

TypeError: Cannot read properties of undefined (reading 'name')
    at new BaseCategoryDto (src\categories\categories.dto.ts:13:26)
    at new CreateCategoryDto (src\categories\categories.dto.ts:29:1)
    at TransformOperationExecutor.transform (node_modules\src\TransformOperationExecutor.ts:160:22)
    at ClassTransformer.plainToInstance (node_modules\src\ClassTransformer.ts:77:21)
    at Object.plainToClass (node_modules\src\index.ts:71:27)
    at ValidationPipe.transform (node_modules\@nestjs\common\pipes\validation.pipe.js:60:39)
    at node_modules\@nestjs\core\pipes\pipes-consumer.js:16:33
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
0

There are 0 answers