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
@@ -1,6 +1,8 @@
package ar.utn.ba.ddsi.mailing.controllers;

import ar.utn.ba.ddsi.mailing.models.entities.Email;
import ar.utn.ba.ddsi.mailing.models.dto.EmailInputDTO;
import ar.utn.ba.ddsi.mailing.models.dto.EmailOutputDTO;
import ar.utn.ba.ddsi.mailing.models.entities.emails.Email;
import ar.utn.ba.ddsi.mailing.services.IEmailService;
import org.springframework.web.bind.annotation.*;
import java.util.List;
Expand All @@ -15,8 +17,8 @@ public EmailController(IEmailService emailService) {
}

@PostMapping
public Email crearEmail(@RequestBody Email email) {
return emailService.crearEmail(email);
public EmailOutputDTO crearEmail(@RequestBody EmailInputDTO emailInputDTO) {
return emailService.crearEmail(emailInputDTO);
}

@GetMapping
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/ar/utn/ba/ddsi/mailing/models/dto/EmailInputDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package ar.utn.ba.ddsi.mailing.models.dto;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class EmailInputDTO {
private String destinatario;
private String remitente;
private String asunto;
private String contenido;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package ar.utn.ba.ddsi.mailing.models.dto;

import lombok.AllArgsConstructor;

@AllArgsConstructor
public class EmailOutputDTO {
private String destinatario;
private String remitente;
private String asunto;
private String contenido;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package ar.utn.ba.ddsi.mailing.models.entities;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@AllArgsConstructor
public class Temperatura {
private double temperaturaCelsius; //keep it simple

private double getTemperaturaFahrenheit(){
return (temperaturaCelsius * 9 / 5) + 32;
}

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

import ar.utn.ba.ddsi.mailing.models.entities.Temperatura;
import ar.utn.ba.ddsi.mailing.models.entities.lugares.Ciudad;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
public class Alerta {
private Long id;
private Ciudad ciudad;
private Temperatura temperatura;
private Integer humedad;
private String condicion;
private Double velocidadVientoKmh;
boolean procesado = false;
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
package ar.utn.ba.ddsi.mailing.models.entities;
package ar.utn.ba.ddsi.mailing.models.entities.climas;

import ar.utn.ba.ddsi.mailing.models.entities.Temperatura;
import ar.utn.ba.ddsi.mailing.models.entities.lugares.Ciudad;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;

@Getter
@Setter
public class Clima {
public class Clima { //responsabilidad: se la cambio, la ciudad conoce su clima, no al reves
private Long id;
private String ciudad;
private String region;
private String pais;
private Double temperaturaCelsius;
private Double temperaturaFahrenheit;
private Ciudad ciudad;
private Temperatura temperatura;
private String condicion;
private Double velocidadVientoKmh;
private Integer humedad;
Expand All @@ -23,4 +22,9 @@ public Clima() {
this.fechaActualizacion = LocalDateTime.now();
this.procesado = false;
}

public boolean getProcesado(){
return procesado;
}

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

import lombok.Getter;
import lombok.Setter;
Expand All @@ -13,15 +13,14 @@ public class Email {
private String contenido;
private boolean enviado;


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

public void enviar() {
//TODO: Implementación pendiente. Podríamos usar adapters
}

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

import ar.utn.ba.ddsi.mailing.models.entities.climas.Clima;
import lombok.Getter;
import lombok.Setter;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

@Setter
@Getter
public class Ciudad {
String nombre;
Region region;
List<Clima> climas;
public Ciudad(String nombre,Region region) {
this.nombre = nombre;
this.region = region;
climas = new ArrayList<>();
}

public void agregarClima(Clima clima){
this.climas.add(clima);
}

public Clima obtenerClimaMasReciente(){
return climas.stream().max(Comparator.comparing(Clima::getFechaActualizacion)).orElse(null);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package ar.utn.ba.ddsi.mailing.models.entities.lugares;

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class Pais {
String nombre;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package ar.utn.ba.ddsi.mailing.models.entities.lugares;

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class Region {
String nombre;
Pais pais;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package ar.utn.ba.ddsi.mailing.models.repositories;

import ar.utn.ba.ddsi.mailing.models.entities.alerts.Alerta;

import java.util.List;

public interface IAlertaRepository {
public void save(Alerta alerta);
public List<Alerta> findByProcesado(boolean procesado);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package ar.utn.ba.ddsi.mailing.models.repositories;

import ar.utn.ba.ddsi.mailing.models.entities.lugares.Ciudad;

import java.util.List;

public interface ICiudadRepository {
public List<Ciudad> findAll();
public void save(Ciudad ciudad);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package ar.utn.ba.ddsi.mailing.models.repositories;

import ar.utn.ba.ddsi.mailing.models.entities.Clima;
import ar.utn.ba.ddsi.mailing.models.entities.climas.Clima;
import java.util.List;
import java.util.Optional;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package ar.utn.ba.ddsi.mailing.models.repositories;

import ar.utn.ba.ddsi.mailing.models.entities.Email;
import ar.utn.ba.ddsi.mailing.models.entities.emails.Email;
import java.util.List;
import java.util.Optional;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package ar.utn.ba.ddsi.mailing.models.repositories.impl;

import ar.utn.ba.ddsi.mailing.models.entities.alerts.Alerta;
import ar.utn.ba.ddsi.mailing.models.entities.climas.Clima;
import ar.utn.ba.ddsi.mailing.models.repositories.IAlertaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.concurrent.atomic.AtomicLong;

@Repository
public class AlertaRepository implements IAlertaRepository {
List<Alerta> alertas;
private final AtomicLong idGenerator = new AtomicLong(1);

@Override
public void save(Alerta alerta) {
if (alerta.getId() == null) {
Long id = idGenerator.getAndIncrement();
alerta.setId(id);
alertas.add(alerta);
}//si ya esta en el repo listo, ya esta
}

@Override
public List<Alerta> findByProcesado(boolean procesado) {
return alertas.stream()
.filter(a -> a.isProcesado() == procesado)
.toList();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package ar.utn.ba.ddsi.mailing.models.repositories.impl;

import ar.utn.ba.ddsi.mailing.models.entities.lugares.Ciudad;
import ar.utn.ba.ddsi.mailing.models.repositories.ICiudadRepository;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;
import java.util.List;

@Repository
public class CiudadRepository implements ICiudadRepository {
private final List<Ciudad> ciudades;

public CiudadRepository() {
ciudades = new ArrayList<>();
}
@Override
public List<Ciudad> findAll() {
return ciudades;
}

@Override
public void save(Ciudad ciudad) {
ciudades.add(ciudad);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
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.climas.Clima;
import ar.utn.ba.ddsi.mailing.models.repositories.IClimaRepository;
import org.springframework.stereotype.Repository;
import java.util.*;
Expand All @@ -18,10 +18,10 @@ public Clima save(Clima clima) {
Long id = idGenerator.getAndIncrement();
clima.setId(id);
climas.put(id, clima);
ciudadToId.put(clima.getCiudad(), id);
ciudadToId.put(clima.getCiudad().getNombre(), id);
} else {
climas.put(clima.getId(), clima);
ciudadToId.put(clima.getCiudad(), clima.getId());
ciudadToId.put(clima.getCiudad().getNombre(), clima.getId());
}
return clima;
}
Expand All @@ -45,7 +45,7 @@ public Optional<Clima> findByCiudad(String ciudad) {
@Override
public List<Clima> findByProcesado(boolean procesado) {
return climas.values().stream()
.filter(c -> c.isProcesado() == procesado)
.filter(c -> c.getProcesado() == procesado)
.toList();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package ar.utn.ba.ddsi.mailing.models.repositories.impl;

import ar.utn.ba.ddsi.mailing.models.entities.Email;
import ar.utn.ba.ddsi.mailing.models.entities.emails.Email;
import ar.utn.ba.ddsi.mailing.models.repositories.IEmailRepository;
import org.springframework.stereotype.Repository;
import java.util.*;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public AlertasScheduler(IAlertasService alertasService) {

@Scheduled(fixedRate = 60000) // Cada 1 minuto
public void procesarAlertas() {
alertasService.generarAlertasYAvisar()
alertasService.generarAlertasYGuardar()
.doOnSuccess(v -> logger.info("Procesamiento de alertas completado"))
.doOnError(e -> logger.error("Error en el procesamiento de alertas: {}", e.getMessage()))
.subscribe();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package ar.utn.ba.ddsi.mailing.schedulers;

import ar.utn.ba.ddsi.mailing.services.IEmailService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class EmailScheduler {
private final IEmailService emailService;

private static final Logger logger = LoggerFactory.getLogger(EmailScheduler.class);
public EmailScheduler(IEmailService emailService) {
this.emailService = emailService;
}
Expand All @@ -17,8 +19,18 @@ public void procesarEmailsPendientes() {
emailService.procesarPendientes();
}

@Scheduled(cron = "${cron.expression}")
public void revisarAlertasYEnviarEmails() {
emailService.revisarAlertasYEnviarEmails()
.doOnSuccess(v -> logger.info("Enviado de emails completado"))
.doOnError(e -> logger.error("Error en el enviado de emails: {}", e.getMessage()))
.subscribe();
}

@Scheduled(cron = "${cron.expression}")
public void loguearEmailsPendientes() {
emailService.loguearEmailsPendientes();
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
import reactor.core.publisher.Mono;

public interface IAlertasService {
Mono<Void> generarAlertasYAvisar();
Mono<Void> generarAlertasYGuardar();
}
Loading