1. El Problema (Introducción)
Los talleres de reparación de dispositivos a menudo pierden el control de qué equipo pertenece a qué cliente y qué repuestos hay disponibles. Para solucionar esto, diseñé un sistema de gestión centralizado.
2. Stack Tecnológico (Las herramientas) Para este proyecto, utilicé una arquitectura moderna y escalable:
Backend: PHP con el framework Laravel.
Frontend y Herramientas: JavaScript, Node.js y Vite para compilar los recursos rápidamente.
Base de datos: MySQL.
3. Módulos y Lógica del Sistema El sistema está dividido en módulos clave para optimizar el flujo de trabajo:
Módulo de Inventario: Control en tiempo real de los repuestos disponibles, aplicando lógica estructurada para entradas y salidas.
Relación Cliente-Dispositivo: Una base de datos relacional que vincula el historial de reparaciones, diagnósticos y el estado actual de cada equipo (en revisión, reparado, entregado).
4. El Reto Técnico (Lo que le gusta leer a los reclutadores) Uno de los mayores retos fue estructurar la base de datos para que la relación entre un cliente y múltiples dispositivos no generara consultas lentas. Lo resolví optimizando las consultas de Laravel
5. Conclusión y Próximos Pasos A futuro se espera integrar la funcion de gastos personales y crear clientes y numeros de proveedores como contacto.
Para el desarrollo del backend, utilicé Laravel (PHP). Uno de los enfoques principales fue asegurar la integridad de la base de datos y optimizar las consultas relacionales usando Eloquent.
Por ejemplo, para evitar problemas de rendimiento (el clásico problema N+1), implementé Eager Loading al consultar el historial de un cliente, trayendo sus dispositivos y cobros asociados en una sola consulta estructurada:
public function show(Cliente $cliente)
{
// Eager loading para optimizar la consulta relacional
$cliente->load(['equipos.cobro', 'equipos' => function($q) {
$q->orderBy('created_at', 'desc');
}]);
return view('clientes.show', compact('cliente'));
}
Además, era vital proteger la lógica del negocio. Implementé validaciones estrictas para evitar que el sistema permita eliminar un cliente si este todavía tiene un dispositivo en revisión dentro del taller:
public function destroy(Cliente $cliente)
{
// Verificación de integridad de negocio
$equiposActivos = $cliente->equipos()
->whereNotIn('estado', ['Entregado', 'Cancelado'])
->count();
if ($equiposActivos > 0) {
return back()->with('error', '⚠️ No se puede eliminar: el cliente tiene equipos activos en el taller.');
}
$cliente->delete();
return redirect()->route('clientes.index')->with('success', '🗑️ Cliente eliminado.');
}



Comments
Post a Comment