# SMART tool
We propose a framework underlying decentralized social media called SMART, capable of finding relevant interest communities without violating users’ privacy and anonymity. Its objective is to improve trust and eliminate malicious actors in participatory exchanges and collaborative decision making.

## Project structure
The *tools* folder contains supportive scripts used during development and must not be used by any microservice. 

### Source code in *src/*
The five folders *data-hub*, *message-broker*, *rest-gateway*, *transaction-hub-in* and *transaction-hub-out* contain the microservices for the five architecture layers respectively.

The *modules* folder contains various Python modules used by multiple microservices to improve code-reuse. When building the Docker images this folder is copied into the app path.

### Deployment scripts in *bin/*
The scripts *build.py* and *deploy.py* are used to create Docker images and deploy these images with Kubernetes respectively.

## Overall microservice architecture
![SMART architecture image](documentation/images/smart-architecture.png)

## Trace input handling
1. New traces are POSTed to the REST gateway
1. The gateway fowards the new trace to the message broker
1. The trace retrieval microservice receives the message, stores the trace in its document-based database and sends a notification to the message broker
1. The semantic linking microservice receives the notification and GETs all traces (including the new one) from the trace retrieval microservice
1. All traces can now be processed
![Input handling image](documentation/images/input-handling.png)

## API Authentication
![Authentication diagram](documentation/images/authentication.png)