Coder Social home page Coder Social logo

vvazrod / pay-up Goto Github PK

View Code? Open in Web Editor NEW
1.0 2.0 0.0 681 KB

Sistema para la gestión de pagos en grupo y automatización de deudas.

Home Page: https://varrrro.github.io/pay-up

License: GNU General Public License v3.0

Go 94.57% Dockerfile 3.33% Ruby 2.10%
ansible docker gcp microservices vagrant

pay-up's Introduction

PayUp

Build Status codecov License: GPL v3

Note: This project was made for the Cloud Computing course of the Master's Degree in Computer Engineering at University of Granada. Developed with educational purposes only.

PayUp is a distributed system for managing payments and debts in a group. Create groups of people and start adding expenses, the system will calculate the balance of each member of the group so you don't have to.

You can find more info about the project and the technologies used in the documentation (which is entirely in spanish, sorry friends 😅).

Running the system

You can deploy the complete system in three different ways:

  • Locally, with Docker Compose: You need to have both Docker and Docker Compose installed on your computer. Then, run docker-compose up at deployments/docker.
  • Locally, with Vagrant: You need to have both Vagrant and VirtualBox installed on your computer. Then, run vagrant up at deployments/vagrant. Ansible is also needed for provisioning.
  • Remotely, with Ansible on GCP: Obviously, you need to have Ansible installed on your computer and also provide the credentials to your GCP project's service account. You can then run ansible-playbook deploy.yml at deployments/ansible/gcp.

In any of the above scenarios, you need to specify the environment variables that are needed by the deployment scripts.

pay-up's People

Stargazers

Alberto Silvestre Montes Linares avatar

Watchers

James Cloos avatar Víctor Vázquez avatar

pay-up's Issues

Configurar el provisionamiento de máquinas virtuales

Usando Ansible, se van a crear playbooks para el provisionamiento de las máquinas virtuales donde se ejecutarán las distintas partes del sistema. El ciclo de vida de estas partes (ejecución y finalización) en las máquinas también se tendrá que poder realizar usando Ansible.

Usar tipo UUID en modelo de datos de tmicro

Hasta ahora, representábamos los UUIDs como strings en nuestro modelo de datos. Esto provoca una enorme cantidad de trabajo inútil extra ya que hay que estar comprobando que los strings sean válidos.

Se va a cambiar el modelo de datos de tmicro para utilizar UUIDs, por lo que habrá que cambiar también la manera de trabajar en los managers y handlers.

Aprovechando este cambio, también se van a eliminar las funciones New() que permitían construir estos objetos debido a que no se utilizan.

Añadir personas a un grupo

  • Debo poder añadir una persona nueva a un grupo existente.
  • Debo poder añadir un conjunto de personas nuevas a un conjunto existente.
  • Cuando añada un nuevo integrante/s a un grupo, su balance inicial debe ser cero.

Eliminar personas de un grupo

  • Debo poder eliminar una persona de un grupo.
  • Debo poder eliminar un conjunto de personas de un grupo.
  • No debo poder eliminar una persona con un balance distinto de cero.

Mejorar logs

Mejorar los logs producidos por las distintas partes de la aplicación.

Corregir contenido de las respuestas de gmicro

Las respuestas que devuelve el microservicio de grupos no tienen la cabecera Content-Type fijada a application/json. Debemos hacer que todas las respuestas devuelvan esta cabecera y añadir una comprobación para ella a nuestros tests.

Eliminar el último gasto

  • Debo poder eliminar el último gasto añadido al grupo.
  • Cuando elimine un gasto del grupo, se debe recalcular el balance de las personas implicadas.

Escribir gateway

Para gestionar las peticiones a los dos microservicios desde un único punto de acceso, escribiremos un API gateway que se ejecutará en un contenedor individual.

Eliminar tecnologías privativas

Se debe eliminar la referencia a Graylog del README y cambiarla por alguna tecnología libre para la gestión de logs. Además, reescribir algunos párrafos para explicar mejor las partes.

Documentar la definición del fichero de construcción

Se debe modificar el archivo README.md para incluir la justificación sobre las elecciones de las herramientas de test y construcción, así como la documentación del fichero .travis.yml. También se deben añadir los badges de Travis y Codecov.

La documentación existente en el README.md será movida a un post de la web.

Definir la arquitectura del sistema

Se debe actualizar la documentación del proyecto, tanto en el archivo README.md como en la página web del mismo, para reflejar la arquitectura y el diseño que se ha decidido para el sistema.

Enlazar la web en el README

Para hacer más accesible la documentación del proyecto y de los distintos hitos, añadir un enlace a la página web en el archivo README.md.

Crear grupos

  • Debo poder crear un grupo vacío.
  • Debo poder crear un grupo a partir de un conjunto de personas.
  • Cuando cree un grupo a partir de un conjunto de personas, su balance inicial debe ser cero.

Añadir fichero de configuración inicial

Se debe crear un fichero .travis.yml que permita la ejecución de la herramienta de integración continua. El fichero debe incluir la instalación de dependencias y la ejecución de los tests, así como el envío de los datos de cobertura a la herramienta codecov.

Eliminar el último pago

  • Debo poder eliminar el último pago añadido a un grupo.
  • Cuando elimine un pago de un grupo, se deben recalcular los balances de las personas implicadas.

Añadir pagos

  • Debo poder añadir un pago de un integrante de un grupo a otro.
  • Cuando añada un pago nuevo, se deben recalcular los balances de las personas implicadas.

Preparar entrega del hito 4

Para la entrega del hito 4, se debe añadir al proyecto el fichero YAML que define la evaluación de las prestaciones, ademñas de actualizar la documentación.

Configurar la creación automática de máquinas virtuales

Para realizar el despliegue final de la aplicación en algún proveedor cloud (Azure, GCP, ...), se va a configurar la creación automática de máquinas virtuales en dicho proveedor usando una herramienta como Terraform.

Además, se configurará también este despliegue automático en la máquina local con motivos de prueba usando Vagrant.

Añadir gastos

  • Debo poder añadir un gasto realizado por un integrante de un grupo para el resto.
  • Debo poder añadir un gasto realizado por algunos integrantes de un grupo para el resto.
  • Debo poder añadir un gasto realizado por un integrante de un grupo para algunos de los demás.
  • Debo poder añadir un gasto realizado por algunos integrantes de un grupo para algunos de los demás.
  • Cuando añada un gasto nuevo, se debe recalcular el balance de las personas implicadas.

Eliminar grupos

  • Debo poder eliminar un grupo.
  • Cuando elimine un grupo, todos los datos almacenados sobre el mismo deberán ser eliminados.

Usar tipo UUID en modelo de datos de gmicro

Hasta ahora, representábamos los UUIDs como strings en nuestro modelo de datos. Esto provoca una enorme cantidad de trabajo inútil extra ya que hay que estar comprobando que los strings sean válidos.

Se va a cambiar el modelo de datos de gmicro para utilizar UUIDs, por lo que habrá que cambiar también la manera de trabajar en los managers y handlers.

Aprovechando este cambio, también se van a eliminar las funciones New() que permitían construir estos objetos debido a que no se utilizan.

Corregir error en el despliegue a Heroku

En Heroku, los contenedores no se ejecutan como root, es por esto que falla la ejecución del proceso con supervisord. Hay que quitar el usuario que se crea actualmente en el Dockerfile.

Configurar servicio e imagen docker

Para ejecutar el microservicio de grupos gmicro, debemos usar una herramienta como systemd o supervisord con la que lanzar y controlar el proceso. Este proceso debe ejecutarse dentro de un contenedor docker.

Configurar despliegue conjunto de la aplicación

Tanto los microservicios como sus respectivas bases de datos y el gateway se deben poder desplegar de manera sencilla y coordinada. Para ello, podemos usar una herramienta como Docker Compose, por ejemplo.

Añadir despliegue remoto

El sistema se debe desplegar en una serie de máquinas virtuales creadas en algún proveedor cloud.

Crear página web del proyecto

Usando la funcionalidad Pages de GitHub y Jekyll, construir una web que sirva para presentar el proyecto y la documentación necesaria.

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.