Browse Source

Merge branch 'develop' into feature/1-intro

develop
Ezerous 3 years ago
parent
commit
7246821078
  1. 12
      assets/code/orbit-db-identity.js
  2. BIN
      assets/figures/orbitdb-identity.png
  3. 3
      bibliography/references.bib
  4. 13
      chapters/2.theoretical-background/2.8.orbit-db.tex
  5. 9
      chapters/3.application-design/3.0.application-design.tex
  6. 2
      chapters/3.application-design/3.1.application-parts.tex
  7. 2
      chapters/3.application-design/3.2.user-categories.tex
  8. 115
      chapters/3.application-design/3.3.software-requirements.tex
  9. 1
      chapters/3.application-design/3.3.use-cases.tex
  10. 15
      chapters/3.application-design/3.4.use-cases.tex
  11. 78
      chapters/3.application-design/3.4.use-cases/3.4.1.use-case-sign-up.tex
  12. 35
      chapters/3.application-design/3.4.use-cases/3.4.2.use-case-sign-in.tex
  13. 74
      chapters/3.application-design/3.4.use-cases/3.4.3.use-case-create-topic.tex
  14. 60
      chapters/3.application-design/3.4.use-cases/3.4.4.use-case-fetch-topic.tex
  15. 52
      chapters/3.application-design/3.4.use-cases/3.4.5.use-case-create-post.tex
  16. 50
      chapters/3.application-design/3.4.use-cases/3.4.6.use-case-modify-post.tex
  17. 33
      chapters/3.application-design/3.4.use-cases/3.4.7.use-case-vote-in-poll.tex
  18. 33
      chapters/3.application-design/3.4.use-cases/3.4.8.use-case-vote-post.tex
  19. 35
      chapters/3.application-design/3.4.use-cases/3.4.9.delete-local-data.tex
  20. 2
      chapters/3.application-design/3.5.technology-stack.tex
  21. 1
      chapters/3.application-design/3.6.architecture.design.tex
  22. 2
      chapters/3.application-design/3.6.implementation-methodology-specification.tex
  23. 1
      chapters/3.application-design/3.7.architecture.design.tex
  24. 13
      custom-commands/custom-enumitem.tex
  25. 10
      custom-commands/custom-listings.tex
  26. 9
      custom-commands/srs-commands.tex
  27. 61
      custom-commands/use-case-commands.tex
  28. 12
      packages.tex
  29. BIN
      thesis.pdf
  30. 19
      tikz/chapter-3/3-4-use-case-create-post-sequence-diagram.tex
  31. 28
      tikz/chapter-3/3-4-use-case-create-topic-alternate-flow-1-sequence-diagram.tex
  32. 19
      tikz/chapter-3/3-4-use-case-create-topic-sequence-diagram.tex
  33. 16
      tikz/chapter-3/3-4-use-case-delete-local-data-sequence-diagram.tex
  34. 41
      tikz/chapter-3/3-4-use-case-fetch-topic-alternate-flow-1-sequence-diagram.tex
  35. 32
      tikz/chapter-3/3-4-use-case-fetch-topic-sequence-diagram.tex
  36. 16
      tikz/chapter-3/3-4-use-case-modify-post-sequence-diagram.tex
  37. 16
      tikz/chapter-3/3-4-use-case-sign-in-sequence-diagram.tex
  38. 26
      tikz/chapter-3/3-4-use-case-sign-up-sequence-diagram.tex
  39. 12
      tikz/chapter-3/3-4-use-case-vote-in-poll-sequence-diagram.tex
  40. 12
      tikz/chapter-3/3-4-use-case-vote-post-sequence-diagram.tex

12
assets/code/orbit-db-identity.js

@ -0,0 +1,12 @@
{
_id: '<the ID of the external identity>',
// Auto-generated by OrbitDB
_publicKey: '<signing key used to sign OrbitDB entries>',
signatures: {
//Allows the owner of id to prove they own the private key associated with publicKey
id: '<signature of _id signed using publicKey>',
//This links the two ids
publicKey: '<signature of signatures.id + _publicKey using _id>'
},
type: 'orbitdb'
}

BIN
assets/figures/orbitdb-identity.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

3
bibliography/references.bib

@ -50,8 +50,7 @@
@article{2.5-bitcoin, @article{2.5-bitcoin,
author = {Nakamoto, Satoshi}, author = {Nakamoto, Satoshi},
year = {2009}, date = {2008-10-31},
month = {03},
title = {Bitcoin: A Peer-to-Peer Electronic Cash System}, title = {Bitcoin: A Peer-to-Peer Electronic Cash System},
journal = {Cryptography Mailing list at https://metzdowd.com} journal = {Cryptography Mailing list at https://metzdowd.com}
} }

13
chapters/2.theoretical-background/2.8.orbit-db.tex

@ -6,7 +6,7 @@
\caption{OrbitDB logo} \caption{OrbitDB logo}
\end{figure} \end{figure}
Η OrbitDB είναι μία P2P βάση δεδομένων ανοιχτού κώδικα. Χρησιμοποιεί το IPFS για την αποθήκευση των δεδομένων και το IPFS Pubsub για τον αυτόματο συγχρονισμό των βάσεων δεδομένων μεταξύ των peers. Είναι μία τελικά συνεπής (eventually consistent) και χρησιμοποιεί CRDTs (Conflict-Free Replicated Data Types) για συγχωνεύσεις βάσεων δεδομένων χωρίς συγκρούσεις, πράγμα που την καθιστά εξαιρετική επιλογή για DApps και offline-first web applications.\cite{2.8-orbitdb} Η OrbitDB είναι μία P2P βάση δεδομένων ανοιχτού κώδικα. Χρησιμοποιεί το IPFS για την αποθήκευση των δεδομένων και το IPFS Pubsub για τον αυτόματο συγχρονισμό των βάσεων δεδομένων μεταξύ των peers. Είναι τελικά συνεπής (eventually consistent) και χρησιμοποιεί CRDTs (Conflict-Free Replicated Data Types) για συγχωνεύσεις βάσεων δεδομένων χωρίς συγκρούσεις, πράγμα που την καθιστά εξαιρετική επιλογή για DApps και offline-first web applications.\cite{2.8-orbitdb}
Κάποια Βασικά χαρακτηριστικά της είναι τα εξής: Κάποια Βασικά χαρακτηριστικά της είναι τα εξής:
\begin{itemize} \begin{itemize}
@ -22,16 +22,15 @@
Όλα τα stores υλοποιούνται πάνω στο \texttt{ipfs-log}, μία αμετάβλητη, operation-based CRDT για κατανεμημένα συστήματα, ενώ υπάρχει και η δυνατότητα δημιουργίας προσαρμοσμένων stores ανάλογα με την περίπτωση. Όλα τα stores υλοποιούνται πάνω στο \texttt{ipfs-log}, μία αμετάβλητη, operation-based CRDT για κατανεμημένα συστήματα, ενώ υπάρχει και η δυνατότητα δημιουργίας προσαρμοσμένων stores ανάλογα με την περίπτωση.
\item \textbf{Address}: Κάθε βάση δεδομένων λαμβάνει κατά τη δημιουργία της μία διεύθυνση της μορφής: \texttt{/orbitdb/CID/DATABASE\_NAME}, όπου CID είναι το IPFS multihash του μανιφέστου της, ενώ το DATABASE\_NAME είναι το όνομα της βάσης\cite{2.8-orbitdb-guide}. Το μανιφέστο είναι ένα IPFS object που περιέχει πληροφορίες της βάσης όπως το όνομα, τον τύπο και έναν δείκτη στον ελεγκτή πρόσβασης (access controller). \item \textbf{Address}: Κάθε βάση δεδομένων λαμβάνει κατά τη δημιουργία της μία διεύθυνση της μορφής: \texttt{\\/orbitdb/CID/DATABASE\_NAME}, όπου CID είναι το IPFS multihash του μανιφέστου της και DATABASE\_NAME το όνομα της βάσης\cite{2.8-orbitdb-guide}. Το μανιφέστο είναι ένα IPFS object που περιέχει πληροφορίες της βάσης όπως το όνομα, τον τύπο και έναν δείκτη στον ελεγκτή πρόσβασης (access controller).
\item \textbf{Identity}: Κάθε φορά που προστίθεται μία εγγραφή στη βάση υπογράφεται από τον δημιουργό της, ο οποίος προσδιορίζεται από μία ταυτότητα (identity). Το Identity object, πέρα από τον προεπιλεγμένο τρόπο λειτουργίας, μπορεί να προσαρμοστεί έτσι ώστε να συνδέεται με κάποιο εξωτερικό αναγνωριστικό. \item \textbf{Identity}: Κάθε φορά που προστίθεται μία εγγραφή στη βάση υπογράφεται από τον δημιουργό της, ο οποίος προσδιορίζεται από μία ταυτότητα (identity). Το Identity object, πέρα από τον προεπιλεγμένο τρόπο λειτουργίας, μπορεί να προσαρμοστεί έτσι ώστε να συνδέεται με κάποιο εξωτερικό αναγνωριστικό.
Η μορφή του έχει ως εξής (βλ. και \url{https://github.com/orbitdb/orbit-db-identity-provider}): Η μορφή του έχει ως εξής (βλ. και \url{https://github.com/orbitdb/orbit-db-identity-provider}):
\begin{figure}[H] \begin{enumitemcenteredfigure}
\centering \simplelisting[width=15cm]{orbit-db-identity.js}
\includegraphics[width=12cm]{assets/figures/orbitdb-identity.png}
\caption{OrbitDB Identity} \caption{OrbitDB Identity}
\end{figure} \end{enumitemcenteredfigure}
\item \textbf{Access Control}: Κατά τη δημιουργία μίας βάσης μπορούν να οριστούν όσοι θα έχουν δικαίωμα να γράψουν σε αυτήν μέσω ενός ελεγκτή πρόσβασης (access controller). Ο ελεγκτής θα περιλαμβάνει τα public keys τους, τα οποία μπορούν να ανακτηθούν από το identity του καθενός. Από προεπιλογή και αν δεν ορίζεται διαφορετικά, δίνεται πρόσβαση εγγραφής μόνο στον δημιουργό της βάσης. \item \textbf{Access Control}: Κατά τη δημιουργία μίας βάσης μπορούν να οριστούν όσοι θα έχουν δικαίωμα να γράψουν σε αυτή μέσω ενός ελεγκτή πρόσβασης (access controller). Ο ελεγκτής θα περιλαμβάνει τα public keys τους, τα οποία μπορούν να ανακτηθούν από το identity του καθενός. Από προεπιλογή και αν δεν ορίζεται διαφορετικά, δίνεται πρόσβαση εγγραφής μόνο στον δημιουργό της βάσης.
\end{itemize} \end{itemize}

9
chapters/3.application-design/3.0.application-design.tex

@ -2,7 +2,8 @@
\input{chapters/3.application-design/3.1.application-parts} \input{chapters/3.application-design/3.1.application-parts}
\input{chapters/3.application-design/3.2.user-categories} \input{chapters/3.application-design/3.2.user-categories}
\input{chapters/3.application-design/3.3.use-cases} \input{chapters/3.application-design/3.3.software-requirements}
\input{chapters/3.application-design/3.4.technology-stack} \input{chapters/3.application-design/3.4.use-cases}
\input{chapters/3.application-design/3.5.implementation-methodology-specification} \input{chapters/3.application-design/3.5.technology-stack}
\input{chapters/3.application-design/3.6.architecture.design} \input{chapters/3.application-design/3.6.implementation-methodology-specification}
\input{chapters/3.application-design/3.7.architecture.design}

2
chapters/3.application-design/3.1.application-parts.tex

@ -1,4 +1,4 @@
\section{Λογικά μέρη} \section{Λογικά μέρη} \label{section:3-1-logical-parts}
% Παλιό από Drive % Παλιό από Drive
Η πλατφόρμα μπορεί να διαχωριστεί σε δύο λογικά μέρη: Η πλατφόρμα μπορεί να διαχωριστεί σε δύο λογικά μέρη:

2
chapters/3.application-design/3.2.user-categories.tex

@ -1,4 +1,4 @@
\section{Κατηγορίες χρηστών} \section{Κατηγορίες χρηστών} \label{section:3-2-user-categories}
% Παλιό από Drive % Παλιό από Drive
\subsection{Πρώτο μέρος} \subsection{Πρώτο μέρος}

115
chapters/3.application-design/3.3.software-requirements.tex

@ -0,0 +1,115 @@
\section{Απαιτήσεις λογισμικού} \label{section:3-3-requirements}
Στην παρούσα ενότητα περιγράφονται οι βασικές απαιτήσεις λογισμικού (software requirements) της εφαρμογής.
Η πρώτη κατηγορία είναι αυτή των Λειτουργικών Απαιτήσεων (ΛΑ), η οποία αναφέρεται στη συμπεριφορά του συστήματος, δηλαδή στον τρόπο που θα αντιδρά και στις εξόδους που θα παράγει ανάλογα με τις εισόδους.
\begin{enumerate}[label=\textbf{<ΛΑ-\arabic*>}, leftmargin=\parindent, align=left, labelwidth=\parindent, labelsep=0pt]
\sysReqItem
{\label{srs:functional-srs-sign-up}}
{Ο χρήστης πρέπει να μπορεί να εγγραφεί στην εφαρμογή με τον Ethereum λογαριασμό του.}
{Ο χρήστης πρέπει να μπορεί να εγγραφεί στην εφαρμογή, πατώντας το κουμπί "Sign Up" και συμπληρώνοντας τα απαραίτητα πεδία σύμφωνα με τις οδηγίες. Το πεδίο "Username" είναι υποχρεωτικό να συμπληρωθεί και ορίζεται με μοναδικό τρόπο. Σε περίπτωση που ο χρήστης εισάγει μη διαθέσιμο Username, το σύστημα θα πρέπει να μην επιτρέπει στον χρήστη να συνεχίσει και να προβάλει αντίστοιχο μήνυμα λάθους. Τα πεδία "Profile picture URL" και "Location" είναι προαιρετικά.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{\label{srs:functional-srs-sign-in}}
{Ο χρήστης πρέπει να συνδέεται αυτόματα, εφόσον είναι εγγεγραμμένος.}
{Το σύστημα πρέπει να διαπιστώνει αυτόματα εάν το τρέχον Ethereum address έχει λογαριασμό στην εφαρμογή και εάν ναι, να συνδέει να τον χρήστη, ανακτώντας το Username του από το blockchain και προβάλλοντάς το στο μενού.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{\label{srs:functional-srs-create-user-databases}}
{Το σύστημα πρέπει να δημιουργεί τις βάσεις δεδομένων του χρήστη.}
{Το σύστημα πρέπει να δημιουργεί τις βάσεις δεδομένων του χρήστη, εάν αυτές δεν υπάρχουν ήδη τοπικά. Όταν ο χρήστης ξεκλειδώσει τον Ethereum λογαριασμό του, το σύστημα θα πρέπει να τον προτρέπει να υπογράψει με το ιδιωτικό του κλειδί μία συναλλαγή που θα εξασφαλίζει τη γνησιότητα των βάσεών του και των δεδομένων που αυτές θα εμπεριέχουν.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{\label{srs:functional-srs-create-topic}}
{Ο εγγεγραμμένος χρήστης πρέπει να μπορεί να δημιουργεί θέματα (topics).}
{Ο εγγεγραμμένος χρήστης πρέπει να μπορεί να δημιουργεί νέα θέματα. Αυτό το επιτυγχάνει πατώντας το κουμπί "New Topic", συμπληρώνοντας τα υποχρεωτικά πεδία της φόρμας ("Topic subject" και "First post content"), πατώντας το κουμπί "Create Topic" και επιβεβαιώνοντας τη συναλλαγή στο Ethereum.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{\label{srs:functional-srs-browse-topics}}
{Ο χρήστης πρέπει να μπορεί να περιηγείται σε θέματα.}
{Ο χρήστης πρέπει να μπορεί να περιηγείται σε θέματα, πατώντας σε κάποιο θέμα της αρχικής οθόνης και, έπειτα, χρησιμοποιώντας τα βέλη, να περιηγηθεί στο ιστορικό των μηνυμάτων του θέματος.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{\label{srs:functional-srs-create-post}}
{Ο εγγεγραμμένος χρήστης πρέπει να μπορεί να δημιουργεί μηνύματα (posts).}
{Ο εγγεγραμμένος χρήστης πρέπει να μπορεί να δημιουργεί μηνύματα στο θέμα που επιθυμεί. Αυτό επιτυγχάνεται συμπληρώνοντας το πεδίο νέου μηνύματος στην οθόνη του θέματος, πατώντας το κουμπί "Post" και επιβεβαιώνοντας τη συναλλαγή στο Ethereum.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{\label{srs:functional-srs-modify-post}}
{Ο χρήστης πρέπει να μπορεί να τροποποιεί τα μηνύματά του.}
{Ο χρήστης πρέπει να μπορεί να τροποποιεί τα μηνύματά του. Αυτό το επιτυγχάνει πατώντας το κουμπί επεξεργασίας στο εκάστοτε μήνυμα, τροποποιώντας το μήνυμα και πατώντας το κουμπί επιβεβαίωσης. Στη συνέχεια, το σύστημα τροποποιεί το περιεχόμενο του μηνύματος στη βάση δεδομένων του χρήστη ανάλογα. Σε περίπτωση που ο χρήστης αλλάξει γνώμη κατά τη διάρκεια της διαδικασίας της επεξεργασίας, μπορεί να πατήσει το κουμπί ακύρωσης και να αναιρέσει τις αλλαγές που πραγματοποίησε.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{\label{srs:functional-srs-vote-posts}}
{Ο εγγεγραμμένος χρήστης πρέπει να μπορεί να ψηφίζει σε μηνύματα άλλων χρηστών.}
{Ο εγγεγραμμένος χρήστης πρέπει να μπορεί να υπερψηφίζει ή να καταψηφίζει μηνύματα άλλων χρηστών. Αυτό το επιτυγχάνει πατώντας τα παρακείμενα κουμπιά "+" ή "-" αντίστοιχα και επιβεβαιώνοντας τη συναλλαγή στο Ethereum (οι ψήφοι αποθηκεύονται εκεί). Η διαδικασία ισχύει και για την τροποποίηση ή την αφαίρεση μίας ψήφου από τον χρήστη.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{\label{srs:functional-srs-create-polls}}
{Ο εγγεγραμμένος χρήστης πρέπει να μπορεί να δημιουργεί ψηφοφορίες (polls).}
{Ο εγγεγραμμένος χρήστης πρέπει να μπορεί να δημιουργεί ψηφοφορίες. Αυτό το επιτυγχάνει πατώντας "Add Poll" στην οθόνη δημιουργία θέματος και συμπληρώνοντας τα απαραίτητα πεδία.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{\label{srs:functional-srs-vote-polls}}
{Ο εγγεγραμμένος χρήστης πρέπει να μπορεί να ψηφίζει σε ψηφοφορίες.}
{Ο εγγεγραμμένος χρήστης πρέπει να μπορεί να ψηφίζει σε ψηφοφορίες, σύμφωνα με τους εκάστοτε κανόνες.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{\label{srs:functional-srs-delete-local-data}}
{Ο χρήστης πρέπει να μπορεί να διαγράφει τα τοπικά δεδομένα.}
{Ο χρήστης πρέπει να μπορεί να διαγράφει τα τοπικά δεδομένα. Αυτό το επιτυγχάνει πατώντας στο κουμπί "Clear databases" του μενού και επιβεβαιώνοντας τη διαγραφή μέσω ενός pop-up διαλόγου.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{\label{srs:functional-srs-create-communities}}
{Ο χρήστης πρέπει να μπορεί να δημιουργεί υποκοινότητες.}
{Ο χρήστης πρέπει να μπορεί να δημιουργεί υποκοινότητες, μέσω κουμπιού της αρχικής οθόνης.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{\label{srs:functional-srs-assign-community-contract}}
{Κατά τη δημιουργία υποκοινότητας, ο χρήστης πρέπει να έχει τη δυνατότητα να ορίσει ένα contract που θα παρέχει προσαρμοσμένα tokens για αυτήν.}
{Κατά τη δημιουργία υποκοινότητας, ο χρήστης πρέπει να έχει τη δυνατότητα να ορίσει ένα contract που θα παρέχει προσαρμοσμένα tokens για αυτήν. Τα tokens αυτά θα διαμοιράζονται με τον τρόπο που επιθυμεί η κοινότητα και θα είναι εκείνα τα οποία θα καθορίζουν τους έγκυρους ψηφοφόρους της.}
{?}{TODO}
{?}{TODO}
\end{enumerate}
Η δεύτερη κατηγορία είναι αυτή των Μη Λειτουργικών Απαιτήσεων (ΜΛΑ). Περιλαμβάνει απαιτήσεις αρχιτεκτονικής σημασίας, οι οποίες καθορίζουν κριτήρια ή περιορισμούς του τρόπου λειτουργίας του συστήματος και σχετίζονται με χαρακτηριστικά όπως η αποδοτικότητα, η αξιοπίστία και η ευχρηστία του.
\begin{enumerate}[label=\textbf{<ΜΛΑ-\arabic*>}, leftmargin=\parindent, align=left, labelwidth=\parindent, labelsep=0pt]
\sysReqItem
{\label{srs:non-functional-srs-minimize-fees}}
{Τα fees για τη χρήση του Ethereum blockchain πρέπει να ελαχιστοποιούνται.}
{Τα fees που πρέπει να καταβάλλονται για τη χρήση του Ethereum blockchain εξαρτώνται άμεσα τόσο από τον όγκο των δεδομένων προς αποθήκευση, όσο και από τους κύκλους επεξεργασίας των smart contracts της εφαρμογής. Ως προς τα δεδομένα, οι προγραμματιστές θα πρέπει να μεριμνούν ώστε ο κύριος όγκος τους να αποθηκεύεται επί του IPFS, ενώ επί του blockchain να αποθηκεύονται μόνο όσα πραγματικά χρειάζονται. Ως προς την απαιτούμενη επεξεργαστική ισχύ, πρέπει να βελτιστοποιείται ο κώδικας των smart contracts, έτσι ώστε οι διάφορες λειτουργίες τους να εκτελούνται με τους λιγότερους δυνατούς επεξεργαστικούς κύκλους.}
{?}{TODO}
{?}{TODO}
\sysReqItem
{\label{srs:non-functional-srs-upgrade-contracts}}
{Τα contracts της εφαρμογής πρέπει να είναι αναβαθμίσιμα.}
{Τα contracts της εφαρμογής πρέπει μπορούν να αναβαθμιστούν, έτσι ώστε να μπορούν να προστίθενται λειτουργίες και να διορθώνονται σφάλματα. Η αναβαθμισιμότητά τους θα πρέπει να επιτυγχάνεται με μεθόδους που να μην υπονομεύουν τη λειτουργικότητα των προηγούμενων εκδόσεων.}
{?}{TODO}
{?}{TODO}
\end{enumerate}

1
chapters/3.application-design/3.3.use-cases.tex

@ -1 +0,0 @@
\section{Σενάρια χρήσης}

15
chapters/3.application-design/3.4.use-cases.tex

@ -0,0 +1,15 @@
\section{Σενάρια χρήσης} \label{section:3-4-use-cases}
Βασικό μέρος της σχεδίασης της πλατφόρμας ήταν η καταγραφή των απαιτήσεων η οποία έγινε στο προηγούμενο κεφάλαιο (\ref{section:3-3-requirements}) καθώς και η σχεδίαση και ανάπτυξη των σεναρίων χρήσης. Τα σενάρια χρήσης αντιστοιχίζουν πιθανές ενέργειες των χρηστών με αποκρίσεις του συστήματος. Μέσω της αντιστοίχισης αυτής παρουσιάζεται η λειτουργικότητα του συστήματος και περιγράφονται τόσο οι λειτουργικές όσο και οι μη λειτουργικές απαιτήσεις του συστήματος.
Παρατίθενται εδώ τα σενάρια χρήσης που δίνουν τις απαραίτητες πληροφορίες για την κατανόηση της λειτουργίας του συστήματος.
\input{chapters/3.application-design/3.4.use-cases/3.4.1.use-case-sign-up}
\input{chapters/3.application-design/3.4.use-cases/3.4.2.use-case-sign-in}
\input{chapters/3.application-design/3.4.use-cases/3.4.3.use-case-create-topic}
\input{chapters/3.application-design/3.4.use-cases/3.4.4.use-case-fetch-topic}
\input{chapters/3.application-design/3.4.use-cases/3.4.5.use-case-create-post}
\input{chapters/3.application-design/3.4.use-cases/3.4.6.use-case-modify-post}
\input{chapters/3.application-design/3.4.use-cases/3.4.7.use-case-vote-in-poll}
\input{chapters/3.application-design/3.4.use-cases/3.4.8.use-case-vote-post}
\input{chapters/3.application-design/3.4.use-cases/3.4.9.delete-local-data}

78
chapters/3.application-design/3.4.use-cases/3.4.1.use-case-sign-up.tex

@ -0,0 +1,78 @@
% ===== =====
% Use case 1
% ===== =====
\subsection{Σενάριο χρήσης 1: Εγγραφή χρήστη} \label{subsection:3-4-use-case-signup}
Το σενάριο χρήσης 1, <ΣΧ-1>, περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για την εγγραφή ενός χρήστη στο σύστημα. Στους πίνακες \ref{table:3-4-use-case-sign-up} και \ref{table:3-4-use-case-sign-up-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-1> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-4-use-case-sign-up-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής.
\useCaseTable
{Εγγράφομαι στο σύστημα}
{Στόχος του σεναρίου χρήσης είναι ο επισκέπτης να μπορεί να εγγραφεί στο σύστημα ως χρήστης.}
{\ref{srs:functional-srs-sign-up}, \ref{srs:functional-srs-create-user-databases}}
{\ref{srs:non-functional-srs-minimize-fees}}
{Ο επισκέπτης πατάει το κουμπί εγγραφή.}
{Ο επισκέπτης πρέπει να έχει ανοίξει την σελίδα της εφαρμογής.}
{Σενάριο χρήσης 1, εγγραφή χρήστη στο σύστημα.}
{\label{table:3-4-use-case-sign-up}}
% ===== Base flow =====
\useCaseBaseFlowTable
{
1 & Ο χρήστης πατάει το κουμπί εγγραφή. & Το σύστημα εμφανίζει την φόρμα ``Εγγραφή Χρήστη''. \\ [0.5ex]
\midrule
2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα εισάγει νέο χρήστη στο blockchain. \\ [0.5ex]
\midrule
3 & - & Το σύστημα δημιουργεί τις προσωπικές βάσεις βάσεις δεδομένων OrbitDb του χρήστη. \\ [0.5ex]
\midrule
4 & - & Το σύστημα εμφανίζει την φόρμα ``Πληροφορίες Χρήστη''. \\ [0.5ex]
\midrule
5 & Ο χρήστης συμπληρώνει τις προσωπικές του πληροφορίες και πατάει το κουμπί ``Υποβολή''. & Το σύστημα εισάγει τις πληροφορίες χρήστη στην προσωπική του βάση OrbitDb. \\ [0.5ex]
}
{Το σύστημα μεταβαίνει στην αρχική σελίδα της εφαρμογής.}
{Σενάριο χρήσης 1 - Βασική ροή}
{\label{table:3-4-use-case-sign-up-base-flow}}
\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}
% ===== Alternate flows =====
Το <ΣΧ-1> περιέχει επίσης τρεις εναλλακτικές ροές που μπορεί να προκύψουν βάσει των επιλογών του χρήστη και οι οποίες περιγράφονται στους πίνακες \ref{table:3-4-use-case-sign-up-alternate-flow-1}, \ref{table:3-4-use-case-sign-up-alternate-flow-2} και \ref{table:3-4-use-case-sign-up-alternate-flow-3}.
\useCaseAlternateFlowTable
{1}
{Τα στοιχεία χρήστη είναι λανθασμένα.}
{Εφόσον ο χρήστης στη γραμμή 2 δεν συμπληρώσει το πεδίο ονόματος χρήστη ή συμπληρώσει ένα όνομα χρήστη το οποίο είναι ήδη σε χρήση στο σύστημα, το σύστημα πρέπει να επιστρέψει σχετικό μήνυμα σφάλματος.}
{
1 & - & Το σύστημα εμφανίζει μήνυμα σφάλματος.
}
{Το σύστημα επιστρέφει στη γραμμή 1 της βασικής ροής.}
{Σενάριο χρήσης 1 - Εναλλακτική ροή 1}
{\label{table:3-4-use-case-sign-up-alternate-flow-1}}
\useCaseAlternateFlowTable
{2}
{Ο χρήστης πατάει το κουμπί ``Άκυρο''.}
{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει ``Άκυρο'' το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.}
{
1 & Ο χρήστης πατάει το κουμπί ``Άκυρο'' & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.
}
{Το σενάριο χρήσης τερματίζεται.}
{Σενάριο χρήσης 1 - Εναλλακτική ροή 2}
{\label{table:3-4-use-case-sign-up-alternate-flow-2}}
\useCaseAlternateFlowTable
{3}
{Ο χρήστης πατάει το κουμπί ``Παράληψη''.}
{Εφόσον ο χρήστης στη γραμμή 5 της Βασικής Ροής επιλέξει ``Παράληψη'' το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.}
{
1 & Ο χρήστης πατάει το κουμπί ``Παράληψη'' & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.
}
{Το σενάριο χρήσης τερματίζεται.}
{Σενάριο χρήσης 1 - Εναλλακτική ροή 3}
{\label{table:3-4-use-case-sign-up-alternate-flow-3}}

35
chapters/3.application-design/3.4.use-cases/3.4.2.use-case-sign-in.tex

@ -0,0 +1,35 @@
% ===== =====
% Use case 1
% ===== =====
\subsection{Σενάριο χρήσης 2: Σύνδεση χρήστη} \label{subsection:3-4-use-case-signin}
Το σενάριο χρήσης 2, <ΣΧ-2>, περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για την σύνδεση ενός χρήστη στο σύστημα. Στους πίνακες \ref{table:3-4-use-case-sign-in} και \ref{table:3-4-use-case-sign-in-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-2> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-4-use-case-sign-in-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής.
\useCaseTable
{Συνδέομαι στο σύστημα}
{Στόχος του σεναρίου χρήσης είναι ο χρήστης να συνδέεται αυτόματα στο σύστημα.}
{\ref{srs:functional-srs-sign-in}}
{-}
{-}
{Ο χρήστης πρέπει να έχει ανοίξει την σελίδα της εφαρμογής.}
{Σενάριο χρήσης 2, σύνδεση χρήστη στο σύστημα.}
{\label{table:3-4-use-case-sign-in}}
% ===== Base flow =====
\useCaseBaseFlowTable
{
1 & - & Το σύστημα ανακτά τις πληροφορίες του χρήστη από το blockchain. \\ [0.5ex]
\midrule
2 & - & Το σύστημα δημιουργεί τις προσωπικές βάσεις βάσεις δεδομένων OrbitDb του χρήστη. \\ [0.5ex]
}
{Το σύστημα παραμένει στην αρχική σελίδα της εφαρμογής.}
{Σενάριο χρήσης 2 - Βασική ροή}
{\label{table:3-4-use-case-sign-in-base-flow}}
\begin{figure}[H]
\centering
\input{tikz/chapter-3/3-4-use-case-sign-in-sequence-diagram}
\caption{Σενάριο χρήσης 2 - Διάγραμμα βασικής ροής}
\label{figure:3-4-use-case-sign-in-base-flow-sequence-diagram}
\end{figure}

74
chapters/3.application-design/3.4.use-cases/3.4.3.use-case-create-topic.tex

@ -0,0 +1,74 @@
% ===== =====
% Use case 3
% ===== =====
\subsection{Σενάριο χρήσης 3: Δημιουργία νέου θέματος} \label{subsection:3-4-use-case-create-topic}
Το σενάριο χρήσης 3, <ΣΧ-3>, περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για την δημιουργία ενός θέματος. Στους πίνακες \ref{table:3-4-use-case-create-topic} και \ref{table:3-4-use-case-create-topic-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-3> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-4-use-case-create-topic-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής.
\useCaseTable
{Δημιουργώ νέο θέμα}
{Στόχος του σεναρίου χρήσης είναι ο χρήστης να μπορεί να δημιουργήσει νέο θέμα.}
{\ref{srs:functional-srs-create-topic}, \ref{srs:functional-srs-create-polls}}
{\ref{srs:non-functional-srs-minimize-fees}}
{Ο χρήστης πατάει το κουμπί δημιουργίας νέου θέματος.}
{Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στην αρχική σελίδα.}
{Σενάριο χρήσης 3, δημιουργία νέου θέματος.}
{\label{table:3-4-use-case-create-topic}}
% ===== Base flow =====
\useCaseBaseFlowTable
{
1 & Ο χρήστης πατάει το κουμπί δημιουργίας νέου θέματος. & Το σύστημα εμφανίζει την φόρμα ``Δημιουργία Θέματος''. \\ [0.5ex]
\midrule
2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα εισάγει νέο θέμα στο blockchain. \\ [0.5ex]
\midrule
3 & - & Το σύστημα εισάγει τις πληροφορίες του θέματος στην προσωπική βάση OrbitDb του χρήστη. \\ [0.5ex]
}
{Το σύστημα μεταβαίνει στην σελίδα του νέου θέματος.}
{Σενάριο χρήσης 3 - Βασική ροή}
{\label{table:3-4-use-case-create-topic-base-flow}}
\begin{figure}[H]
\centering
\input{tikz/chapter-3/3-4-use-case-create-topic-sequence-diagram}
\caption{Σενάριο χρήσης 3 - Διάγραμμα βασικής ροής}
\label{figure:3-4-use-case-create-topic-base-flow-sequence-diagram}
\end{figure}
% ===== Alternate flow =====
Το <ΣΧ-3> περιέχει επίσης δύο εναλλακτικές ροές που μπορεί να προκύψουν βάσει των επιλογών του χρήστη και οι οποίες περιγράφονται στους πίνακες \ref{table:3-4-use-case-create-topic-alternate-flow-1} και \ref{table:3-4-use-case-create-topic-alternate-flow-2}. Η εναλλακτική ροή 1 φαίνεται επίσης στο σχήμα \ref{figure:3-4-use-case-create-topic-alternate-flow-1-sequence-diagram} όπου παρουσιάζεται το διάγραμμα ροής της.
\useCaseAlternateFlowTable
{1}
{Ο χρήστης δημιουργεί ψηφοφορία.}
{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει ``Προσθήκη Ψηφοφορίας'' το σύστημα ανανεώνει την σελίδα προσθέτοντας τα επιπλέον πεδία της φόρμας ``Δημιουργία Ψηφοφορίας''.}
{
1 & Ο χρήστης, αφού συμπληρώσει τη φόρμα ``Δημιουργία Θέματος'', πατάει το κουμπί ``Προσθήκη ψηφοφορίας'' & Το σύστημα ανανεώνει τη σελίδα με τα πεδία της φόρμας ``Δημιουργία Ψηφοφορίας''. \\ [0.5ex]
\midrule
2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα εισάγει το νέο θέμα καθώς και τη νέα ψηφοφορία στο blockchain. \\ [0.5ex]
\midrule
3 & - & Το σύστημα εισάγει τις πληροφορίες του θέματος και της ψηφοφορίας στις προσωπικές βάσεις OrbitDb του χρήστη.
}
{Το σύστημα μεταβαίνει στην σελίδα του νέου θέματος.}
{Σενάριο χρήσης 3 - Εναλλακτική ροή 1}
{\label{table:3-4-use-case-create-topic-alternate-flow-1}}
\begin{figure}[H]
\centering
\input{tikz/chapter-3/3-4-use-case-create-topic-alternate-flow-1-sequence-diagram}
\caption{Σενάριο χρήσης 3 - Διάγραμμα εναλλακτικής ροής 1}
\label{figure:3-4-use-case-create-topic-alternate-flow-1-sequence-diagram}
\end{figure}
\useCaseAlternateFlowTable
{2}
{Ο χρήστης πατάει το κουμπί ``Άκυρο''.}
{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής ή στη γραμμή 2 της Εναλλακτικής Ροής 1 επιλέξει ``Άκυρο'' το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.}
{
1 & Ο χρήστης πατάει το κουμπί ``Άκυρο'' & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.
}
{Το σενάριο χρήσης τερματίζεται.}
{Σενάριο χρήσης 3 - Εναλλακτική ροή 2}
{\label{table:3-4-use-case-create-topic-alternate-flow-2}}

60
chapters/3.application-design/3.4.use-cases/3.4.4.use-case-fetch-topic.tex

@ -0,0 +1,60 @@
% ===== =====
% Use case 4
% ===== =====
\subsection{Σενάριο χρήσης 4: Ανάκτηση θέματος} \label{subsection:3-4-use-case-fetch-topic}
Το σενάριο χρήσης 4, <ΣΧ-4>, περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για την ανάκτηση ενός θέματος. Στους πίνακες \ref{table:3-4-use-case-fetch-topic} και \ref{table:3-4-use-case-fetch-topic-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-4> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-4-use-case-fetch-topic-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής.
\useCaseTable
{Ανακτώ ένα θέμα}
{Στόχος του σεναρίου χρήσης είναι ο επισκέπτης ή ο χρήστης να μπορεί να ανακτήσει ένα θέμα.}
{\ref{srs:functional-srs-browse-topics}}
{-}
{Ο επισκέπτης ή χρήστης πατάει σε ένα από τα θέματα.}
{Ο επισκέπτης ή χρήστης πρέπει να έχει ανοίξει την σελίδα της εφαρμογής.}
{Σενάριο χρήσης 4, ανάκτηση θέματος.}
{\label{table:3-4-use-case-fetch-topic}}
% ===== Base flow =====
\useCaseBaseFlowTable
{
1 & Ο χρήστης πατάει σε ένα από τα θέματα της λίστας. & Το σύστημα ανακτά τις πληροφορίες του θέματος από το blockchain. \\ [0.5ex]
\midrule
2 & - & Το σύστημα ανακτά τα μηνύματα του θέματος αντιγράφοντας τις προσωπικές βάσεις OrbitDb των συγγραφέων. \\ [0.5ex]
}
{Το σύστημα μεταβαίνει στην σελίδα του θέματος.}
{Σενάριο χρήσης 4 - Βασική ροή}
{\label{table:3-4-use-case-fetch-topic-base-flow}}
\begin{figure}[H]
\centering
\input{tikz/chapter-3/3-4-use-case-fetch-topic-sequence-diagram}
\caption{Σενάριο χρήσης 4 - Διάγραμμα βασικής ροής}
\label{figure:3-4-use-case-fetch-topic-base-flow-sequence-diagram}
\end{figure}
% ===== Alternate flow =====
Το <ΣΧ-4> περιέχει επίσης μία εναλλακτική ροή που μπορεί να προκύψει βάσει των επιλογών του χρήστη και η οποία περιγράφεται στον πίνακα \ref{table:3-4-use-case-fetch-topic-alternate-flow-1}. Η εναλλακτική ροή 1 φαίνεται επίσης στο σχήμα \ref{figure:3-4-use-case-fetch-topic-alternate-flow-1-sequence-diagram} όπου παρουσιάζεται το διάγραμμα ροής της.
\useCaseAlternateFlowTable
{1}
{Το θέμα περιέχει ψηφοφορία.}
{Εφόσον το θέμα που ανακτήθηκε στη γραμμή 1 της Βασικής Ροής περιέχει ψηφοφορία ανακτώνται οι πληροφορίες της.}
{
1 & - & Το σύστημα ανακτά τα μηνύματα του θέματος αντιγράφοντας τις προσωπικές βάσεις OrbitDb των συγγραφέων. \\ [0.5ex]
2 & - & Το σύστημα ανακτά την ψηφοφορία από το blockchain. \\ [0.5ex]
3 & - & Το σύστημα ανακτά τις πληροφορίες της ψηφοφορίας αντιγράφοντας την προσωπική βάση OrbitDb του συγγραφέα. \\ [0.5ex]
4 & - & Το σύστημα επιβεβαιώνει τις πληροφορίες της ψηφοφορίας με βάση το hash που έχει ανακτηθεί από το blockchain. \\ [0.5ex]
}
{Το σενάριο χρήσης τερματίζεται.}
{Σενάριο χρήσης 4 - Εναλλακτική ροή 1}
{\label{table:3-4-use-case-fetch-topic-alternate-flow-1}}
\begin{figure}[H]
\centering
\input{tikz/chapter-3/3-4-use-case-fetch-topic-alternate-flow-1-sequence-diagram}
\caption{Σενάριο χρήσης 4 - Διάγραμμα εναλλακτικής ροής 1}
\label{figure:3-4-use-case-fetch-topic-alternate-flow-1-sequence-diagram}
\end{figure}

52
chapters/3.application-design/3.4.use-cases/3.4.5.use-case-create-post.tex

@ -0,0 +1,52 @@
% ===== =====
% Use case 5
% ===== =====
\subsection{Σενάριο χρήσης 5: Δημιουργία νέου μηνύματος} \label{subsection:3-4-use-case-create-post}
Το σενάριο χρήσης 5, <ΣΧ-5>, περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για την δημιουργία ενός μηνύματος. Στους πίνακες \ref{table:3-4-use-case-create-post} και \ref{table:3-4-use-case-create-post-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-5> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-4-use-case-create-post-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής.
\useCaseTable
{Δημιουργώ νέο μήνυμα}
{Στόχος του σεναρίου χρήσης είναι ο χρήστης να μπορεί να δημιουργήσει νέο μήνυμα.}
{\ref{srs:functional-srs-create-post}}
{\ref{srs:non-functional-srs-minimize-fees}}
{Ο χρήστης πατάει το κουμπί δημιουργίας νέου μηνύματος.}
{Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στην σελίδα ενός θέματος.}
{Σενάριο χρήσης 5, δημιουργία νέου μηνύματος.}
{\label{table:3-4-use-case-create-post}}
% ===== Base flow =====
\useCaseBaseFlowTable
{
1 & Ο χρήστης πατάει το κουμπί δημιουργίας νέου μηνύματος. & Το σύστημα εμφανίζει την φόρμα ``Δημιουργία Μηνύματος''. \\ [0.5ex]
\midrule
2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα εισάγει νέο μήνυμα στο blockchain. \\ [0.5ex]
\midrule
3 & - & Το σύστημα εισάγει τις πληροφορίες του μηνύματος στην προσωπική βάση OrbitDb του χρήστη. \\ [0.5ex]
}
{Το σύστημα παραμένει στη σελίδα του θέματος εμφανίζοντας το νέο μήνυμα.}
{Σενάριο χρήσης 5 - Βασική ροή}
{\label{table:3-4-use-case-create-post-base-flow}}
\begin{figure}[H]
\centering
\input{tikz/chapter-3/3-4-use-case-create-post-sequence-diagram}
\caption{Σενάριο χρήσης 5 - Διάγραμμα βασικής ροής}
\label{figure:3-4-use-case-create-post-base-flow-sequence-diagram}
\end{figure}
% ===== Alternate flow =====
Το <ΣΧ-5> περιέχει επίσης μία εναλλακτική ροή που μπορεί να προκύψει βάσει των επιλογών του χρήστη και η οποία περιγράφεται στον πίνακα \ref{table:3-4-use-case-create-post-alternate-flow-1}.
\useCaseAlternateFlowTable
{1}
{Ο χρήστης πατάει το κουμπί ``Άκυρο''.}
{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει ``Άκυρο'' το σύστημα επιστρέφει στη σελίδα του θέματος.}
{
1 & Ο χρήστης πατάει το κουμπί ``Άκυρο'' & Το σύστημα επιστρέφει στη σελίδα του θέματος.
}
{Το σενάριο χρήσης τερματίζεται.}
{Σενάριο χρήσης 5 - Εναλλακτική ροή 1}
{\label{table:3-4-use-case-create-post-alternate-flow-1}}

50
chapters/3.application-design/3.4.use-cases/3.4.6.use-case-modify-post.tex

@ -0,0 +1,50 @@
% ===== =====
% Use case 6
% ===== =====
\subsection{Σενάριο χρήσης 6: Τροποποίηση μηνύματος} \label{subsection:3-4-use-case-modify-post}
Το σενάριο χρήσης 6, <ΣΧ-6>, περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για τη τροποποίηση ενός μηνύματος. Στους πίνακες \ref{table:3-4-use-case-modify-post} και \ref{table:3-4-use-case-modify-post-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-6> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-4-use-case-modify-post-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής.
\useCaseTable
{Τροποποιώ ένα μήνυμα}
{Στόχος του σεναρίου χρήσης είναι ο χρήστης να μπορεί να τροποποιήσει τα μηνύματά του.}
{\ref{srs:functional-srs-modify-post}}
{-}
{Ο χρήστης πατάει το κουμπί τροποποίησης του μηνύματος.}
{Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στην σελίδα του θέματος που περιέχει το μήνυμά του.}
{Σενάριο χρήσης 6, τροποποίηση μηνύματος.}
{\label{table:3-4-use-case-modify-post}}
% ===== Base flow =====
\useCaseBaseFlowTable
{
1 & Ο χρήστης πατάει το κουμπί τροποποίησης του μηνύματος. & Το σύστημα εμφανίζει την φόρμα ``Τροποποίηση Μηνύματος''. \\ [0.5ex]
\midrule
2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα τροποποιεί τις πληροφορίες του μηνύματος στην προσωπική βάση OrbitDb του χρήστη. \\ [0.5ex]
}
{Το σύστημα παραμένει στη σελίδα του θέματος εμφανίζοντας το τροποποιημένο μήνυμα.}
{Σενάριο χρήσης 6 - Βασική ροή}
{\label{table:3-4-use-case-modify-post-base-flow}}
\begin{figure}[H]
\centering
\input{tikz/chapter-3/3-4-use-case-modify-post-sequence-diagram}
\caption{Σενάριο χρήσης 6 - Διάγραμμα βασικής ροής}
\label{figure:3-4-use-case-modify-post-base-flow-sequence-diagram}
\end{figure}
% ===== Alternate flow =====
Το <ΣΧ-6> περιέχει επίσης μία εναλλακτική ροή που μπορεί να προκύψει βάσει των επιλογών του χρήστη και η οποία περιγράφεται στον πίνακα \ref{table:3-4-use-case-modify-post-alternate-flow-1}.
\useCaseAlternateFlowTable
{1}
{Ο χρήστης πατάει το κουμπί ``Άκυρο''.}
{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει ``Άκυρο'' το σύστημα επιστρέφει στη σελίδα του θέματος.}
{
1 & Ο χρήστης πατάει το κουμπί ``Άκυρο'' & Το σύστημα επιστρέφει στη σελίδα του θέματος.
}
{Το σενάριο χρήσης τερματίζεται.}
{Σενάριο χρήσης 6 - Εναλλακτική ροή 1}
{\label{table:3-4-use-case-modify-post-alternate-flow-1}}

33
chapters/3.application-design/3.4.use-cases/3.4.7.use-case-vote-in-poll.tex

@ -0,0 +1,33 @@
% ===== =====
% Use case 7
% ===== =====
\subsection{Σενάριο χρήσης 7: Ψήφιση σε ψηφοφορία} \label{subsection:3-4-use-case-vote-in-poll}
Το σενάριο χρήσης 7, <ΣΧ-7>, περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για την ψήφιση σε μία ψηφοφορία. Στους πίνακες \ref{table:3-4-use-case-vote-in-poll} και \ref{table:3-4-use-case-vote-in-poll-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-7> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-4-use-case-vote-in-poll-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής.
\useCaseTable
{Ψηφίζω σε ψηφοφορία}
{Στόχος του σεναρίου χρήσης είναι ο χρήστης να μπορεί να ψηφίσει σε μία ψηφοφορία.}
{\ref{srs:functional-srs-vote-polls}}
{\ref{srs:non-functional-srs-minimize-fees}}
{Ο χρήστης πατάει το κουμπί ψηφοφορίας.}
{Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στην σελίδα ενός θέματος το οποίο περιλαμβάνει ψηφοφορία.}
{Σενάριο χρήσης 7, ψήφιση σε ψηφοφορία.}
{\label{table:3-4-use-case-vote-in-poll}}
% ===== Base flow =====
\useCaseBaseFlowTable
{
1 & Ο χρήστης πατάει το κουμπί της επιλογής που επιθυμεί να ψηφίσει και πατάει το κουμπί ``Υποβολή''. & Το σύστημα εισάγει νέα ψήφο στο blockchain. \\ [0.5ex]
}
{Το σύστημα ανανεώνει τις πληροφορίες της ψηφοφορίας.}
{Σενάριο χρήσης 7 - Βασική ροή}
{\label{table: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{Σενάριο χρήσης 7 - Διάγραμμα βασικής ροής}
\label{figure:3-4-use-case-vote-in-poll-base-flow-sequence-diagram}
\end{figure}

33
chapters/3.application-design/3.4.use-cases/3.4.8.use-case-vote-post.tex

@ -0,0 +1,33 @@
% ===== =====
% Use case 8
% ===== =====
\subsection{Σενάριο χρήσης 8: Ψήφιση μηνύματος} \label{subsection:3-4-use-case-vote-post}
Το σενάριο χρήσης 8, <ΣΧ-8>, περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για την ψήφιση σε ένα μήνυμα. Στους πίνακες \ref{table:3-4-use-case-vote-post} και \ref{table:3-4-use-case-vote-post-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-8> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-4-use-case-vote-post-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής.
\useCaseTable
{Ψηφίζω σε μήνυμα}
{Στόχος του σεναρίου χρήσης είναι ο χρήστης να μπορεί να υπερψηφίσει ή καταψηφίσει ένα μήνυμα.}
{\ref{srs:functional-srs-vote-posts}}
{\ref{srs:non-functional-srs-minimize-fees}}
{Ο επισκέπτης πατάει το κουμπί υπερψήφισης ή καταψήφισης.}
{Ο χρήστης να έχει συνδεθεί στην εφαρμογή και να βρίσκεται στην σελίδα ενός θέματος το οποίο περιλαμβάνει τουλάχιστον ένα μήνυμα το οποίο δεν έχει δημιουργήσει ο ίδιος.}
{Σενάριο χρήσης 8, ψήφιση μηνύματος.}
{\label{table:3-4-use-case-vote-post}}
% ===== Base flow =====
\useCaseBaseFlowTable
{
1 & Ο χρήστης πατάει στο κουμπί υπερψήφισης μηνύματος. & Το σύστημα εισάγει νέα ψήφο μηνύματος στο blockchain. \\ [0.5ex]
}
{Το σύστημα ανανεώνει τις ψήφους του μηνύματος.}
{Σενάριο χρήσης 8 - Βασική ροή}
{\label{table: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{Σενάριο χρήσης 8 - Διάγραμμα βασικής ροής}
\label{figure:3-4-use-case-vote-post-base-flow-sequence-diagram}
\end{figure}

35
chapters/3.application-design/3.4.use-cases/3.4.9.delete-local-data.tex

@ -0,0 +1,35 @@
% ===== =====
% Use case 9
% ===== =====
\subsection{Σενάριο χρήσης 9: Διαγραφή τοπικών δεδομένων} \label{subsection:3-4-use-case-delete-local-data}
Το σενάριο χρήσης 9, <ΣΧ-9>, περιγράφει τις διαδοχικές ενέργειες που εκτελούνται για τη διαγραφεί των τοπικών δεδομένων. Στους πίνακες \ref{table:3-4-use-case-delete-local-data} και \ref{table:3-4-use-case-delete-local-data-base-flow} παρατίθενται οι βασικές πληροφορίες του <ΣΧ-9> και οι ενέργειες της βασικής ροής αντίστοιχα, ενώ στο σχήμα \ref{figure:3-4-use-case-delete-local-data-base-flow-sequence-diagram} φαίνεται το διάγραμμα της βασικής ροής.
\useCaseTable
{Διαγράφω τα τοπικά δεδομένα}
{Στόχος του σεναρίου χρήσης είναι ο επισκέπτης να μπορεί να διαγράψει τα τοπικά δεδομένα που αποθηκεύονται στο σύστημά του από την εφαρμογή.}
{\ref{srs:functional-srs-delete-local-data}}
{-}
{Ο επισκέπτης πατάει το κουμπί διαγραφής των τοπικών δεδομένων.}
{Ο επισκέπτης πρέπει να έχει ανοίξει την σελίδα της εφαρμογής.}
{Σενάριο χρήσης 9, διαγραφή τοπικών δεδομένων.}
{\label{table:3-4-use-case-delete-local-data}}
% ===== Base flow =====
\useCaseBaseFlowTable
{
1 & Ο επισκέπτης πατάει το κουμπί διαγραφής των τοπικών δεδομένων. & Το σύστημα εμφανίζει την φόρμα ``Επιβεβαίωση Διαγραφής Τοπικών Δεδομένων''. \\ [0.5ex]
\midrule
2 & Ο επισκέπτης συμπληρώνει το πεδίο και πατάει το κουμπί ``Υποβολή''. & Το σύστημα διαγράφει όλες τις τοπικές βάσεις OrbitDb που χρησιμοποιούνται από την εφαρμογή. \\ [0.5ex]
}
{Το σύστημα παραμένει πραγματοποιεί ανανέωση της σελίδας.}
{Σενάριο χρήσης 9 - Βασική ροή}
{\label{table:3-4-use-case-delete-local-data-base-flow}}
\begin{figure}[H]
\centering
\input{tikz/chapter-3/3-4-use-case-delete-local-data-sequence-diagram}
\caption{Σενάριο χρήσης 9 - Διάγραμμα βασικής ροής}
\label{figure:3-4-use-case-delete-local-data-base-flow-sequence-diagram}
\end{figure}

2
chapters/3.application-design/3.4.technology-stack.tex → chapters/3.application-design/3.5.technology-stack.tex

@ -1,4 +1,4 @@
\section{Τεχνολογίες} \section{Τεχνολογίες} \label{section:3-5-technologies}
\subsection{Ethereum} \subsection{Ethereum}

1
chapters/3.application-design/3.6.architecture.design.tex

@ -1 +0,0 @@
\section{Αρχιτεκτονική}

2
chapters/3.application-design/3.5.implementation-methodology-specification.tex → chapters/3.application-design/3.6.implementation-methodology-specification.tex

@ -1,4 +1,4 @@
\section{Προδιαγραφή μεθόδου υλοποίησης και χρονοπρογραμματισμός} \section{Προδιαγραφή μεθόδου υλοποίησης και χρονοπρογραμματισμός} \label{section:3-6-implementation-methodology-specification}
\subsection{Προδιαγραφή κύκλων} \subsection{Προδιαγραφή κύκλων}

1
chapters/3.application-design/3.7.architecture.design.tex

@ -0,0 +1 @@
\section{Αρχιτεκτονική} \label{section:3-7-architecture-design}

13
custom-commands/custom-enumitem.tex

@ -0,0 +1,13 @@
% Centered figure inside an item list
\newenvironment{enumitemcenteredfigure}
{
\begin{minipage}{\linewidth}
\centering
\begin{figure}[H]
\centering
}
{
\end{figure}
\end{minipage}
\medskip
}

10
custom-commands/custom-listings.tex

@ -0,0 +1,10 @@
\newtcbinputlisting{\simplelisting}[2][]{
listing file={assets/code/#2},
title={},
listing only,
boxrule=1pt,
minted language=javascript,
minted style=default,
minted options={breaklines, breaksymbol={}},
#1
}

9
custom-commands/srs-commands.tex

@ -0,0 +1,9 @@
\newcommand{\sysReqItem}[7] {
\item #1 \ #2
\begin{itemize}[label={}, leftmargin=0pt]
\item \textbf{Περιγραφή}: #3
\item \textbf{User Priority (#4/5)}: #5
\item \textbf{Technical Priority (#6/5)}: #7
\end{itemize}
\medskip
}

61
custom-commands/use-case-commands.tex

@ -0,0 +1,61 @@
\newcommand{\useCaseTable}[8] {{
\begin{table}[H]
\begin{center}
\begin{tabularx}{\textwidth}{l X}
\toprule
\multicolumn{2}{c}{\textbf{#1}} \\ [0.5ex]
\midrule
Σύντομη περιγραφή & #2 \\ [0.5ex]
Αναφορά ΛΑ & #3 \\ [0.5ex]
Αναφορά ΜΛΑ & #4 \\ [0.5ex]
Πυροδότηση δραστηριότητας & #5 \\ [0.5ex]
Προϋπόθεση & #6 \\ [0.5ex]
\bottomrule
\end{tabularx}
\end{center}
\caption{#7}
#8
\end{table}
}}
\newcommand{\useCaseBaseFlowTable}[4] {{
\begin{table}[H]
\begin{center}
\begin{tabularx}{\textwidth}{p{2.25cm} X X}
\toprule
\multicolumn{3}{c}{\textbf{Βασική ροή}} \\ [0.5ex]
\midrule
\textbf{Γραμμή} & \textbf{Ενέργεια χρήστη συστήματος} & \textbf{Απάντηση Συστήματος} \\ [0.5ex]
\midrule
#1
\midrule
\textbf{Μετέπειτα κατάσταση:} & \multicolumn{2}{p{\dimexpr\textwidth-2\tabcolsep-0.8pt-2.25cm}}{#2} \\ [0.5ex]
\bottomrule
\end{tabularx}
\end{center}
\caption{#3}
#4
\end{table}
}}
\newcommand{\useCaseAlternateFlowTable}[7] {{
\begin{table}[H]
\begin{center}
\begin{tabularx}{\textwidth}{l X X}
\toprule
\multicolumn{3}{l}{\textbf{Εναλλακτική ροή {#1}:} {#2}} \\ [0.5ex]
\midrule
\multicolumn{3}{p{\dimexpr\textwidth-2\tabcolsep-0.8pt}}{{#3}} \\ [0.5ex]
\midrule
\textbf{Γραμμή} & \textbf{Ενέργεια χρήστη συστήματος} & \textbf{Απάντηση Συστήματος} \\ [0.5ex]
\midrule
#4 \\ [0.5ex]
\midrule
\multicolumn{3}{p{\dimexpr\textwidth-2\tabcolsep-0.8pt}}{{#5}} \\ [0.5ex]
\bottomrule
\end{tabularx}
\end{center}
\caption{#6}
#7
\end{table}
}}

12
packages.tex

@ -24,13 +24,23 @@
\usepackage{listings} %TODO: unused atm (remove?) \usepackage{listings} %TODO: unused atm (remove?)
\usepackage{tabularx} % Support for break lines inside table cells \usepackage{tabularx} % Support for break lines inside table cells
\usepackage{booktabs} % Useful table styling commands \usepackage{booktabs} % Useful table styling commands
\usepackage{minted} % Source code highlighting (make sure to add -shell-escape flag!)
\usepackage{tcolorbox} % Colored boxes
\tcbuselibrary{minted} % Make tcolorbox work with minted
% --- TikZ and UML diagrams
\usepackage{pgf-umlsd}
% --- Bibliography --- % --- Bibliography ---
\usepackage[sorting=none]{biblatex} % Make sure to have biber as default bibliography tool (e.g. in Texstudio's build configuration) \usepackage[sorting=none]{biblatex}
% --- Custom commands --- % --- Custom commands ---
\input{custom-commands/custom-title-page} \input{custom-commands/custom-title-page}
\input{custom-commands/custom-lists} \input{custom-commands/custom-lists}
\input{custom-commands/custom-listings}
\input{custom-commands/custom-enumitem}
\input{custom-commands/srs-commands}
\input{custom-commands/use-case-commands}
% --- Custom styles --- % --- Custom styles ---
\renewcommand{\arraystretch}{1.2} % Streches the table row height so text is not crammed between the lines \renewcommand{\arraystretch}{1.2} % Streches the table row height so text is not crammed between the lines

BIN
thesis.pdf

Binary file not shown.

19
tikz/chapter-3/3-4-use-case-create-post-sequence-diagram.tex

@ -0,0 +1,19 @@
\begin{sequencediagram}
\newthread{actor}{Actor}{}
\newinst[3]{concordia}{:Concordia}{}
\newinst[2]{eth}{:Ethereum}{}
\newinst[1]{orbit}{:OrbitDb}{}
\begin{call}{actor}{Create post}{concordia}{Post creation form}
\end{call}
\begin{call}{actor}{Submit}{concordia}{Updated topic page}
\begin{call}{concordia}{Create post}{eth}{New post ID}
\end{call}
\begin{call}{concordia}{Save post information}{orbit}{}
\end{call}
\end{call}
\end{sequencediagram}

28
tikz/chapter-3/3-4-use-case-create-topic-alternate-flow-1-sequence-diagram.tex

@ -0,0 +1,28 @@
\begin{sequencediagram}
\newthread{actor}{Actor}{}
\newinst[4]{concordia}{:Concordia}{}
\newinst[2]{eth}{:Ethereum}{}
\newinst[1]{orbit}{:OrbitDb}{}
\begin{call}{actor}{Create topic}{concordia}{Topic creation form}
\end{call}
\begin{call}{actor}{Add poll}{concordia}{Poll creation form}
\end{call}
\begin{call}{actor}{Submit}{concordia}{New topic-poll page}
\begin{call}{concordia}{Create topic}{eth}{New topic ID}
\end{call}
\begin{call}{concordia}{Add poll to topic}{eth}{}
\end{call}
\begin{call}{concordia}{Save topic information}{orbit}{}
\end{call}
\begin{call}{concordia}{Save poll information}{orbit}{}
\end{call}
\end{call}
\end{sequencediagram}

19
tikz/chapter-3/3-4-use-case-create-topic-sequence-diagram.tex

@ -0,0 +1,19 @@
\begin{sequencediagram}
\newthread{actor}{Actor}{}
\newinst[4]{concordia}{:Concordia}{}
\newinst[2]{eth}{:Ethereum}{}
\newinst[1]{orbit}{:OrbitDb}{}
\begin{call}{actor}{Create topic}{concordia}{Topic creation form}
\end{call}
\begin{call}{actor}{Submit}{concordia}{New topic page}
\begin{call}{concordia}{Create topic}{eth}{New topic ID}
\end{call}
\begin{call}{concordia}{Save topic information}{orbit}{}
\end{call}
\end{call}
\end{sequencediagram}

16
tikz/chapter-3/3-4-use-case-delete-local-data-sequence-diagram.tex

@ -0,0 +1,16 @@
\begin{sequencediagram}
\newthread{actor}{Actor}{}
\newinst[4]{concordia}{:Concordia}{}
\newinst[1]{eth}{:Ethereum}{}
\newinst[1]{orbit}{:OrbitDb}{}
\begin{call}{actor}{Delete local data}{concordia}{Delete confirmation form}
\end{call}
\begin{call}{actor}{Submit}{concordia}{}
\begin{call}{concordia}{Delete local DBs}{orbit}{}
\end{call}
\end{call}
\end{sequencediagram}

41
tikz/chapter-3/3-4-use-case-fetch-topic-alternate-flow-1-sequence-diagram.tex

@ -0,0 +1,41 @@
\begin{sequencediagram}
\newthread{actor}{Actor}{}
\newinst[2]{concordia}{:Concordia}{}
\newinst[2]{eth}{:Ethereum}{}
\newinst[1]{orbit}{:OrbitDb}{}
\begin{call}{actor}{Fetch topic}{concordia}{Topic}
\begin{call}{concordia}{Get topic}{eth}{Topic}
\end{call}
\begin{call}{concordia}{Get poll}{eth}{Poll}
\end{call}
\begin{call}{concordia}{Get topic post IDs}{eth}{Post IDs}
\end{call}
\begin{call}{concordia}{Get posts loop}{concordia}{Posts}
\begin{call}{concordia}{Get post}{eth}{Post}
\end{call}
\end{call}
\begin{call}{concordia}{Retrieve topic information}{orbit}{}
\end{call}
\begin{call}{concordia}{Retrieve poll information}{orbit}{}
\end{call}
\begin{call}{concordia}{Validate poll information}{concordia}{}
\end{call}
\begin{call}{concordia}{Retrieve posts information loop}{concordia}{Posts information}
\begin{call}{concordia}{Retrieve post information}{orbit}{}
\end{call}
\end{call}
\end{call}
\end{sequencediagram}

32
tikz/chapter-3/3-4-use-case-fetch-topic-sequence-diagram.tex

@ -0,0 +1,32 @@
\begin{sequencediagram}
\newthread{actor}{Actor}{}
\newinst[2]{concordia}{:Concordia}{}
\newinst[2]{eth}{:Ethereum}{}
\newinst[1]{orbit}{:OrbitDb}{}
\begin{call}{actor}{Fetch topic}{concordia}{Topic}
\begin{call}{concordia}{Get topic}{eth}{Topic}
\end{call}
\begin{call}{concordia}{Get topic post IDs}{eth}{Post IDs}
\end{call}
\begin{call}{concordia}{Get posts loop}{concordia}{Posts}
\begin{call}{concordia}{Get post}{eth}{Post}
\end{call}
\end{call}
\begin{call}{concordia}{Retrieve topic information}{orbit}{}
\end{call}
\begin{call}{concordia}{Retrieve posts information loop}{concordia}{Posts information}
\begin{call}{concordia}{Retrieve post information}{orbit}{}
\end{call}
\end{call}
\end{call}
\end{sequencediagram}

16
tikz/chapter-3/3-4-use-case-modify-post-sequence-diagram.tex

@ -0,0 +1,16 @@
\begin{sequencediagram}
\newthread{actor}{Actor}{}
\newinst[4]{concordia}{:Concordia}{}
\newinst[1]{eth}{:Ethereum}{}
\newinst[2]{orbit}{:OrbitDb}{}
\begin{call}{actor}{Modify post}{concordia}{Post modification form}
\end{call}
\begin{call}{actor}{Submit}{concordia}{Updated topic page}
\begin{call}{concordia}{Save modified post information}{orbit}{}
\end{call}
\end{call}
\end{sequencediagram}

16
tikz/chapter-3/3-4-use-case-sign-in-sequence-diagram.tex

@ -0,0 +1,16 @@
\begin{sequencediagram}
\newthread{actor}{Actor}{}
\newinst[2]{concordia}{:Concordia}{}
\newinst[2]{eth}{:Ethereum}{}
\newinst[1]{orbit}{:OrbitDb}{}
\begin{call}{actor}{Fetch page}{concordia}{}
\begin{call}{concordia}{Get user}{eth}{User information}
\end{call}
\begin{call}{concordia}{Create databases}{orbit}{}
\end{call}
\end{call}
\end{sequencediagram}

26
tikz/chapter-3/3-4-use-case-sign-up-sequence-diagram.tex

@ -0,0 +1,26 @@
\begin{sequencediagram}
\newthread{actor}{Actor}{}
\newinst[4]{concordia}{:Concordia}{}
\newinst[2]{eth}{:Ethereum}{}
\newinst[1]{orbit}{:OrbitDb}{}
\begin{call}{actor}{Sign up}{concordia}{Sign up form}
\end{call}
\begin{call}{actor}{Submit}{concordia}{Personal information form}
\begin{call}{concordia}{Create user}{eth}{New user ID}
\end{call}
\begin{call}{concordia}{Create databases}{orbit}{}
\end{call}
\end{call}
\begin{call}{actor}{Submit}{concordia}{Home page}
\begin{call}{concordia}{Save personal information}{orbit}{}
\end{call}
\end{call}
\end{sequencediagram}

12
tikz/chapter-3/3-4-use-case-vote-in-poll-sequence-diagram.tex

@ -0,0 +1,12 @@
\begin{sequencediagram}
\newthread{actor}{Actor}{}
\newinst[3]{concordia}{:Concordia}{}
\newinst[2]{eth}{:Ethereum}{}
\begin{call}{actor}{Submit poll vote}{concordia}{Updated topic page}
\begin{call}{concordia}{Add poll vote}{eth}{}
\end{call}
\end{call}
\end{sequencediagram}

12
tikz/chapter-3/3-4-use-case-vote-post-sequence-diagram.tex

@ -0,0 +1,12 @@
\begin{sequencediagram}
\newthread{actor}{Actor}{}
\newinst[3]{concordia}{:Concordia}{}
\newinst[2]{eth}{:Ethereum}{}
\begin{call}{actor}{Submit post vote}{concordia}{Updated topic page}
\begin{call}{concordia}{Add post vote}{eth}{}
\end{call}
\end{call}
\end{sequencediagram}
Loading…
Cancel
Save