Servicio para creación y consulta de usuarios.
- Java 11.
- Spring Boot 2.5.14 + Gradle 7.4.
- Persistencia H2 con Spring Data JPA.
- JWT para
token
y rotación en/login
. - Validaciones con regex para email y password.
Necesitas Java 11 y Gradle 7.4 instalados localmente (o usa el wrapper de tu entorno).
# Compilar + tests + reporte de cobertura
gradle clean build
# Ejecutar
gradle bootRun
La app levanta en http://localhost:8080
.
Configura (opcional) por entorno:
JWT_SECRET
(default:very-secret-key-for-dev-only
)JWT_EXPIRATION_MILLIS
(default:3600000
)
Request (JSON)
{
"name": "Julio Gonzalez",
"email": "[email protected]",
"password": "a2asfGfdfdf4",
"phones": [
{"number": 87650009, "citycode": 7, "contrycode": "25"}
]
}
Response 200
{
"id": "uuid",
"created": "2025-09-06T16:43:00.000Z",
"lastLogin": "2025-09-06T16:43:00.000Z",
"token": "eyJhbGciOiJIUzI1NiJ9...",
"isActive": true,
"name": "Julio Gonzalez",
"email": "[email protected]",
"phones": [
{"number": 87650009, "citycode": 7, "contrycode": "25"}
]
}
Errores JSON
400
cuando el email tiene un formato invalido
{
"error": [{
"timestamp": "2025-09-06T16:43:00.000Z",
"codigo": 400,
"detail": "Email format is invalid."
}]
}
400
cuando el password tiene un formato invalido
{
"error": [{
"timestamp": "2025-09-06T16:43:00.000Z",
"codigo": 400,
"detail": "Password must be 8-12 chars, contain exactly one uppercase letter and exactly two digits; only letters and digits are allowed."
}]
}
409
cuando el usuario ya existe.
{
"error": [{
"timestamp": "2025-09-06T16:43:00.000Z",
"codigo": 409,
"detail": "User with email already exists: [email protected]"
}]
}
Debes enviar el token previo en Authorization: Bearer <token>
.
Response 200 (token rotado)
{
"id": "uuid",
"created": "Nov 16, 2021 12:51:43 PM",
"lastLogin": "Nov 16, 2021 12:51:43 PM",
"token": "eyJhbGciOiJIUzI1NiJ9...",
"isActive": true,
"name": "Julio Gonzalez",
"email": "[email protected]",
"phones": [
{"number": 87650009, "citycode": 7, "contrycode": "25"}
]
}
curl -s -X POST http://localhost:8080/api/v1/users/sign-up -H 'Content-Type: application/json' -d '{"name":"Julio","email":"[email protected]","password":"abCdef12","phones":[{"number":12345678,"citycode":2,"contrycode":"56"}]}'
# Usar el token devuelto arriba
curl -s -X GET http://localhost:8080/api/v1/users/login -H "Authorization: Bearer <TOKEN>"
En la carpeta diagrams/
- Component Diagram:
component.png
- Sequence Diagram:
sequence-signup-login.png