diff --git a/src/app.module.ts b/src/app.module.ts index 1d5ae5d..f77c8d1 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -38,7 +38,7 @@ import { Infraccion } from './infraccion/infraccion.entity'; import { Institucion } from './institucion/institucion.entity'; import { InstitucionDia } from './institucion-dia/institucion-dia.entity'; import { InstitucionInfraccion } from './institucion-infraccion/institucion-infraccion.entity'; -import { Modulo } from './modulo/modulo.entity'; +import { Modulo } from './modulo/entity/modulo.entity'; import { Motivo } from './motivo/motivo.entity'; import { Multa } from './multa/multa.entity'; import { Operador } from './operador/operador.entity'; diff --git a/src/carrito/carrito.entity.ts b/src/carrito/carrito.entity.ts index 35725b7..d92c612 100644 --- a/src/carrito/carrito.entity.ts +++ b/src/carrito/carrito.entity.ts @@ -6,7 +6,7 @@ import { ManyToOne, JoinColumn, } from 'typeorm'; -import { Modulo } from '../modulo/modulo.entity'; +import { Modulo } from '../modulo/entity/modulo.entity'; import { Equipo } from '../equipo/equipo.entity'; import { TipoCarrito } from '../tipo-carrito/tipo-carrito.entity'; diff --git a/src/institucion/institucion.entity.ts b/src/institucion/institucion.entity.ts index 1f3c4de..4f6d751 100644 --- a/src/institucion/institucion.entity.ts +++ b/src/institucion/institucion.entity.ts @@ -2,7 +2,7 @@ import { Entity, Column, PrimaryGeneratedColumn, OneToMany } from 'typeorm'; import { InstitucionDia } from '../institucion-dia/institucion-dia.entity'; import { InstitucionInfraccion } from '../institucion-infraccion/institucion-infraccion.entity'; import { Carrera } from '../carrera/carrera.entity'; -import { Modulo } from '../modulo/modulo.entity'; +import { Modulo } from '../modulo/entity/modulo.entity'; import { Operador } from '../operador/operador.entity'; import { Usuario } from '../usuario/usuario.entity'; diff --git a/src/institucion/institucion.service.ts b/src/institucion/institucion.service.ts index b8d653a..6f780c0 100644 --- a/src/institucion/institucion.service.ts +++ b/src/institucion/institucion.service.ts @@ -13,7 +13,7 @@ export class InstitucionService { return this.repository.find(); } - async findById(id_institucion: number) { + findById(id_institucion: number) { return this.repository.findOne({ id_institucion }).then((institucion) => { if (!institucion) throw new NotFoundException('No existe esta institución.'); diff --git a/src/modulo/dto/crear-modulo.dto.ts b/src/modulo/dto/modulo-crear.dto.ts similarity index 81% rename from src/modulo/dto/crear-modulo.dto.ts rename to src/modulo/dto/modulo-crear.dto.ts index 458deb6..732a578 100644 --- a/src/modulo/dto/crear-modulo.dto.ts +++ b/src/modulo/dto/modulo-crear.dto.ts @@ -1,6 +1,6 @@ import { IsNumber, IsString } from 'class-validator'; -export class CrearModuloDto { +export class ModuloCrearDto { @IsNumber() id_institucion: number; diff --git a/src/modulo/dto/modulo-update.dto.ts b/src/modulo/dto/modulo-update.dto.ts new file mode 100644 index 0000000..c62fe59 --- /dev/null +++ b/src/modulo/dto/modulo-update.dto.ts @@ -0,0 +1,14 @@ +import { IsBoolean, IsNumber, IsOptional, IsString } from 'class-validator'; + +export class ModuloUpdateDto { + @IsNumber() + id_modulo: number; + + @IsString() + @IsOptional() + modulo?: string; + + @IsBoolean() + @IsOptional() + activo?: boolean; +} diff --git a/src/modulo/modulo.entity.ts b/src/modulo/entity/modulo.entity.ts similarity index 62% rename from src/modulo/modulo.entity.ts rename to src/modulo/entity/modulo.entity.ts index c1e0231..4a6cf31 100644 --- a/src/modulo/modulo.entity.ts +++ b/src/modulo/entity/modulo.entity.ts @@ -6,21 +6,23 @@ import { ManyToOne, JoinColumn, } from 'typeorm'; -import { Carrito } from '../carrito/carrito.entity'; -import { Institucion } from '../institucion/institucion.entity'; +import { Carrito } from '../../carrito/carrito.entity'; +import { Institucion } from '../../institucion/institucion.entity'; @Entity() export class Modulo { @PrimaryGeneratedColumn() id_modulo: number; - @Column() + @Column({ type: String, nullable: false, length: 50 }) modulo: string; - @Column({ default: false }) + @Column({ type: Boolean, nullable: false, default: false }) activo: boolean; - @ManyToOne(() => Institucion, (institucion) => institucion.modulos) + @ManyToOne(() => Institucion, (institucion) => institucion.modulos, { + eager: true, + }) @JoinColumn({ name: 'id_institucion' }) institucion: Institucion; diff --git a/src/modulo/modulo.controller.ts b/src/modulo/modulo.controller.ts index 7f214c7..edc2182 100644 --- a/src/modulo/modulo.controller.ts +++ b/src/modulo/modulo.controller.ts @@ -1,8 +1,9 @@ -import { Body, Controller, Get, Post, Query } from '@nestjs/common'; +import { Body, Controller, Get, Post, Put, Query } from '@nestjs/common'; import { ModuloService } from './modulo.service'; // import { Serealize } from '../interceptors/serialize.interceptor'; import { IdInstitucionDto } from '../dto/id-institucion.dto'; -import { CrearModuloDto } from './dto/crear-modulo.dto'; +import { ModuloCrearDto } from './dto/modulo-crear.dto'; +import { ModuloUpdateDto } from './dto/modulo-update.dto'; @Controller('modulo') export class ModuloController { constructor(private moduloService: ModuloService) {} @@ -15,7 +16,12 @@ export class ModuloController { } @Post() - create(@Body() body: CrearModuloDto) { + create(@Body() body: ModuloCrearDto) { return this.moduloService.create(body.id_institucion, body.modulo); } + + @Put() + update(@Body() body: ModuloUpdateDto) { + return this.moduloService.update(body); + } } diff --git a/src/modulo/modulo.module.ts b/src/modulo/modulo.module.ts index ccd0acb..cd1fbfb 100644 --- a/src/modulo/modulo.module.ts +++ b/src/modulo/modulo.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { ModuloController } from './modulo.controller'; -import { Modulo } from './modulo.entity'; +import { Modulo } from './entity/modulo.entity'; import { ModuloService } from './modulo.service'; import { InstitucionModule } from '../institucion/institucion.module'; diff --git a/src/modulo/modulo.service.ts b/src/modulo/modulo.service.ts index d03edbf..a0da456 100644 --- a/src/modulo/modulo.service.ts +++ b/src/modulo/modulo.service.ts @@ -1,7 +1,11 @@ -import { ConflictException, Injectable } from '@nestjs/common'; +import { + ConflictException, + Injectable, + NotFoundException, +} from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; -import { Modulo } from './modulo.entity'; +import { Modulo } from './entity/modulo.entity'; import { InstitucionService } from '../institucion/institucion.service'; @Injectable() @@ -11,7 +15,14 @@ export class ModuloService { private institucionService: InstitucionService, ) {} - async findAllByIdInstitucion(id_institucion: number) { + findById(id_modulo: number) { + return this.moduloRepository.findOne({ id_modulo }).then((modulo) => { + if (!modulo) throw new NotFoundException('No existe este módulo.'); + return modulo; + }); + } + + findAllByIdInstitucion(id_institucion: number) { return this.institucionService .findById(id_institucion) .then((institucion) => this.moduloRepository.find({ institucion })); @@ -35,4 +46,21 @@ export class ModuloService { }) .then(() => ({ message: 'Se creo correctamente el módulo.' })); } + + async update(attrs: Partial) { + const modulo = await this.findById(attrs.id_modulo); + + return this.moduloRepository + .findOne({ modulo: attrs.modulo, institucion: modulo.institucion }) + .then((existeModulo) => { + if (existeModulo) + throw new ConflictException( + 'Ya existe un módulo con este nombre, intente con otro nombre.', + ); + Object.assign(modulo, attrs); + return this.moduloRepository.save(modulo).then(() => ({ + message: 'Se actualizo correctamente la información del módulo.', + })); + }); + } }