prueba tecnica parking system con spring boot
- Descripción
- Características principales
- Roles y Permisos
- Admin
- Socio
- Instalación
- Requisitos previos
- Configuración inicial
- Configuración de entorno
- Base de datos
- Ejecución
- Microservicio Email
- Estructura de directorios
- Endpoints del Sistema
- Autenticación
- Analíticas
- Vehículos
- Parqueaderos
- Email (Simulación)
API para gestión de parqueaderos con autenticación de usuarios, registro de vehículos y análisis de datos. Desarrollada con Spring boot y PostgreSQL.
- Control de vehículos en parqueaderos de múltiples socios
- Histórico completo de vehículos parqueados (VehicleHistory)
- Sistema de roles (ADMIN/SOCIO) con permisos diferenciados
- Microservicio de email simulado
- Sesiones multidispositivo con logout individual
- Limpieza automática de sesiones con token expirado cada hora
- Requiere header
X-Device-Idpara validar sesión por dispositivo
- CRUD completo de parqueaderos.
- Asignar parqueaderos a socios.
- Ver listado/detalle de vehículos en cualquier parqueadero.
- Simular envío de emails a socios.
- Acceder a todos los indicadores.
- Registrar entrada/salida de vehículos en sus parqueaderos.
- Ver sus parqueaderos asociados.
- Ver vehículos en sus parqueaderos.
- Acceder a indicadores de sus parqueaderos.
-
Requisitos previos:
- Java 17+
- PostgreSQL 14+ corriendo (puerto 5432 o ajustalo en properties)
- Tener en cuenta usuario y password de la base de datos posgres en properties (postgres)
-
Crear una Base de datos llamada: parking_spring
-
Clonar Proyecto:
- git clone https://github.com/Barcodehub/parking-system-spring
- cd parking-system-spring
Run
-
Documentación de la API con Swagger:
- Esta aplicación incluye Swagger UI para explorar y probar los endpoints de la API de manera interactiva.
- Accede a traves de: http://localhost:8080/swagger-ui/index.html
- Asegurate de colocar el token de autenticacion correcta en el botón Authorize 🔒
- Se han implementado tests unitarios y de integración usando JUnit y Mockito.
- Se utiliza JaCoCo para generar reportes de cobertura de código.
- La cobertura de tests supera el 80%.
- Se usa SonarLint para mantener un código limpio y libre de malas prácticas.
mvn clean test jacoco:report
├── email-service/ #microservice email-simulacion
│
│
src/main/java/com.nelumbo.parqueadero_api/
│
├── config/ # Configuraciones, permisos Auth
│
├── controllers/ # Lógica de endpoints HTTP
│
├── exception/ #Excepciones globales - personalizadas
│
├── dto/ # DTo's
│
├── repositories/ # Acceso a datos
│
├── services/ # Lógica de negocio, manejo de errores
│
├── models/ # Modelos BD
│
├── ParqueaderoApiApplication # # Inicio del servidor
│
Descarga la colección desde postman_collection.json.
POST http://localhost:8080/api/
POST /auth/login
Descripción: Iniciar sesión
Body: {"email": "string", "password": "string"}
Permisos: PúblicoPOST /users
Descripción: Registra un nuevo socio (solo admin)
Headers: Authorization: Bearer {token}
Body: {"name": "Nombre", "email": "email@valido.com", "password": "contraseña"}
Permisos: AdminPOST /parkings
Descripción: Crea nuevo parqueadero
Headers: Authorization: Bearer {token}
Body: {
"nombre": "Nombre",
"capacidad": 50,
"costoPorHora": 3.5,
"socioId": 2
}
Permisos: AdminGET /parkings
Descripción: Lista TODOS los parqueaderos // Lista parqueaderos del socio
Headers: Authorization: Bearer {token}
Permisos: Admin o UserGET /parkings/{id}
Descripción: Obtiene detalles de un parqueadero
Headers: Authorization: Bearer {token}
Permisos: AdminPUT /parkings/{id}
Descripción: Actualiza parqueadero
Headers: Authorization: Bearer {token}
Body: {
"nombre": "Nombre Actualizado",
"capacidad": 60,
"costoPorHora": 4.0,
"socioId": 2
}
Permisos: AdminDELETE /parkings/{id}
Descripción: Elimina un parqueadero
Headers: Authorization: Bearer {token}
Permisos: AdminGET /parkings/parkings/{ParkingID}/vehicles
Descripción: Lista vehículos en algun parqueadero / Vehículos en parqueadero que le pertenezca
Headers: Authorization: Bearer {token}
Permisos: Admin o UserPOST /vehicles/entry
Descripción: Registrar entrada de vehículo
Headers: Authorization: Bearer {token}
Body: {"placa": "ABC123", "parqueaderoId": 1}
Permisos: SocioPOST /vehicles/exit
Descripción: Registrar salida de vehículo
Headers: Authorization: Bearer {token}
Body: {"placa": "ABC123", "parqueaderoId": 1}
Permisos: SocioGET /analityc/vehicles/top-global
Descripción: Top 10 vehículos más registrados en todos los parqueaderos
Headers: Authorization: Bearer {token}
Permisos: Admin/SocioGET /analityc/socios/top-earnings
Descripción: Top 3 socios con más ingresos esta semana
Headers: Authorization: Bearer {token}
Permisos: AdminGET /analityc/parkings/{parkingId}/earnings
Descripción: Ganancias (hoy/semana/mes/año) de un parqueadero
Headers: Authorization: Bearer {token}
Permisos: SocioGET /analityc/parkings/{parkingId}/vehicles/top
Descripción: Top 10 vehículos más registrados en un parqueadero específico
Headers: Authorization: Bearer {token}
Permisos: Admin/SocioGET /analityc/parkings/{parkingId}/vehicles/first-time
Descripción: Vehículos registrados por primera vez en el parqueadero
Headers: Authorization: Bearer {token}
Permisos: Admin/SocioGET /analityc/parkings/top-earnings
Descripción: Top 3 parqueaderos con mayor ganancia semanal
Headers: Authorization: Bearer {token}
Permisos: AdminPOST http://localhost:8081/api/
POST /notifications/send-email
Descripción: Simula envío de notificación por email
Body: {
"email": "destino@mail.com",
"placa": "ABC123",
"mensaje": "Su vehículo ha ingresado",
"parqueaderoId": "1"
}