The gotodotasks web application is a simple todo list app that provides two main services, namely user service and task manager service. The user service handles user authentication and registration, while the task manager service handles the creation, retrieval, updating, and deletion of todo tasks.
The backend of the application is built using Golang and microservices architecture, where each service is implemented as a separate microservice. We used grpc-gateway and protobuf to define our API and PostgreSQL for our database. Traefik was used as a load balancer to distribute incoming traffic among the microservices.
For the frontend, we used an open-source HTML/CSS/JS template for a todo app and modified the JS code to call our APIs. We also implemented a webserver service whose job is to render HTML templates for the frontend. Finally, we deployed the application using AWS EC2 virtual machines, Docker, and Docker Compose.
we also used Justfile as a command runner to manage our build and deployment processes. Justfile allowed us to define and run complex build and deployment tasks with ease
We also used Goose for handling database migrations, which helped us to manage changes to our database schema and keep our database up-to-date with the latest changes to our application. By using Goose, we were able to automate the process of migrating our database, which saved us time and effort in the long run.
One of the main challenges we faced during the development process was to ensure the compatibility and consistency between different microservices. To address this challenge, we used protobuf for defining our API, which helped us to ensure the compatibility and consistency between different microservices.
Another challenge was to ensure the reliability and availability of the application. To address this, we used Traefik as a load balancer, which helped us to distribute incoming traffic among different microservices and ensure the availability of the application.
For testing, we used Postman to test our API manually. We tested all the functionalities of both the user service and the task manager service.
The database schema is shown below to provide an overview of the database structure
traefik container expose two ports 80 for web entrypoints and 8080 for services dashboard panel
Each microservice has two ports, one for supporting gRPC over HTTP2 and another for supporting traditional HTTP1 requests.
you check available commands by running just --list
build
clean
create-gomigrate MigrateName # create new golang migration
create-sql MigrateName # create new sql migration
dcompose-clean # down and clean all compose file containers
dcompose-stop # stop docker compose containers
dcompose-up # run docker compose up
proto # format and lint and generate proto file using buf
run
run-migrations # run all migrations
build the project using following command:
just buildjust protojust dcompose-up
