Sistema integral de logística para ferretería con trazabilidad completa, gestión de rutas, estados automatizados y notificaciones WhatsApp.
Ferretería Siglo21 necesitaba un sistema de trazabilidad completa para envíos y stock, con gestión por zonas geográficas de Neuquén, notificaciones automáticas y flexibilidad para crear hojas de ruta excepcionales.
Sistema integral con arquitectura hexagonal, gestión automatizada de estados con patrón State, hojas del día por cron jobs, integración WhatsApp para notificaciones y Keycloak para autenticación segura.
Primera experiencia profesional real con cliente, enfrentando cambios de requerimientos y desafíos de integración con sistemas legacy de ventas.
Arquitectura robusta basada en contenedores Docker con Spring Boot backend, Next.js frontend, autenticación centralizada con Keycloak y base de datos MySQL compartida. Diseñada para escalabilidad y mantenibilidad.
Deep dive en cada microservicio y sus responsabilidades específicas
Principales desafíos técnicos y cómo los resolví
Snippets de código real del proyecto - implementaciones clave
State Pattern que garantiza transiciones válidas entre estados y ejecuta acciones específicas como notificaciones WhatsApp automáticas
// EstadoEnvio.java - State Pattern
public abstract class EstadoEnvio {
protected String nombre;
public abstract boolean puedeTransicionarA(EstadoEnvio nuevoEstado);
public abstract void ejecutarAccion(Envio envio);
// Método para cambiar estado con validaciones
public void cambiarEstado(Envio envio, EstadoEnvio nuevoEstado) {
if (this.puedeTransicionarA(nuevoEstado)) {
// Registrar cambio para auditoría
CambioEstado cambio = new CambioEstado(
envio, this, nuevoEstado, LocalDateTime.now()
);
// Actualizar estado del envío
envio.setEstado(nuevoEstado);
// Ejecutar acciones específicas del nuevo estado
nuevoEstado.ejecutarAccion(envio);
// Disparar notificación WhatsApp
whatsappService.notificarCambioEstado(envio, nuevoEstado);
} else {
throw new TransicionNoPermitidaException();
}
}
}
// Estados concretos
public class EnCamino extends EstadoEnvio {
public EnCamino() { this.nombre = "EN_CAMINO"; }
@Override
public boolean puedeTransicionarA(EstadoEnvio nuevoEstado) {
return nuevoEstado instanceof Entregado ||
nuevoEstado instanceof NoEntregado ||
nuevoEstado instanceof Cancelado;
}
@Override
public void ejecutarAccion(Envio envio) {
// Lógica específica cuando el envío está en camino
envio.setFechaInicioEnvio(LocalDateTime.now());
}
}
Servicio: SwiftLogix Backend
Descripción: API REST con arquitectura hexagonal para gestión integral de logística y envíos
Reflexiones y próximos pasos en el desarrollo
Los requerimientos del cliente pueden cambiar drásticamente durante el desarrollo
Docker inter-container communication requiere configuración específica de networks
La arquitectura hexagonal facilita enormemente la adaptación a cambios de requerimientos
El patrón State es perfecto para gestión de estados complejos con acciones automáticas
Keycloak es poderoso pero complejo de configurar en contenedores
Los sistemas legacy sin APIs presentan desafíos de integración significativos
Los primeros proyectos con clientes reales enseñan más que muchos proyectos académicos
La comunicación con el cliente debe ser constante para evitar sorpresas en requerimientos
Docker Compose simplifica el desarrollo pero requiere conocimiento de redes
Proyecto archivado - sin desarrollo futuro planificado
Experiencia adquirida aplicada en proyectos posteriores
Aprendizajes sobre comunicación con cliente incorporados
Conocimientos de Docker y arquitectura hexagonal consolidados
Si quieres saber más sobre este proyecto, la tecnología utilizada, o tienes alguna consulta técnica, no dudes en contactarme.