feat: devices page, DeviceCard and equipos list filter by OS

This commit is contained in:
2026-02-12 15:26:14 -06:00
parent 20982aa077
commit 9a8815d4f5
4 changed files with 379 additions and 85 deletions

View File

@@ -1,5 +1,6 @@
import { z } from 'zod'
import { TRPCError } from '@trpc/server'
import { TipoDispositivo } from '@prisma/client'
import { router, protectedProcedure, adminProcedure } from '../trpc'
import { MeshCentralClient } from '@/server/services/meshcentral/client'
@@ -12,18 +13,22 @@ export const equiposRouter = router({
tipo: z.enum(['PC', 'LAPTOP', 'SERVIDOR']).optional(),
estado: z.enum(['ONLINE', 'OFFLINE', 'ALERTA', 'MANTENIMIENTO', 'DESCONOCIDO']).optional(),
search: z.string().optional(),
sistemaOperativo: z.string().optional(),
page: z.number().default(1),
limit: z.number().default(20),
}).optional()
)
.query(async ({ ctx, input }) => {
const { clienteId, tipo, estado, search, page = 1, limit = 20 } = input || {}
const { clienteId, tipo, estado, search, sistemaOperativo, page = 1, limit = 20 } = input || {}
const where = {
tipo: tipo ? { equals: tipo } : { in: ['PC', 'LAPTOP', 'SERVIDOR'] as const },
tipo: tipo ? { equals: tipo } : { in: ['PC', 'LAPTOP', 'SERVIDOR'] as TipoDispositivo[] },
...(ctx.user.clienteId ? { clienteId: ctx.user.clienteId } : {}),
...(clienteId ? { clienteId } : {}),
...(estado ? { estado } : {}),
...(sistemaOperativo ? {
sistemaOperativo: { contains: sistemaOperativo, mode: 'insensitive' as const },
} : {}),
...(search ? {
OR: [
{ nombre: { contains: search, mode: 'insensitive' as const } },