\section{Σενάρια χρήσης} \label{section:3-4-use-cases}

Βασικό μέρος της σχεδίασης της πλατφόρμας ήταν η καταγραφή των απαιτήσεων η οποία έγινε στο προηγούμενο κεφάλαιο (\ref{section:3-3-requirements}) καθώς και η σχεδίαση και ανάπτυξη των σεναρίων χρήσης. Τα σενάρια χρήσης αντιστοιχίζουν πιθανές ενέργειες των χρηστών με αποκρίσεις του συστήματος. Μέσω της αντιστοίχισης αυτής παρουσιάζεται η λειτουργικότητα του συστήματος και περιγράφονται τόσο οι λειτουργικές όσο και οι μη λειτουργικές απαιτήσεις του συστήματος.

Παρατίθενται εδώ τα σενάρια χρήσης που δίνουν τις απαραίτητες πληροφορίες για την κατανόηση της λειτουργίας του συστήματος.

% ===== =====
% Use case 1
% ===== =====
\subsection{Σενάριο χρήσης 1: Εγγραφή χρήστη} \label{subsection:3-4-use-case-signup}

\useCaseTable
{Εγγράφομαι στο σύστημα}
{Στόχος του σεναρίου χρήσης είναι ο επισκέπτης να μπορεί να εγγραφεί στο σύστημα ως χρήστης.}
{TODO}
{TODO}
{Ο επισκέπτης πατάει το κουμπί εγγραφή.}
{Ο επισκέπτης πρέπει να έχει ανοίξει την σελίδα της εφαρμογής.}
{Σενάριο χρήσης 1, εγγραφή χρήστη στο σύστημα.}
{3-4-use-case-sign-up}

\useCaseBaseFlowTable
{
    1 & Ο χρήστης πατάει το κουμπί εγγραφή.                                                    & Το σύστημα εμφανίζει την φόρμα ``Εγγραφή Χρήστη''. \\ [0.5ex]
    \midrule
    2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''.                       & Το σύστημα εισάγει νέο χρήστη στο blockchain. \\ [0.5ex]
    \midrule
    3 & -                                                                                      & Το σύστημα δημιουργεί τις προσωπικές βάσεις βάσεις δεδομένων OrbitDb του χρήστη. \\ [0.5ex]
    \midrule
    4 & -                                                                                      & Το σύστημα εμφανίζει την φόρμα ``Πληροφορίες Χρήστη''. \\ [0.5ex]
    \midrule
    5 & Ο χρήστης συμπληρώνει τις προσωπικές του πληροφορίες και πατάει το κουμπί ``Υποβολή''. & Το σύστημα εισάγει τις πληροφορίες χρήστη στην προσωπική του βάση OrbitDb. \\ [0.5ex]
}
{Το σύστημα μεταβαίνει στην αρχική σελίδα της εφαρμογής.}
{Σενάριο χρήσης 1 - Βασική ροή}
{3-4-use-case-sign-up-base-flow}

\useCaseAlternateFlowTable
{1}
{Τα στοιχεία χρήστη είναι λανθασμένα.}
{Εφόσον ο χρήστης στη γραμμή 2 δεν συμπληρώσει το πεδίο ονόματος χρήστη ή συμπληρώσει ένα όνομα χρήστη το οποίο είναι ήδη σε χρήση στο σύστημα, το σύστημα πρέπει να επιστρέψει σχετικό μήνυμα σφάλματος.}
{
    1 & - & Το σύστημα εμφανίζει μήνυμα σφάλματος.
}
{Το σύστημα επιστρέφει στη γραμμή 1 της βασικής ροής.}
{Σενάριο χρήσης 1 - Εναλλακτική ροή 1}
{3-4-use-case-sign-up-alternate-flow-1}

\useCaseAlternateFlowTable
{2}
{Ο χρήστης πατάει το κουμπί ``Άκυρο''.}
{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει ``Άκυρο'' το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.}
{
    1 & Ο χρήστης πατάει το κουμπί ``Άκυρο'' & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.
}
{Το σενάριο χρήσης τερματίζεται.}
{Σενάριο χρήσης 1 - Εναλλακτική ροή 2}
{3-4-use-case-sign-up-alternate-flow-2}

\useCaseAlternateFlowTable
{3}
{Ο χρήστης πατάει το κουμπί ``Παράληψη''.}
{Εφόσον ο χρήστης στη γραμμή 5 της Βασικής Ροής επιλέξει ``Παράληψη'' το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.}
{
    1 & Ο χρήστης πατάει το κουμπί ``Παράληψη'' & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.
}
{Το σενάριο χρήσης τερματίζεται.}
{Σενάριο χρήσης 1 - Εναλλακτική ροή 3}
{3-4-use-case-sign-up-alternate-flow-3}

\begin{figure}[H]
    \centering
    \input{tikz/chapter-3/3-4-use-case-sign-up-sequence-diagram}
    \caption{Σενάριο χρήσης 1 - Διάγραμμα βασικής ροής}
    \label{figure:3-4-use-case-sign-up-base-flow-sequence-diagram}
\end{figure}

% ===== =====
% Use case 2
% ===== =====
\subsection{Σενάριο χρήσης 2: Δημιουργία νέου θέματος} \label{subsection:3-4-use-case-create-topic}

\useCaseTable
{Δημιουργώ νέο θέμα}
{Στόχος του σεναρίου χρήσης είναι ο χρήστης να μπορεί να δημιουργήσει νέο θέμα.}
{TODO}
{TODO}
{Ο χρήστης πατάει το κουμπί δημιουργίας νέου θέματος.}
{Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στην αρχική σελίδα.}
{Σενάριο χρήσης 2, δημιουργία νέου θέματος.}
{3-4-use-case-create-topic}

\useCaseBaseFlowTable
{
    1 & Ο χρήστης πατάει το κουμπί δημιουργίας νέου θέματος.             & Το σύστημα εμφανίζει την φόρμα ``Δημιουργία Θέματος''. \\ [0.5ex]
    \midrule
    2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα εισάγει νέο θέμα στο blockchain. \\ [0.5ex]
    \midrule
    3 & -                                                                & Το σύστημα εισάγει τις πληροφορίες του θέματος στην προσωπική βάση OrbitDb του χρήστη. \\ [0.5ex]
}
{Το σύστημα μεταβαίνει στην σελίδα του νέου θέματος.}
{Σενάριο χρήσης 2 - Βασική ροή}
{3-4-use-case-create-topic-base-flow}

\useCaseAlternateFlowTable
{1}
{Ο χρήστης δημιουργεί ψηφοφορία.}
{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει ``Προσθήκη Ψηφοφορίας'' το σύστημα ανανεώνει την σελίδα προσθέτοντας τα επιπλέον πεδία της φόρμας ``Δημιουργία Ψηφοφορίας''.}
{
    1 & Ο χρήστης, αφού συμπληρώσει τη φόρμα ``Δημιουργία Θέματος'', πατάει το κουμπί ``Προσθήκη ψηφοφορίας'' & Το σύστημα ανανεώνει τη σελίδα με τα πεδία της φόρμας ``Δημιουργία Ψηφοφορίας''. \\ [0.5ex]
    \midrule
    2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''.                                      & Το σύστημα εισάγει το νέο θέμα καθώς και τη νέα ψηφοφορία στο blockchain. \\ [0.5ex]
    \midrule
    3 & -                                                                                                     & Το σύστημα εισάγει τις πληροφορίες του θέματος και της ψηφοφορίας στις προσωπικές βάσεις OrbitDb του χρήστη.
}
{Το σύστημα μεταβαίνει στην σελίδα του νέου θέματος.}
{Σενάριο χρήσης 2 - Εναλλακτική ροή 1}
{3-4-use-case-create-topic-alternate-flow-1}

\useCaseAlternateFlowTable
{2}
{Ο χρήστης πατάει το κουμπί ``Άκυρο''.}
{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής ή στη γραμμή 2 της Εναλλακτικής Ροής 1 επιλέξει ``Άκυρο'' το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.}
{
    1 & Ο χρήστης πατάει το κουμπί ``Άκυρο'' & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.
}
{Το σενάριο χρήσης τερματίζεται.}
{Σενάριο χρήσης 2 - Εναλλακτική ροή 2}
{3-4-use-case-create-topic-alternate-flow-2}

\begin{figure}[H]
    \centering
    \input{tikz/chapter-3/3-4-use-case-create-topic-sequence-diagram}
    \caption{Σενάριο χρήσης 2 - Διάγραμμα βασικής ροής}
    \label{figure:3-4-use-case-create-topic-base-flow-sequence-diagram}
\end{figure}

\begin{figure}[H]
    \centering
    \input{tikz/chapter-3/3-4-use-case-create-topic-alternate-flow-1-sequence-diagram}
    \caption{Σενάριο χρήσης 2 - Διάγραμμα εναλλακτικής ροής 1}
    \label{figure:3-4-use-case-create-topic-alternate-flow-1-sequence-diagram}
\end{figure}

% ===== =====
% Use case 3
% ===== =====
\subsection{Σενάριο χρήσης 3: Ανάκτηση θέματος} \label{subsection:3-4-use-case-fetch-topic}

\useCaseTable
{Ανακτώ ένα θέμα}
{Στόχος του σεναρίου χρήσης είναι ο επισκέπτης ή ο χρήστης να μπορεί να ανακτήσει ένα θέμα.}
{TODO}
{TODO}
{Ο επισκέπτης ή χρήστης πατάει σε ένα από τα θέματα.}
{Ο επισκέπτης ή χρήστης πρέπει να έχει ανοίξει την σελίδα της εφαρμογής.}
{Σενάριο χρήσης 3, ανάκτηση θέματος.}
{3-4-use-case-fetch-topic}

\useCaseBaseFlowTable
{
    1 & Ο χρήστης πατάει σε ένα από τα θέματα της λίστας. & Το σύστημα ανακτά τις πληροφορίες του θέματος από το blockchain. \\ [0.5ex]
    \midrule
    2 & -                                                 & Το σύστημα ανακτά τα μηνύματα του θέματος αντιγράφοντας τις προσωπικές βάσεις OrbitDb των συγγραφέων. \\ [0.5ex]
}
{Το σύστημα μεταβαίνει στην σελίδα του θέματος.}
{Σενάριο χρήσης 3 - Βασική ροή}
{3-4-use-case-fetch-topic-base-flow}

\useCaseAlternateFlowTable
{1}
{Το θέμα περιέχει ψηφοφορία.}
{Εφόσον το θέμα που ανακτήθηκε στη γραμμή 1 της Βασικής Ροής περιέχει ψηφοφορία ανακτώνται οι πληροφορίες της.}
{
    1 & - & Το σύστημα ανακτά τα μηνύματα του θέματος αντιγράφοντας τις προσωπικές βάσεις OrbitDb των συγγραφέων. \\ [0.5ex]
    2 & - & Το σύστημα ανακτά την ψηφοφορία από το blockchain. \\ [0.5ex]
    3 & - & Το σύστημα ανακτά τις πληροφορίες της ψηφοφορίας αντιγράφοντας την προσωπική βάση OrbitDb του συγγραφέα. \\ [0.5ex]
    4 & - & Το σύστημα επιβεβαιώνει τις πληροφορίες της ψηφοφορίας με βάση το hash που έχει ανακτηθεί από το blockchain. \\ [0.5ex]
}
{Το σενάριο χρήσης τερματίζεται.}
{Σενάριο χρήσης 3 - Εναλλακτική ροή 1}
{3-4-use-case-fetch-topic-alternate-flow-1}

\begin{figure}[H]
    \centering
    \input{tikz/chapter-3/3-4-use-case-fetch-topic-sequence-diagram}
    \caption{Σενάριο χρήσης 3 - Διάγραμμα βασικής ροής}
    \label{figure:3-4-use-case-fetch-topic-base-flow-sequence-diagram}
\end{figure}

\begin{figure}[H]
    \centering
    \input{tikz/chapter-3/3-4-use-case-fetch-topic-alternate-flow-1-sequence-diagram}
    \caption{Σενάριο χρήσης 3 - Διάγραμμα εναλλακτικής ροής 1}
    \label{figure:3-4-use-case-fetch-topic-alternate-flow-1-sequence-diagram}
\end{figure}

% ===== =====
% Use case 4
% ===== =====
\subsection{Σενάριο χρήσης 4: Δημιουργία νέου μηνύματος} \label{subsection:3-4-use-case-create-post}

\useCaseTable
{Δημιουργώ νέο μήνυμα}
{Στόχος του σεναρίου χρήσης είναι ο χρήστης να μπορεί να δημιουργήσει νέο μήνυμα.}
{TODO}
{TODO}
{Ο χρήστης πατάει το κουμπί δημιουργίας νέου μηνύματος.}
{Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στην σελίδα ενός θέματος.}
{Σενάριο χρήσης 4, δημιουργία νέου μηνύματος.}
{3-4-use-case-create-post}

\useCaseBaseFlowTable
{
    1 & Ο χρήστης πατάει το κουμπί δημιουργίας νέου μηνύματος.           & Το σύστημα εμφανίζει την φόρμα ``Δημιουργία Μηνύματος''. \\ [0.5ex]
    \midrule
    2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα εισάγει νέο μήνυμα στο blockchain. \\ [0.5ex]
    \midrule
    3 & -                                                                & Το σύστημα εισάγει τις πληροφορίες του μηνύματος στην προσωπική βάση OrbitDb του χρήστη. \\ [0.5ex]
}
{Το σύστημα παραμένει στη σελίδα του θέματος εμφανίζοντας το νέο μήνυμα.}
{Σενάριο χρήσης 4 - Βασική ροή}
{3-4-use-case-create-post-base-flow}

\useCaseAlternateFlowTable
{1}
{Ο χρήστης πατάει το κουμπί ``Άκυρο''.}
{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει ``Άκυρο'' το σύστημα επιστρέφει στη σελίδα του θέματος.}
{
    1 & Ο χρήστης πατάει το κουμπί ``Άκυρο'' & Το σύστημα επιστρέφει στη σελίδα του θέματος.
}
{Το σενάριο χρήσης τερματίζεται.}
{Σενάριο χρήσης 4 - Εναλλακτική ροή 1}
{3-4-use-case-create-post-alternate-flow-1}

\begin{figure}[H]
    \centering
    \input{tikz/chapter-3/3-4-use-case-create-post-sequence-diagram}
    \caption{Σενάριο χρήσης 4 - Διάγραμμα βασικής ροής}
    \label{figure:3-4-use-case-create-post-base-flow-sequence-diagram}
\end{figure}

% ===== =====
% Use case 5
% ===== =====
\subsection{Σενάριο χρήσης 5: Ψήφιση σε ψηφοφορία} \label{subsection:3-4-use-case-vote-in-poll}

\useCaseTable
{Ψηφίζω σε ψηφοφορία}
{Στόχος του σεναρίου χρήσης είναι ο χρήστης να μπορεί να ψηφίσει σε μία ψηφοφορία.}
{TODO}
{TODO}
{Ο χρήστης πατάει το κουμπί ψηφοφορίας.}
{Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στην σελίδα ενός θέματος το οποίο περιλαμβάνει ψηφοφορία.}
{Σενάριο χρήσης 5, ψήφιση σε ψηφοφορία.}
{3-4-use-case-vote-in-poll}

\useCaseBaseFlowTable
{
    1 & Ο χρήστης πατάει το κουμπί της επιλογής που επιθυμεί να ψηφίσει και πατάει το κουμπί ``Υποβολή''. & Το σύστημα εισάγει νέα ψήφο στο blockchain. \\ [0.5ex]
}
{Το σύστημα ανανεώνει τις πληροφορίες της ψηφοφορίας.}
{Σενάριο χρήσης 5 - Βασική ροή}
{3-4-use-case-vote-in-poll-base-flow}

\begin{figure}[H]
    \centering
    \input{tikz/chapter-3/3-4-use-case-vote-in-poll-sequence-diagram}
    \caption{Σενάριο χρήσης 5 - Διάγραμμα βασικής ροής}
    \label{figure:3-4-use-case-vote-in-poll-base-flow-sequence-diagram}
\end{figure}

% ===== =====
% Use case 6
% ===== =====
\subsection{Σενάριο χρήσης 6: Ψήφιση μηνύματος} \label{subsection:3-4-use-case-vote-post}

\useCaseTable
{Ψηφίζω σε μήνυμα}
{Στόχος του σεναρίου χρήσης είναι ο χρήστης να μπορεί να υπερψηφίσει ή καταψηφίσει ένα μήνυμα.}
{TODO}
{TODO}
{Ο επισκέπτης πατάει το κουμπί υπερψήφισης ή καταψήφισης.}
{Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στην σελίδα ενός θέματος το οποίο περιλαμβάνει τουλάχιστον ένα μήνυμα το οποίο δεν έχει δημιουργήσει ο ίδιος.}
{Σενάριο χρήσης 6, ψήφιση μηνύματος.}
{3-4-use-case-vote-post}

\useCaseBaseFlowTable
{
    1 & Ο χρήστης πατάει στο κουμπί υπερψήφισης μηνύματος. & Το σύστημα εισάγει νέα ψήφο μηνύματος στο blockchain. \\ [0.5ex]
}
{Το σύστημα ανανεώνει τις ψήφους του μηνύματος.}
{Σενάριο χρήσης 6 - Βασική ροή}
{3-4-use-case-vote-post-base-flow}

\begin{figure}[H]
    \centering
    \input{tikz/chapter-3/3-4-use-case-vote-post-sequence-diagram}
    \caption{Σενάριο χρήσης 6 - Διάγραμμα βασικής ροής}
    \label{figure:3-4-use-case-vote-post-base-flow-sequence-diagram}
\end{figure}
