/EVAX

Primary LanguageTypeScript

EVAX

Description

EVAX is an application that helps manage Covid-19 Vaccination in Tunisia! By registering on the website, you can get a vaccination appointement and get vaccinated!

Requirements :

The application must include these functionalities :

  1. Registration : Users should first register on the website.

  2. Appointment assignment : the registered User will then receive an appointement date to go to a vaccination center.

  3. Vaccination : the user can now go to their scheduled appointement and the website will update their status to being vaccinated.

  4. Monitoring : this includs the follow-up of the vaccine and the download of the vaccination certificate

The EVAX application must be publicly accessible via the internet.

This application should be robust with minimal bugs, so that it can be safely deployed and adopted by the ministry.

Architecture

We are using the 3- tier architecture.

The application architecture for EVAX will have a RESTful API backend and a modelview-viewmodel (MVVM) frontend.

MVVM is a design pattern used to enable two-way data binding between the view and the model so that one changes when the other does.

This architecture pattern is more event-driven as it uses data binding and thus makes easy separation of core business logic from the View.

Angular is a very famous framework that conforms to the MVVM design pattern, which allows highly responsive frontend appications that efficiently update when data from the server changes or a user interacts with the application.

Tutorial

docker-compose up

or

kubectl create secret generic postgres-user-pass --from-literal=password=<yourpassword>
kubectl create secret generic postgres-db-url --from-literal=database=<dbname> --from-literal=url='jdbc:mysql://book-shop-postgres:5432/<dbname>?useSSL=false'
kubectl apply -f deployments\postgres-deployment.yaml
kubectl apply -f deployments\backend.yaml
kubectl apply -f deployments\frontend.yaml

Note : Observability

Besides logging, I have added Event tracing with Spring Cloud Sleuth which uses OpenTelemetry auto instrumentation to create traces and send it via Zipkin Exporter to Tempo (I added a local configuration for tempo for testing purposes). I also exposed application metrics for Prometheus via Spring Boot Actuator.