\subsection{Ροή πληροφορίας} \label{subsection:4-3-9-data-flow}

Στην παρούσα υποενότητα αναλύεται η ροή της πληροφορίας στο σύστημα. Λόγω των πολλαπλών υπηρεσιών, της κατάτμησης την πληροφορίας και των διαφορετικών σημείων αποθήκευσής της, η ροή της πληροφορίας στο σύστημα ακολουθεί ένα σχετικά περίπλοκο μονοπάτι (σε σχέση με κλασικές, μονολιθικές, κεντροποιημένες εφαρμογές).

Αρχικά θα γίνει αναφορά στη διαδικασία αποθήκευσης των νέων πληροφοριών. Η μοναδική πηγή παραγωγής δεδομένων στο σύστημα είναι οι χρήστες και κατ' επέκταση η υπηρεσία Concordia Application, εφόσον είναι η μοναδική υπηρεσία με την οποία αυτοί αλληλεπιδρούν. Τα δεδομένα που δημιουργούν οι χρήστες (πληροφορίες χρηστών, τίτλοι θεμάτων και περιεχόμενο μηνυμάτων) κατατέμνονται πριν αποθηκευτούν. Η πληροφορία που εισάγεται στο σύστημα διαχωρίζεται σε δύο μέρη. Στο blockchain αποθηκεύεται ένας δείκτης προς τα δεδομένα, ενώ τα πραγματικά δεδομένα αποθηκεύονται στο IPFS, εντός της κατάλληλης OrbitDB βάσης. Ο δείκτης, εκτός από την άμεση χρησιμότητα για την εύρεση των δεδομένων, παρέχει και την έμμεση λειτουργικότητα της δημιουργίας απαραίτητων μεταδομένων, όπως του συνολικού αριθμού των θεμάτων ή των μηνυμάτων ενός θέματος.

Από την πλευρά της εύρεσης των πληροφοριών στο σύστημα, η ροή έχει ως εξής. Αρχικά, είναι απαραίτητη η αναζήτηση στο blockchain για την εύρεση του δείκτη προς τα δεδομένα. Έπειτα, τα δεδομένα μπορούν να ανακτηθούν μέσω του IPFS είτε από τους χρήστες που τα διαθέτουν, είτε από κάποιον pinner.

Στη συνέχεια δίνεται ένα παράδειγμα εισαγωγής πληροφορίας στο σύστημα και ανάκτησης της ίδιας πληροφορίας από αυτό.

Έστω, λοιπόν, ένας χρήστης που δημιουργεί ένα νέο θέμα. Τα δεδομένα που παράγονται είναι ο τίτλος του θέματος και το περιεχόμενο του πρώτου μηνύματος. Τα μεταδεδομένα της δημιουργίας είναι η διεύθυνση του δημιουργού του θέματος. Για την αποθήκευση του θέματος στο σύστημα δημιουργείται πρώτα συναλλαγή στο blockchain ώστε να δημιουργηθεί μία νέα εγγραφή στον πίνακα των θεμάτων. Η εγγραφή αυτή δεν περιέχει τίποτα παρά μόνο τη διεύθυνση του δημιουργού χρήστη. Αν η συναλλαγή είναι επιτυχής, επιστρέφεται ο αύξοντας αριθμός του νέου θέματος. Έπειτα, στην προσωπική OrbitDB βάση του χρήστη και στον πίνακα των θεμάτων, προστίθεται μία εγγραφή με αναγνωριστικό τον αύξοντα αριθμό του θέματος, όπου θα αποθηκευτούν τα δεδομένα του τίτλου και του πρώτου μηνύματος. Στο σχήμα \ref{figure:4-3-data-flow-insert} παρουσιάζεται γραφικά η διαδικασία.

\vspace{\baselineskip}

%TODO: Doesn't this figure also need a "New post ID" for topic's first post?
\begin{figure}[H]
    \centering
    \input{tikz/chapter-3/3-6-use-case-create-topic-sequence-diagram}
    \caption{Διάγραμμα ακολουθίας δημιουργίας θέματος}
    \label{figure:4-3-data-flow-insert}
\end{figure}

\newpage
Έστω τώρα ένας χρήστης που επιθυμεί να διαβάσει το προηγούμενο θέμα. Αρχικά, πρέπει να διαβαστούν τα μεταδεδομένα του συγκεκριμένου θέματος από το blockchain. Έπειτα, διαβάζονται από το blockchain οι αύξοντες αριθμοί των μηνυμάτων που έχουν δημοσιευτεί σε αυτό το θέμα. Σε μία τελευταία ανάκτηση από το blockchain διαβάζονται τα μεταδομένα του κάθε μηνύματος. Έπειτα, η πληροφορία αυτή εμπλουτίζεται από τα δεδομένα του θέματος και των μηνυμάτων, τα οποία ανακτώνται από τις προσωπικές OrbitDB βάσεις του κάθε χρήστη. Στο σχήμα \ref{figure:4-3-data-flow-read} φαίνεται το διάγραμμα ροής της πληροφορίας κατά την ανάκτηση πληροφοριών από το σύστημα.

\vspace{\baselineskip}

\begin{figure}[H]
    \centering
    \input{tikz/chapter-3/3-6-use-case-fetch-topic-sequence-diagram}
    \caption{Διάγραμμα ακολουθίας εύρεσης και ανάκτησης θέματος}
    \label{figure:4-3-data-flow-read}
\end{figure}
