Merge branch 'Carlos' of https://github.com/CarlosssFlores/censo_equipo_api into cante
This commit is contained in:
@@ -9,12 +9,11 @@ import { Adscripcion, Estado, Marca, Procesador, SistemaOperativo, TipoEquipo, U
|
||||
import { Movimiento } from 'src/movimiento/entities/movimiento.entity';
|
||||
|
||||
|
||||
|
||||
@Entity()
|
||||
export class Equipo {
|
||||
@PrimaryGeneratedColumn()
|
||||
id_equipo: number;
|
||||
|
||||
//checar bien aqui si estoy bien
|
||||
|
||||
@Column({ length: 100, nullable: true })
|
||||
inventario: string;
|
||||
@@ -55,11 +54,13 @@ export class Equipo {
|
||||
@ManyToOne(() => Marca, (marca) => marca.equipo)
|
||||
marca: Marca;
|
||||
|
||||
@OneToMany(() => Equipo, (equipo) => equipo.marca)
|
||||
@OneToMany(() => Equipo, (equipo) => equipo.marca)
|
||||
equipo: Equipo[];
|
||||
|
||||
@OneToMany(() => Movimiento, (mov) => mov.equipo)
|
||||
movimientos: Movimiento[];
|
||||
|
||||
@OneToMany(()=> Movimiento, movimiento=>movimiento.id_movimiento)
|
||||
movimiento:Movimiento[];
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,12 +1,21 @@
|
||||
import { Controller, Body, Patch, Param, ParseIntPipe, UseGuards } from '@nestjs/common';
|
||||
|
||||
import { Controller, Body, Patch, Param, ParseIntPipe, UseGuards,Get, Query } from '@nestjs/common';
|
||||
import { EquipoService } from './equipo.service';
|
||||
import { UpdateEquipoDto } from './dto/update-equipo.dto';
|
||||
import { AuthGuard } from '@nestjs/passport';
|
||||
|
||||
@Controller('equipo')
|
||||
@Controller('equipos')
|
||||
export class EquipoController {
|
||||
constructor(private readonly equipoService: EquipoService) {}
|
||||
|
||||
@Get('buscar')
|
||||
async buscarEquipos(
|
||||
@Query() filtros: any,
|
||||
@Query('page') page: number = 1,
|
||||
@Query('limit') limit: number = 10,
|
||||
) {
|
||||
return this.equipoService.buscarEquipos(filtros, +page, +limit);
|
||||
}
|
||||
@UseGuards(AuthGuard("jwt"))
|
||||
@Patch("update/:id")
|
||||
update(@Param('id', ParseIntPipe) id:number, @Body() equipoNuevo: UpdateEquipoDto) {
|
||||
|
||||
@@ -1,16 +1,90 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { UpdateEquipoDto } from './dto/update-equipo.dto';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import { Equipo } from './entities/equipo.entity';
|
||||
import { Repository } from 'typeorm';
|
||||
import { Equipo } from './entities/equipo.entity';
|
||||
import { UpdateEquipoDto } from './dto/update-equipo.dto'
|
||||
|
||||
@Injectable()
|
||||
export class EquipoService {
|
||||
constructor(
|
||||
@InjectRepository(Equipo)
|
||||
private readonly equipoRepository: Repository <Equipo>
|
||||
){}
|
||||
async updateEquipo(equipoNuevo:UpdateEquipoDto,id_equipo:number){
|
||||
private readonly equipoRepository: Repository<Equipo>,
|
||||
) {}
|
||||
|
||||
async buscarEquipos(filtros: any, page: number = 1, limit: number = 10) {
|
||||
const query = this.equipoRepository
|
||||
.createQueryBuilder('equipo')
|
||||
.leftJoinAndSelect('equipo.marca', 'marca')
|
||||
.leftJoinAndSelect('equipo.estado', 'estado')
|
||||
.leftJoinAndSelect('equipo.adscripcion', 'adscripcion')
|
||||
.leftJoinAndSelect('equipo.tipoEquipo', 'tipoEquipo')
|
||||
.leftJoinAndSelect('equipo.sistemaOperativo', 'sistemaOperativo')
|
||||
.leftJoinAndSelect('equipo.procesador', 'procesador')
|
||||
.leftJoinAndSelect('equipo.tipoUso', 'tipoUso');
|
||||
|
||||
// Filtros dinámicos
|
||||
if (filtros.inventario) {
|
||||
query.andWhere('equipo.inventario LIKE :inventario', {
|
||||
inventario: `%${filtros.inventario}%`,
|
||||
});
|
||||
}
|
||||
|
||||
if (filtros.tipoEquipo) {
|
||||
query.andWhere('tipoEquipo.id = :tipoEquipo', {
|
||||
tipoEquipo: filtros.tipoEquipo,
|
||||
});
|
||||
}
|
||||
|
||||
if (filtros.antiguedad) {
|
||||
query.andWhere('equipo.antiguedad LIKE :antiguedad', {
|
||||
antiguedad: `%${filtros.antiguedad}%`,
|
||||
});
|
||||
}
|
||||
|
||||
if (filtros.marca) {
|
||||
query.andWhere('marca.id = :marca', { marca: filtros.marca });
|
||||
}
|
||||
|
||||
if (filtros.estado) {
|
||||
query.andWhere('estado.id = :estado', { estado: filtros.estado });
|
||||
}
|
||||
|
||||
if (filtros.adscripcion) {
|
||||
query.andWhere('adscripcion.id = :adscripcion', {
|
||||
adscripcion: filtros.adscripcion,
|
||||
});
|
||||
}
|
||||
|
||||
if (filtros.tipoUso) {
|
||||
query.andWhere('tipoUso.id = :tipoUso', { tipoUso: filtros.tipoUso });
|
||||
}
|
||||
|
||||
if (filtros.procesador) {
|
||||
query.andWhere('procesador.id = :procesador', {
|
||||
procesador: filtros.procesador,
|
||||
});
|
||||
}
|
||||
|
||||
if (filtros.sistemaOperativo) {
|
||||
query.andWhere('sistemaOperativo.id = :sistemaOperativo', {
|
||||
sistemaOperativo: filtros.sistemaOperativo,
|
||||
});
|
||||
}
|
||||
|
||||
// Paginación
|
||||
query.skip((page - 1) * limit).take(limit);
|
||||
|
||||
// Ejecutar consulta
|
||||
const [data, total] = await query.getManyAndCount();
|
||||
|
||||
return {
|
||||
total,
|
||||
page,
|
||||
limit,
|
||||
data,
|
||||
};
|
||||
}
|
||||
async updateEquipo(equipoNuevo:UpdateEquipoDto,id_equipo:number){
|
||||
const updateData={
|
||||
lugar: equipoNuevo.lugar,
|
||||
modelo: equipoNuevo.modelo,
|
||||
@@ -36,3 +110,4 @@ export class EquipoService {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1 +1,15 @@
|
||||
export class CreateMovimientoDto {}
|
||||
import { IsNotEmpty, IsNumber, IsOptional, IsString } from 'class-validator';
|
||||
|
||||
export class CreateMovimientoDto {
|
||||
@IsNotEmpty()
|
||||
@IsNumber()
|
||||
idUsuario: number;
|
||||
|
||||
@IsNotEmpty()
|
||||
@IsNumber()
|
||||
idEquipo: number;
|
||||
|
||||
@IsOptional()
|
||||
@IsString()
|
||||
observaciones?: string;
|
||||
}
|
||||
|
||||
@@ -2,3 +2,4 @@ import { PartialType } from '@nestjs/mapped-types';
|
||||
import { CreateMovimientoDto } from './create-movimiento.dto';
|
||||
|
||||
export class UpdateMovimientoDto extends PartialType(CreateMovimientoDto) {}
|
||||
1;
|
||||
|
||||
@@ -1,26 +1,20 @@
|
||||
import { Equipo } from 'src/equipo/entities/equipo.entity';
|
||||
import { Usuario } from 'src/usuarios/entities/usuario.entity';
|
||||
import {
|
||||
Entity,
|
||||
PrimaryGeneratedColumn,
|
||||
Column,
|
||||
CreateDateColumn,
|
||||
ManyToOne,
|
||||
} from 'typeorm';
|
||||
import { Entity, PrimaryGeneratedColumn, Column, ManyToOne } from 'typeorm';
|
||||
|
||||
@Entity('movimientos')
|
||||
export class Movimiento {
|
||||
@PrimaryGeneratedColumn()
|
||||
id_movimiento: number;
|
||||
@CreateDateColumn({ name: 'fecha_movimiento' })
|
||||
|
||||
@ManyToOne(() => Movimiento, (id_usuario) => id_usuario.id_usuario)
|
||||
id_usuario: Movimiento;
|
||||
|
||||
@ManyToOne(() => Movimiento, (id_equipo) => id_equipo.id_equipo)
|
||||
id_equipo: Movimiento;
|
||||
|
||||
@Column({ name: 'fecha_movimiento' })
|
||||
fechaMovimiento: Date;
|
||||
|
||||
@Column({ type: 'text', nullable: true })
|
||||
observaciones: string;
|
||||
|
||||
@ManyToOne(() => Usuario, (usuario) => usuario.movimiento)
|
||||
usuario: Usuario;
|
||||
|
||||
@ManyToOne(() => Equipo, (equipo) => equipo.movimiento)
|
||||
equipo: Equipo;
|
||||
}
|
||||
|
||||
@@ -1,34 +1,18 @@
|
||||
import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
|
||||
import {
|
||||
Controller,
|
||||
Post,
|
||||
Get,
|
||||
Body,
|
||||
Param,
|
||||
ParseIntPipe,
|
||||
Patch,
|
||||
UseGuards,
|
||||
} from '@nestjs/common';
|
||||
import { MovimientoService } from './movimiento.service';
|
||||
import { CreateMovimientoDto } from './dto/create-movimiento.dto';
|
||||
import { UpdateMovimientoDto } from './dto/update-movimiento.dto';
|
||||
|
||||
@Controller('movimiento')
|
||||
@Controller('movimientos')
|
||||
export class MovimientoController {
|
||||
constructor(private readonly movimientoService: MovimientoService) {}
|
||||
|
||||
@Post()
|
||||
create(@Body() createMovimientoDto: CreateMovimientoDto) {
|
||||
return this.movimientoService.create(createMovimientoDto);
|
||||
}
|
||||
|
||||
@Get()
|
||||
findAll() {
|
||||
return this.movimientoService.findAll();
|
||||
}
|
||||
|
||||
@Get(':id')
|
||||
findOne(@Param('id') id: string) {
|
||||
return this.movimientoService.findOne(+id);
|
||||
}
|
||||
|
||||
@Patch(':id')
|
||||
update(@Param('id') id: string, @Body() updateMovimientoDto: UpdateMovimientoDto) {
|
||||
return this.movimientoService.update(+id, updateMovimientoDto);
|
||||
}
|
||||
|
||||
@Delete(':id')
|
||||
remove(@Param('id') id: string) {
|
||||
return this.movimientoService.remove(+id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { Movimiento } from './entities/movimiento.entity';
|
||||
import { MovimientoService } from './movimiento.service';
|
||||
import { MovimientoController } from './movimiento.controller';
|
||||
import { Usuario } from 'src/usuarios/entities/usuario.entity';
|
||||
import { Equipo } from 'src/equipo/entities/equipo.entity';
|
||||
|
||||
@Module({
|
||||
imports: [TypeOrmModule.forFeature([Movimiento, Usuario, Equipo])],
|
||||
controllers: [MovimientoController],
|
||||
providers: [MovimientoService],
|
||||
})
|
||||
|
||||
@@ -1,24 +1,43 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { Injectable, NotFoundException } from '@nestjs/common';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import { Repository } from 'typeorm';
|
||||
import { Movimiento } from './entities/movimiento.entity';
|
||||
import { Usuario } from 'src/usuarios/entities/usuario.entity';
|
||||
import { Equipo } from 'src/equipo/entities/equipo.entity';
|
||||
import { CreateMovimientoDto } from './dto/create-movimiento.dto';
|
||||
import { UpdateMovimientoDto } from './dto/update-movimiento.dto';
|
||||
|
||||
@Injectable()
|
||||
export class MovimientoService {
|
||||
constructor(
|
||||
@InjectRepository(Movimiento)
|
||||
private movimientoRepository: Repository<Movimiento>,
|
||||
private readonly movimientoRepo: Repository<Movimiento>,
|
||||
@InjectRepository(Usuario)
|
||||
private readonly usuarioRepo: Repository<Usuario>,
|
||||
|
||||
@InjectRepository(Equipo)
|
||||
private readonly equipoRepo: Repository<Equipo>,
|
||||
) {}
|
||||
|
||||
async crearMovimiento(
|
||||
usuario: Usuario,
|
||||
camposModificados: string[],
|
||||
): Promise<Movimiento> {
|
||||
const movimiento = new Movimiento();
|
||||
movimiento.usuario = usuario;
|
||||
movimiento.observaciones = `Se modificaron los campos: ${camposModificados.join(', ')}`;
|
||||
async crear(dto: CreateMovimientoDto) {
|
||||
const usuario = await this.usuarioRepo.findOne({
|
||||
where: { id_usuario: dto.idUsuario },
|
||||
});
|
||||
|
||||
return await this.movimientoRepository.save(movimiento);
|
||||
const equipo = await this.equipoRepo.findOne({
|
||||
where: { id_equipo: dto.idEquipo },
|
||||
});
|
||||
|
||||
if (!usuario || !equipo) {
|
||||
throw new Error('Usuario o equipo no encontrado');
|
||||
}
|
||||
|
||||
const movimiento = this.movimientoRepo.create({
|
||||
usuario,
|
||||
equipo,
|
||||
observaciones: dto.observaciones || undefined,
|
||||
});
|
||||
|
||||
return await this.movimientoRepo.save(movimiento);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import { Movimiento } from 'src/movimiento/entities/movimiento.entity';
|
||||
import {Column, Entity, ManyToOne, OneToMany, PrimaryGeneratedColumn} from 'typeorm';
|
||||
|
||||
import { Movimiento } from 'src/movimiento/entities/movimiento.entity';
|
||||
|
||||
@Entity()
|
||||
export class Usuario {
|
||||
@PrimaryGeneratedColumn()
|
||||
|
||||
Reference in New Issue
Block a user