From f73d279a1a15207e926b3d3b9173fe503d0ee774 Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Mon, 18 Jul 2022 16:01:24 -0500 Subject: [PATCH] modulo modelo listo --- src/app.module.ts | 4 ++++ src/carrito/carrito.module.ts | 2 ++ src/carrito/entity/carrito.entity.ts | 5 ++++ src/modelo/dto/input/create.dto.ts | 6 +++++ src/modelo/dto/output/modelo.dto.ts | 9 ++++++++ src/modelo/entity/modelo.entity.ts | 14 ++++++++++++ src/modelo/modelo.controller.spec.ts | 18 +++++++++++++++ src/modelo/modelo.controller.ts | 30 ++++++++++++++++++++++++ src/modelo/modelo.module.ts | 17 ++++++++++++++ src/modelo/modelo.service.spec.ts | 18 +++++++++++++++ src/modelo/modelo.service.ts | 34 ++++++++++++++++++++++++++++ src/status/status.module.ts | 2 +- 12 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 src/modelo/dto/input/create.dto.ts create mode 100644 src/modelo/dto/output/modelo.dto.ts create mode 100644 src/modelo/entity/modelo.entity.ts create mode 100644 src/modelo/modelo.controller.spec.ts create mode 100644 src/modelo/modelo.controller.ts create mode 100644 src/modelo/modelo.module.ts create mode 100644 src/modelo/modelo.service.spec.ts create mode 100644 src/modelo/modelo.service.ts diff --git a/src/app.module.ts b/src/app.module.ts index d994d30..3288b0f 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -19,6 +19,7 @@ import { InstitucionProgramaModule } from './institucion-programa/institucion-pr import { InstitucionTipoCarritoModule } from './institucion-tipo-carrito/institucion-tipo-carrito.module'; import { InstitucionTipoEntradaModule } from './institucion-tipo-entrada/institucion-tipo-entrada.module'; import { InstitucionUsuarioModule } from './institucion-usuario/institucion-usuario.module'; +import { ModeloModule } from './modelo/modelo.module'; import { ModuloModule } from './modulo/modulo.module'; import { MotivoModule } from './motivo/motivo.module'; import { MultaModule } from './multa/multa.module'; @@ -47,6 +48,7 @@ import { InstitucionPrograma } from './institucion-programa/entity/institucion-p import { InstitucionTipoCarrito } from './institucion-tipo-carrito/entity/institucion-tipo-carrito.entity'; import { InstitucionTipoEntrada } from './institucion-tipo-entrada/entity/institucion-tipo-entrada.entity'; import { InstitucionUsuario } from './institucion-usuario/entity/institucion-usuario.entity'; +import { Modelo } from './modelo/entity/modelo.entity'; import { Modulo } from './modulo/entity/modulo.entity'; import { Motivo } from './motivo/entity/motivo.entity'; import { Multa } from './multa/entity/multa.entity'; @@ -93,6 +95,7 @@ import { SoapClientModule } from './soap-client/soap-client.module'; InstitucionTipoCarrito, InstitucionTipoEntrada, InstitucionUsuario, + Modelo, Modulo, Motivo, Multa, @@ -137,6 +140,7 @@ import { SoapClientModule } from './soap-client/soap-client.module'; UsuarioModule, SoapClientModule, InstitucionUsuarioModule, + ModeloModule, ], }) export class AppModule {} diff --git a/src/carrito/carrito.module.ts b/src/carrito/carrito.module.ts index 2c031ad..573ca6f 100644 --- a/src/carrito/carrito.module.ts +++ b/src/carrito/carrito.module.ts @@ -6,12 +6,14 @@ import { CarritoService } from './carrito.service'; import { Carrito } from './entity/carrito.entity'; import { InstitucionModule } from '../institucion/institucion.module'; import { InstitucionTipoCarritoModule } from '../institucion-tipo-carrito/institucion-tipo-carrito.module'; +import { ModeloModule } from '../modelo/modelo.module'; import { ModuloModule } from '../modulo/modulo.module'; @Module({ imports: [ InstitucionModule, InstitucionTipoCarritoModule, + ModeloModule, ModuloModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([Carrito]), diff --git a/src/carrito/entity/carrito.entity.ts b/src/carrito/entity/carrito.entity.ts index 7df85b7..c68f634 100644 --- a/src/carrito/entity/carrito.entity.ts +++ b/src/carrito/entity/carrito.entity.ts @@ -7,6 +7,7 @@ import { PrimaryGeneratedColumn, } from 'typeorm'; import { Equipo } from '../../equipo/entity/equipo.entity'; +import { Modelo } from '../../modelo/entity/modelo.entity'; import { Modulo } from '../../modulo/entity/modulo.entity'; import { TipoCarrito } from '../../institucion-tipo-carrito/entity/tipo-carrito.entity'; @@ -27,6 +28,10 @@ export class Carrito { @Column({ type: String, nullable: false, length: 30 }) modelo: string; + // @ManyToOne(() => Modelo, (modelo) => modelo.carritos, { eager: true }) + // @JoinColumn({ name: 'id_modelo' }) + // modelo: Modelo; + @ManyToOne(() => Modulo, (modulo) => modulo.carritos, { eager: true }) @JoinColumn({ name: 'id_modulo' }) modulo: Modulo; diff --git a/src/modelo/dto/input/create.dto.ts b/src/modelo/dto/input/create.dto.ts new file mode 100644 index 0000000..c692246 --- /dev/null +++ b/src/modelo/dto/input/create.dto.ts @@ -0,0 +1,6 @@ +import { IsString } from 'class-validator'; + +export class CreateModeloDto { + @IsString() + modelo; +} diff --git a/src/modelo/dto/output/modelo.dto.ts b/src/modelo/dto/output/modelo.dto.ts new file mode 100644 index 0000000..9455115 --- /dev/null +++ b/src/modelo/dto/output/modelo.dto.ts @@ -0,0 +1,9 @@ +import { Expose } from 'class-transformer'; + +export class ModeloOutputDto { + @Expose() + id_modelo; + + @Expose() + modelo; +} diff --git a/src/modelo/entity/modelo.entity.ts b/src/modelo/entity/modelo.entity.ts new file mode 100644 index 0000000..06326fd --- /dev/null +++ b/src/modelo/entity/modelo.entity.ts @@ -0,0 +1,14 @@ +import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from 'typeorm'; +import { Carrito } from '../../carrito/entity/carrito.entity'; + +@Entity() +export class Modelo { + @PrimaryGeneratedColumn() + id_modelo: number; + + @Column({ type: String, nullable: false, length: 20 }) + modelo: string; + + @OneToMany(() => Carrito, (carrito) => carrito.modelo) + carritos: Carrito[]; +} diff --git a/src/modelo/modelo.controller.spec.ts b/src/modelo/modelo.controller.spec.ts new file mode 100644 index 0000000..39abb42 --- /dev/null +++ b/src/modelo/modelo.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { ModeloController } from './modelo.controller'; + +describe('ModeloController', () => { + let controller: ModeloController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [ModeloController], + }).compile(); + + controller = module.get(ModeloController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/modelo/modelo.controller.ts b/src/modelo/modelo.controller.ts new file mode 100644 index 0000000..01dc8be --- /dev/null +++ b/src/modelo/modelo.controller.ts @@ -0,0 +1,30 @@ +import { Body, Controller, Get, Post, UseGuards } from '@nestjs/common'; +import { AuthGuard } from '@nestjs/passport'; +import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; +import { Serealize } from '../interceptors/serialize.interceptor'; +import { ModeloService } from './modelo.service'; +import { ModeloOutputDto } from './dto/output/modelo.dto'; +import { CreateModeloDto } from './dto/input/create.dto'; + +@Controller('modelo') +@ApiTags('modelo') +export class ModeloController { + constructor(private modeloService: ModeloService) {} + + @Serealize(ModeloOutputDto) + @Get() + @UseGuards(AuthGuard('jwt')) + @ApiOperation({ description: 'Endpoint que retorna todos los modelos.' }) + @ApiBearerAuth('jwt') + get() { + return this.modeloService.findAll(); + } + + @Post() + @UseGuards(AuthGuard('jwt')) + @ApiOperation({ description: 'Endpoint que crea un nuevo modelo.' }) + @ApiBearerAuth('jwt') + create(@Body() body: CreateModeloDto) { + return this.modeloService.create(body.modelo); + } +} diff --git a/src/modelo/modelo.module.ts b/src/modelo/modelo.module.ts new file mode 100644 index 0000000..2fe3807 --- /dev/null +++ b/src/modelo/modelo.module.ts @@ -0,0 +1,17 @@ +import { Module } from '@nestjs/common'; +import { PassportModule } from '@nestjs/passport'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { ModeloController } from './modelo.controller'; +import { ModeloService } from './modelo.service'; +import { Modelo } from './entity/modelo.entity'; + +@Module({ + imports: [ + PassportModule.register({ defaultStrategy: 'jwt' }), + TypeOrmModule.forFeature([Modelo]), + ], + controllers: [ModeloController], + providers: [ModeloService], + exports: [ModeloService], +}) +export class ModeloModule {} diff --git a/src/modelo/modelo.service.spec.ts b/src/modelo/modelo.service.spec.ts new file mode 100644 index 0000000..f12550a --- /dev/null +++ b/src/modelo/modelo.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { ModeloService } from './modelo.service'; + +describe('ModeloService', () => { + let service: ModeloService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ModeloService], + }).compile(); + + service = module.get(ModeloService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/modelo/modelo.service.ts b/src/modelo/modelo.service.ts new file mode 100644 index 0000000..2c4dcc7 --- /dev/null +++ b/src/modelo/modelo.service.ts @@ -0,0 +1,34 @@ +import { ConflictException, Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { Modelo } from './entity/modelo.entity'; + +@Injectable() +export class ModeloService { + constructor( + @InjectRepository(Modelo) private repository: Repository, + ) {} + + create(modelo: string) { + return this.findByModelo(modelo, false) + .then((existeModelo) => { + if (existeModelo) throw new ConflictException('Ya existe este modelo.'); + return this.repository.save(this.repository.create({ modelo })); + }) + .then((_) => ({ + message: 'Se creó correctamente un nuevo modelo.', + })); + } + + findAll() { + return this.repository.find(); + } + + findByModelo(modelo: string, validarExistencia = true) { + return this.repository.findOne({ modelo }).then((modelo) => { + if (validarExistencia && !modelo) + throw new ConflictException('No existe este modelo.'); + return modelo; + }); + } +} diff --git a/src/status/status.module.ts b/src/status/status.module.ts index 5b49c0d..060a111 100644 --- a/src/status/status.module.ts +++ b/src/status/status.module.ts @@ -7,8 +7,8 @@ import { Status } from './entity/status.entity'; @Module({ imports: [ - TypeOrmModule.forFeature([Status]), PassportModule.register({ defaultStrategy: 'jwt' }), + TypeOrmModule.forFeature([Status]), ], controllers: [StatusController], providers: [StatusService],