Arquitectura y Entidades: Las entrañas de rh_mexico (Parte 2)
En el Capítulo 1 les dije que íbamos a hablar de código, así que a darle.
Cuando empecé a diseñar el módulo rh_mexico para Drupal, lo primero que me quedó claro es que usar simples nodos (Nodes) iba a ser un suicidio de rendimiento y estructura. Necesitaba verdaderas Content Entities hechas a la medida.
Entidades: Modelando la vida real
En lugar de tener tablas de base de datos desordenadas, creé entidades específicas para cada cosa que pasa en la agencia. Aquí no hay parches, hay clases cabronas:
RegistroAsistencia: El corazón del sistema. No guarda solo la hora, guarda la ubicación, el dispositivo, y el "motivo operativo" (oficina, evento, scouting).EventoScoutingyRetardo: Porque llegar tarde no es lo mismo que estar en un festival armando bocinas desde las 6 AM.Vacacion,DiaDescontado, yPermisoConGoce: Todo amarrado a los perfiles de los usuarios para que RH no tenga que estar haciendo sumas en Excel como pendejos.
Los Servicios: Donde ocurre la magia negra
Tener las entidades es como tener los tabiques, pero el cemento son los Services de Drupal. El Dependency Injection es una chulada cuando tienes un desmadre de lógicas interconectadas.
AsistenciaProcessor: Este güey es el que recibe el punch de entrada/salida, valida si estás en el rango geográfico permitido o si estás justificando tu presencia por un evento.DeviceFingerprint: Porque nunca falta el cabrón que quiere checar por su compa. Este servicio cruza los datos del navegador y dispositivo para asegurar que quien checa es quien dice ser.RetardoManageryBusinessDaysCalculator: Se chutan toda la matemática pendeja de los días hábiles en México, días festivos y umbrales de tolerancia de retardo. Cero intervención humana.

Hacer esto nativo en Drupal con Symfony debajo te da una escalabilidad estúpida. Puedo meter 10,000 registros al mes y la base de datos ni suda, porque todo está indexado y cargado usando el Entity Type Manager.
En el Capítulo 3, vamos a hablar de mi juguete favorito: Cómo conecté todo este software con el mundo físico usando Raspberry Pi para hacer auto check-in por WiFi.
Pónganse truchas.