Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Queries are returning a duplicated id element inside an Array #823

Open
sebabromberg opened this issue May 5, 2023 · 2 comments
Open

Queries are returning a duplicated id element inside an Array #823

sebabromberg opened this issue May 5, 2023 · 2 comments

Comments

@sebabromberg
Copy link

sebabromberg commented May 5, 2023

Bug Report

Al queries "findOne" or "find" are returning the id field as Array with duplicated id value inside.
TypeORM is returning ok, i've consoled the returning values. The controller layer is failing.

Current behavior

"id": [
14,
14
],

Input Code

Model:

import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from 'typeorm';
import {
  IsString,
  MinLength,
  IsDefined,
  IsEmail,
  IsBoolean,
} from 'class-validator';
import { Modules } from './modules.model';

@Entity({ name: 'dbo.GLOBAL_usuarios' })
export class User {
  @PrimaryGeneratedColumn({ type: 'integer' })
  id: number;

  @Column()
  @IsDefined({ always: true })
  @IsEmail()
  @MinLength(2, { always: true })
  email: string;

  @Column()
  @IsDefined({ always: true })
  @IsString({ always: true })
  @MinLength(2, { always: true })
  username: string;

  @Column()
  @IsDefined({ always: true })
  @IsString({ always: true })
  @MinLength(2, { always: true })
  nombre: string;

  @Column()
  @IsDefined({ always: true })
  @IsString({ always: true })
  @MinLength(2, { always: true })
  apellido: string;

  @Column()
  @IsDefined({ always: true })
  @IsString({ always: true })
  @MinLength(2, { always: true })
  password: string;

  @Column()
  @IsDefined({ always: true })
  @IsString({ always: true })
  @MinLength(2, { always: true })
  telefono: string;

  @Column()
  @IsBoolean()
  estado: boolean;

  @Column()
  @IsDefined({ always: true })
  @IsString({ always: true })
  @MinLength(2, { always: true })
  secret: string;

  @Column()
  usuario_creacion: number;

  @Column()
  usuario_actualizacion: number;

  @Column()
  recibir_email: boolean;

  @Column()
  fecha_creacion: Date;

  @Column()
  fecha_actualizacion: Date;

  @OneToMany(() => Modules, (module) => module.idUsuario, { eager: true })
  modules: Modules[];
}

Controller:

import {
  Body,
  Controller,
  Delete,
  Post,
  UseGuards,
  UseInterceptors,
  Patch,
  Param,
} from '@nestjs/common';
import {
  ApiBearerAuth,
  ApiOperation,
  ApiParam,
  ApiTags,
} from '@nestjs/swagger';
import {
  Crud,
  CrudController,
  CrudRequest,
  CrudRequestInterceptor,
  Override,
  ParsedBody,
  ParsedRequest,
} from '@nestjsx/crud';
import { JwtAuthGuard } from 'src/auth/guards/jwt-auth.guard';
import { createHash } from 'crypto';
import { User } from '../model/users.model';
import { UsersService } from '../service/users.service';
import AddUserModuleDto from '../dto/addUserModule.dto';
import * as speakeasy from 'speakeasy';

@Crud({
  model: {
    type: User,
  },
  params: {
    id: {
      field: 'id',
      type: 'number',
      primary: true,
    },
  },
  query: {
    exclude: ['password'],
    join: {
      modules: {
        eager: true,
      },
    },
  },
})
@Controller('users')
@ApiTags('Usuarios')
@ApiBearerAuth()
@UseGuards(JwtAuthGuard)
export class UsersController implements CrudController<User> {
  constructor(public service: UsersService) {}
}

Expected behavior

Returning the id as a number, not an array.

Possible Solution

Keep "typeorm": "^0.2.37" instead of 0.3.x

Environment


 "dependencies": {
    "@nestjs-modules/mailer": "^1.8.1",
    "@nestjs/common": "^9.0.0",
    "@nestjs/config": "^2.3.1",
    "@nestjs/core": "^9.0.0",
    "@nestjs/jwt": "^10.0.3",
    "@nestjs/passport": "^9.0.3",
    "@nestjs/platform-express": "^9.0.0",
    "@nestjs/swagger": "^6.3.0",
    "@nestjs/typeorm": "^9.0.1",
    "@nestjsx/crud": "^5.0.0-alpha.3",
    "@nestjsx/crud-typeorm": "^5.0.0-alpha.3",
    "class-transformer": "^0.5.1",
    "class-validator": "^0.14.0",
    "compression": "^1.7.4",
    "cookie-parser": "^1.4.6",
    "express-session": "^1.17.3",
    "helmet": "^6.1.5",
    "mssql": "^9.1.1",
    "passport": "^0.6.0",
    "passport-jwt": "^4.0.1",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^7.2.0",
    "speakeasy": "^2.0.0",
    "typeorm": "^0.3.15"
  },

Repository with minimal reproduction

N/A

@MrMaz
Copy link

MrMaz commented Jun 2, 2023

This was fixed with this PR #797

@afilp
Copy link

afilp commented Jun 20, 2023

Hello @MrMaz
Is this package maintained (seems not?), or should we try other forks (for example: https://github.com/gid-oss/dataui-nestjs-crud)?
It would be nice if nestjs itself were supporting such an essential package. Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants