diff --git a/src/carrito/carrito.controller.ts b/src/carrito/carrito.controller.ts index 83e8a40..6d018fa 100644 --- a/src/carrito/carrito.controller.ts +++ b/src/carrito/carrito.controller.ts @@ -1,16 +1,20 @@ import { Body, Controller, Get, Post, Put, Query } from '@nestjs/common'; import { ApiBody, ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger'; +import { Serealize } from '../interceptors/serialize.interceptor'; import { CarritoService } from './carrito.service'; -import { CarritoCreateDto } from './dto/carrito-create.dto'; -import { CarritoUpdateDto } from './dto/carrito-update.dto'; -import { CarritoCarritosDto } from './dto/carrito-carritos-dto'; -import { CarritoDto } from './dto/carrito.dto'; +import { CarritoDto } from './dto/input/carrito.dto'; +import { CarritosDto } from './dto/input/carritos.dto'; +import { CreateCarritoDto } from './dto/input/create.dto'; +import { UpdateCarritoDto } from './dto/input/update.dto'; +import { CarritoOutputDto } from './dto/output/carrito.dto'; +import { CarritosOutputDto } from './dto/output/carritos.dto'; @Controller('carrito') @ApiTags('carrito') export class CarritoController { constructor(private carritoService: CarritoService) {} + @Serealize(CarritoOutputDto) @Get('carrito') @ApiOperation({ description: 'Endpoint que retorna la información de un carrito.', @@ -24,6 +28,7 @@ export class CarritoController { return this.carritoService.findById(parseInt(query.id_carrito)); } + @Serealize(CarritosOutputDto) @Get('carritos') @ApiOperation({ description: @@ -64,7 +69,7 @@ export class CarritoController { type: 'string', required: false, }) - carritos(@Query() query: CarritoCarritosDto) { + carritos(@Query() query: CarritosDto) { return this.carritoService.findAll(query); } @@ -80,7 +85,7 @@ export class CarritoController { }, }, }) - create(@Body() body: CarritoCreateDto) { + create(@Body() body: CreateCarritoDto) { return this.carritoService.create( body.id_modulo, body.id_tipo_carrito, @@ -110,7 +115,7 @@ export class CarritoController { }, }, }) - update(@Body() body: CarritoUpdateDto) { + update(@Body() body: UpdateCarritoDto) { return this.carritoService.update( body, body.id_modulo, diff --git a/src/carrito/carrito.service.ts b/src/carrito/carrito.service.ts index ac109ab..fd750f6 100644 --- a/src/carrito/carrito.service.ts +++ b/src/carrito/carrito.service.ts @@ -68,13 +68,6 @@ export class CarritoService { }); } - findById(id_carrito: number) { - return this.repository.findOne({ id_carrito }).then((carrito) => { - if (!carrito) throw new NotFoundException('No existe este carrito.'); - return carrito; - }); - } - async findAll(filtros: { pagina: string; activo?: string; @@ -108,12 +101,23 @@ export class CarritoService { if (institucion) busqueda.modulo = { institucion }; if (modulo) busqueda.modulo = modulo; return this.repository.findAndCount({ + join: { + alias: 'c', + innerJoinAndSelect: { m: 'c.modulo', i: 'm.institucion' }, + }, where: busqueda, skip: (parseInt(filtros.pagina) - 1) * 25, take: 25, }); } + findById(id_carrito: number) { + return this.repository.findOne({ id_carrito }).then((carrito) => { + if (!carrito) throw new NotFoundException('No existe este carrito.'); + return carrito; + }); + } + async findCarrito( id_modulo: number | Modulo, id_tipo_carrito: number | TipoCarrito, diff --git a/src/carrito/dto/carrito.dto.ts b/src/carrito/dto/input/carrito.dto.ts similarity index 100% rename from src/carrito/dto/carrito.dto.ts rename to src/carrito/dto/input/carrito.dto.ts diff --git a/src/carrito/dto/carrito-carritos-dto.ts b/src/carrito/dto/input/carritos.dto.ts similarity index 92% rename from src/carrito/dto/carrito-carritos-dto.ts rename to src/carrito/dto/input/carritos.dto.ts index d641396..93db561 100644 --- a/src/carrito/dto/carrito-carritos-dto.ts +++ b/src/carrito/dto/input/carritos.dto.ts @@ -5,7 +5,7 @@ import { IsString, } from 'class-validator'; -export class CarritoCarritosDto { +export class CarritosDto { @IsNumberString() pagina: string; diff --git a/src/carrito/dto/carrito-create.dto.ts b/src/carrito/dto/input/create.dto.ts similarity index 86% rename from src/carrito/dto/carrito-create.dto.ts rename to src/carrito/dto/input/create.dto.ts index ef37bab..0c559ce 100644 --- a/src/carrito/dto/carrito-create.dto.ts +++ b/src/carrito/dto/input/create.dto.ts @@ -1,6 +1,6 @@ import { IsNumber, IsString } from 'class-validator'; -export class CarritoCreateDto { +export class CreateCarritoDto { @IsNumber() id_modulo: number; diff --git a/src/carrito/dto/carrito-update.dto.ts b/src/carrito/dto/input/update.dto.ts similarity index 92% rename from src/carrito/dto/carrito-update.dto.ts rename to src/carrito/dto/input/update.dto.ts index 55734cc..565bdb4 100644 --- a/src/carrito/dto/carrito-update.dto.ts +++ b/src/carrito/dto/input/update.dto.ts @@ -1,6 +1,6 @@ import { IsBoolean, IsInt, IsOptional, IsString } from 'class-validator'; -export class CarritoUpdateDto { +export class UpdateCarritoDto { @IsInt() id_carrito: number; diff --git a/src/carrito/dto/output/carrito.dto.ts b/src/carrito/dto/output/carrito.dto.ts new file mode 100644 index 0000000..be4b881 --- /dev/null +++ b/src/carrito/dto/output/carrito.dto.ts @@ -0,0 +1,28 @@ +import { Expose, Type } from 'class-transformer'; +import { ModuloOutputDto } from '../../../modulo/dto/output/modulo.dto'; +import { TipoCarritoOutputDto } from '../../../institucion-tipo-carrito/dto/output/tipo-carrito.dto'; + +export class CarritoOutputDto { + @Expose() + id_carrito; + + @Expose() + carrito; + + @Expose() + activo; + + @Expose() + marca; + + @Expose() + modelo; + + @Type(() => ModuloOutputDto) + @Expose() + modulo; + + @Type(() => TipoCarritoOutputDto) + @Expose() + tipoCarrito; +} diff --git a/src/carrito/dto/output/carritos.dto.ts b/src/carrito/dto/output/carritos.dto.ts new file mode 100644 index 0000000..90e0409 --- /dev/null +++ b/src/carrito/dto/output/carritos.dto.ts @@ -0,0 +1,22 @@ +import { Expose, Type } from 'class-transformer'; +import { TipoCarritoOutputDto } from '../../../institucion-tipo-carrito/dto/output/tipo-carrito.dto'; +import { ModulosOutputDto } from '../../../modulo/dto/output/modulos.dto'; + +export class CarritosOutputDto { + @Expose() + id_carrito; + + @Expose() + carrito; + + @Expose() + activo; + + @Type(() => ModulosOutputDto) + @Expose() + modulo; + + @Type(() => TipoCarritoOutputDto) + @Expose() + tipoCarrito; +} diff --git a/src/carrito/entity/carrito.entity.ts b/src/carrito/entity/carrito.entity.ts index 9def3b0..7df85b7 100644 --- a/src/carrito/entity/carrito.entity.ts +++ b/src/carrito/entity/carrito.entity.ts @@ -27,7 +27,7 @@ export class Carrito { @Column({ type: String, nullable: false, length: 30 }) modelo: string; - @ManyToOne(() => Modulo, (modulo) => modulo.carritos) + @ManyToOne(() => Modulo, (modulo) => modulo.carritos, { eager: true }) @JoinColumn({ name: 'id_modulo' }) modulo: Modulo; diff --git a/src/modulo/dto/output/modulo.dto.ts b/src/modulo/dto/output/modulo.dto.ts new file mode 100644 index 0000000..700df15 --- /dev/null +++ b/src/modulo/dto/output/modulo.dto.ts @@ -0,0 +1,17 @@ +import { Expose, Type } from 'class-transformer'; +import { InstitucionesOutputDto } from '../../../institucion/dto/output/instituciones.dto'; + +export class ModuloOutputDto { + @Expose() + activo; + + @Expose() + id_modulo; + + @Expose() + modulo; + + @Expose() + @Type(() => InstitucionesOutputDto) + institucion; +}