fingo π¦πΈ
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.
- Auth (SignUp, SignIn, SignOut, Renewing tokens)
- Token (Validating access tokens)
- Wallet (Create wallets, accounts, cards and manage payments)
- 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.
Components
How to run βοΈ
Prerequisites
- Git
- Docker
- 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 up
NOTICE: The contact service might not work as expected since it is missing crucial tokens which cannot be shared for public usage i.e. on the repo.