Commit inicial
This commit is contained in:
commit
b074794e82
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
/bin/
|
||||
*.class
|
||||
/target/
|
||||
# Eclipse
|
||||
.classpath
|
||||
.project
|
||||
.settings/
|
||||
4
README.md
Normal file
4
README.md
Normal file
@ -0,0 +1,4 @@
|
||||
# Repositorio para el examen de ORDINARIA de Ampliación de Entornos (RA3-RA4-RA5).
|
||||
|
||||
¡Ánimo y a por ello!
|
||||
|
||||
68
pom.xml
Normal file
68
pom.xml
Normal file
@ -0,0 +1,68 @@
|
||||
<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>
|
||||
<groupId>org.lapaloma.examen.aaee</groupId>
|
||||
<artifactId>aaee_gobierno</artifactId>
|
||||
<version>0.0.2</version>
|
||||
|
||||
<name>Prueba de Springboot</name>
|
||||
<description>Proyecto para poder probar el funcionamiento de SpringBoot</description>
|
||||
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>4.0.1</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<java.version>23</java.version>
|
||||
<junit.version>6.0.3</junit.version>
|
||||
</properties>
|
||||
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- JDBC starter: activa DataSource y HikariCP -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-jdbc</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Starter test: incluye JUnit 5, Mockito, AssertJ, etc -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
<!-- Source: https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
|
||||
<dependency>
|
||||
<groupId>com.mysql</groupId>
|
||||
<artifactId>mysql-connector-j</artifactId>
|
||||
<version>9.7.0</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<excludes>
|
||||
</excludes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
||||
|
||||
</project>
|
||||
14
src/main/java/org/lapaloma/examen/aaee/AppGobiernoSB.java
Normal file
14
src/main/java/org/lapaloma/examen/aaee/AppGobiernoSB.java
Normal file
@ -0,0 +1,14 @@
|
||||
package org.lapaloma.examen.aaee;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
public class AppGobiernoSB {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(AppGobiernoSB.class, args);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,63 @@
|
||||
package org.lapaloma.examen.aaee.controller;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.lapaloma.examen.aaee.service.MiembroService;
|
||||
import org.lapaloma.examen.aaee.vo.Miembro;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* Controlador REST para gestionar miembros de ministerios
|
||||
*
|
||||
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
|
||||
* @date 08 mayo 2026
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/gobierno_ord/miembros")
|
||||
public class MiembroController {
|
||||
private final MiembroService miembroService;
|
||||
|
||||
// Spring inyecta automáticamente el service con su DAO
|
||||
public MiembroController(MiembroService miembroService) {
|
||||
this.miembroService = miembroService;
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /gobierno_ord/miembros - Obtiene la lista de todos los miembros
|
||||
*
|
||||
* @return List<Miembro> lista de todos los miembros en formato JSON
|
||||
*/
|
||||
@GetMapping
|
||||
public List<Miembro> getAll() {
|
||||
List<Miembro> listaMiembros = miembroService.obtenerListaMiembros();
|
||||
return listaMiembros;
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /gobierno_ord/miembros/nombre/{nombre} - Obtiene un miembro por su nombre
|
||||
*
|
||||
* @param nombre el nombre del miembro a buscar
|
||||
* @return Miembro el miembro encontrado en formato JSON
|
||||
*/
|
||||
@GetMapping("/nombre/{nombre}")
|
||||
public Miembro getByNombre(@PathVariable String nombre) {
|
||||
Miembro miembro = miembroService.obtenerMiembroPorNombre(nombre);
|
||||
return miembro;
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /gobierno_ord/miembros/alias/{alias} - Obtiene un miembro por su alias
|
||||
*
|
||||
* @param alias el alias del miembro a buscar
|
||||
* @return Miembro el miembro encontrado en formato JSON
|
||||
*/
|
||||
@GetMapping("/alias/{alias}")
|
||||
public Miembro getByAlias(@PathVariable String alias) {
|
||||
Miembro miembro = miembroService.obtenerMiembroPorAlias(alias);
|
||||
return miembro;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,49 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
package org.lapaloma.examen.aaee.controller;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.lapaloma.examen.aaee.service.MinisterioService;
|
||||
import org.lapaloma.examen.aaee.vo.Ministerio;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* Isidoro Nevares Martín - Virgen de la Paloma Fecha creación: 13 mar 2026
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/gobierno_ord/ministerios")
|
||||
public class MinisterioController {
|
||||
private final MinisterioService ministerioService;
|
||||
|
||||
// Spring inyecta automáticamente el service con su DAO
|
||||
public MinisterioController(MinisterioService ministerioService) {
|
||||
this.ministerioService = ministerioService;
|
||||
}
|
||||
|
||||
// GET /gobierno_ord/ministerios - listar todos los ministerios
|
||||
@GetMapping
|
||||
public List<Ministerio> getAll() {
|
||||
List<Ministerio> listaMinisterios = ministerioService.obtenerListaMinisterios();
|
||||
return listaMinisterios;
|
||||
}
|
||||
|
||||
// GET /gobierno_ord/ministerios/nombre/{nombre} - obtener un ministerio por nombre
|
||||
@GetMapping("/nombre/{nombre}")
|
||||
public Ministerio getByNombre(@PathVariable String nombre) {
|
||||
Ministerio ministerio = ministerioService.obtenerMinisterioPorNombre(nombre);
|
||||
return ministerio;
|
||||
}
|
||||
|
||||
// GET /gobierno_ord/ministerios/id/{id} - obtener un ministerio por identificador
|
||||
@GetMapping("/id/{id}")
|
||||
public Ministerio getByIdentificador(@PathVariable int id) {
|
||||
Ministerio ministerio = ministerioService.obtenerMinisterioPorIdentificador(id);
|
||||
return ministerio;
|
||||
}
|
||||
|
||||
}
|
||||
14
src/main/java/org/lapaloma/examen/aaee/dao/IMiembroDAO.java
Normal file
14
src/main/java/org/lapaloma/examen/aaee/dao/IMiembroDAO.java
Normal file
@ -0,0 +1,14 @@
|
||||
package org.lapaloma.examen.aaee.dao;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.lapaloma.examen.aaee.vo.Miembro;
|
||||
|
||||
public interface IMiembroDAO {
|
||||
|
||||
public List<Miembro> obtenerListaMiembros();
|
||||
|
||||
public Miembro obtenerMiembroPorNombre(String nombre);
|
||||
|
||||
public Miembro obtenerMiembroPorAlias(String alias);
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
package org.lapaloma.examen.aaee.dao;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.lapaloma.examen.aaee.vo.Ministerio;
|
||||
|
||||
public interface IMinisterioDAO {
|
||||
|
||||
public List<Ministerio> obtenerListaMinisterios();
|
||||
|
||||
public Ministerio obtenerMinisterioPorNombre(String nombre);
|
||||
|
||||
public Ministerio obtenerMinisterioPorIdentificador(int identificador);
|
||||
}
|
||||
@ -0,0 +1,129 @@
|
||||
package org.lapaloma.examen.aaee.dao.impl;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.lapaloma.examen.aaee.dao.IMiembroDAO;
|
||||
import org.lapaloma.examen.aaee.vo.Miembro;
|
||||
import org.lapaloma.examen.aaee.vo.Ministerio;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public class MiembroDaoJDBC implements IMiembroDAO {
|
||||
private final DataSource dataSource;
|
||||
|
||||
// Spring inyecta el DataSource configurado automáticamente
|
||||
public MiembroDaoJDBC(DataSource dataSource) {
|
||||
this.dataSource = dataSource;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Miembro> obtenerListaMiembros() {
|
||||
|
||||
List<Miembro> lista = new ArrayList<>();
|
||||
|
||||
String sentenciaSQL = """
|
||||
SELECT * FROM miembro
|
||||
""";
|
||||
|
||||
try (Connection conexion = dataSource.getConnection();
|
||||
PreparedStatement sentenciaJDBCPreparada = conexion.prepareStatement(sentenciaSQL);) {
|
||||
|
||||
System.out.println(sentenciaJDBCPreparada);
|
||||
|
||||
ResultSet resultadoSentencia = sentenciaJDBCPreparada.executeQuery();
|
||||
|
||||
while (resultadoSentencia.next()) {
|
||||
lista.add(getLineaFromResultSet(resultadoSentencia));
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return lista;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Miembro obtenerMiembroPorNombre(String nombre) {
|
||||
|
||||
String sentenciaSQL = """
|
||||
SELECT * FROM miembro WHERE nombre = ?
|
||||
""";
|
||||
|
||||
try (Connection conexion = dataSource.getConnection();
|
||||
PreparedStatement sentenciaJDBCPreparada = conexion.prepareStatement(sentenciaSQL);) {
|
||||
|
||||
sentenciaJDBCPreparada.setString(1, nombre);
|
||||
|
||||
System.out.println(sentenciaJDBCPreparada);
|
||||
|
||||
ResultSet resultadoSentencia = sentenciaJDBCPreparada.executeQuery();
|
||||
|
||||
if (resultadoSentencia.next()) {
|
||||
return getLineaFromResultSet(resultadoSentencia);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Miembro obtenerMiembroPorAlias(String alias) {
|
||||
|
||||
String sentenciaSQL = """
|
||||
SELECT * FROM miembro WHERE alias = ?
|
||||
""";
|
||||
|
||||
try (Connection conexion = dataSource.getConnection();
|
||||
PreparedStatement sentenciaJDBCPreparada = conexion.prepareStatement(sentenciaSQL);) {
|
||||
|
||||
sentenciaJDBCPreparada.setString(1, alias);
|
||||
|
||||
System.out.println(sentenciaJDBCPreparada);
|
||||
|
||||
ResultSet resultadoSentencia = sentenciaJDBCPreparada.executeQuery();
|
||||
|
||||
if (resultadoSentencia.next()) {
|
||||
return getLineaFromResultSet(resultadoSentencia);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private Miembro getLineaFromResultSet(ResultSet resultadoSentencia) throws SQLException {
|
||||
|
||||
Miembro miembro = new Miembro();
|
||||
|
||||
miembro.setIdentificador(resultadoSentencia.getInt("codMiembro"));
|
||||
miembro.setNif(resultadoSentencia.getString("nif"));
|
||||
miembro.setNombre(resultadoSentencia.getString("nombre"));
|
||||
miembro.setApellido1(resultadoSentencia.getString("apellido1"));
|
||||
miembro.setAlias(resultadoSentencia.getString("alias"));
|
||||
|
||||
// Obtener el código del ministerio
|
||||
int codigoMinisterio = resultadoSentencia.getInt("codigoMinisterio");
|
||||
|
||||
// Si codigoMinisterio es válido (no es 0), crear objeto Ministerio
|
||||
if (codigoMinisterio != 0) {
|
||||
Ministerio ministerio = new Ministerio();
|
||||
ministerio.setIdentificador(codigoMinisterio);
|
||||
miembro.setMinisterio(ministerio);
|
||||
}
|
||||
|
||||
return miembro;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,98 @@
|
||||
package org.lapaloma.examen.aaee.dao.impl;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.lapaloma.examen.aaee.dao.IMinisterioDAO;
|
||||
import org.lapaloma.examen.aaee.vo.Ministerio;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public class MinisterioDaoJDBC implements IMinisterioDAO {
|
||||
private final DataSource dataSource;
|
||||
|
||||
// Spring inyecta el DataSource configurado automáticamente
|
||||
public MinisterioDaoJDBC(DataSource dataSource) {
|
||||
this.dataSource = dataSource;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<Ministerio> obtenerListaMinisterios() {
|
||||
|
||||
List<Ministerio> lista = new ArrayList<>();
|
||||
|
||||
String sentenciaSQL = """
|
||||
SELECT * FROM ministerio
|
||||
""";
|
||||
|
||||
try (Connection conexion = dataSource.getConnection();
|
||||
PreparedStatement sentenciaJDBCPreparada = conexion.prepareStatement(sentenciaSQL);) {
|
||||
|
||||
System.out.println(sentenciaJDBCPreparada);
|
||||
|
||||
ResultSet resultadoSentencia = sentenciaJDBCPreparada.executeQuery();
|
||||
|
||||
while (resultadoSentencia.next()) {
|
||||
lista.add(getLineaFromResultSet(resultadoSentencia));
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return lista;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private Ministerio getLineaFromResultSet(ResultSet resultadoSentencia) throws SQLException {
|
||||
|
||||
Ministerio ministerio = new Ministerio();
|
||||
|
||||
ministerio.setIdentificador(resultadoSentencia.getInt("codMinisterio"));
|
||||
ministerio.setNombre(resultadoSentencia.getString("nombre"));
|
||||
ministerio.setPresupuesto(resultadoSentencia.getDouble("presupuesto"));
|
||||
ministerio.setGastos(resultadoSentencia.getDouble("gastos"));
|
||||
|
||||
return ministerio;
|
||||
}
|
||||
|
||||
private Ministerio obtenerMinisterio(String sentenciaSQL, Object parametro) {
|
||||
try (Connection conexion = dataSource.getConnection();
|
||||
PreparedStatement sentenciaJDBCPreparada = conexion.prepareStatement(sentenciaSQL);) {
|
||||
|
||||
sentenciaJDBCPreparada.setObject(1, parametro);
|
||||
System.out.println(sentenciaJDBCPreparada);
|
||||
|
||||
try (ResultSet resultadoSentencia = sentenciaJDBCPreparada.executeQuery()) {
|
||||
if (resultadoSentencia.next()) {
|
||||
return getLineaFromResultSet(resultadoSentencia);
|
||||
}
|
||||
}
|
||||
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ministerio obtenerMinisterioPorNombre(String nombre) {
|
||||
String sentenciaSQL = "SELECT * FROM ministerio WHERE nombre = ?";
|
||||
return obtenerMinisterio(sentenciaSQL, nombre);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ministerio obtenerMinisterioPorIdentificador(int identificador) {
|
||||
String sentenciaSQL = "SELECT * FROM ministerio WHERE codMinisterio = ?";
|
||||
return obtenerMinisterio(sentenciaSQL, identificador);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
package org.lapaloma.examen.aaee.excepcion;
|
||||
|
||||
public class MiembroNoEncontradoException extends RuntimeException {
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = -3344627619585104665L;
|
||||
|
||||
public MiembroNoEncontradoException(String mensaje) {
|
||||
super(mensaje);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
package org.lapaloma.examen.aaee.excepcion;
|
||||
|
||||
public class MinisterioNoEncontradoException extends RuntimeException {
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = -3344627619585104664L;
|
||||
|
||||
public MinisterioNoEncontradoException(String mensaje) {
|
||||
super(mensaje);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,76 @@
|
||||
package org.lapaloma.examen.aaee.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.lapaloma.examen.aaee.dao.IMiembroDAO;
|
||||
import org.lapaloma.examen.aaee.excepcion.MiembroNoEncontradoException;
|
||||
import org.lapaloma.examen.aaee.vo.Miembro;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class MiembroService {
|
||||
|
||||
private final IMiembroDAO miembroDAO;
|
||||
|
||||
// Spring inyecta el DAO automáticamente
|
||||
public MiembroService(IMiembroDAO miembroDAO) {
|
||||
this.miembroDAO = miembroDAO;
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtiene la lista completa de miembros
|
||||
*
|
||||
* @return List<Miembro> lista de todos los miembros
|
||||
* @throws RuntimeException si la lista está vacía
|
||||
*/
|
||||
public List<Miembro> obtenerListaMiembros() {
|
||||
|
||||
List<Miembro> lista = miembroDAO.obtenerListaMiembros();
|
||||
|
||||
// Simulamos el caso de lista vacía para probar la excepción
|
||||
lista=null;
|
||||
|
||||
if (lista == null || lista.isEmpty()) {
|
||||
throw new RuntimeException("No hay miembros disponibles");
|
||||
}
|
||||
|
||||
return lista;
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtiene un miembro por su nombre
|
||||
*
|
||||
* @param nombre el nombre del miembro a buscar
|
||||
* @return Miembro el miembro encontrado
|
||||
* @throws MiembroNoEncontradoException si no se encuentra el miembro
|
||||
*/
|
||||
public Miembro obtenerMiembroPorNombre(String nombre) {
|
||||
|
||||
Miembro miembro = miembroDAO.obtenerMiembroPorNombre(nombre);
|
||||
|
||||
if (miembro == null) {
|
||||
throw new MiembroNoEncontradoException("Miembro con nombre '" + nombre + "' no encontrado");
|
||||
}
|
||||
|
||||
return miembro;
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtiene un miembro por su alias
|
||||
*
|
||||
* @param alias el alias del miembro a buscar
|
||||
* @return Miembro el miembro encontrado
|
||||
* @throws MiembroNoEncontradoException si no se encuentra el miembro
|
||||
*/
|
||||
public Miembro obtenerMiembroPorAlias(String alias) {
|
||||
|
||||
Miembro miembro = miembroDAO.obtenerMiembroPorAlias(alias);
|
||||
|
||||
if (miembro == null) {
|
||||
throw new MiembroNoEncontradoException("Miembro con alias '" + alias + "' no encontrado");
|
||||
}
|
||||
|
||||
return miembro;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,60 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
package org.lapaloma.examen.aaee.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.lapaloma.examen.aaee.dao.IMinisterioDAO;
|
||||
import org.lapaloma.examen.aaee.excepcion.MinisterioNoEncontradoException;
|
||||
import org.lapaloma.examen.aaee.vo.Ministerio;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class MinisterioService {
|
||||
|
||||
private final IMinisterioDAO ministerioDAO;
|
||||
|
||||
// Spring inyecta el DAO automáticamente
|
||||
public MinisterioService(IMinisterioDAO ministerioDAO) {
|
||||
this.ministerioDAO = ministerioDAO;
|
||||
}
|
||||
|
||||
public List<Ministerio> obtenerListaMinisterios() {
|
||||
|
||||
List<Ministerio> lista = ministerioDAO.obtenerListaMinisterios();
|
||||
|
||||
// Simulamos el caso de lista vacía para probar la excepción
|
||||
lista=null;
|
||||
|
||||
if (lista == null || lista.isEmpty()) {
|
||||
throw new RuntimeException("No hay ministerios disponibles");
|
||||
}
|
||||
|
||||
return lista;
|
||||
}
|
||||
|
||||
public Ministerio obtenerMinisterioPorNombre(String nombre) {
|
||||
Ministerio ministerio = ministerioDAO.obtenerMinisterioPorNombre(nombre);
|
||||
|
||||
if (ministerio == null) {
|
||||
throw new MinisterioNoEncontradoException("Ministerio con nombre '" + nombre + "' no encontrado");
|
||||
}
|
||||
|
||||
return ministerio;
|
||||
}
|
||||
|
||||
public Ministerio obtenerMinisterioPorIdentificador(int identificador) {
|
||||
Ministerio ministerio = ministerioDAO.obtenerMinisterioPorIdentificador(identificador);
|
||||
|
||||
// Simulamos el caso de lista vacía para probar la excepción
|
||||
ministerio=null;
|
||||
|
||||
if (ministerio == null) {
|
||||
throw new MinisterioNoEncontradoException("Ministerio con identificador '" + identificador + "' no encontrado");
|
||||
}
|
||||
|
||||
return ministerio;
|
||||
}
|
||||
|
||||
}
|
||||
88
src/main/java/org/lapaloma/examen/aaee/vo/Miembro.java
Normal file
88
src/main/java/org/lapaloma/examen/aaee/vo/Miembro.java
Normal file
@ -0,0 +1,88 @@
|
||||
package org.lapaloma.examen.aaee.vo;
|
||||
|
||||
/**
|
||||
*
|
||||
* Casa: Clase de persistencia que representa un Miembro de un Ministerio.
|
||||
*
|
||||
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
|
||||
* @date 03 marzo 2026
|
||||
*
|
||||
*
|
||||
*/
|
||||
public class Miembro {
|
||||
private int identificador;
|
||||
private String nif;
|
||||
private String nombre;
|
||||
private String apellido1;
|
||||
private String alias;
|
||||
private Ministerio ministerio;
|
||||
|
||||
public Miembro() {
|
||||
super();
|
||||
}
|
||||
|
||||
public Miembro(int identificador, String nif, String nombre, String apellido1, String alias,
|
||||
Ministerio ministerio) {
|
||||
super();
|
||||
this.identificador = identificador;
|
||||
this.nif = nif;
|
||||
this.nombre = nombre;
|
||||
this.apellido1 = apellido1;
|
||||
this.alias = alias;
|
||||
this.ministerio = ministerio;
|
||||
}
|
||||
|
||||
public int getIdentificador() {
|
||||
return identificador;
|
||||
}
|
||||
|
||||
public void setIdentificador(int identificador) {
|
||||
this.identificador = identificador;
|
||||
}
|
||||
|
||||
public String getNif() {
|
||||
return nif;
|
||||
}
|
||||
|
||||
public void setNif(String nif) {
|
||||
this.nif = nif;
|
||||
}
|
||||
|
||||
public String getNombre() {
|
||||
return nombre;
|
||||
}
|
||||
|
||||
public void setNombre(String nombre) {
|
||||
this.nombre = nombre;
|
||||
}
|
||||
|
||||
public String getApellido1() {
|
||||
return apellido1;
|
||||
}
|
||||
|
||||
public void setApellido1(String apellido1) {
|
||||
this.apellido1 = apellido1;
|
||||
}
|
||||
|
||||
public String getAlias() {
|
||||
return alias;
|
||||
}
|
||||
|
||||
public void setAlias(String alias) {
|
||||
this.alias = alias;
|
||||
}
|
||||
|
||||
public Ministerio getMinisterio() {
|
||||
return ministerio;
|
||||
}
|
||||
|
||||
public void setMinisterio(Ministerio ministerio) {
|
||||
this.ministerio = ministerio;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Miembro [identificador=" + identificador + ", nif=" + nif + ", nombre=" + nombre + ", apellido1="
|
||||
+ apellido1 + ", alias=" + alias + ", ministerio=" + ministerio + "]";
|
||||
}
|
||||
}
|
||||
70
src/main/java/org/lapaloma/examen/aaee/vo/Ministerio.java
Normal file
70
src/main/java/org/lapaloma/examen/aaee/vo/Ministerio.java
Normal file
@ -0,0 +1,70 @@
|
||||
package org.lapaloma.examen.aaee.vo;
|
||||
|
||||
/**
|
||||
*
|
||||
* Casa: Clase de persistencia que representa una Ministerio de Gobierno.
|
||||
*
|
||||
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
|
||||
* @date 03 marzo 2026
|
||||
*
|
||||
*
|
||||
*/
|
||||
public class Ministerio {
|
||||
private int identificador;
|
||||
private String nombre;
|
||||
private double presupuesto;
|
||||
private double gastos;
|
||||
|
||||
/**
|
||||
* @param identificador
|
||||
* @param nombre
|
||||
*/
|
||||
public Ministerio(int identificador, String nombre, double presupuesto, double gastos) {
|
||||
super();
|
||||
this.identificador = identificador;
|
||||
this.nombre = nombre;
|
||||
this.presupuesto = presupuesto;
|
||||
this.gastos = gastos;
|
||||
}
|
||||
|
||||
public double getPresupuesto() {
|
||||
return presupuesto;
|
||||
}
|
||||
|
||||
public void setPresupuesto(double presupuesto) {
|
||||
this.presupuesto = presupuesto;
|
||||
}
|
||||
|
||||
public double getGastos() {
|
||||
return gastos;
|
||||
}
|
||||
|
||||
public void setGastos(double gastos) {
|
||||
this.gastos = gastos;
|
||||
}
|
||||
|
||||
public Ministerio() {
|
||||
}
|
||||
|
||||
public int getIdentificador() {
|
||||
return identificador;
|
||||
}
|
||||
|
||||
public void setIdentificador(int identificador) {
|
||||
this.identificador = identificador;
|
||||
}
|
||||
|
||||
public String getNombre() {
|
||||
return nombre;
|
||||
}
|
||||
|
||||
public void setNombre(String nombre) {
|
||||
this.nombre = nombre;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Casa [identificador=" + identificador + ", nombre=" + nombre + "]";
|
||||
}
|
||||
|
||||
}
|
||||
13
src/main/resources/application.properties
Normal file
13
src/main/resources/application.properties
Normal file
@ -0,0 +1,13 @@
|
||||
# Puerto en que escucha Spring Boot
|
||||
server.port=8080
|
||||
|
||||
# Servicio de la base de datos.
|
||||
# Ejemplo url base dator:
|
||||
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
|
||||
spring.datasource.url=jdbc:mysql://${DB_HOST:192.168.1.36}:${DB_PORT:3306}/${DB_NAME:Gobierno}
|
||||
spring.datasource.username=${DB_USER:root}
|
||||
spring.datasource.password=${DB_PASSWORD:mysql_123}
|
||||
|
||||
# Parámetros del Pool de conexiones HikariCP
|
||||
spring.datasource.hikari.maximum-pool-size=10
|
||||
spring.datasource.hikari.minimum-idle=2
|
||||
@ -0,0 +1,151 @@
|
||||
package org.lapaloma.examen.aaee.service;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.lapaloma.examen.aaee.dao.IMiembroDAO;
|
||||
import org.lapaloma.examen.aaee.excepcion.MiembroNoEncontradoException;
|
||||
import org.lapaloma.examen.aaee.vo.Miembro;
|
||||
import org.lapaloma.examen.aaee.vo.Ministerio;
|
||||
|
||||
class MiembroServiceTest {
|
||||
|
||||
private MiembroService miembroService;
|
||||
private FakeMiembroDAO fakeDAO;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
fakeDAO = new FakeMiembroDAO();
|
||||
miembroService = new MiembroService(fakeDAO);
|
||||
}
|
||||
|
||||
// =========================
|
||||
// obtenerListaMiembros
|
||||
// =========================
|
||||
|
||||
@Test
|
||||
void obtenerListaMiembros_cuandoListaEstaVacia_lanzaExcepcion() {
|
||||
assertThrows(RuntimeException.class, () -> {
|
||||
miembroService.obtenerListaMiembros();
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void obtenerListaMiembros_cuandoHayDatos_retornaLista() {
|
||||
Ministerio ministerio = new Ministerio(1, "Ministerio de Defensa", 120000, 6000);
|
||||
Miembro miembro1 = new Miembro(1, "23451596F", "James", "Logan", "Lobezno", ministerio);
|
||||
|
||||
fakeDAO.data.add(miembro1);
|
||||
|
||||
List<Miembro> resultado = miembroService.obtenerListaMiembros();
|
||||
|
||||
assertNotNull(resultado);
|
||||
assertEquals(1, resultado.size());
|
||||
assertEquals("James", resultado.get(0).getNombre());
|
||||
}
|
||||
|
||||
// =========================
|
||||
// obtenerMiembroPorNombre
|
||||
// =========================
|
||||
|
||||
@Test
|
||||
void obtenerMiembroPorNombre_cuandoNoExiste_lanzaExcepcion() {
|
||||
assertThrows(MiembroNoEncontradoException.class, () -> {
|
||||
miembroService.obtenerMiembroPorNombre("NoExiste");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void obtenerMiembroPorNombre_cuandoExiste_retornaMiembro() {
|
||||
Ministerio ministerio = new Ministerio(1, "Ministerio de Defensa", 120000, 6000);
|
||||
Miembro miembro1 = new Miembro(1, "23451596F", "James", "Logan", "Lobezno", ministerio);
|
||||
|
||||
fakeDAO.data.add(miembro1);
|
||||
|
||||
Miembro resultado = miembroService.obtenerMiembroPorNombre("James");
|
||||
|
||||
assertNotNull(resultado);
|
||||
assertEquals("James", resultado.getNombre());
|
||||
assertEquals("Logan", resultado.getApellido1());
|
||||
assertEquals("Lobezno", resultado.getAlias());
|
||||
}
|
||||
|
||||
// =========================
|
||||
// obtenerMiembroPorAlias
|
||||
// =========================
|
||||
|
||||
@Test
|
||||
void obtenerMiembroPorAlias_cuandoNoExiste_lanzaExcepcion() {
|
||||
assertThrows(MiembroNoEncontradoException.class, () -> {
|
||||
miembroService.obtenerMiembroPorAlias("AliasNoExiste");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void obtenerMiembroPorAlias_cuandoExiste_retornaMiembro() {
|
||||
Ministerio ministerio = new Ministerio(1, "Ministerio de Defensa", 120000, 6000);
|
||||
Miembro miembro1 = new Miembro(1, "23451596F", "James", "Logan", "Lobezno", ministerio);
|
||||
|
||||
fakeDAO.data.add(miembro1);
|
||||
|
||||
Miembro resultado = miembroService.obtenerMiembroPorAlias("Lobezno");
|
||||
|
||||
assertNotNull(resultado);
|
||||
assertEquals("James", resultado.getNombre());
|
||||
assertEquals("Lobezno", resultado.getAlias());
|
||||
}
|
||||
|
||||
@Test
|
||||
void obtenerMiembroPorAlias_cuandoAliasEsNull_manejaCorrectamente() {
|
||||
Ministerio ministerio = new Ministerio(2, "Ministerio de Economía", 375000, 38000);
|
||||
Miembro miembro1 = new Miembro(3, "36974641B", "Tío", "Gilito", null, ministerio);
|
||||
|
||||
fakeDAO.data.add(miembro1);
|
||||
|
||||
// Buscar un alias null debería lanzar excepción
|
||||
assertThrows(MiembroNoEncontradoException.class, () -> {
|
||||
miembroService.obtenerMiembroPorAlias(null);
|
||||
});
|
||||
}
|
||||
|
||||
// =========================
|
||||
// FakeMiembroDAO
|
||||
// =========================
|
||||
|
||||
static class FakeMiembroDAO implements IMiembroDAO {
|
||||
|
||||
private List<Miembro> data = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public List<Miembro> obtenerListaMiembros() {
|
||||
return new ArrayList<>(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Miembro obtenerMiembroPorNombre(String nombre) {
|
||||
return data.stream()
|
||||
.filter(m -> m.getNombre().equals(nombre))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Miembro obtenerMiembroPorAlias(String alias) {
|
||||
return data.stream()
|
||||
.filter(m -> {
|
||||
String miembroAlias = m.getAlias();
|
||||
return miembroAlias != null && miembroAlias.equals(alias);
|
||||
})
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,120 @@
|
||||
package org.lapaloma.examen.aaee.service;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.lapaloma.examen.aaee.dao.IMinisterioDAO;
|
||||
import org.lapaloma.examen.aaee.excepcion.MinisterioNoEncontradoException;
|
||||
import org.lapaloma.examen.aaee.service.MinisterioService;
|
||||
import org.lapaloma.examen.aaee.vo.Ministerio;
|
||||
|
||||
class MinisterioServiceTest {
|
||||
|
||||
private MinisterioService ministerioService;
|
||||
private FakeMinisterioDAO fakeDAO;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
fakeDAO = new FakeMinisterioDAO();
|
||||
ministerioService = new MinisterioService(fakeDAO);
|
||||
}
|
||||
|
||||
// =========================
|
||||
// obtenerListaMinisterios
|
||||
// =========================
|
||||
|
||||
@Test
|
||||
void obtenerListaMinisterios_cuandoListaEstaVacio_lanzaExcepcion() {
|
||||
assertThrows(RuntimeException.class, () -> {
|
||||
ministerioService.obtenerListaMinisterios();
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void obtenerListaMinisterio_cuandoHayDatos_retornaLista() {
|
||||
fakeDAO.data.add(new Ministerio(1, "Ministerio de Defensa", 120000, 100000));
|
||||
|
||||
List<Ministerio> resultado = ministerioService.obtenerListaMinisterios();
|
||||
|
||||
assertNotNull(resultado);
|
||||
assertEquals(1, resultado.size());
|
||||
}
|
||||
|
||||
// =========================
|
||||
// obtenerMinisterioPorNombre
|
||||
// =========================
|
||||
|
||||
@Test
|
||||
void obtenerMinisterioPorNombre_cuandoNoExiste_lanzaExcepcion() {
|
||||
assertThrows(MinisterioNoEncontradoException.class, () -> {
|
||||
ministerioService.obtenerMinisterioPorNombre("NoExiste");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void obtenerMinisterioPorNombre_cuandoExiste_retornaMinisterio() {
|
||||
fakeDAO.data.add(new Ministerio(1, "Ministerio de Defensa", 120000, 100000));
|
||||
|
||||
Ministerio resultado = ministerioService.obtenerMinisterioPorNombre("Ministerio de Defensa");
|
||||
|
||||
assertNotNull(resultado);
|
||||
assertEquals(1, resultado.getIdentificador());
|
||||
assertEquals("Ministerio de Defensa", resultado.getNombre());
|
||||
}
|
||||
|
||||
// =========================
|
||||
// obtenerMinisterioPorIdentificador
|
||||
// =========================
|
||||
|
||||
@Test
|
||||
void obtenerMinisterioPorIdentificador_cuandoNoExiste_lanzaExcepcion() {
|
||||
assertThrows(MinisterioNoEncontradoException.class, () -> {
|
||||
ministerioService.obtenerMinisterioPorIdentificador(99);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void obtenerMinisterioPorIdentificador_cuandoExiste_retornaMinisterio() {
|
||||
fakeDAO.data.add(new Ministerio(2, "Ministerio de Economía", 375000, 38000));
|
||||
|
||||
Ministerio resultado = ministerioService.obtenerMinisterioPorIdentificador(2);
|
||||
|
||||
assertNotNull(resultado);
|
||||
assertEquals(2, resultado.getIdentificador());
|
||||
assertEquals("Ministerio de Economía", resultado.getNombre());
|
||||
}
|
||||
|
||||
static class FakeMinisterioDAO implements IMinisterioDAO {
|
||||
|
||||
private List<Ministerio> data = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public List<Ministerio> obtenerListaMinisterios() {
|
||||
return new ArrayList<>(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ministerio obtenerMinisterioPorNombre(String nombre) {
|
||||
return data.stream()
|
||||
.filter(m -> m.getNombre().equals(nombre))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ministerio obtenerMinisterioPorIdentificador(int identificador) {
|
||||
return data.stream()
|
||||
.filter(m -> m.getIdentificador() == identificador)
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user