{"id":24594778,"url":"https://github.com/luisboto/sharedpayments-webappchallenge","last_synced_at":"2026-04-09T21:07:50.945Z","repository":{"id":202752883,"uuid":"511462146","full_name":"LuisBoto/SharedPayments-WebAppChallenge","owner":"LuisBoto","description":"Challenge WebApp built in one week, using tech I was unfamiliar with 🤔","archived":false,"fork":false,"pushed_at":"2022-10-11T10:44:15.000Z","size":775,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-24T11:44:57.220Z","etag":null,"topics":["angular","continuous-integration","full-stack","hexagonal-architecture","java-11","maven","micronaut","multimodule","tech-challenge","typescript"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LuisBoto.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2022-07-07T09:21:59.000Z","updated_at":"2023-10-21T11:24:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"fc717dc8-2697-4fcc-9e41-be439452d9cb","html_url":"https://github.com/LuisBoto/SharedPayments-WebAppChallenge","commit_stats":null,"previous_names":["luisboto/sharedpayments-webappchallenge"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuisBoto%2FSharedPayments-WebAppChallenge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuisBoto%2FSharedPayments-WebAppChallenge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuisBoto%2FSharedPayments-WebAppChallenge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuisBoto%2FSharedPayments-WebAppChallenge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LuisBoto","download_url":"https://codeload.github.com/LuisBoto/SharedPayments-WebAppChallenge/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244160063,"owners_count":20408022,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular","continuous-integration","full-stack","hexagonal-architecture","java-11","maven","micronaut","multimodule","tech-challenge","typescript"],"created_at":"2025-01-24T11:45:13.426Z","updated_at":"2026-04-09T21:07:50.903Z","avatar_url":"https://github.com/LuisBoto.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Shared Payments WebApp tech challenge\n\nThis project consists of a simple web application designed to share expenses between friend groups. It was created as part of a week long challenge to build a whole application, both frontend and backend, using technologies and frameworks that i had never used up until that point nor was i familiar with beforehand.\n\nThe resulting application from said week-long development can be found as a release on this repository, posterior development has focused on implementing backend **integration testing** as well as [multimodule](https://usoar.es/posts/micronaut-multi-module-project-with-maven/) [**hexagonal architecture**](https://herbertograca.com/2017/11/16/explicit-architecture-01-ddd-hexagonal-onion-clean-cqrs-how-i-put-it-all-together/), and **continuous integration** with [GitHub Actions](https://github.com/LuisBoto/SharedPayments-WebAppChallenge/blob/main/.github/workflows/releaseVersionCI.yml). \n\n## Tech used\n\nThe system relies on a **MySQL** database, using a backend developed on **Micronaut** and a simple single page frontend developed using **Angular**.\n\n# Backend\n\nThe backend uses a Controller-Service-Repository architecture adapted to the Micronaut framework, built using Java 11 and Maven. It features a small 5-endpoint REST API which consists of:\n\n- **GET /users** : Returns all users.\n- **GET /payments** : Returns all payments.\n- **GET /movements** : Returns an array of all the money transfers needed to compensate all debt between users.\n- **POST /users** : Creates a new user.\n- **POST /payments** : Creates a new payment (and updates user debt).\n\n## Running tests\nIntegration tests are configured to be run using a **maven profile**:\n```\nmvn clean install -P IT\n````\nBe aware integration tests make use of micronaut's [**test resources**](https://micronaut-projects.github.io/micronaut-test-resources/latest/guide/) to launch a temporal mySQL database via **Testcontainers**, so ensure your local Docker engine is running.\n\n## Packaging and running\nBuilding the backend application can be achieved by executing:\n```\nmvn package\n```\nA maven plugin on the **startup** submodule ensures the docker image for the backend is also built at this time.\n\nTo run the backend application, navigate to the root of the **startup submodule folder** and run:\n```\nmvn mn:run\n```\n\n# Frontend\n\nBuilt using a single Angular component, it features reactive angular forms with validation for the creation of both users and payments, as well as the display of users, payments, and cash movements. Complemented with a healthy amount of hand-written css:\n\n![FrontEnd GUI screenshot](.readme/GUIscreenshot.png)\n\n# Deployment\n\nBoth the back and front ends have been supplied with Dockerfiles to allow packaging as Docker container images, which can be built locally using the provided [building script](buildDockerImages.sh) by executing it directly from the root of this repository. \n\nAlong with those, a [docker-compose](docker-compose.yml) file has been created to make deployment of both containers and the required database more convenient. **By default this file deploys the front end on port 4200**.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluisboto%2Fsharedpayments-webappchallenge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fluisboto%2Fsharedpayments-webappchallenge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluisboto%2Fsharedpayments-webappchallenge/lists"}