Skip to content

escalopa/fingo

Repository files navigation

fingo 🏦💸

Build Status Go Report Card wakatime

codecov

GitHub issues GitHub pull requests License: MIT

Run in Postman

fingo is a scalable, robust payment system that allows users to send money to each other. fingo users can issue accounts with more than one currency and many payments cards.

Currently, fingo supports 5 currencies: USD, EUR, GBP, EGP, RUB.

Table of Contents 📑

Tech Stack 🛠

fingo is built using scalable, reliable, robust and secure technologies which are listed below. 🔥

Architecture 🏗

Communication between all the microservices is done using grpc or message brokers to ensure that the system is scalable reliable and fault tolerant.

In fingo we have the following services, Where each one is responsible for a specific set of tasks, Click on each service to see its documentation and how it works.

  1. Auth (SignUp, SignIn, SignOut, Renewing tokens)
  2. Token (Validating access tokens)
  3. Wallet (Create wallets, accounts, cards and manage payments)
  4. Contact (Sending emails)

Each service is built using the Hexagonal Architecture pattern. This allows us to have a clean separation between the business logic and the infrastructure. This way we can easily swap the infrastructure without affecting the business logic.

All services trace their requests using OpenTelemetry and send them to Jaeger for monitoring and debugging besides Jaeger UI for visualization.

To make the system more robust, All microservices have a graceful shutdown function called on termination signal. For more about it see.

Components

Diagram

How to run ⚙️

Prerequisites

  1. Git
  2. Docker
  3. Docker Compose

Running the project

First clone the project

git clone github.com/escalopa/fingo && cd fingo

Docker Compose

Copy env vars, Env vars are used by docker to start the application

cp .env.example .env
cp .rabbitmq.env.example .rabbitmq.env
cp .db.env.example .db.env

Run the project

docker compose -f ./stack.yaml up

After the project is up and running you can access the following interfaces for monitoring and debugging

To interact with the services you can use the Postman Collection