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

import ar.utn.ba.ddsi.mailing.models.entities.Email;
import ar.utn.ba.ddsi.mailing.models.dto.inputs.EmailInput;
import ar.utn.ba.ddsi.mailing.models.dto.outputs.EmailOutput;
import ar.utn.ba.ddsi.mailing.services.IEmailService;
import org.springframework.web.bind.annotation.*;
import java.util.List;
Expand All @@ -15,12 +16,12 @@ public EmailController(IEmailService emailService) {
}

@PostMapping
public Email crearEmail(@RequestBody Email email) {
return emailService.crearEmail(email);
public EmailOutput crearEmail(@RequestBody EmailInput emailInput) {
return emailService.crearEmail(emailInput);
}

@GetMapping
public List<Email> obtenerEmails(@RequestParam(required = false) Boolean pendiente) {
public List<EmailOutput> obtenerEmails(@RequestParam(required = false) Boolean pendiente) {
return emailService.obtenerEmails(pendiente);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package ar.utn.ba.ddsi.mailing.models.dto.inputs;

import java.time.LocalDateTime;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class ClimaInput {
private String ciudad;
private String region;
private String pais;
private Double temperaturaCelsius;
private Double temperaturaFahrenheit;
private String condicion;
private Double velocidadVientoKmh;
private Integer humedad;
private LocalDateTime fechaActualizacion;

public static ClimaInput of(String ciudad, String region, String pais, Double temperaturaCelsius, Double temperaturaFahrenheit, String coindicion, Double velocidadVientoKmh, Integer humedad) {
return ClimaInput
.builder()
.ciudad(ciudad)
.region(region)
.pais(pais)
.temperaturaCelsius(temperaturaCelsius)
.temperaturaFahrenheit(temperaturaFahrenheit)
.condicion(coindicion)
.velocidadVientoKmh(velocidadVientoKmh)
.humedad(humedad)
.fechaActualizacion(LocalDateTime.now())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package ar.utn.ba.ddsi.mailing.models.dto.inputs;


import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class EmailInput {
private String destinatario;
private String remitente;
private String asunto;
private String contenido;

public static EmailInput of(String destinatario, String remitente, String asunto, String contenido) {
return EmailInput.builder().destinatario(destinatario).remitente(remitente).asunto(asunto).contenido(contenido).build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package ar.utn.ba.ddsi.mailing.models.dto.outputs;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class EmailOutput {
private Long id;
private String destinatario;
private String remitente;
private String asunto;
private String contenido;

public static EmailOutput of(Long id, String destinatario, String remitente, String asunto, String contenido) {
return EmailOutput.builder().id(id).destinatario(destinatario).remitente(remitente).asunto(asunto).contenido(contenido).build();
}
}
43 changes: 43 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,43 @@
package ar.utn.ba.ddsi.mailing.models.entities;

import lombok.*;

@AllArgsConstructor
@NoArgsConstructor
@Builder
@Getter
@Setter
public class Alerta {
private Long id;
private String asunto = "Alerta de Clima - Condiciones Extremas";
private String ciudad;
private Double temperaturaCelsius;
private Integer humedad;
private String condicion;
private Double velocidadVientoKmh;

private String mensaje = String.format(
"ALERTA: Condiciones climáticas extremas detectadas en %s\n\n" +
"Temperatura: %.1f°C\n" +
"Humedad: %d%%\n" +
"Condición: %s\n" +
"Velocidad del viento: %.1f km/h\n\n" +
"Se recomienda tomar precauciones.",
this.ciudad,
this.temperaturaCelsius,
this.humedad,
this.condicion,
this.velocidadVientoKmh
);

public static Alerta of(String asunto, String ciudad, Double temperaturaCelsius, Integer humedad, String condicion, Double velocidadVientoKmh) {
return Alerta.builder()
.asunto(asunto)
.ciudad(ciudad)
.temperaturaCelsius(temperaturaCelsius)
.humedad(humedad)
.condicion(condicion)
.velocidadVientoKmh(velocidadVientoKmh)
.build();
}
}
26 changes: 20 additions & 6 deletions src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Clima.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package ar.utn.ba.ddsi.mailing.models.entities;

import lombok.Getter;
import lombok.Setter;
import lombok.*;

import java.time.LocalDateTime;

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Clima {
private Long id;
private String ciudad;
Expand All @@ -19,8 +22,19 @@ public class Clima {
private LocalDateTime fechaActualizacion;
private boolean procesado;

public Clima() {
this.fechaActualizacion = LocalDateTime.now();
this.procesado = false;
public static Clima of(String ciudad, String region, String pais, Double temperaturaCelsius, Double temperaturaFahrenheit, String coindicion, Double velocidadVientoKmh, Integer humedad, LocalDateTime fechaActualizacion) {
return Clima
.builder()
.ciudad(ciudad)
.region(region)
.pais(pais)
.temperaturaCelsius(temperaturaCelsius)
.temperaturaFahrenheit(temperaturaFahrenheit)
.condicion(coindicion)
.velocidadVientoKmh(velocidadVientoKmh)
.humedad(humedad)
.fechaActualizacion(fechaActualizacion)
.procesado(false)
.build();
}
}
}
14 changes: 6 additions & 8 deletions src/main/java/ar/utn/ba/ddsi/mailing/models/entities/Email.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package ar.utn.ba.ddsi.mailing.models.entities;

import lombok.Getter;
import lombok.Setter;
import lombok.*;

@AllArgsConstructor
@NoArgsConstructor
@Builder
@Setter
@Getter
public class Email {
Expand All @@ -13,12 +15,8 @@ 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 static Email of(String destinatario, String remitente, String asunto, String contenido){
return Email.builder().destinatario(destinatario).remitente(remitente).asunto(asunto).contenido(contenido).enviado(false).build();
}

public void enviar() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package ar.utn.ba.ddsi.mailing.models.exceptions;

public class EmailNoEnviadoException {
public EmailNoEnviadoException(String message) {
super(message);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package ar.utn.ba.ddsi.mailing.models.repositories;

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

import java.util.List;

public interface IAlertaRepository {
void save(Alerta alerta);
List<Alerta> findall();
Alerta findById(Long id);
void delete(Alerta alerta);
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import java.util.Optional;

public interface IClimaRepository {
Clima save(Clima clima);
void save(Clima clima);
List<Clima> findAll();
Optional<Clima> findById(Long id);
Optional<Clima> findByCiudad(String ciudad);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import java.util.Optional;

public interface IEmailRepository {
Email save(Email email);
void save(Email email);
List<Email> findAll();
List<Email> findByEnviado(boolean enviado);
Optional<Email> findById(Long id);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
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.repositories.IAlertaRepository;
import org.springframework.stereotype.Repository;

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

@Repository
public class AlertaRepository implements IAlertaRepository {
private final Map<Long, Alerta> alertas = new HashMap<>();
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.put(id, alerta);
}else{
alertas.put(alerta.getId(), alerta);
}
}

@Override
public List<Alerta> findall(){return new ArrayList<>(alertas.values());}

@Override
public Alerta findById(Long id){
return alertas.values().stream()
.filter(a -> Objects.equals(a.getId(), id))
.findFirst().orElse(null);
}

@Override
public void delete(Alerta alerta){
if (alerta.getId() != null) {
alertas.remove(alerta.getId());
}}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public class ClimaRepository implements IClimaRepository {
private final AtomicLong idGenerator = new AtomicLong(1);

@Override
public Clima save(Clima clima) {
public void save(Clima clima) {
if (clima.getId() == null) {
Long id = idGenerator.getAndIncrement();
clima.setId(id);
Expand All @@ -23,7 +23,6 @@ public Clima save(Clima clima) {
climas.put(clima.getId(), clima);
ciudadToId.put(clima.getCiudad(), clima.getId());
}
return clima;
}

@Override
Expand All @@ -45,8 +44,8 @@ public Optional<Clima> findByCiudad(String ciudad) {
@Override
public List<Clima> findByProcesado(boolean procesado) {
return climas.values().stream()
.filter(c -> c.isProcesado() == procesado)
.toList();
.filter(c -> c.isProcesado() == procesado)
.toList();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public class EmailRepository implements IEmailRepository {
private final AtomicLong idGenerator = new AtomicLong(1);

@Override
public Email save(Email email) {
public void save(Email email) {
if (email.getId() == null) {
// Es un nuevo email
Long id = idGenerator.getAndIncrement();
Expand All @@ -22,7 +22,6 @@ public Email save(Email email) {
// Es una actualización
emails.put(email.getId(), email);
}
return email;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package ar.utn.ba.ddsi.mailing.services;

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

public interface ICondicionAlerta {
public boolean cumpleCondicionAlerta(Clima clima);
}
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.entities.Email;
import ar.utn.ba.ddsi.mailing.models.dto.inputs.EmailInput;
import ar.utn.ba.ddsi.mailing.models.dto.outputs.EmailOutput;
import java.util.List;

public interface IEmailService {
Email crearEmail(Email email);
List<Email> obtenerEmails(Boolean pendiente);
EmailOutput crearEmail(EmailInput emailInput);
List<EmailOutput> obtenerEmails(Boolean pendiente);
void procesarPendientes();
void loguearEmailsPendientes();
}
Loading