Commit 30508d0b by María Hidalgo

Acabando modelo

parent f71acdb9
......@@ -2,40 +2,93 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>es.ujaen.dae</groupId>
<artifactId>carpooling-dae</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>carpooling-dae</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.4</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>16</source>
<target>16</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
......@@ -2,12 +2,16 @@ package es.ujaen.dae.carpoolingdae;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
@SpringBootApplication
@SpringBootApplication(scanBasePackages="es.ujaen.dae.carpooling")
public class CarpoolingDaeApplication {
public static void main(String[] args) {
SpringApplication.run(CarpoolingDaeApplication.class, args);
public static void main(String[] args) throws Exception {
SpringApplication servidor = new SpringApplication(CarpoolingDaeApplication.class);
ApplicationContext context = servidor.run(args);
//SpringApplication.run(CarpoolingDaeApplication.class, args);
}
}
package es.ujaen.dae.carpoolingdae.entidades;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.validation.constraints.NotBlank;
import lombok.Data;
import lombok.NoArgsConstructor;
@Entity
public class Reserva {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
//@OneToMany
private List<Usuario> pasajerosConfirmados = new ArrayList<>();
// Constructor, getters y setters
}
package es.ujaen.dae.carpoolingdae.entidades;
import java.time.LocalDate;
import java.util.ArrayList;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Past;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import java.util.List;
import es.ujaen.dae.carpoolingdae.utils.CodificadorMd5;
//import org.hibernate.mapping.List;
import es.ujaen.dae.carpoolingdae.utils.ExprReg;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@Entity
public class Usuario {
@NotBlank
@Id
@Size(min = 9, max = 9)
@Pattern(regexp = ExprReg.DNI)
private String dni;
@NotBlank
private String nombre;
@NotBlank
private String apellidos;
@Past
private LocalDate fecha_nac;
@Pattern(regexp = ExprReg.TLF)
private String telef;
@Email
private String email;
@NotBlank
private String clave;
public Usuario(String dni, String nombre, String apellidos, LocalDate fecha_nac, String telef, String email,
String clave) {
this.dni = dni;
this.nombre = nombre;
this.apellidos = apellidos;
this.fecha_nac = fecha_nac;
this.telef = telef;
this.email = email;
this.clave = CodificadorMd5.codificar(clave);
// reservas = new ArrayList<>();
}
public String getDni() {
return dni;
}
public String getNombre() {
return nombre;
}
public String getApellidos() {
return apellidos;
}
public LocalDate getFecha_nac() {
return fecha_nac;
}
public String getTelef() {
return telef;
}
public String getEmail() {
return email;
}
// private List<Viaje> viajesActuales;
private int totalViajes = 0;
public void crearViaje(Viaje viaje) {
viaje.setId(totalViajes);
/*
* viajesActuales.add(viaje);
* totalViajes++;
*/
}
@OneToMany(mappedBy = "conductor") // Relación uno a muchos con Viaje (Usuario como conductor)
private List<Viaje> viajesComoConductor = new ArrayList<>();
@ManyToMany(mappedBy = "pasajeros") // Relación muchos a muchos con Viaje (Usuario como pasajero)
private List<Viaje> viajesComoPasajero = new ArrayList<>();
// Otros campos y métodos
public void enviarSolicitudViaje(Viaje viaje) {
if (viaje != null && !viajesComoPasajero.contains(viaje)) {
viajesComoPasajero.add(viaje);
viaje.getUsuariosSolicitantes().add(this); // Agregar este usuario a la lista de solicitantes en el Viaje
}
}
public void aceptarPasajero(Viaje viaje, Usuario pasajero) {
if (viaje != null && viaje.getUsuariosSolicitantes().contains(pasajero)) {
viaje.getUsuariosSolicitantes().remove(pasajero);
viaje.getUsuariosConfirmados().add(pasajero);
pasajero.getViajesComoPasajero().add(viaje);
}
}
public boolean claveValida(String clave) {
return clave.equals(clave);
}
}
package es.ujaen.dae.carpoolingdae.entidades;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Past;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@Entity
public class Viaje {
@OneToMany(mappedBy = "viajeSolicitado") // Relación uno a muchos con Usuario
private List<Usuario> usuariosSolicitantes = new ArrayList<>();
private List<Usuario> usuariosConfirmados = new ArrayList<>();
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
int id;
@NotBlank
private String destino;
@NotBlank
private String origen;
@Past
private LocalDateTime fecha_hora;
@NotBlank
private int plazasDisponibles;
@NotBlank
private Float precioAsiento;
public Viaje(int id, String destino, String origen, LocalDateTime fecha_hora, int plazasDisponibles, Float precioAsiento){
this.id = id;
this.origen = origen;
this.destino = destino;
this.fecha_hora = fecha_hora;
this.plazasDisponibles = plazasDisponibles;
this.precioAsiento = precioAsiento;
//reservas = new ArrayList<>();
}
public int getId(){
return id;
}
public String getDestino(){
return destino;
}
public String getOrigen(){
return origen;
}
public LocalDateTime getFecha_hora(){
return fecha_hora;
}
public int getPlazas(){
return plazasDisponibles;
}
public Float getPrecio(){
return precioAsiento;
}
}
package es.ujaen.dae.carpoolingdae.excepciones;
public class UsuarioYaRegistrado extends RuntimeException {
public UsuarioYaRegistrado() {
}
}
package es.ujaen.dae.carpoolingdae.servicios;
import java.util.TreeMap;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Map;
import java.util.Optional;
import java.util.List;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import es.ujaen.dae.carpoolingdae.entidades.Usuario;
import es.ujaen.dae.carpoolingdae.entidades.Viaje;
import es.ujaen.dae.carpoolingdae.excepciones.UsuarioYaRegistrado;
@Service
@Validated
public class SistemaCarpooling {
Map<String, Usuario> usuarios;
Map<String, Viaje> viajes;
public SistemaCarpooling(){
usuarios = new TreeMap<>();
viajes = new TreeMap<>();
}
public void altaUsuario(@NotNull @Valid Usuario usuario) {
if (usuarios.containsKey(usuario.getDni())) {
throw new UsuarioYaRegistrado();
}
// Registrar cliente
usuarios.put(usuario.getDni(), usuario);
}
/**
* Realiza un login de un cliente
* @param dni el DNI del cliente
* @param clave la clave de acceso
* @return el objeto de la clase Cliente asociado
*/
public Optional<Usuario> loginCliente(@NotBlank String email, @NotBlank String clave) {
return Optional.ofNullable(usuarios.get(email)).filter((cliente)->cliente.claveValida(clave));
}
public List<Viaje> buscarViajes(String origen, String destino, LocalDate fecha) {
List<Viaje> viajesEncontrados = new ArrayList<>();
for (Viaje viaje : viajes.values()) { // Iterar sobre la colección de viajes
if (viaje.getOrigen().equals(origen) && viaje.getDestino().equals(destino) && viaje.getFecha_hora().toLocalDate().equals(fecha)) {
viajesEncontrados.add(viaje);
}
}
return viajesEncontrados;
}
public void agregarViaje(@NotNull @Valid Viaje nuevoViaje) {
viajes.put(String.valueOf(nuevoViaje.getId()), nuevoViaje);
}
}
\ No newline at end of file
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package es.ujaen.dae.carpoolingdae.utils;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
/**
*
* @author admin
*/
public class CodificadorMd5 {
private CodificadorMd5() {
}
public static String codificar(String cadena) {
String cadenaCodificada = null;
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(cadena.getBytes());
cadenaCodificada = Base64.getEncoder().withoutPadding().encodeToString(md.digest());
}
catch(NoSuchAlgorithmException e) {
// No debe ocurrir puesto que MD5 es un algoritmo que existe en la
// implementación Java estándar
}
return cadenaCodificada;
}
}
package es.ujaen.dae.carpoolingdae.utils;
public class ExprReg {
private ExprReg() {}
public static final String DNI = "\\d{8}[A-HJ-NP-TV-Z]";
public static final String TLF = "^(\\+34|0034|34)?[6789]\\d{8}$";
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment