Aplicación que expone una API RESTful de creación de usuarios. Este endpoint recibe un usuario con los campos "nombre", "correo", "contraseña", más un listado de objetos "teléfono", respetando el siguiente formato:
{
"name": "Oswaldo Bardales",
"email": "[email protected]",
"password": "N1v3l4@ci0n",
"phones": [
{
"number": "999999999",
"citycode": "1",
"countrycode": "57"
}
]
}
Consideraciones del proyecto
- El proyecto implementa la generacion de token con JWT
- Cualquier otro end-point que se exponga, estará securizado con el JWT generado
- Base de datos basado en HSQL
- Considera LOCALE para cambio de idioma de todos los mensajes (es y en). Configurarlo en el application.properties
- Persistencia con JPA y EclipseLink (se deja en comentario el switch a Hibernate)
- Las validaciones estan realizadas con javax.validation (implementacion de hibernate.validation)
En el application.properties
, cambiar el valor del "locale".
español:
locale = es
ingles:
locale = en
Aplicación basado en Spring boot, para iniciarlo debe ejecutar el task "bootRun" y seguido eso, se podrán realizar las pruebas.
./gradlew bootRun
A continuación, se detallan los distintos escenarios y los cURL que deben ejecutarse para generarlos.
Para realizar un registro satisfactorio, ejecute la siguiente cURL:
curl --location --request POST 'http://localhost:8080/users' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Oswaldo Bardales",
"email": "[email protected]",
"password": "N1v3l4@ci0n",
"phones": [
{
"number": "999999999",
"citycode": "1",
"countrycode": "57"
}
]
}'
Obteniendo el siguiente resultado.
{
"id": "981561a5-4ee2-49b2-932a-ceac035cdfb0",
"created": "2024-04-24T00:19:19.116",
"modified": "2024-04-24T00:19:19.116",
"lastLogin": "2024-04-24T00:19:19.116",
"token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJvYmFyZGFsZXNAZ21haWwuY29tIiwiZXhwIjoxNzE0MDIyMzU5LCJpYXQiOjE3MTM5MzU5NTl9.RygBJrwADQOWP13jyXdct-zfE65XxBy37UG4eK7VFgfAz94OP9h8n0EJswLwGn9yYcapARFoI8U4rOyYuk-mGA",
"isactive": true
}
Reintentar mandando el mismo cURL del registro para obtener el mensaje de error por correo duplicado. Se obtendrá el siguiente resultado.
{
"message": "Correo ([email protected]) ya registrado."
}
Para la clave, se esta considerando que cumpla con las siguientes condiciones
- Al menos un caracter numerico
- Al menos un caracter en minúscula
- Al menos un caracter en mayúscula
- Al menos un caracter especial: !@#&()–[{}]:;',?/*~$^+=<>
- El tamaño de la clave debe ser >10 y <128
Ejecutar la siguiente cURL
curl --location --request POST 'http://localhost:8080/users' \
--header 'Content-Type: application/json' \
--data-raw '{{
"name": "Oswaldo Bardales",
"email": "[email protected]",
"password": "n1v3l4$",
"phones": [
{
"number": "999999999",
"citycode": "1",
"countrycode": "57"
}
]
}
'
Obteniendo el siguiente mensaje:
{
"mensaje": "[La clave de tener al menos: un caracter numérico, una minúscula, una mayúscula, un caracter especial ! @ # & ( ), y tener entre 10 a 128 caracteres., El correo no tiene el formato correcto.]"
}
El script se encuentra en la carpeta resources/sql/schema.sql.
CREATE TABLE IF NOT EXISTS user
(
id varchar(36) not null,
name varchar(150) not null,
email varchar(150) not null UNIQUE,
password varchar(256),
PRIMARY KEY(id)
);
CREATE TABLE IF NOT EXISTS user_phone
(
id INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1, INCREMENT BY 1),
number varchar(50) not null,
city_code smallint not null,
country_code smallint not null,
user_id varchar(36) not null,
PRIMARY KEY(id)
);
ALTER TABLE user_phone ADD CONSTRAINT FK_user_userphone
FOREIGN KEY (user_id)
REFERENCES user(id);