Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import ar.utn.ba.ddsi.mailing.models.entities.Email;
import ar.utn.ba.ddsi.mailing.services.IEmailService;
import ar.utn.ba.ddsi.mailing.services.impl.EmailService;
import ar.utn.ba.ddsi.mailing.models.dtoEmail.EmailDTO;
import org.springframework.web.bind.annotation.*;
import java.util.List;

Expand All @@ -15,12 +17,12 @@ public EmailController(IEmailService emailService) {
}

@PostMapping
public Email crearEmail(@RequestBody Email email) {
return emailService.crearEmail(email);
public EmailDTO crearEmail(@RequestBody EmailDTO emailDTO) {
return emailService.crearEmail(emailDTO);
}

@GetMapping
public List<Email> obtenerEmails(@RequestParam(required = false) Boolean pendiente) {
public List<EmailDTO> obtenerEmails(@RequestParam(required = false) Boolean pendiente) {
return emailService.obtenerEmails(pendiente);
}
}
13 changes: 13 additions & 0 deletions src/main/java/ar/utn/ba/ddsi/mailing/models/dtoEmail/EmailDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package ar.utn.ba.ddsi.mailing.models.dtoEmail;

import lombok.Getter;
import lombok.AllArgsConstructor;

@Getter
@AllArgsConstructor
public class EmailDTO {
private String destinatario;
private String remitente;
private String asunto;
private String mensaje;
}
44 changes: 44 additions & 0 deletions src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Alerta.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package ar.utn.ba.ddsi.mailing.models.entities;
import java.time.LocalDateTime;



public class Alerta {
private Long id;
private Clima clima;
private String descripcion;
private LocalDateTime fechaGeneracion;
private boolean enviada;

public Alerta(Clima clima, String descripcion) {
this.clima = clima;
this.descripcion = descripcion;
this.fechaGeneracion = LocalDateTime.now();
this.enviada = false;
}

public Long getId() {
return id;
}

public Clima getClima() {
return clima;
}

public String getDescripcion() {
return descripcion;
}

public LocalDateTime getFechaGeneracion() {
return fechaGeneracion;
}

public boolean isEnviada() {
return enviada;
}

public void marcarComoEnviada() {
this.enviada = true;
}
}

12 changes: 10 additions & 2 deletions src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Clima.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,27 @@
@Setter
public class Clima {
private Long id;
/*
private String ciudad;
private String region;
private String pais;
private String pais;*/
private Ubicacion ubicacion;
/*
private Double temperaturaCelsius;
private Double temperaturaFahrenheit;
private String condicion;
private Double velocidadVientoKmh;
private Integer humedad;
*/
private CondicionesClimaticas condiciones;
private LocalDateTime fechaActualizacion;
private boolean procesado;

public Clima() {
public Clima(Ubicacion ubicacion, CondicionesClimaticas condiciones) {
this.ubicacion = ubicacion;
this.condiciones = condiciones;
this.fechaActualizacion = LocalDateTime.now();
this.procesado = false;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package ar.utn.ba.ddsi.mailing.models.entities;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class CondicionesClimaticas {
private double temperaturaCelsius;
private double temperaturaFahrenheit;
private String condicion;
private double velocidadVientoKmh;
private int humedad;

public CondicionesClimaticas(double temperaturaCelsius, double temperaturaFahrenheit, String condicion, double velocidadVientoKmh, int humedad) {
this.temperaturaCelsius = temperaturaCelsius;
this.temperaturaFahrenheit = temperaturaFahrenheit;
this.condicion = condicion;
this.velocidadVientoKmh = velocidadVientoKmh;
this.humedad = humedad;
}
}
11 changes: 9 additions & 2 deletions src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Email.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package ar.utn.ba.ddsi.mailing.models.entities;

import ar.utn.ba.ddsi.mailing.models.dtoEmail.EmailDTO;
import ar.utn.ba.ddsi.mailing.services.email.EmailSenderAdapter;
import lombok.Getter;
import lombok.Setter;

Expand All @@ -12,16 +14,21 @@ public class Email {
private String asunto;
private String contenido;
private boolean enviado;
private final EmailSenderAdapter emailSenderAdapter;

public Email(String destinatario, String remitente, String asunto, String contenido) {

public Email(String destinatario, String remitente, String asunto, String contenido, EmailSenderAdapter emailSenderAdapter) {
this.destinatario = destinatario;
this.remitente = remitente;
this.asunto = asunto;
this.contenido = contenido;
this.enviado = false;
this.emailSenderAdapter = emailSenderAdapter;

}

public void enviar() {
//TODO: Implementación pendiente. Podríamos usar adapters
emailSenderAdapter.enviarEmail(new EmailDTO(destinatario, remitente, asunto, contenido));
this.enviado = true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package ar.utn.ba.ddsi.mailing.models.entities;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class Ubicacion {
private String ciudad;
private String region;
private String pais;

public Ubicacion(String ciudad, String region, String pais) {
this.ciudad = ciudad;
this.region = region;
this.pais = pais;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ar.utn.ba.ddsi.mailing.models.repositories.impl;

import ar.utn.ba.ddsi.mailing.models.entities.Clima;
import ar.utn.ba.ddsi.mailing.models.entities.Ubicacion;
import ar.utn.ba.ddsi.mailing.models.repositories.IClimaRepository;
import org.springframework.stereotype.Repository;
import java.util.*;
Expand All @@ -9,19 +10,18 @@
@Repository
public class ClimaRepository implements IClimaRepository {
private final Map<Long, Clima> climas = new HashMap<>();
private final Map<String, Long> ciudadToId = new HashMap<>();
private final Map<Ubicacion, Long> ciudadToId = new HashMap<>();
private final AtomicLong idGenerator = new AtomicLong(1);

@Override
public Clima save(Clima clima) {
if (clima.getId() == null) {
Long id = idGenerator.getAndIncrement();
clima.setId(id);
climas.put(id, clima);
ciudadToId.put(clima.getCiudad(), id);
} else {
climas.put(clima.getId(), clima);
ciudadToId.put(clima.getCiudad(), clima.getId());
}
climas.put(clima.getId(), clima);
if (clima.getUbicacion() != null) {
ciudadToId.put(clima.getUbicacion(), clima.getId());
}
return clima;
}
Expand All @@ -40,7 +40,7 @@ public Optional<Clima> findById(Long id) {
public Optional<Clima> findByCiudad(String ciudad) {
Long id = ciudadToId.get(ciudad);
return id != null ? Optional.of(climas.get(id)) : Optional.empty();
}
}//Revisar

@Override
public List<Clima> findByProcesado(boolean procesado) {
Expand All @@ -53,7 +53,7 @@ public List<Clima> findByProcesado(boolean procesado) {
public void delete(Clima clima) {
if (clima.getId() != null) {
climas.remove(clima.getId());
ciudadToId.remove(clima.getCiudad());
ciudadToId.remove(clima.getUbicacion());
}
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package ar.utn.ba.ddsi.mailing.services;

import ar.utn.ba.ddsi.mailing.models.dtoEmail.EmailDTO;
import ar.utn.ba.ddsi.mailing.models.entities.Email;
import java.util.List;

public interface IEmailService {
Email crearEmail(Email email);
List<Email> obtenerEmails(Boolean pendiente);
EmailDTO crearEmail(EmailDTO emailDTO);
List<EmailDTO> obtenerEmails(Boolean pendiente);
void procesarPendientes();
void loguearEmailsPendientes();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package ar.utn.ba.ddsi.mailing.services.alertas;

import ar.utn.ba.ddsi.mailing.models.entities.Clima;

public class AlertaPorHumedad implements TipoAlerta {
private int humedadLimite;

public AlertaPorHumedad(int humedadLimite) {
this.humedadLimite = humedadLimite;
}

@Override
public boolean esCumplidaPor(Clima clima) {
return clima.getCondiciones().getHumedad() > humedadLimite;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package ar.utn.ba.ddsi.mailing.services.alertas;

import ar.utn.ba.ddsi.mailing.models.entities.Clima;

public class AlertaPorTemperatura implements TipoAlerta {
private double temperaturaLimite;

public AlertaPorTemperatura(double temperaturaLimite) {
this.temperaturaLimite = temperaturaLimite;
}

@Override
public boolean esCumplidaPor(Clima clima) {
return clima.getCondiciones().getTemperaturaCelsius() > temperaturaLimite;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package ar.utn.ba.ddsi.mailing.services.alertas;
import ar.utn.ba.ddsi.mailing.models.entities.Clima;
import ar.utn.ba.ddsi.mailing.services.alertas.TipoAlerta;
import java.util.List;

public class EvaluadorAlertas {
private List<TipoAlerta> condiciones;

public EvaluadorAlertas(List<TipoAlerta> condiciones) {
this.condiciones = condiciones;
}

public boolean cumpleCondiciones(Clima clima) {
return condiciones.stream().allMatch(condicion -> condicion.esCumplidaPor(clima));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package ar.utn.ba.ddsi.mailing.services.alertas;
import ar.utn.ba.ddsi.mailing.models.entities.Clima;


public interface TipoAlerta {
boolean esCumplidaPor(Clima clima);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package ar.utn.ba.ddsi.mailing.services.email;
import ar.utn.ba.ddsi.mailing.models.dtoEmail.EmailDTO;

public interface EmailSenderAdapter {
void enviarEmail(EmailDTO emailDTO);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package ar.utn.ba.ddsi.mailing.services.email;
import ar.utn.ba.ddsi.mailing.models.dtoEmail.EmailDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

@Component
public class SimpleEmailSender implements EmailSenderAdapter {
private static final Logger logger = LoggerFactory.getLogger(SimpleEmailSender.class);

@Override
public void enviarEmail(EmailDTO emailDTO) {
logger.info("Enviando email a de la manera tradicional'");
}
}


Loading