PROJECT_003 / CASO TÉCNICO

ALQUILER DE EQUIPOS

SOUND_
ONLINE

Sistema Java para consultar equipos y categorías, registrar alquileres con cantidad y fecha prevista y procesar devoluciones mediante API.

JAVAMYSQLRESTJSP

01 / RETO

LÓGICA REAL.
NO SOLO UNA INTERFAZ.

01

CATÁLOGO

Consultar equipos y categorías desde persistencia.

02

ALQUILER

Registrar equipo, cantidad y fecha prevista de finalización.

03

SEGUIMIENTO

Listar alquileres con fechas, devolución y estado.

04

DEVOLUCIÓN

Cerrar el ciclo del alquiler mediante una operación específica.

02 / ARQUITECTURA

DE LA INTERFAZ
A LA LÓGICA Y LOS DATOS.

↓↓↓↓

Selecciona un nodo para revisar su responsabilidad.

03 / EVIDENCIA DEL PROYECTO

QUÉ HAY
REALMENTE IMPLEMENTADO.

API

AlquileresHandler

GET para listar y POST para crear alquileres.

API

DevolverAlquilerHandler

Operación específica de devolución por id.

DTO

Equipo / Categoria / Alquiler

Objetos de transferencia que modelan el dominio.

DAO

Persistencia separada

Acceso a datos dividido por responsabilidad.

WEB

JSP + JavaScript

index.jsp y alta.jsp con scripts dedicados.

04 / IMPLEMENTACIÓN Y DECISIONES

DECISIONES EN CÓDIGO
RESPALDADAS POR EL PROYECTO.

Fragmentos seleccionados directamente de los archivos que componen el proyecto adjuntado.

JAVACrear alquiler
private void insertar(HttpExchange e)throws Exception{
		String j=new String(e.getRequestBody().readAllBytes(),StandardCharsets.UTF_8);
		int id=Integer.parseInt(ApiPrincipal.valor(j,"equipoId"));
		int cant=Integer.parseInt(ApiPrincipal.valor(j,"cantidad"));

		SoundOnlineAlquiler.realizarAlquiler(id,cant,LocalDateTime.now().plusMonths(1));

		ApiPrincipal.responder(e,201,"{\"mensaje\":\"Alquiler realizado\"}");
	}

	private void listar(HttpExchange e)throws Exception{
		StringBuilder j=new StringBuilder("[");
		for(Alquiler a:SoundOnlineAlquiler.obtenerAlquileres()){
			if(j.length()>1)j.append(",");
			String d=a.getFechaDevolucion()==null?"null":"\""+a.getFechaDevolucion()+"\"";

			j.append(String.format(
				"{\"id\":%d,\"equipoId\":%d,\"cantidad\":%d,\"fechaAlquiler\":\"%s\",\"fechaFinPrevista\":\"%s\",\"fechaDevolucion\":%s,\"estado\":\"%s\"}",
				a.getId(),a.getEquipoId(),a.getCantidad(),a.getFechaAlquiler(),
				a.getFechaFinPrevista(),d,a.getEstado()));
		}
		ApiPrincipal.responder(e,200,j.append("]").toString());
	}
}

Lee equipo y cantidad del cuerpo de la petición, genera una fecha prevista y delega la operación en la capa lógica.

JAVADevolver alquiler
package api;

import java.io.*;
import com.sun.net.httpserver.*;
import logicaalquiler.*;

public class DevolverAlquilerHandler implements HttpHandler{

	public void handle(HttpExchange e)throws IOException{
		try{
			if(!e.getRequestMethod().equals("POST")){
				ApiPrincipal.responder(e,405,"{\"error\":\"Metodo no permitido\"}");return;
			}

			String q=e.getRequestURI().getQuery();
			int id=Integer.parseInt(q.split("=")[1]);

			SoundOnlineAlquiler.devolverAlquiler(id);

			ApiPrincipal.responder(e,200,"{\"mensaje\":\"Equipo devuelto correctamente\"}");

		}catch(Exception x){
			ApiPrincipal.responder(e,400,"{\"error\":\""+ApiPrincipal.esc(x.getMessage())+"\"}");
		}
	}
}

Recibe el identificador del alquiler y delega la devolución; devuelve una respuesta JSON de confirmación.

PROJECT_003 / CIERRE

SOUND_ONLINE

JAVA × MYSQL × REST × JSP