refactors

This commit is contained in:
Diego Mireles
2026-05-23 00:08:28 -06:00
parent 39bd572955
commit 53c345d984
2 changed files with 14 additions and 4 deletions

View File

@@ -3,6 +3,7 @@
export const NotificationType = { export const NotificationType = {
ROUTE_START: "ROUTE_START", ROUTE_START: "ROUTE_START",
TRUCK_PROXIMITY: "TRUCK_PROXIMITY", TRUCK_PROXIMITY: "TRUCK_PROXIMITY",
TRUCK_ARRIVED: "TRUCK_ARRIVED",
ROUTE_COMPLETED: "ROUTE_COMPLETED", ROUTE_COMPLETED: "ROUTE_COMPLETED",
DELAY: "DELAY", DELAY: "DELAY",
MECHANICAL_FAILURE: "MECHANICAL_FAILURE", MECHANICAL_FAILURE: "MECHANICAL_FAILURE",
@@ -25,6 +26,10 @@ export const notificationPayloads: Record<NotificationType, NotificationPayload>
title: "Camión Cercano", title: "Camión Cercano",
body: "El camión está a menos de 15 minutos de tu domicilio. Es momento de sacar tus bolsas a la acera.", body: "El camión está a menos de 15 minutos de tu domicilio. Es momento de sacar tus bolsas a la acera.",
}, },
TRUCK_ARRIVED: {
title: "¡El camión ya está aquí!",
body: "El camión recolector llegó a tu zona. Saca tus residuos a la acera ahora.",
},
ROUTE_COMPLETED: { ROUTE_COMPLETED: {
title: "Servicio Finalizado", title: "Servicio Finalizado",
body: "El camión de tu sector ha concluido su jornada de recolección diaria.", body: "El camión de tu sector ha concluido su jornada de recolección diaria.",
@@ -43,5 +48,6 @@ export const notificationPayloads: Record<NotificationType, NotificationPayload>
export const positionTriggers: Record<number, NotificationType> = { export const positionTriggers: Record<number, NotificationType> = {
2: NotificationType.ROUTE_START, 2: NotificationType.ROUTE_START,
4: NotificationType.TRUCK_PROXIMITY, 4: NotificationType.TRUCK_PROXIMITY,
5: NotificationType.TRUCK_ARRIVED,
8: NotificationType.ROUTE_COMPLETED, 8: NotificationType.ROUTE_COMPLETED,
}; };

View File

@@ -8,7 +8,9 @@ export interface EtaResult {
message: string; message: string;
} }
const PROXIMITY_POSITION_ID = 4; // El destino real (cuando el camión está en tu colonia) es positionId=5,
// donde speed=0. positionId=4 es el "punto de alerta de proximidad" (~12 min antes).
const ARRIVAL_POSITION_ID = 5;
const WINDOW_MARGIN_MIN = 5; const WINDOW_MARGIN_MIN = 5;
export class CalculateEtaUseCase { export class CalculateEtaUseCase {
@@ -28,11 +30,11 @@ export class CalculateEtaUseCase {
} }
const target = route.positions.find( const target = route.positions.find(
(p) => p.positionId === PROXIMITY_POSITION_ID, (p) => p.positionId === ARRIVAL_POSITION_ID,
); );
if (!target) { if (!target) {
throw CustomError.internalServer( throw CustomError.internalServer(
`Route ${route.routeId} has no proximity position`, `Route ${route.routeId} has no arrival position`,
); );
} }
@@ -50,6 +52,8 @@ export class CalculateEtaUseCase {
let message: string; let message: string;
if (etaMinutes < 0) { if (etaMinutes < 0) {
message = `El camión ya pasó por tu zona (aprox. ${arrivalWindow.from} - ${arrivalWindow.to}).`; message = `El camión ya pasó por tu zona (aprox. ${arrivalWindow.from} - ${arrivalWindow.to}).`;
} else if (etaMinutes === 0) {
message = "El camión ya está en tu zona. Saca tus residuos ahora.";
} else if (etaMinutes <= 15) { } else if (etaMinutes <= 15) {
message = `Llega en aproximadamente ${etaMinutes} minutos.`; message = `Llega en aproximadamente ${etaMinutes} minutos.`;
} else { } else {