created counter
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
import { join } from 'path';
|
||||
import { Equipo } from 'src/equipo/entities/equipo.entity';
|
||||
import { Usuario } from 'src/usuarios/entities/usuario.entity';
|
||||
import {
|
||||
|
||||
@@ -1,18 +1,32 @@
|
||||
import {
|
||||
Controller,
|
||||
Post,
|
||||
Get,
|
||||
Body,
|
||||
Param,
|
||||
ParseIntPipe,
|
||||
Patch,
|
||||
UseGuards,
|
||||
Req,
|
||||
NotFoundException,
|
||||
} from '@nestjs/common';
|
||||
import { MovimientoService } from './movimiento.service';
|
||||
import { CreateMovimientoDto } from './dto/create-movimiento.dto';
|
||||
import { UpdateMovimientoDto } from './dto/update-movimiento.dto';
|
||||
import { AuthGuard } from '@nestjs/passport';
|
||||
|
||||
@Controller('movimientos')
|
||||
export class MovimientoController {
|
||||
constructor(private readonly movimientoService: MovimientoService) {}
|
||||
|
||||
@UseGuards(AuthGuard('jwt'))
|
||||
@Get('historial')
|
||||
buscarEquipoPorToken(@Req() req: any) {
|
||||
const id_usuario = req.user.id;
|
||||
|
||||
if (!id_usuario) {
|
||||
throw new NotFoundException('token sin id_usuario');
|
||||
}
|
||||
|
||||
return this.movimientoService.searchByIdUser(id_usuario);
|
||||
}
|
||||
|
||||
@UseGuards(AuthGuard('jwt'))
|
||||
@Get('dia')
|
||||
EquiposCensadosPorDia() {
|
||||
return this.movimientoService.countCensosPorDiaUnicos();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,4 +32,55 @@ export class MovimientoService {
|
||||
|
||||
return movimiento;
|
||||
}
|
||||
|
||||
async searchByIdUser(id_usuario: number) {
|
||||
const movimientos = await this.movimientoRepo
|
||||
.createQueryBuilder('mov')
|
||||
.leftJoinAndSelect('mov.equipo', 'equipo')
|
||||
.leftJoinAndSelect('equipo.tipoEquipo', 'tipoEquipo')
|
||||
.leftJoinAndSelect('equipo.periferico', 'periferico')
|
||||
.leftJoin('mov.user', 'user')
|
||||
.where('user.id_usuario = :id_usuario', { id_usuario })
|
||||
.orderBy('mov.fechaMovimiento', 'DESC')
|
||||
.getMany();
|
||||
|
||||
if (!movimientos.length) {
|
||||
throw new NotFoundException('Sin equipos modificados o guardados');
|
||||
}
|
||||
|
||||
const vistos = new Set<string>();
|
||||
const unicos: Movimiento[] = []; // <-- FIX
|
||||
|
||||
for (const mov of movimientos) {
|
||||
const inventario = mov.equipo?.inventario;
|
||||
|
||||
if (!vistos.has(inventario)) {
|
||||
vistos.add(inventario);
|
||||
unicos.push(mov);
|
||||
}
|
||||
}
|
||||
|
||||
return unicos.map((mov) => ({
|
||||
inventario: mov.equipo?.inventario,
|
||||
tipo_equipo: mov.equipo?.tipoEquipo?.tipo_equipo,
|
||||
periferico: mov.equipo?.periferico?.periferico,
|
||||
fechaMovimiento: mov.fechaMovimiento,
|
||||
}));
|
||||
}
|
||||
|
||||
async countCensosPorDiaUnicos() {
|
||||
const result = await this.movimientoRepo
|
||||
.createQueryBuilder('mov')
|
||||
.innerJoin('mov.equipo', 'equipo')
|
||||
.select('DATE(mov.fechaMovimiento)', 'fecha')
|
||||
.addSelect('COUNT(DISTINCT equipo.inventario)', 'total')
|
||||
.groupBy('DATE(mov.fechaMovimiento)')
|
||||
.orderBy('fecha', 'ASC')
|
||||
.getRawMany();
|
||||
|
||||
return result.map((r) => ({
|
||||
fecha: r.fecha,
|
||||
total: Number(r.total),
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import { DefaultValuePipe } from "@nestjs/common"
|
||||
import { Transform } from "class-transformer"
|
||||
import { IsInt, IsNotEmpty, IsOptional, IsString, MinLength} from "class-validator"
|
||||
|
||||
@@ -18,5 +17,4 @@ contraseña:string
|
||||
@IsOptional()
|
||||
tipoUsuario?:number
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user