Skip to content

gpaolettig/sis-cripto

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

75 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sis-cripto

API REST para la gestión de intercambio de criptodivisas, cuenta tanto con operaciones CRUD de usuarios, carteras, criptodivisas y otras como intercambio de criptodivisas entre usuarios y seguimiento de saldo. Programado en Java y Spring Boot. Se ha utilizado Hibernate como ORM para el mapeo de objetos - relacional. Se aplicaron patrones de diseño como DAO, DTO, Inyección de dependencias.


Índice

Instalación

Configuración y ejecución de la aplicación

Para configurar, instalar y ejecutar la aplicación seguí estos pasos. Debes tener Java 17 y MySQL instalados.

Cloná el repositorio

Primero, cloná este repositorio en tu máquina local usando el siguiente comando en tu terminal: git clone https://github.com/gipage/sis-cripto.git

Abrí el Proyecto en tu Entorno de Desarrollo (IDE)

Abrí tu entorno de desarrollo (IntelliJ IDEA, NetBeans, Eclipse, Spring Tool Suite) y seleccioná "Open Project" (Abrir Proyecto) o su equivalente. Navegá hasta la carpeta del proyecto que acabas de clonar y ábrilo.

Configurá la base de datos

En el archivo application.properties, que se encuentra en la carpeta de recursos del proyecto (src/main/resources/application.properties), realizá los siguientes cambios:

#configuracion bd spring.datasource.username= tu-nombre-de-usuario

spring.datasource.password= tu-contraseña

spring.datasource.url=jdbc:mysql://localhost/nombre-de-tu-bd?useUnicode=true&characterEncoding=UTF-8

Creá la Base de Datos

Abrí tu cliente de MySQL y crea la base de datos con el nombre que especificaste en la URL anterior. Utilizá el script de creación de base de datos que se proporciona en src/main/resources/scripts/creacion_bd.sql

Realizá una carga de datos de prueba

Abrí tu cliente de MySQL y abrí el archivo que se encuentra en scripts/datos_prueba_bd.sql seleccioná la base de datos y ejecutá el archivo.

Important

La carga de datos de prueba contiene algunas criptodivisas y la wallet de la empresa, por lo tanto, si no se cargan estos datos deberás cargar a mano las criptodivisas y no podrás realizar depósitos por no existir la wallet de la empresa que cobra comisión.

Ejecutá la Aplicación

Una vez que hayas configurado la base de datos y guardado los cambios en application.properties, podes ejecutar la aplicación. Busca la clase principal "SisCriptoApplication" (etiquetada como @SpringBootApplication) y dale al botón run (ejecutar) de tu entorno de desarrollo.

Accede a la Aplicación

A través de Postman podes probar los diferentes endpoints de la API. Abrí Postman y cargá en tu workspace la colleción que se encuentra en src/main/resources/scripts/API REST- Cripto.postman_collection.json Por último probá los diferentes endpoints siguiendo las instrucciones en la misma docu.

Modelo ER

A continuación se adjunta el modelo entidad relación correspondiente a la base de datos.

ER_model_en

Endpoints API

User

Operaciones Create, Read, Update, Delete de un usuario.

Create User

  POST localhost:8080/api/v1/usuarios
Parámetro Tipo Descripción Ejemplo
dni String Requerido por body. 44913425
name String Requerido por body. Juan
surname String Requerido por body. Pérez
gender String Requerido por body. Masculino
email String Requerido por body. juan@gmail.com
tel String 2664123456
  • URL: localhost:8080/api/v1/usuarios

  • Método: POST

  • Respuesta:

    201 - CREATED: dni,name,surname,gender,email,tel

    409 - CONFLICT: El usuario a dar de alta ya existe. + Excepción personalizada (UserAlreadyExist)

Note

Al crear un usuario, se creará una billetera asociada a él.

Ejemplo en POSTMAN

image

Get User

  GET localhost:8080/api/v1/usuarios/{dni}
Parámetro Tipo Descripción Ejemplo
dni String Requerido por url. 44913425
  • URL: localhost:8080/api/v1/usuarios/{id}

  • Método: GET

  • Respuesta:

    200 - OK: dni,name,surname,gender,email,tel (UserDTO)

    404 - NOT FOUND: El usuario a buscar no existe + Excepción personalizada (UserDoesNotExist)

Ejemplo en POSTMAN

image

Get All

  GET localhost:8080/api/v1/usuarios
Parámetro Tipo Descripción Ejemplo
No se requieren parametros.
  • URL: localhost:8080/api/v1/usuarios

  • Método: GET

  • Respuesta:

    200 - OK: Array JSON con objetos UserDTO. De no existir usuarios, se retorna un array vacío.

Ejemplo en POSTMAN

image

Update User

  PUT localhost:8080/api/v1/usuarios/{dni}
Parámetro Tipo Descripción Ejemplo
dni String Requerido por url. 44913425
name String Requerido por body. Juan
surname String Requerido por body. Pérez
gender String Requerido por body. Masculino
email String Requerido por body. juan@gmail.com
tel String Requerido por body. 2664123456
  • URL: localhost:8080/api/v1/usuarios{dni}

  • Método: PUT

  • Respuesta:

    200 - OK: dni,name,surname,gender,email,tel (UserDTO)

    404 - NOT FOUND: El usuario a actualizar no existe. + Excepción personalizada (UserDoesNotExist)

Ejemplo en POSTMAN

image

Delete User

  DELETE localhost:8080/api/v1/usuarios/{dni}
Parámetro Tipo Descripción Ejemplo
dni String Requerido por url. 44913425
  • URL: localhost:8080/api/v1/usuarios/{dni}

  • Método: DELETE

  • Respuesta:

    200 - OK: dni,name,surname,gender,email,tel (UserDTO)

    404 - NOT FOUND: El usuario a actualizar no existe. + Excepción personalizada (UserDoesNotExist)

Ejemplo en POSTMAN

image

Wallet

Operaciones Create, Read, Update, Delete, GetBalance, GetAllBalance de una billetera.

Create Wallet

  POST localhost:8080/api/v1/wallets
Parámetro Tipo Descripción Ejemplo
dni String Requerido por body. 44913425
balance BigDecimal Requerido por body. 6500.00
  • URL: localhost:8080/api/v1/wallets

  • Método: POST

  • Respuesta:

    201 - CREATED: id, dni, balance. (WalletDTO)

    404 - NOT FOUND: El usuario asociado a la billetera no existe + Excepción personalizada (UserDoesNotExist)

Note

Al crear una billetera, el id de la misma se generará automaticamente. El tipo es UUID.

Ejemplo en POSTMAN

image

Get Wallet

  GET localhost:8080/api/v1/wallets/{id}
Parámetro Tipo Descripción Ejemplo
id UUID Requerido por url. c0a80067-8ba6-169e-818b-a6d684c70003
  • URL: localhost:8080/api/v1/wallets/{id}

  • Método: GET

  • Respuesta:

    200 - OK: id, dni, balance. (WalletDTO)

    404 - NOT FOUND: La billetera a buscar no existe + Excepción personalizada (WalletDoesNotExist)

Ejemplo en POSTMAN

image

Get User Wallets

  GET localhost:8080/api/v1/wallets/user/{dni}
Parámetro Tipo Descripción Ejemplo
dni String Requerido por url. 44913425
  • URL: localhost:8080/api/v1/wallets/user/{dni}

  • Método: GET

  • Respuesta:

    200 - OK: Array JSON con objetos WalletDTO o vacío.

    404 - NOT FOUND: El usuario asociado a la billetera no existe + Excepción personalizada (UserDoesNotExist)

Ejemplo en POSTMAN

image

Update Wallet

  PUT localhost:8080/api/v1/wallets/{id}
Parámetro Tipo Descripción Ejemplo
id UUID Requerido por url. c0a80067-8ba6-169e-818b-a6d684c70003
dni String Requerido por body. 44913425
balance BigDecimal Requerido por body. 4000.00
  • URL: localhost:8080/api/v1/wallets/{id}

  • Método: PUT

  • Respuesta:

    200 - OK: id, dni, balance. (WalletDTO)

    404 - NOT FOUND: La billetera a actualizar no existe + Excepción personalizada (WalletDoesNotExist)

Ejemplo en POSTMAN

image

Delete Wallet

  DELETE localhost:8080/api/v1/wallets/{id}
Parámetro Tipo Descripción Ejemplo
id UUID Requerido por url. c0a80067-8ba6-169e-818b-a6d684c70003
  • URL: localhost:8080/api/v1/wallets/{id}

  • Método: DELETE

  • Respuesta:

    200 - OK: id, dni, balance. (WalletDTO)

    404 - NOT FOUND: La billetera a eliminar no existe + Excepción personalizada (WalletDoesNotExist)

Ejemplo en POSTMAN

image

Get Balance

  GET localhost:8080/api/v1/wallets/balance/{id}
Parámetro Tipo Descripción Ejemplo
id UUID Requerido por url. c0a80067-8ba6-169e-818b-a6d53ea40001
  • URL: localhost:8080/api/v1/wallets/balance/{id}

  • Método: GET

  • Respuesta:

    200 - OK: balance.

    404 - NOT FOUND: La billetera a consultar su saldo no existe + Excepción personalizada (WalletDoesNotExist)

Ejemplo en POSTMAN

image

Get All Balance

  GET localhost:8080/api/v1/wallets/user/balance/{dni}
Parámetro Tipo Descripción Ejemplo
dni String Requerido por url. 44913425
  • URL: localhost:8080/api/v1/wallets/user/balance/{dni}

  • Método: GET

  • Respuesta:

    200 - OK: balance.

    404 - NOT FOUND: El usuario asociado a la billetera no existe + Excepción personalizada (UserDoesNotExist)

Ejemplo en POSTMAN

image

Currency

Operaciones Create, Update y Delete de una criptodivisa.

Create Currency

  POST localhost:8080/api/v1/currencies
Parámetro Tipo Descripción Ejemplo
ticker String Requerido por body. BTC
name String Requerido por body. Bitcoin
value BigDecimal Requerido por body. 100.00
  • URL: localhost:8080/api/v1/currencies

  • Método: POST

  • Respuesta:

    201 - CREATED: ticker, name, value. (CurrencyDTO)

    409 - CONFLICT: La criptodivisa ya existe + Excepcion personalizada (CurrencyAlreadyExist)

Note

La divisa ARS está presente en la base de datos con valor igual a 1, el valor de todas las criptodivisas es en ARS

Ejemplo en POSTMAN

image

Update Currency

  PUT localhost:8080/api/v1/currencies/{ticker}
Parámetro Tipo Descripción Ejemplo
ticker String Requerido por url. BTC
ticker String Requerido por body. BTC2
name String Requerido por body. Bitcoin2
value BigDecimal Requerido por body. 200.00
  • URL: localhost:8080/api/v1/currencies/{ticker}

  • Método: PUT

  • Respuesta:

    200 - OK: ticker, name, value. (CurrencyDTO)

    404 - NOT FOUND: La criptodivisa a actualizar no existe + Excepcion personalizada (CurrencyDoesNotExist)

Ejemplo en POSTMAN

image

Delete Currency

  DELETE localhost:8080/api/v1/currencies/{ticker}
Parámetro Tipo Descripción Ejemplo
ticker String Requerido por url. BTC
  • URL: localhost:8080/api/v1/currencies/{ticker}

  • Método: DELETE

  • Respuesta:

    200 - OK: ticker, name, value. (CurrencyDTO)

    404 - NOT FOUND: La criptodivisa a eliminar no existe + Excepcion personalizada (CurrencyDoesNotExist)

Ejemplo en POSTMAN

image

Transaction

Operaciones: Depósito de criptodivisa e intercambio de criptodivisas.

Create Transaction

  POST localhost:8080/api/v1/transactions
Intercambio
Parámetro Tipo Descripción Ejemplo
type String Requerido por body. Intercambio
origin_currency_ticker String Requerido por body. BTC
destination_currency_ticker String Requerido por body. ETH
origin_wallet_id UUID Requerido por body. c0a80067-8ba6-169e-818b-a6a6b11e0000
destination_wallet_id UUID Requerido por body. c0a80067-8ba6-169e-818b-a6d53ea40001
origin_amount BigDecimal Requerido por body. 1
  • URL: localhost:8080/api/v1/transactions

  • Método: POST

  • Respuesta:

    200 - OK: idtransaction, date_transaction, type, origen_wallet_id, destination_wallet_id (TransactionSuccesfullyDTO). varias excepciones personalizadas:

    • CurrencyDoesNotExist: Una criptodivisa a intercambiar/depositar no existe.
    • WalletDoesNotExist: Una billetera no existe.
    • HoldingDoesNotExist: Una billetera no posee tenencias de cripto.
    • NotEnoughFunds: Una billetera no posee los sufiencientes fondos para realizar un intercambio. Ejemplo en Postman

Billetera de origen:

image

Billetera de destino:

image

Tenencias:

image

Intercambio:

Se intercambia 1 BTC por el equivalente en ETH, en este caso, 5 ETH.

image

Veamos las tenencias de ambas billeteras luego del intercambio.

image
Depósito.
Parámetro Tipo Descripción Ejemplo
type String Requerido por body. Deposito
destination_currency_ticker String Requerido por body. BTC
destination_wallet_id UUID Requerido por body. c0a80067-8ba6-169e-818b-a6f3ed790004
destination_amount BigDecimal Requerido por body. 5
  • URL: localhost:8080/api/v1/transactions

  • Método: POST

  • Respuesta:

    200 - OK: idtransaction, date_transaction, type, origen_wallet_id, destination_wallet_id (TransactionSuccesfullyDTO).

    varias excepciones personalizadas:

    • CurrencyDoesNotExist: Una criptodivisa a intercambiar/depositar no existe.
    • WalletDoesNotExist: Una billetera no existe.
    • HoldingDoesNotExist: Una billetera no posee tenencias de cripto.
    • NotEnoughFunds: Una billetera no posee los sufiencientes fondos para realizar un intercambio.

La transacción depósito tiene una comision del 0.25% de la cantidad a depositar.

Billetera destino:

image

Depósito

image

Billetera destino luego del depósito:

image

Note

El 0.25% de la cantidad depositada va a la cuenta de la empresa. (Ya tiene varias transacciones cobradas, es el 0.25% de 1 BTC multiplicado por el valor de BTC (100 ARS))

image

Releases

No releases published

Packages

No packages published

Languages