From d4f48f3a3845db4fe82ba08275b699172262d7fc Mon Sep 17 00:00:00 2001 From: delfisartorio Date: Tue, 20 May 2025 20:53:10 -0300 Subject: [PATCH] intento de refactor --- pom.xml | 1 + .../models/entities/Alertas/AlertaTyH.java | 30 +++++++++++++++++++ .../models/entities/Alertas/IAlertas.java | 8 +++++ .../ddsi/mailing/models/entities/Clima.java | 7 +++++ .../ddsi/mailing/models/entities/Email.java | 4 ++- .../entities/mailing/EmailSenderAdapter.java | 7 +++++ .../entities/mailing/JavaMailAdapter.java | 24 +++++++++++++++ .../mailing/services/impl/AlertasService.java | 4 +-- src/main/resources/application.properties | 2 +- 9 files changed, 82 insertions(+), 5 deletions(-) create mode 100644 src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Alertas/AlertaTyH.java create mode 100644 src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Alertas/IAlertas.java create mode 100644 src/main/java/ar/utn/ba/ddsi/mailing/models/entities/mailing/EmailSenderAdapter.java create mode 100644 src/main/java/ar/utn/ba/ddsi/mailing/models/entities/mailing/JavaMailAdapter.java diff --git a/pom.xml b/pom.xml index 2566156..38f82dc 100644 --- a/pom.xml +++ b/pom.xml @@ -35,6 +35,7 @@ spring-boot-starter-web + org.projectlombok lombok diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Alertas/AlertaTyH.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Alertas/AlertaTyH.java new file mode 100644 index 0000000..798f1ea --- /dev/null +++ b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Alertas/AlertaTyH.java @@ -0,0 +1,30 @@ +package ar.utn.ba.ddsi.mailing.models.entities.Alertas; + +import ar.utn.ba.ddsi.mailing.models.entities.Clima; + +public class AlertaTyH implements IAlertas { + private int temperaturaLimiteC; + private int humedadLimite; + private boolean vencida; + + public AlertaTyH(int temperaturaLimiteC, int humedadLimite) { + this.temperaturaLimiteC = temperaturaLimiteC; + this.humedadLimite = humedadLimite; + this.vencida = false; + } + @Override + public boolean seCumpleCon(Clima clima) { + if (vencida) return false; + return clima.getTemperaturaCelsius() > temperaturaLimiteC && + clima.getHumedad() > humedadLimite; + } + + public void marcarComoVencida() { + this.vencida = true; + } + + public boolean estaVencida() { + return vencida; + } +} + diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Alertas/IAlertas.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Alertas/IAlertas.java new file mode 100644 index 0000000..72b450f --- /dev/null +++ b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Alertas/IAlertas.java @@ -0,0 +1,8 @@ +package ar.utn.ba.ddsi.mailing.models.entities.Alertas; + +import ar.utn.ba.ddsi.mailing.models.entities.Clima; + +public interface IAlertas { + + public boolean seCumpleCon(Clima clima); +} \ No newline at end of file diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Clima.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Clima.java index 4eaa65b..34cffa5 100644 --- a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Clima.java +++ b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Clima.java @@ -1,5 +1,6 @@ package ar.utn.ba.ddsi.mailing.models.entities; +import ar.utn.ba.ddsi.mailing.models.entities.Alertas.IAlertas; import lombok.Getter; import lombok.Setter; import java.time.LocalDateTime; @@ -18,9 +19,15 @@ public class Clima { private Integer humedad; private LocalDateTime fechaActualizacion; private boolean procesado; + private static IAlertas alerta; public Clima() { this.fechaActualizacion = LocalDateTime.now(); this.procesado = false; } + + public boolean tieneAlertaActiva() { + return alerta != null && alerta.seCumpleCon(this); + } + } \ No newline at end of file diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Email.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Email.java index eb940be..5280d8c 100644 --- a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Email.java +++ b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Email.java @@ -1,5 +1,6 @@ package ar.utn.ba.ddsi.mailing.models.entities; +import ar.utn.ba.ddsi.mailing.models.entities.mailing.EmailSenderAdapter; import lombok.Getter; import lombok.Setter; @@ -12,6 +13,7 @@ public class Email { private String asunto; private String contenido; private boolean enviado; + private static EmailSenderAdapter adapter; public Email(String destinatario, String remitente, String asunto, String contenido) { this.destinatario = destinatario; @@ -22,6 +24,6 @@ public Email(String destinatario, String remitente, String asunto, String conten } public void enviar() { - //TODO: Implementación pendiente. Podríamos usar adapters + adapter.enviar(this); } } \ No newline at end of file diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/mailing/EmailSenderAdapter.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/mailing/EmailSenderAdapter.java new file mode 100644 index 0000000..9e53b5b --- /dev/null +++ b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/mailing/EmailSenderAdapter.java @@ -0,0 +1,7 @@ +package ar.utn.ba.ddsi.mailing.models.entities.mailing; + +import ar.utn.ba.ddsi.mailing.models.entities.Email; + +public interface EmailSenderAdapter { + void enviar(Email email); +} diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/mailing/JavaMailAdapter.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/mailing/JavaMailAdapter.java new file mode 100644 index 0000000..2bdfc1f --- /dev/null +++ b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/mailing/JavaMailAdapter.java @@ -0,0 +1,24 @@ +package ar.utn.ba.ddsi.mailing.models.entities.mailing; + +import ar.utn.ba.ddsi.mailing.models.entities.Email; +import jakarta.websocket.Session; +import org.apache.logging.log4j.message.Message; + +import java.net.Authenticator; +import java.net.PasswordAuthentication; +import java.util.Properties; + +public class JavaMailAdapter implements EmailSenderAdapter { + + private final String usuario; + private final String password; + + public JavaMailAdapter(String usuario, String password) { + this.usuario = usuario; + this.password = password; + } + + @Override + public void enviar(Email email) {} +} + diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/services/impl/AlertasService.java b/src/main/java/ar/utn/ba/ddsi/mailing/services/impl/AlertasService.java index f5d52b6..c54ead8 100644 --- a/src/main/java/ar/utn/ba/ddsi/mailing/services/impl/AlertasService.java +++ b/src/main/java/ar/utn/ba/ddsi/mailing/services/impl/AlertasService.java @@ -62,9 +62,7 @@ public Mono generarAlertasYAvisar() { } private boolean cumpleCondicionesAlerta(Clima clima) { - //TODO: podríamos refactorizar el diseño para que no sea un simple método, pues puede ser más complejo - return clima.getTemperaturaCelsius() > TEMPERATURA_ALERTA && - clima.getHumedad() > HUMEDAD_ALERTA; + return clima.tieneAlertaActiva(); } private void generarYEnviarEmail(Clima clima) { diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 6bcf441..9385736 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -4,7 +4,7 @@ spring.application.name=climalert cron.expression=0 * * * * * # WeatherAPI Configuration -weather.api.key=API-KEY-EXAMPLE +weather.api.key=556d791c03704750a85223837252005 weather.api.base-url=http://api.weatherapi.com/v1 # Email Configuration