Skip to content

Instantly share code, notes, and snippets.

@iobaixas
Created November 8, 2016 14:00
Show Gist options
  • Save iobaixas/c60777a97ce5f0fef7d207c96de23a5a to your computer and use it in GitHub Desktop.
Save iobaixas/c60777a97ce5f0fef7d207c96de23a5a to your computer and use it in GitHub Desktop.

Billetera BananaCoin

Crear una aplicación rails para manejar cuentas y transacciones.

Cada cuenta se compone de:

  • dirección (SHA256 en hexagesimal de un password alfanumérico)
  • saldo (entero)

Cada transacción se compone de:

  • cuenta (id)
  • descripción
  • monto (entero)
  • instrucción (deposito o retiro)

La aplicación debe implementar las siguientes rutas

Página de una cuenta

GET /cuentas/:dirección

Al entrar a esta ruta se busca una cuenta con dirección :dirección, si esta no existe se crea.

La página debe mostrar el saldo total de la cuenta y un listado de transacciones.

Además debe proveer un formulario para agregar una nueva transacción.

Este formulario debe permitir ingresar: password, descripción, monto y la instrucción (select box).

Página de creación de transacción

POST /cuentas/:dirección/tx

Esta página debe recibir los parámetros necesarios para crear una transacción. Debe considerar:

  • El password provisto debe ser válido (comparar el SHA256 del password con la dirección)
  • Si la transacción es de tipo retiro entonces debe validar que hay suficiente saldo en la cuenta. Si lo hay se debe descontar el monto del saldo de la cuenta.
  • Si la transacción es de tipo deposito se debe sumar el monto al saldo de la cuenta.
  • Una vez ejecutada la transacción debe redirigir a la página de la cuenta (ojalá mostrando un flash con el resultado de la transacción).

Esta página solo debe permitir llamadas desde el formulario de la página de la cuenta.

Bonus: Api de transacciones

Agregar al endpoint anterior la posibilidad de ser llamado desde aplicaciones externas (Postman) en formato json solo si incluyen un header X-Secret=verysecure

Bonus 2: Estilar un poco el app

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment