Test para LocalPayment, se utilizan tecnologias como Javascript, Python, MySQL, MongoDb, Docker con Docker compose
Se solicita crear un CRUD para el servicio User y Trx, los mismos deberan estar comunicados para poder realizar las diferentes operaciones.
El proyecto esta implementado en Docker utilizando docker-compose para su ejecucion.
Docker
Lo primero que debemos hacer es clonar el repositorio de manera local, para realizarlo contamos con dos opciones:
La primera es utilizando la terminal con el siguiente comando:
La segunda es descargando un archivo .zip del repositorio:
Para poder utilizar las API's vamos a necesitar Docker, se puede descargar desde el Link a la pagina de Docker
Una vez que tengamos docker instalado vamos a poder utilizar la app.
Para eso vamos a utilizar el siguiente comando en la terminal
docker-compose up
Ese comando nos va a instalar las dependencias necesarias, en este caso vamos a utilizar:
- Node
- Python
- MySQL
- MongoDb
En este caso la aplicación va a correr en tres puertos diferentes ellos son
http://localhost:3000/
para Users donde vamos a encontrar los diferentes endpoints:
El endpoint /register
recibe una peticion del tipo POST
es utilizado para crear un nuevo usuario.
Espera recibir un nombre y un numero de documento en caso de que falte uno de los dos datos se recibira un mensaje de error indicando que falta completar datos.
```
Body JSON:
{
"name": "Anakin Skywalker",
"doc_number": 12345678
}
Response:
Status: 201
{
"code": "OK",
"message": "user sucesfully registered"
}
```
El endpoint /users
espera recibir una peticion tipo GET
para devolver todos los usuarios registrados en la base de datos.
```
Response:
Status: 200
[
{
"name": "Anakin Skywalker",
"doc_number": 12345678,
"createdAt": "2021-07-29T00:00:00.000Z",
"updatedAt": "2021-07-29T00:00:00.000Z"
},
{
"name": "Luke Skywalker",
"doc_number": 87654321,
"createdAt": "2021-07-29T00:00:00.000Z",
"updatedAt": "2021-07-29T00:00:00.000Z"
}
]
```
En el endpoint /user/:doc_number
tenemos 3 peticiones diferentes
-
GET
nos devuelve un json con los datos de un usuarioResponse: Status: 200 ``` [ { "name": "Anakin Skywalker", "doc_number": 12345678, "createdAt": "2021-07-29T00:00:00.000Z", "updatedAt": "2021-07-29T00:00:00.000Z" } ] ```
-
PUT
es el metodo que utilizamos para modificar el nombre de un usuario``` Body Json: { "name":"Princess Leia" } Response: Status: 200 { "message": "User sucesfully updated" } ```
-
DELETE
Es el endpoint que vamos a utilizar para eliminar un usuario``` Response: Status: 200 { "message": "User sucessfully deleted" } ```
http://localhost:5000/
para Transactions donde vamos a encontrar los diferentes endpoints:
El endpoint /transactions/
recibe dos peticiones
-
POST
es utilizado para crear una nueva transaccion para eso se comunica con el servicio dehttp://localhost:3000/api/v1/user/:doc_number
para verificar que exista el usuario a cargar la transaccion``` Body: { "user": 87654321, "feature": "PAYIN", "amount": 123442.85 } Response: Status: 201 { "amount": 123442.85, "by": 87654321, "trx_number": "61037e88158d17ee96866b11", "type": "PAYIN" } ``` En caso que el usuario no exista en la base de datos se mostrara la siguiente respuesta ``` Body: { "user": 1234, "feature": "PAYIN", "amount": 123442.85 } Response: Status:404 { "message": "Resource Not Found, user doesn't exist ", "status": 404 } ```
-
GET
nos devuelve todos las transacciones registradas en la base de datos``` Response: Status: 200 [ { "_id": { "$oid": "610373183cce75ae25a80d1a" }, "user": 87654321, "feature": "PAYIN", "amount": 1234.85 }, { "_id": { "$oid": "610374d66722035e6364e566" }, "user": 87654321, "feature": "PAYIN", "amount": 56.85 } ] ```
El endpoint /transactions/balance/:doc_number
espera recibir una peticion del tipo GET
y recibe por parametro el numero de documento y realiza una peticion al servicio de http://localhost:3000/api/v1/user/:doc_number
para verificar que exista el cliente.
Este endpoint es utilizado para saber el balance total del usuario.
```
Response:
Status: 200
{
"balance": 0.0,
"user": "87654321"
}
```
En caso de que no exista el usuario tendremos la siguiente respuesta
```
Response:
Status: 404
{
"message": "Resource Not Found, user doesn't exist ",
"status": 404
}
```
El endpoint /transactions/:doc_number
espera recibir una peticion del tipo GET
y recibe por parametro el numero de documento y realiza una peticion al servicio de http://localhost:3000/api/v1/user/:doc_number
para verificar que exista el cliente.
Este endpoint es utilizado para conocer el historial de transacciones del usuario.
```
[
{
"_id": {
"$oid": "610393098c5742a60c1364ca"
},
"user": 87654321,
"feature": "PAYIN",
"amount": 123442.85
},
{
"_id": {
"$oid": "610394029ba30b5ed35b1e56"
},
"user": 87654321,
"feature": "PAYIN",
"amount": 12.85
},
{
"_id": {
"$oid": "610394069ba30b5ed35b1e57"
},
"user": 87654321,
"feature": "PAYIN",
"amount": 12.854
}
]
```
El endpoint /transactions/:transaction_id
espera recibir una peticion del tipo DELETE
y recibe por parametro el numero de transaccion
```
Reponse:
Status: 200
{
"message": "transaction 61037622158d17ee96866b10 Deleted Successfully"
}
```
http://localhost:8180/
para Mongo-express donde vamos a encontrar una interfaz grafica par acceder a la base de datos de transacciones Se accede con el usuario asignado en el archivo .env En este caso user: root password: root