Giter Site home page Giter Site logo

reto's Introduction

Reto

Ejercicio Tecnico: Java

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"
    }
  ]
}

Solucion

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)

configurar idioma

En el application.properties, cambiar el valor del "locale".

español:

locale = es 

ingles:

locale = en

Iniciar Proyecto

Aplicación basado en Spring boot, para iniciarlo debe ejecutar el task "bootRun" y seguido eso, se podrán realizar las pruebas.

./gradlew bootRun

Pruebas

A continuación, se detallan los distintos escenarios y los cURL que deben ejecutarse para generarlos.

Registro Satisfactorio:

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."
}

Formato Clave y Email Incorrecta:

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.]"
}

Adicional

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);

Diagrama

diagram

reto's People

Contributors

obardales avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.