Inventario IT 🖥️

Inventario IT es un sistema de gestión de inventario de hardware diseñado para ser poblado tanto por scripts automáticos como por gestión manual. Permite tener un registro centralizado y detallado de todos los equipos informáticos de una organización, sus componentes y su historial de cambios.

El sistema se compone de un backend RESTful API desarrollado en ASP.NET Core y un frontend interactivo de tipo SPA (Single Page Application) construido con React, TypeScript y Vite.


🚀 Funcionalidades Principales

El sistema está diseñado en torno a la gestión y visualización de activos de TI, con un fuerte énfasis en la calidad y consistencia de los datos.

🔒 Seguridad y Autenticación

  • Autenticación Basada en JWT: Acceso a la API protegido mediante JSON Web Tokens.
  • Login Simple y Seguro: Un único par de credenciales (usuario/contraseña) configurables en el backend para acceder a toda la aplicación.
  • Sesión Persistente Opcional: En la pantalla de login, el usuario puede elegir "Mantener sesión iniciada".
    • Si se marca: El token se almacena de forma persistente (localStorage), sobreviviendo a cierres del navegador. El token tiene una validez de 1 año.
    • Si no se marca: El token se almacena en la sesión del navegador (sessionStorage), cerrándose automáticamente al finalizar la sesión. El token tiene una validez de 6 horas.

📋 Módulo de Equipos

  • Vista Principal Centralizada: Una tabla paginada, con capacidad de búsqueda y filtrado por sector, que muestra todos los equipos del inventario.
  • Detalle Completo del Equipo: Al hacer clic en un equipo, se abre una vista detallada con toda su información:
    • Datos Principales: Hostname, IP, MAC, OS, etc.
    • Componentes Asociados: Lista detallada de discos, módulos de RAM, usuarios asociados, CPU, Motherboard, RAM instalada, etc.
    • Estado en Tiempo Real: Indicador visual que muestra si el equipo está En línea o Sin conexión mediante un ping.
    • Historial de Cambios: Un registro cronológico de todas las modificaciones realizadas en el equipo.
  • Acciones Remotas:
    • Wake On Lan (WOL): 🚀 Botón para enviar un "Magic Packet" a través de un servidor SSH y encender un equipo de forma remota.

✍️ Gestión Manual vs. Automática

  • Origen de Datos: El sistema diferencia entre datos generados por scripts automáticos (⚙️ Automático) y los introducidos manualmente (⌨️ Manual).
  • Protección de Datos: Las entradas automáticas están protegidas contra modificaciones o eliminaciones desde la UI, asegurando la integridad de los datos recopilados en campo.
  • CRUD Completo para Entradas Manuales:
    • Creación de nuevos equipos con sus propiedades básicas.
    • Edición de los campos principales de un equipo manual.
    • Asociación manual de componentes (Discos, RAM, Usuarios).
    • Eliminación segura de equipos y componentes de origen manual.

🗂️ Módulo de Administración

  • Gestión de Sectores: Un CRUD completo para crear, editar y eliminar los sectores o departamentos de la organización.
  • Limpieza de Datos Maestros: Una potente herramienta para asegurar la consistencia de los datos.
    • Visualización de Valores Únicos: Permite ver todos los valores distintos existentes para un tipo de componente (ej: Microsoft Windows 10 Pro, w10, Windows 10) y cuántos equipos usan cada uno.
    • Unificación de Valores: ✏️ Permite reemplazar todas las instancias de un valor incorrecto (ej: w10) por uno correcto (ej: Microsoft Windows 10 Pro) en toda la base de datos con un solo clic.
    • Eliminación de Registros Maestros: 🗑️ Permite eliminar componentes maestros (ej: un módulo de RAM) que ya no están en uso por ningún equipo.

🎨 UI/UX

  • Interfaz Moderna y Responsiva: Construida con Vite, React y TypeScript para una experiencia rápida y fluida.
  • Notificaciones en Tiempo Real: El sistema utiliza react-hot-toast para dar feedback instantáneo sobre el estado de las operaciones (Cargando, Éxito, Error).
  • Consistencia de Datos Mejorada: Uso de campos de autocompletado que sugieren valores existentes para campos como CPU, OS y Motherboard, reduciendo errores humanos.
  • Validación de Entradas: Validación de formato en tiempo real para campos críticos como la MAC Address, con auto-formateo para ayudar al usuario.

🛠️ Stack Tecnológico

Backend (backend/)

  • Framework: ASP.NET Core 9
  • Lenguaje: C#
  • Acceso a Datos: Dapper (Micro ORM)
  • Base de Datos: Microsoft SQL Server
  • Autenticación: JWT Bearer Token (Microsoft.AspNetCore.Authentication.JwtBearer)
  • Comandos Remotos: Renci.SshNet para ejecución de comandos SSH (Wake On Lan)

Frontend (frontend/)

  • Framework/Librería: React 19
  • Lenguaje: TypeScript
  • Gestión de Tabla: TanStack Table v8
  • Gráficos: Chart.js con react-chartjs-2
  • Notificaciones: React Hot Toast
  • Tooltips: React Tooltip
  • Iconos: Lucide React
  • Build Tool: Vite

🚀 Puesta en Marcha (Getting Started)

Siga estos pasos para configurar y ejecutar el proyecto en un entorno de desarrollo local.

Prerrequisitos

  • .NET SDK 9.0 o superior.
  • Node.js v20.x o superior (con npm).
  • Microsoft SQL Server (2019 o superior) y SQL Server Management Studio (SSMS).
  • Un editor de código como Visual Studio Code.

1. Clonar el Repositorio

git clone <URL_DEL_REPOSITORIO_GITEA>
cd nombre-del-repositorio

2. Configuración de la Base de Datos

  1. Abra SSMS y conecte a su instancia de SQL Server.
  2. Cree una nueva base de datos llamada InventarioDB.
  3. Ejecute el script SQL InventarioDB.sql (ubicado en la raíz del proyecto) sobre la base de datos recién creada. Esto creará todas las tablas, relaciones y claves necesarias.

3. Configuración del Backend

  1. Navegue al directorio del backend: cd backend.

  2. Abra el archivo appsettings.Development.json (o appsettings.json para producción).

  3. Modifique la ConnectionString para que apunte a su instancia de SQL Server.

    "ConnectionStrings": {
      "DefaultConnection": "Server=NOMBRE_SU_SERVIDOR;Database=InventarioDB;User Id=su_usuario_sql;Password=su_contraseña;TrustServerCertificate=True"
    }
    
  4. Configure las credenciales de la aplicación y la clave JWT. Es crucial cambiar los valores por defecto por unos seguros y únicos.

    "AuthSettings": {
      "Username": "admin",
      "Password": "SU_NUEVA_CLAVE_SEGURA_AQUI"
    },
    "Jwt": {
      "Key": "SU_CLAVE_SECRETA_LARGA_Y_COMPLEJA_PARA_JWT",
      "Issuer": "InventarioAPI",
      "Audience": "InventarioClient"
    }
    
  5. Configure las credenciales del servidor SSH que se usará para la función Wake On Lan en la sección SshSettings.

  6. Instale las dependencias y ejecute el backend:

    dotnet restore
    dotnet run
    

La API estará disponible en http://localhost:5198 y la UI de Swagger en la misma URL.

4. Configuración del Frontend

  1. En una nueva terminal, navegue al directorio del frontend: cd frontend.

  2. Instale las dependencias:

    npm install
    
  3. Verificar la configuración del Proxy. El frontend utiliza un proxy de Vite para redirigir las peticiones de /api al backend. Esta configuración se encuentra en frontend/vite.config.ts. Si estás ejecutando el backend en el puerto por defecto (5198), no necesitas hacer ningún cambio.

  4. Ejecute el frontend en modo de desarrollo:

    npm run dev
    

La aplicación web estará disponible en http://localhost:5173 (o el puerto que indique Vite).


Description
No description provided
Readme 686 KiB
Languages
TypeScript 47.1%
C# 34.1%
CSS 7.8%
PowerShell 5.2%
TSQL 5%
Other 0.8%