From 399950b2cfd67fd492b4a19f6e53975e86dc3b90 Mon Sep 17 00:00:00 2001 From: Alaparamos Date: Thu, 5 Jun 2025 02:15:04 -0300 Subject: [PATCH 1/5] Modelado de la clase Alerta --- .../ddsi/mailing/models/entities/Alerta.java | 17 +++++++++++++++++ .../models/entities/CondicionAlerta.java | 5 +++++ .../mailing/models/entities/impl/Humedad.java | 17 +++++++++++++++++ .../models/entities/impl/Temperatura.java | 18 ++++++++++++++++++ 4 files changed, 57 insertions(+) create mode 100644 src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Alerta.java create mode 100644 src/main/java/ar/utn/ba/ddsi/mailing/models/entities/CondicionAlerta.java create mode 100644 src/main/java/ar/utn/ba/ddsi/mailing/models/entities/impl/Humedad.java create mode 100644 src/main/java/ar/utn/ba/ddsi/mailing/models/entities/impl/Temperatura.java diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Alerta.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Alerta.java new file mode 100644 index 0000000..3d1f995 --- /dev/null +++ b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Alerta.java @@ -0,0 +1,17 @@ +package ar.utn.ba.ddsi.mailing.models.entities; + +import java.util.List; + +public class Alerta { + private String nombre; + private List condiciones; + + public Alerta(String nombre, List condiciones) { + this.nombre = nombre; + this.condiciones = condiciones; + } + + public boolean cumpleCondicionesAlerta(Clima clima){ + return condiciones.stream().allMatch(condicion -> condicion.seCumple(clima)); + } +} \ No newline at end of file diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/CondicionAlerta.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/CondicionAlerta.java new file mode 100644 index 0000000..c360a50 --- /dev/null +++ b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/CondicionAlerta.java @@ -0,0 +1,5 @@ +package ar.utn.ba.ddsi.mailing.models.entities; + +public interface CondicionAlerta { + boolean seCumple(Clima clima); +} diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/impl/Humedad.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/impl/Humedad.java new file mode 100644 index 0000000..2d3c84a --- /dev/null +++ b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/impl/Humedad.java @@ -0,0 +1,17 @@ +package ar.utn.ba.ddsi.mailing.models.entities.impl; + +import ar.utn.ba.ddsi.mailing.models.entities.Clima; +import ar.utn.ba.ddsi.mailing.models.entities.CondicionAlerta; + +public class Humedad implements CondicionAlerta { + private Double umbral; + + public Humedad(Double umbral){ + this.umbral = umbral; // 60% + } + + @Override + public boolean seCumple(Clima clima) { + return clima.getHumedad() > this.umbral; + } +} diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/impl/Temperatura.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/impl/Temperatura.java new file mode 100644 index 0000000..d7cfcc5 --- /dev/null +++ b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/impl/Temperatura.java @@ -0,0 +1,18 @@ +package ar.utn.ba.ddsi.mailing.models.entities.impl; + +import ar.utn.ba.ddsi.mailing.models.entities.Clima; +import ar.utn.ba.ddsi.mailing.models.entities.CondicionAlerta; + +public class Temperatura implements CondicionAlerta { + private final Double umbralCelsius; + + public Temperatura(Double umbralCelsius) { + this.umbralCelsius = umbralCelsius; // 35 + } + + @Override + public boolean seCumple(Clima clima) { + return clima.getTemperaturaCelsius() > this.umbralCelsius + || clima.getTemperaturaFahrenheit() > this.umbralCelsius + 60.0; + } +} From 4b963bf38582b806763f7b2d6c333e4530ea4ee6 Mon Sep 17 00:00:00 2001 From: Alaparamos Date: Thu, 5 Jun 2025 03:45:19 -0300 Subject: [PATCH 2/5] Reordeno packages --- .../ar/utn/ba/ddsi/mailing/models/entities/Alerta.java | 2 ++ .../ba/ddsi/mailing/models/entities/CondicionAlerta.java | 5 ----- .../java/ar/utn/ba/ddsi/mailing/models/entities/Email.java | 4 ++++ .../models/entities/strategies/CondicionAlerta.java | 7 +++++++ .../models/entities/{ => strategies}/impl/Humedad.java | 4 ++-- .../models/entities/{ => strategies}/impl/Temperatura.java | 4 ++-- 6 files changed, 17 insertions(+), 9 deletions(-) delete mode 100644 src/main/java/ar/utn/ba/ddsi/mailing/models/entities/CondicionAlerta.java create mode 100644 src/main/java/ar/utn/ba/ddsi/mailing/models/entities/strategies/CondicionAlerta.java rename src/main/java/ar/utn/ba/ddsi/mailing/models/entities/{ => strategies}/impl/Humedad.java (70%) rename src/main/java/ar/utn/ba/ddsi/mailing/models/entities/{ => strategies}/impl/Temperatura.java (77%) diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Alerta.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Alerta.java index 3d1f995..db782a4 100644 --- a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Alerta.java +++ b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Alerta.java @@ -1,5 +1,7 @@ package ar.utn.ba.ddsi.mailing.models.entities; +import ar.utn.ba.ddsi.mailing.models.entities.strategies.CondicionAlerta; + import java.util.List; public class Alerta { diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/CondicionAlerta.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/CondicionAlerta.java deleted file mode 100644 index c360a50..0000000 --- a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/CondicionAlerta.java +++ /dev/null @@ -1,5 +0,0 @@ -package ar.utn.ba.ddsi.mailing.models.entities; - -public interface CondicionAlerta { - boolean seCumple(Clima clima); -} 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..a46bba6 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.adapters.IEmailSender; import lombok.Getter; import lombok.Setter; @@ -12,6 +13,7 @@ public class Email { private String asunto; private String contenido; private boolean enviado; + private IEmailSender emailSender; public Email(String destinatario, String remitente, String asunto, String contenido) { this.destinatario = destinatario; @@ -23,5 +25,7 @@ public Email(String destinatario, String remitente, String asunto, String conten public void enviar() { //TODO: Implementación pendiente. Podríamos usar adapters + // HECHO: IMPLEMENTACIÓN DE ADAPTER + this.emailSender.send(this); } } \ No newline at end of file diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/strategies/CondicionAlerta.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/strategies/CondicionAlerta.java new file mode 100644 index 0000000..1a5a768 --- /dev/null +++ b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/strategies/CondicionAlerta.java @@ -0,0 +1,7 @@ +package ar.utn.ba.ddsi.mailing.models.entities.strategies; + +import ar.utn.ba.ddsi.mailing.models.entities.Clima; + +public interface CondicionAlerta { + boolean seCumple(Clima clima); +} diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/impl/Humedad.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/strategies/impl/Humedad.java similarity index 70% rename from src/main/java/ar/utn/ba/ddsi/mailing/models/entities/impl/Humedad.java rename to src/main/java/ar/utn/ba/ddsi/mailing/models/entities/strategies/impl/Humedad.java index 2d3c84a..07bfaac 100644 --- a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/impl/Humedad.java +++ b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/strategies/impl/Humedad.java @@ -1,7 +1,7 @@ -package ar.utn.ba.ddsi.mailing.models.entities.impl; +package ar.utn.ba.ddsi.mailing.models.entities.strategies.impl; import ar.utn.ba.ddsi.mailing.models.entities.Clima; -import ar.utn.ba.ddsi.mailing.models.entities.CondicionAlerta; +import ar.utn.ba.ddsi.mailing.models.entities.strategies.CondicionAlerta; public class Humedad implements CondicionAlerta { private Double umbral; diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/impl/Temperatura.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/strategies/impl/Temperatura.java similarity index 77% rename from src/main/java/ar/utn/ba/ddsi/mailing/models/entities/impl/Temperatura.java rename to src/main/java/ar/utn/ba/ddsi/mailing/models/entities/strategies/impl/Temperatura.java index d7cfcc5..111d0b0 100644 --- a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/impl/Temperatura.java +++ b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/strategies/impl/Temperatura.java @@ -1,7 +1,7 @@ -package ar.utn.ba.ddsi.mailing.models.entities.impl; +package ar.utn.ba.ddsi.mailing.models.entities.strategies.impl; import ar.utn.ba.ddsi.mailing.models.entities.Clima; -import ar.utn.ba.ddsi.mailing.models.entities.CondicionAlerta; +import ar.utn.ba.ddsi.mailing.models.entities.strategies.CondicionAlerta; public class Temperatura implements CondicionAlerta { private final Double umbralCelsius; From e297217f043423eb3230d5fad8604de67517b7cc Mon Sep 17 00:00:00 2001 From: Alaparamos Date: Thu, 5 Jun 2025 03:45:53 -0300 Subject: [PATCH 3/5] =?UTF-8?q?Patr=C3=B3n=20Adapter=20en=20Email?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 +++ .../entities/adapters/IEmailSender.java | 7 ++++ .../adapters/impl/JavaMailAdapter.java | 34 +++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 src/main/java/ar/utn/ba/ddsi/mailing/models/entities/adapters/IEmailSender.java create mode 100644 src/main/java/ar/utn/ba/ddsi/mailing/models/entities/adapters/impl/JavaMailAdapter.java diff --git a/pom.xml b/pom.xml index 2566156..c993578 100644 --- a/pom.xml +++ b/pom.xml @@ -49,6 +49,10 @@ org.springframework.boot spring-boot-starter-webflux + + org.springframework.boot + spring-boot-starter-mail + diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/adapters/IEmailSender.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/adapters/IEmailSender.java new file mode 100644 index 0000000..5d6f648 --- /dev/null +++ b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/adapters/IEmailSender.java @@ -0,0 +1,7 @@ +package ar.utn.ba.ddsi.mailing.models.entities.adapters; + +import ar.utn.ba.ddsi.mailing.models.entities.Email; + +public interface IEmailSender { + void send(Email email); +} diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/adapters/impl/JavaMailAdapter.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/adapters/impl/JavaMailAdapter.java new file mode 100644 index 0000000..35a178a --- /dev/null +++ b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/adapters/impl/JavaMailAdapter.java @@ -0,0 +1,34 @@ +package ar.utn.ba.ddsi.mailing.models.entities.adapters.impl; + +import ar.utn.ba.ddsi.mailing.models.entities.Email; +import ar.utn.ba.ddsi.mailing.models.entities.adapters.IEmailSender; +import jakarta.mail.MessagingException; +import jakarta.mail.internet.MimeMessage; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.MimeMessageHelper; + +public class JavaMailAdapter implements IEmailSender { + private final JavaMailSender javaMailSender; + + public JavaMailAdapter(JavaMailSender javaMailSender) { + this.javaMailSender = javaMailSender; + } + + @Override + public void send(Email email) { + // 1) Convertimos nuestro dominio Email a MimeMessage + MimeMessage mimeMessage = javaMailSender.createMimeMessage(); + try { + MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, "UTF-8"); + helper.setTo(email.getDestinatario()); + helper.setFrom(email.getRemitente()); + helper.setSubject(email.getAsunto()); + helper.setText(email.getContenido(), false); // false = texto plano + + // 2) Enviamos usando JavaMailSender + javaMailSender.send(mimeMessage); + } catch (MessagingException ex) { + throw new RuntimeException("Error al enviar email: " + ex.getMessage(), ex); + } + } +} \ No newline at end of file From ee78878393fe8f113553f4754f12ac26a3b8b090 Mon Sep 17 00:00:00 2001 From: Alaparamos Date: Thu, 5 Jun 2025 05:00:59 -0300 Subject: [PATCH 4/5] =?UTF-8?q?Actualizaci=C3=B3n=20de=20la=20Capa=20de=20?= =?UTF-8?q?Services=20+=20DTOs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mailing/controllers/EmailController.java | 6 ++-- .../models/dto/email/EmailInputDTO.java | 12 +++++++ .../models/dto/email/EmailOutputDTO.java | 12 +++++++ .../ddsi/mailing/models/entities/Alerta.java | 5 +++ .../repositories/IAlertaRepository.java | 11 ++++++ .../repositories/impl/AlertaRepository.java | 33 ++++++++++++++++++ .../ddsi/mailing/services/IEmailService.java | 6 ++-- .../mailing/services/impl/AlertasService.java | 21 ++++++++---- .../mailing/services/impl/EmailService.java | 34 +++++++++++++++---- 9 files changed, 123 insertions(+), 17 deletions(-) create mode 100644 src/main/java/ar/utn/ba/ddsi/mailing/models/dto/email/EmailInputDTO.java create mode 100644 src/main/java/ar/utn/ba/ddsi/mailing/models/dto/email/EmailOutputDTO.java create mode 100644 src/main/java/ar/utn/ba/ddsi/mailing/models/repositories/IAlertaRepository.java create mode 100644 src/main/java/ar/utn/ba/ddsi/mailing/models/repositories/impl/AlertaRepository.java diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/controllers/EmailController.java b/src/main/java/ar/utn/ba/ddsi/mailing/controllers/EmailController.java index fec8ee0..5eb555a 100644 --- a/src/main/java/ar/utn/ba/ddsi/mailing/controllers/EmailController.java +++ b/src/main/java/ar/utn/ba/ddsi/mailing/controllers/EmailController.java @@ -1,5 +1,7 @@ package ar.utn.ba.ddsi.mailing.controllers; +import ar.utn.ba.ddsi.mailing.models.dto.email.EmailInputDTO; +import ar.utn.ba.ddsi.mailing.models.dto.email.EmailOutputDTO; import ar.utn.ba.ddsi.mailing.models.entities.Email; import ar.utn.ba.ddsi.mailing.services.IEmailService; import org.springframework.web.bind.annotation.*; @@ -15,12 +17,12 @@ public EmailController(IEmailService emailService) { } @PostMapping - public Email crearEmail(@RequestBody Email email) { + public EmailOutputDTO crearEmail(@RequestBody EmailInputDTO email) { return emailService.crearEmail(email); } @GetMapping - public List obtenerEmails(@RequestParam(required = false) Boolean pendiente) { + public List obtenerEmails(@RequestParam(required = false) Boolean pendiente) { return emailService.obtenerEmails(pendiente); } } \ No newline at end of file diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/dto/email/EmailInputDTO.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/dto/email/EmailInputDTO.java new file mode 100644 index 0000000..df37efb --- /dev/null +++ b/src/main/java/ar/utn/ba/ddsi/mailing/models/dto/email/EmailInputDTO.java @@ -0,0 +1,12 @@ +package ar.utn.ba.ddsi.mailing.models.dto.email; + +import ar.utn.ba.ddsi.mailing.models.entities.adapters.IEmailSender; +import lombok.Data; + +@Data +public class EmailInputDTO { + private String destinatario; + private String remitente; + private String asunto; + private String contenido; +} diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/dto/email/EmailOutputDTO.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/dto/email/EmailOutputDTO.java new file mode 100644 index 0000000..dcb82cc --- /dev/null +++ b/src/main/java/ar/utn/ba/ddsi/mailing/models/dto/email/EmailOutputDTO.java @@ -0,0 +1,12 @@ +package ar.utn.ba.ddsi.mailing.models.dto.email; + +import lombok.Data; + +@Data +public class EmailOutputDTO { + private Long id; + private String destinatario; + private String remitente; + private String asunto; + private String contenido; +} diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Alerta.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Alerta.java index db782a4..49d2700 100644 --- a/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Alerta.java +++ b/src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Alerta.java @@ -1,10 +1,15 @@ package ar.utn.ba.ddsi.mailing.models.entities; import ar.utn.ba.ddsi.mailing.models.entities.strategies.CondicionAlerta; +import lombok.Getter; +import lombok.Setter; import java.util.List; public class Alerta { + @Getter + @Setter + private Long id; private String nombre; private List condiciones; diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/repositories/IAlertaRepository.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/repositories/IAlertaRepository.java new file mode 100644 index 0000000..93523a3 --- /dev/null +++ b/src/main/java/ar/utn/ba/ddsi/mailing/models/repositories/IAlertaRepository.java @@ -0,0 +1,11 @@ +package ar.utn.ba.ddsi.mailing.models.repositories; + +import ar.utn.ba.ddsi.mailing.models.entities.Alerta; +import ar.utn.ba.ddsi.mailing.models.entities.Email; + +import java.util.List; + +public interface IAlertaRepository { + Alerta save(Alerta alerta); + List findAll(); +} diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/repositories/impl/AlertaRepository.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/repositories/impl/AlertaRepository.java new file mode 100644 index 0000000..49a7794 --- /dev/null +++ b/src/main/java/ar/utn/ba/ddsi/mailing/models/repositories/impl/AlertaRepository.java @@ -0,0 +1,33 @@ +package ar.utn.ba.ddsi.mailing.models.repositories.impl; + +import ar.utn.ba.ddsi.mailing.models.entities.Alerta; +import ar.utn.ba.ddsi.mailing.models.entities.Clima; +import ar.utn.ba.ddsi.mailing.models.repositories.IAlertaRepository; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicLong; + +public class AlertaRepository implements IAlertaRepository { + private final Map alertas = new HashMap<>(); + private final AtomicLong idGenerator = new AtomicLong(1); + + @Override + public Alerta save(Alerta alerta) { + if (alerta.getId() == null) { + Long id = idGenerator.getAndIncrement(); + alerta.setId(id); + alertas.put(id, alerta); + } else { + alertas.put(alerta.getId(), alerta); + } + return alerta; + } + + @Override + public List findAll() { + return new ArrayList<>(alertas.values()); + } +} diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/services/IEmailService.java b/src/main/java/ar/utn/ba/ddsi/mailing/services/IEmailService.java index 5be1682..f69da6e 100644 --- a/src/main/java/ar/utn/ba/ddsi/mailing/services/IEmailService.java +++ b/src/main/java/ar/utn/ba/ddsi/mailing/services/IEmailService.java @@ -1,11 +1,13 @@ package ar.utn.ba.ddsi.mailing.services; +import ar.utn.ba.ddsi.mailing.models.dto.email.EmailInputDTO; +import ar.utn.ba.ddsi.mailing.models.dto.email.EmailOutputDTO; import ar.utn.ba.ddsi.mailing.models.entities.Email; import java.util.List; public interface IEmailService { - Email crearEmail(Email email); - List obtenerEmails(Boolean pendiente); + EmailOutputDTO crearEmail(EmailInputDTO inputDTO); + List obtenerEmails(Boolean pendiente); void procesarPendientes(); void loguearEmailsPendientes(); } \ No newline at end of file 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..a8c54a5 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 @@ -1,7 +1,9 @@ package ar.utn.ba.ddsi.mailing.services.impl; +import ar.utn.ba.ddsi.mailing.models.dto.email.EmailInputDTO; import ar.utn.ba.ddsi.mailing.models.entities.Clima; import ar.utn.ba.ddsi.mailing.models.entities.Email; +import ar.utn.ba.ddsi.mailing.models.repositories.IAlertaRepository; import ar.utn.ba.ddsi.mailing.models.repositories.IClimaRepository; import ar.utn.ba.ddsi.mailing.services.IAlertasService; import org.slf4j.Logger; @@ -15,19 +17,19 @@ @Service public class AlertasService implements IAlertasService { private static final Logger logger = LoggerFactory.getLogger(AlertasService.class); - private static final double TEMPERATURA_ALERTA = 35.0; - private static final int HUMEDAD_ALERTA = 60; + private final IAlertaRepository alertaRepository; private final IClimaRepository climaRepository; private final EmailService emailService; private final String remitente; private final List destinatarios; public AlertasService( - IClimaRepository climaRepository, + IAlertaRepository alertaRepository, IClimaRepository climaRepository, EmailService emailService, @Value("${email.alertas.remitente}") String remitente, @Value("${email.alertas.destinatarios}") String destinatarios) { + this.alertaRepository = alertaRepository; this.climaRepository = climaRepository; this.emailService = emailService; this.remitente = remitente; @@ -63,8 +65,8 @@ 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; + // HECHO + return this.alertaRepository.findAll().stream().anyMatch(alerta -> alerta.cumpleCondicionesAlerta(clima)); } private void generarYEnviarEmail(Clima clima) { @@ -84,8 +86,13 @@ private void generarYEnviarEmail(Clima clima) { ); for (String destinatario : destinatarios) { - Email email = new Email(destinatario, remitente, asunto, mensaje); - emailService.crearEmail(email); + // Email email = new Email(destinatario, remitente, asunto, mensaje); + EmailInputDTO dto = new EmailInputDTO(); + dto.setDestinatario(destinatario); + dto.setRemitente(remitente); + dto.setAsunto(asunto); + dto.setContenido(mensaje); + emailService.crearEmail(dto); } logger.info("Email de alerta generado para {} - Enviado a {} destinatarios", diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/services/impl/EmailService.java b/src/main/java/ar/utn/ba/ddsi/mailing/services/impl/EmailService.java index e1ffb85..1e52e3a 100644 --- a/src/main/java/ar/utn/ba/ddsi/mailing/services/impl/EmailService.java +++ b/src/main/java/ar/utn/ba/ddsi/mailing/services/impl/EmailService.java @@ -1,5 +1,7 @@ package ar.utn.ba.ddsi.mailing.services.impl; +import ar.utn.ba.ddsi.mailing.models.dto.email.EmailInputDTO; +import ar.utn.ba.ddsi.mailing.models.dto.email.EmailOutputDTO; import ar.utn.ba.ddsi.mailing.models.entities.Email; import ar.utn.ba.ddsi.mailing.models.repositories.IEmailRepository; import ar.utn.ba.ddsi.mailing.services.IEmailService; @@ -18,16 +20,17 @@ public EmailService(IEmailRepository emailRepository) { } @Override - public Email crearEmail(Email email) { - return emailRepository.save(email); + public EmailOutputDTO crearEmail(EmailInputDTO inputDTO) { + Email email = this.emailRepository.save(this.dtoTOEmail(inputDTO)); + return this.emailToDTO(email); } @Override - public List obtenerEmails(Boolean pendiente) { + public List obtenerEmails(Boolean pendiente) { if (pendiente != null) { - return emailRepository.findByEnviado(!pendiente); + return emailRepository.findByEnviado(!pendiente).stream().map(this::emailToDTO).toList(); } - return emailRepository.findAll(); + return emailRepository.findAll().stream().map(this::emailToDTO).toList(); } @Override @@ -40,9 +43,28 @@ public void procesarPendientes() { } } + public Email dtoTOEmail (EmailInputDTO dto) { + return new Email( + dto.getDestinatario(), + dto.getRemitente(), + dto.getAsunto(), + dto.getContenido() + ); + } + + public EmailOutputDTO emailToDTO(Email email) { + EmailOutputDTO outputDTO = new EmailOutputDTO(); + outputDTO.setId(email.getId()); + outputDTO.setDestinatario(email.getDestinatario()); + outputDTO.setRemitente(email.getRemitente()); + outputDTO.setAsunto(email.getAsunto()); + outputDTO.setContenido(email.getContenido()); + return outputDTO; + } + @Override public void loguearEmailsPendientes() { - List pendientes = obtenerEmails(true); + List pendientes = obtenerEmails(true); logger.info("Emails pendientes de envío: {}", pendientes.size()); pendientes.forEach(email -> logger.info("Email pendiente - ID: {}, Destinatario: {}, Asunto: {}", From 2dd4a4e258a68390b78474305c17a1fea7530e3a Mon Sep 17 00:00:00 2001 From: Alaparamos Date: Wed, 11 Jun 2025 01:11:48 -0300 Subject: [PATCH 5/5] Fixes --- .../mailing/models/repositories/impl/AlertaRepository.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/ar/utn/ba/ddsi/mailing/models/repositories/impl/AlertaRepository.java b/src/main/java/ar/utn/ba/ddsi/mailing/models/repositories/impl/AlertaRepository.java index 49a7794..fb03de9 100644 --- a/src/main/java/ar/utn/ba/ddsi/mailing/models/repositories/impl/AlertaRepository.java +++ b/src/main/java/ar/utn/ba/ddsi/mailing/models/repositories/impl/AlertaRepository.java @@ -1,8 +1,8 @@ package ar.utn.ba.ddsi.mailing.models.repositories.impl; import ar.utn.ba.ddsi.mailing.models.entities.Alerta; -import ar.utn.ba.ddsi.mailing.models.entities.Clima; import ar.utn.ba.ddsi.mailing.models.repositories.IAlertaRepository; +import org.springframework.stereotype.Repository; import java.util.ArrayList; import java.util.HashMap; @@ -10,6 +10,7 @@ import java.util.Map; import java.util.concurrent.atomic.AtomicLong; +@Repository public class AlertaRepository implements IAlertaRepository { private final Map alertas = new HashMap<>(); private final AtomicLong idGenerator = new AtomicLong(1);