/CTD-PI-DigitalMoneyHouse

API para una billetera digital, la cual permite registrar usarios, agregar tarjetas en una cuenta y realizar transferencias, entre otros. El lenguaje elegido para la construcción del backend fue JAVA, implementando una estructura de microservicios que se comunica a través de feign, y la seguridad fue manejada con keycloak.

Primary LanguageHTML

Proyecto Integrador II

Plan B es un equipo enfocado en el desarrollo de soluciones tecnológicas orientadas a requisitos de software. Los pilares fundamentales que consolidan al grupo son la comunicación, el trabajo en equipo y proactividad.

Este repositorio está organizado por diferentes carpetas, en la que cada una representa una rama de trabajo en la cual todo el equipo ha estado involucrado.

Desarrollamos una API para una billetera digital, la misma permite registrar usarios, agregar tarjetas en una cuenta y realizar transferencias, entre otros. En lenguaje elegido para la construccion del backend fue JAVA, implementamos una estructura de microservicios que se comunica a traves de feign, y la seguridad la menejamos con keycloak. A su vez, se creo una serie de tests que fueron validando el funcionamiento de la misma, y nos permitieron ir corrigiendo errores.

Todos los endopoints inician con: http://localhost:8080 ya que usamos un gateway que permite usar solo un puerto para la salida de todos los microservicios.

A continuacion detallamos los endopoints que la misma provee, junto con los datos necesarios para realizar la peticion y lo que ofrece de salida.

USUARIOS

/user/register

  • Uso: Aqui podemos registrarnos a la billetera
  • Tipo: POST
  • Parametro entrada: Un objeto de tipo User completo
    {
    "firstName" : "nombre",
    "lastName" : "apellido",
    "email" : "email",
    "dni" : "numero de dni",
    "phoneNumber" : "numero de telefono",
    "username" : "nombre de usuario",
    "password" : "contraseña"
    }
  • Salida: Los campos ingresados, mas los que se le crearon {
    "id" : "id numerico que se le asigno",
    "firstName" : "nombre",
    "lastName" : "apellido",
    "email" : "email",
    "dni" : "numero de dni",
    "phoneNumber" : "numero de telefono",
    "username" : "nombre de usuario",
    "cvu" : "el cvu que se le creo",
    "alias": "el alias que se le creo,
    "account" : {
    "id": "id de la cuenta",
    "userId" : "el id que se le acaba de asignar al usuario",
    "balance" : 0
    },
    "cards" : []
    }

/user/login

  • Uso: Aqui podemos loguearnos con nuestras credenciales a la billetera
  • Tipo: POST
  • Parametro entrada: Los datos para loguearse
    {
    "email" : "email",
    "password" : "contraseña"
    }
  • Salida: Status 200 OK y el token generado

/user/logout

  • Uso: Aqui podemos cerrar la sesion que iniciamos en la billetera
  • Tipo: POST
  • Parametro entrada:
  • Salida:

/user/{id}

  • Uso: Aqui podemos traer la info de un usuario por su id
  • Tipo: GET
  • Parametro entrada: Un id como variable en la url
  • Salida: Un objeto User que tenga el mismo id que ingresado o excepciones de no encontrarse uno

/user/update

  • Uso: Aqui podemos modificar los valores almacenados de un usuario
  • Tipo: PUT
  • Parametro entrada: Los campos a modificar del objeto usuario
  • Salida: El objeto User con los antiguos campos que quedaron iguales y los que se modificaron

/user/{id}/getCvuAlias

  • Uso: Aqui podemos traer el CVU y Alias de un usuario segun su id
  • Tipo: GET
  • Parametro entrada: Un id como variable en la url
  • Salida: El CVU y Alias del user que tenga el mismo id al ingresado

CUENTAS

/account/{id}

  • Uso: Podemos buscar la informacion de una cuenta ingresando su id
  • Tipo: GET
  • Parametro entrada: Un id como variable en la url
  • Salida: El objeto account
    {
    "id": "id de la cuenta",
    "userId" : "el id que se le acaba de asignar al usuario",
    "balance" : el balance de la cuenta,
    "transactions" : [lista de transferencias asociadas],
    "cards": [lista de tarjetas asociadas]
    },

/account/cards

  • Uso: Aca podemos buscar las tarjetas de una cuenta en especifico
  • Tipo: GET
  • Parametro entrada: Un id de una cuenta como parametro
  • Salida: La lista de tarjetas que tienen como accountId al ingresado como parametro

/account/{accountId}/activity

  • Uso: Aca podemos buscar todas las transferencias realizadas por una cuenta
  • Tipo: GET
  • Parametro entrada: Un accountId como parametro en la url
  • Salida: Una lista de transferencias hechas por el accountId especificado

/account/{accountId}/activity/{transactionId}

  • Uso: Aca podemos traer una transferencia en especifico de una cuenta especificada
  • Tipo: GET
  • Parametro entrada: Un id para la cuenta y otro para la transferencia
  • Salida: El objeto transferencia que cumple con lo especificado

/account/{id}

  • Uso: Aca podemos editar el alias de una cuenta
  • Tipo: PATCH
  • Parametro entrada: Un id de una cuenta creada como parametro en la url y un nuevo alias como parte del cuerpo
  • Salida: El objeto User con el nuevo alias cargado

/account/{id}/transferences

  • Uso: Aca podemos crear una nueva transferencia realizada por una cuenta
  • Tipo: POST
  • Parametro entrada: Un id como parametro en la url que pertenecera a la cuenta de origen, y un objeto de tipo transferencia en el cuerpo
  • Salida:

TARJETAS

/cards

  • Uso: Traer todas las tarjetas de la base de datos
  • Tipo: GET
  • Parametro entrada: Nada
  • Salida: Una lista de tarjetas guardadas

/cards/{id}

  • Uso: Traer una tarjeta en particular
  • Tipo: GET
  • Parametro entrada: Un id numerico como parametro en la url
  • Salida: Un objeto tarjeta que tiene de id el que figura en la url

/cards/accountId/{accountId}

  • Uso: Traer la lista de tarjetas asociadas a una cuenta en especifico
  • Tipo: GET
  • Parametro entrada: El accountId en la url
  • Salida: Una lista de tarjetas con el mismo accountId

/cards

  • Uso: Crear una nueva tarjeta
  • Tipo: POST
  • Parametro entrada: Un objeto tarjeta completo
    {
    "accountId" : id de la cuenta que se le asigna,
    "cardNumber" : "numero de la tarjeta",
    "type" : "tipo de tarjeta (debito, credito)",
    "owner" : "nombre del dueño",
    "securityNumber" : "numero de seguridad",
    "balance" : plata en la tarjeta,
    "expirationDate" : "año-mes-dia",
    "lastNumbers" : "los ultimos 4 numeros de la tarjeta"
    }
  • Salida: El objeto tarjeta que se creo recientemente con su id

/cards/{id}

  • Uso: Para modificar algun campo de alguna tarjeta
  • Tipo: PUT
  • Parametro entrada: El id de la tarjeta que uno quiere modificar en la url y el objeto tarjeta con los campos a modificar en el cuerpo
  • Salida: El objeto tarjeta modificado

/cards/{id}

  • Uso: Para eliminar alguna tarjeta
  • Tipo: DELETE
  • Parametro entrada: El id de la tarjeta que uno quiere eliminar en la url
  • Salida: Un numero 1 si se pudo eliminar la tarjeta

TRANSACCIONES

/transaction

  • Uso: Traer una lista con todas las transacciones
  • Tipo: GET
  • Parametro entrada: Nada
  • Salida: Una lista de transacciones

/transaction/{id}

  • Uso: Buscar una transaccion en especifico segun su id
  • Tipo: GET
  • Parametro entrada: Un id de una transaccion en la url
  • Salida: El objeto transaccion que esta asociado a este id

/transaction/{transactionId}/{accountId}

  • Uso: Buscar una transaccion especifica de una cuenta en especifico
  • Tipo: GET
  • Parametro entrada: Un transactionId y un accountId, ambos en la url
  • Salida: Un objeto transaccion que tiene por id el ingresado y que pertenezca a la cuenta ingresada con accountId

/transaction/accountId/{accountId}

  • Uso: Buscar todas las transacciones hechas por una cuenta en especifico
  • Tipo: GET
  • Parametro entrada: Un accountId ingresado en la url
  • Salida: Una lista de transacciones que realizo una cuenta con el accountId

/transaction

  • Uso: Crear una nueva transaccion
  • Tipo: POST
  • Parametro entrada: Un objeto transaccion con todos sus campos en el cuerpo
    {
    "accountOriginId" : "id que envia el dinero",
    "accountDestinyId" : "id que recibe el dinero",
    "amount" : dinero,
    "date" : "año-mes-dia",
    "detail" : "detalle",
    "type" : "tipo de transferencia"
    }
  • Salida: La transaccion creada recientemente con su id asignado

/transaction/{id}

  • Uso: Modificar los campos de una transaccion
  • Tipo: PUT
  • Parametro entrada: El id de una transaccion en la url y el objeto transaccion con los campos a modificar en el cuerpo
  • Salida: El objeto transaccion ya modificado

/transaction/{id}

  • Uso: Eliminar una transaccion en particular
  • Tipo: DELETE
  • Parametro entrada: El id de la transaccion que una desea eliminar en la url
  • Salida: Si fue eliminada exitosamente, un 1

TESTING

PRUEBAS AUTOMATIZADAS

POSTMAN

  • Se puede acceder a las colecciones y a los resultados de las pruebas ejecutadas con Postman a través del siguiente link

Tests con Postman

REST ASSURED

  • El proyecto desarrollado con Maven - RestAssured - TestNG se encuentra en la siguiente carpeta

Rest Assured Tests

Este proyecto fue estructurado de la siguiente forma, utilizando el patrón Test Data Builder.

image.png

Utilizando IntelliJ, una vez abierto el proyecto, se puede ejecutar la suite completa a través de la solapa Maven, haciendo click en test, tal como muestra la imagen:

image.png

Al finalizar la ejecución de los tests, se genera de forma automática la carpeta "allure-results". A partir de ahí tenemos 2 formas de ver nuestro reporte:

  • Por medio de la consola de IntelliJ, con el siguiente comando

    allure-serve

se inicia el reporte dinámico y se abre automáticamente la ventana del navegador mostrando de forma gráfica los resultados de nuestros tests.

  • Por medio del comando

    allure generate --clean

se crea en nuestro proyecto la carpeta "allure-report", mostrando en el html el reporte estático de nuestros tests.

image-1.png

Vista 1 del reporte Allure

image-2.png

Vista 2 del reporte Allure

image-3.png

Vista 3 del reporte Allure

image-4.png

Vista 4 del reporte Allure

image-5.png