diff --git a/assets/code/orbit-db-identity.js b/assets/code/orbit-db-identity.js new file mode 100644 index 0000000..8306a06 --- /dev/null +++ b/assets/code/orbit-db-identity.js @@ -0,0 +1,12 @@ +{ + _id: '', + // Auto-generated by OrbitDB + _publicKey: '', + signatures: { + //Allows the owner of id to prove they own the private key associated with publicKey + id: '', + //This links the two ids + publicKey: '' + }, + type: 'orbitdb' +} diff --git a/assets/figures/orbitdb-identity.png b/assets/figures/orbitdb-identity.png deleted file mode 100644 index ef6eeb0..0000000 Binary files a/assets/figures/orbitdb-identity.png and /dev/null differ diff --git a/bibliography/references.bib b/bibliography/references.bib index b33ee17..8645d0c 100644 --- a/bibliography/references.bib +++ b/bibliography/references.bib @@ -50,8 +50,7 @@ @article{2.5-bitcoin, author = {Nakamoto, Satoshi}, - year = {2009}, - month = {03}, + date = {2008-10-31}, title = {Bitcoin: A Peer-to-Peer Electronic Cash System}, journal = {Cryptography Mailing list at https://metzdowd.com} } diff --git a/chapters/2.theoretical-background/2.5.blockchain.tex b/chapters/2.theoretical-background/2.5.blockchain.tex index 3ffe821..7392a03 100644 --- a/chapters/2.theoretical-background/2.5.blockchain.tex +++ b/chapters/2.theoretical-background/2.5.blockchain.tex @@ -6,7 +6,7 @@ %TODO: add image like https://cdn.hackernoon.com/hn-images/1*qYKsqQ6aV-DgFD0REfcnig.png or https://ethereum.org/static/6f7d50fd4fab9f8abb94b5e610ade7e4/bf8c1/ethereum-blocks.png --- add that this is simplified -Ως προς την κυριότητα επί αυτού, το blockchain συνήθως\footnote{Υπάρχουν και κάποιες υλοποιήσεις ιδιωτικών blockchain που, όμως, δε θα μας απασχολήσουν.} δεν ελέγχεται από κάποια κεντρική οντότητα, αλλά διατηρείται από ένα δημόσιο P2P δίκτυο. Οι κόμβοι (nodes) του δικτύου συμμορφώνονται συλλογικά με ένα πρωτόκολλο συναίνεσης (consensus) για την επικοινωνία και την επικύρωση νέων μπλοκ. Για παράδειγμα, στο Bitcoin, το consensus επιτυγχάνεται μέσω ενός Proof of Work (PoW) αλγορίθμου, όπου οι κόμβοι (miners) ανταγωνίζονται ο ένας τον άλλον για το ποιος θα λύσει πρώτος ένα σύνθετο αλγοριθμικό πρόβλημα που συσχετίζεται με το εκάστοτε block. Αυτός που θα τα καταφέρει επιβραβεύεται για την επεξεργαστική ισχύ που δαπάνησε με ένα ποσό από bitcoin. Εκείνα είναι εν μέρει νέα νομίσματα που κόβονται ή "εξορύσσονται" εκείνη τη στιγμή (όπως ορίζεται από το πρωτόκολλο), αλλά και όσα τέλη (fees) κατέβαλαν οι κόμβοι για να πραγματοποιήσουν τις συναλλαγές του μπλοκ. Αξίζει να σημειωθεί πως δεν είναι αναγκαίο να διαθέτει κανείς ολόκληρο το blockchain (το οποίο είναι ογκώδες) - δηλαδή έναν πλήρη κόμβο - για να επικοινωνήσει με το δίκτυο, αλλά αρκεί ένας light node που απλά αναμεταδίδει την συναλλαγή που επιθυμεί να πραγματοποιήσει ο χρήστης. +Ως προς την κυριότητα επί αυτού, το blockchain συνήθως\footnote{Υπάρχουν και κάποιες υλοποιήσεις ιδιωτικών blockchain που, όμως, δε θα μας απασχολήσουν.} δεν ελέγχεται από κάποια κεντρική οντότητα, αλλά διατηρείται από ένα δημόσιο P2P δίκτυο. Οι κόμβοι (nodes) του δικτύου συμμορφώνονται συλλογικά με ένα πρωτόκολλο συναίνεσης (consensus) για την επικοινωνία και την επικύρωση νέων μπλοκ. Για παράδειγμα, στο Bitcoin, το consensus επιτυγχάνεται μέσω ενός Proof of Work (PoW) αλγορίθμου, όπου οι κόμβοι (miners) ανταγωνίζονται ο ένας τον άλλον για το ποιος θα λύσει πρώτος ένα σύνθετο αλγοριθμικό πρόβλημα που συσχετίζεται με το εκάστοτε block. Αυτός που θα τα καταφέρει επιβραβεύεται για την επεξεργαστική ισχύ που δαπάνησε με ένα ποσό από bitcoin. Εκείνα είναι εν μέρει νέα νομίσματα που κόβονται ή "εξορύσσονται" εκείνη τη στιγμή (όπως ορίζεται από το πρωτόκολλο), αλλά και όσα τέλη (fees) κατέβαλαν οι κόμβοι για να πραγματοποιήσουν τις συναλλαγές του μπλοκ. Αξίζει να σημειωθεί πως δεν είναι αναγκαίο να διαθέτει κανείς ολόκληρο το blockchain (το οποίο είναι ογκώδες) - δηλαδή έναν πλήρη κόμβο - για να επικοινωνήσει με το δίκτυο, αλλά αρκεί ένας light node που απλά αναμεταδίδει την συναλλαγή που επιθυμεί να πραγματοποιήσει ο χρήστης. Η διευθυνσιοδότηση σε ένα blockchain επιτυγχάνεται αξιοποιώντας την κρυπτογραφία δημόσιου κλειδιού. Το πρωτόκολλο του εκάστοτε blockchain ορίζει έναν αλγόριθμο για την παραγωγή ζευγών κλειδιών (π.χ. ECDSA στο Bitcoin). Το δημόσιο από αυτά ορίζει τη διεύθυνση, ενώ το ιδιωτικό παραμένει μυστικό, υπό την κατοχή του χρήστη. Με αυτό τον τρόπο προκύπτει ένα πρακτικά ανεξάντλητο πλήθος πιθανών έγκυρων δημόσιων διευθύνσεων (π.χ. $2^{160}$ για το Bitcoin), στις οποίες οι χρήστες μπορούν να στέλνουν και να λαμβάνουν ποσά του εκάστοτε κρυπτονομίσματος. Για την αποστολή ενός ποσού, δηλώνουν το fee που επιθυμούν να καταβάλουν και υπογράφουν την επιθυμητή συναλλαγή με το ιδιωτικό τους κλειδί. Η συναλλαγή αναμεταδίδεται στο δίκτυο και παραμένει στο transaction pool μέχρις ότου να γίνει αποδεκτή και να συμπεριληφθεί στο επόμενο block. diff --git a/chapters/2.theoretical-background/2.8.orbit-db.tex b/chapters/2.theoretical-background/2.8.orbit-db.tex index c9f2a23..4ff7b78 100644 --- a/chapters/2.theoretical-background/2.8.orbit-db.tex +++ b/chapters/2.theoretical-background/2.8.orbit-db.tex @@ -6,7 +6,7 @@ \caption{OrbitDB logo} \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} @@ -22,16 +22,15 @@ Όλα τα 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, πέρα από τον προεπιλεγμένο τρόπο λειτουργίας, μπορεί να προσαρμοστεί έτσι ώστε να συνδέεται με κάποιο εξωτερικό αναγνωριστικό. Η μορφή του έχει ως εξής (βλ. και \url{https://github.com/orbitdb/orbit-db-identity-provider}): - \begin{figure}[H] - \centering - \includegraphics[width=12cm]{assets/figures/orbitdb-identity.png} + \begin{enumitemcenteredfigure} + \simplelisting[width=15cm]{orbit-db-identity.js} \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} diff --git a/chapters/3.application-design/3.0.application-design.tex b/chapters/3.application-design/3.0.application-design.tex index 4a4560c..8f9cf50 100644 --- a/chapters/3.application-design/3.0.application-design.tex +++ b/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.2.user-categories} -\input{chapters/3.application-design/3.3.use-cases} -\input{chapters/3.application-design/3.4.technology-stack} -\input{chapters/3.application-design/3.5.implementation-methodology-specification} -\input{chapters/3.application-design/3.6.architecture.design} +\input{chapters/3.application-design/3.3.software-requirements} +\input{chapters/3.application-design/3.4.use-cases} +\input{chapters/3.application-design/3.5.technology-stack} +\input{chapters/3.application-design/3.6.implementation-methodology-specification} +\input{chapters/3.application-design/3.7.architecture.design} diff --git a/chapters/3.application-design/3.1.application-parts.tex b/chapters/3.application-design/3.1.application-parts.tex index 53e3193..722e7c5 100644 --- a/chapters/3.application-design/3.1.application-parts.tex +++ b/chapters/3.application-design/3.1.application-parts.tex @@ -1,4 +1,4 @@ -\section{Λογικά μέρη} +\section{Λογικά μέρη} \label{section:3-1-logical-parts} % Παλιό από Drive Η πλατφόρμα μπορεί να διαχωριστεί σε δύο λογικά μέρη: diff --git a/chapters/3.application-design/3.2.user-categories.tex b/chapters/3.application-design/3.2.user-categories.tex index 06ed76d..33aa64f 100644 --- a/chapters/3.application-design/3.2.user-categories.tex +++ b/chapters/3.application-design/3.2.user-categories.tex @@ -1,4 +1,4 @@ -\section{Κατηγορίες χρηστών} +\section{Κατηγορίες χρηστών} \label{section:3-2-user-categories} % Παλιό από Drive \subsection{Πρώτο μέρος} diff --git a/chapters/3.application-design/3.3.software-requirements.tex b/chapters/3.application-design/3.3.software-requirements.tex new file mode 100644 index 0000000..8beadd6 --- /dev/null +++ b/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} diff --git a/chapters/3.application-design/3.3.use-cases.tex b/chapters/3.application-design/3.3.use-cases.tex deleted file mode 100644 index c1e3ed1..0000000 --- a/chapters/3.application-design/3.3.use-cases.tex +++ /dev/null @@ -1 +0,0 @@ -\section{Σενάρια χρήσης} diff --git a/chapters/3.application-design/3.4.use-cases.tex b/chapters/3.application-design/3.4.use-cases.tex new file mode 100644 index 0000000..557c3d0 --- /dev/null +++ b/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} diff --git a/chapters/3.application-design/3.4.use-cases/3.4.1.use-case-sign-up.tex b/chapters/3.application-design/3.4.use-cases/3.4.1.use-case-sign-up.tex new file mode 100644 index 0000000..91d1ba1 --- /dev/null +++ b/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}} diff --git a/chapters/3.application-design/3.4.use-cases/3.4.2.use-case-sign-in.tex b/chapters/3.application-design/3.4.use-cases/3.4.2.use-case-sign-in.tex new file mode 100644 index 0000000..b00c8bf --- /dev/null +++ b/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} diff --git a/chapters/3.application-design/3.4.use-cases/3.4.3.use-case-create-topic.tex b/chapters/3.application-design/3.4.use-cases/3.4.3.use-case-create-topic.tex new file mode 100644 index 0000000..19d82d0 --- /dev/null +++ b/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}} diff --git a/chapters/3.application-design/3.4.use-cases/3.4.4.use-case-fetch-topic.tex b/chapters/3.application-design/3.4.use-cases/3.4.4.use-case-fetch-topic.tex new file mode 100644 index 0000000..4210543 --- /dev/null +++ b/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} diff --git a/chapters/3.application-design/3.4.use-cases/3.4.5.use-case-create-post.tex b/chapters/3.application-design/3.4.use-cases/3.4.5.use-case-create-post.tex new file mode 100644 index 0000000..d8ec8e5 --- /dev/null +++ b/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}} diff --git a/chapters/3.application-design/3.4.use-cases/3.4.6.use-case-modify-post.tex b/chapters/3.application-design/3.4.use-cases/3.4.6.use-case-modify-post.tex new file mode 100644 index 0000000..0ed9213 --- /dev/null +++ b/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}} diff --git a/chapters/3.application-design/3.4.use-cases/3.4.7.use-case-vote-in-poll.tex b/chapters/3.application-design/3.4.use-cases/3.4.7.use-case-vote-in-poll.tex new file mode 100644 index 0000000..4e9c5b5 --- /dev/null +++ b/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} diff --git a/chapters/3.application-design/3.4.use-cases/3.4.8.use-case-vote-post.tex b/chapters/3.application-design/3.4.use-cases/3.4.8.use-case-vote-post.tex new file mode 100644 index 0000000..a3552c0 --- /dev/null +++ b/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} diff --git a/chapters/3.application-design/3.4.use-cases/3.4.9.delete-local-data.tex b/chapters/3.application-design/3.4.use-cases/3.4.9.delete-local-data.tex new file mode 100644 index 0000000..715abf7 --- /dev/null +++ b/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} diff --git a/chapters/3.application-design/3.4.technology-stack.tex b/chapters/3.application-design/3.5.technology-stack.tex similarity index 99% rename from chapters/3.application-design/3.4.technology-stack.tex rename to chapters/3.application-design/3.5.technology-stack.tex index 186a511..d65fd49 100644 --- a/chapters/3.application-design/3.4.technology-stack.tex +++ b/chapters/3.application-design/3.5.technology-stack.tex @@ -1,4 +1,4 @@ -\section{Τεχνολογίες} +\section{Τεχνολογίες} \label{section:3-5-technologies} \subsection{Ethereum} diff --git a/chapters/3.application-design/3.6.architecture.design.tex b/chapters/3.application-design/3.6.architecture.design.tex deleted file mode 100644 index b83c6d6..0000000 --- a/chapters/3.application-design/3.6.architecture.design.tex +++ /dev/null @@ -1 +0,0 @@ -\section{Αρχιτεκτονική} diff --git a/chapters/3.application-design/3.5.implementation-methodology-specification.tex b/chapters/3.application-design/3.6.implementation-methodology-specification.tex similarity index 97% rename from chapters/3.application-design/3.5.implementation-methodology-specification.tex rename to chapters/3.application-design/3.6.implementation-methodology-specification.tex index f4d9d5f..cce1951 100644 --- a/chapters/3.application-design/3.5.implementation-methodology-specification.tex +++ b/chapters/3.application-design/3.6.implementation-methodology-specification.tex @@ -1,4 +1,4 @@ -\section{Προδιαγραφή μεθόδου υλοποίησης και χρονοπρογραμματισμός} +\section{Προδιαγραφή μεθόδου υλοποίησης και χρονοπρογραμματισμός} \label{section:3-6-implementation-methodology-specification} \subsection{Προδιαγραφή κύκλων} diff --git a/chapters/3.application-design/3.7.architecture.design.tex b/chapters/3.application-design/3.7.architecture.design.tex new file mode 100644 index 0000000..b04c169 --- /dev/null +++ b/chapters/3.application-design/3.7.architecture.design.tex @@ -0,0 +1 @@ +\section{Αρχιτεκτονική} \label{section:3-7-architecture-design} diff --git a/custom-commands/custom-enumitem.tex b/custom-commands/custom-enumitem.tex new file mode 100644 index 0000000..d3801c2 --- /dev/null +++ b/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 +} diff --git a/custom-commands/custom-listings.tex b/custom-commands/custom-listings.tex new file mode 100644 index 0000000..593578a --- /dev/null +++ b/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 +} \ No newline at end of file diff --git a/custom-commands/srs-commands.tex b/custom-commands/srs-commands.tex new file mode 100644 index 0000000..2d584ae --- /dev/null +++ b/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 +} \ No newline at end of file diff --git a/custom-commands/use-case-commands.tex b/custom-commands/use-case-commands.tex new file mode 100644 index 0000000..2fc032b --- /dev/null +++ b/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} +}} diff --git a/packages.tex b/packages.tex index ecb59cf..55d227a 100644 --- a/packages.tex +++ b/packages.tex @@ -24,13 +24,23 @@ \usepackage{listings} %TODO: unused atm (remove?) \usepackage{tabularx} % Support for break lines inside table cells \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 --- -\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 --- \input{custom-commands/custom-title-page} \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 --- \renewcommand{\arraystretch}{1.2} % Streches the table row height so text is not crammed between the lines diff --git a/thesis.pdf b/thesis.pdf index 5cde3f8..dff7074 100644 Binary files a/thesis.pdf and b/thesis.pdf differ diff --git a/tikz/chapter-3/3-4-use-case-create-post-sequence-diagram.tex b/tikz/chapter-3/3-4-use-case-create-post-sequence-diagram.tex new file mode 100644 index 0000000..8b21908 --- /dev/null +++ b/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} diff --git a/tikz/chapter-3/3-4-use-case-create-topic-alternate-flow-1-sequence-diagram.tex b/tikz/chapter-3/3-4-use-case-create-topic-alternate-flow-1-sequence-diagram.tex new file mode 100644 index 0000000..11dfa45 --- /dev/null +++ b/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} diff --git a/tikz/chapter-3/3-4-use-case-create-topic-sequence-diagram.tex b/tikz/chapter-3/3-4-use-case-create-topic-sequence-diagram.tex new file mode 100644 index 0000000..9a4a269 --- /dev/null +++ b/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} diff --git a/tikz/chapter-3/3-4-use-case-delete-local-data-sequence-diagram.tex b/tikz/chapter-3/3-4-use-case-delete-local-data-sequence-diagram.tex new file mode 100644 index 0000000..b9edcdd --- /dev/null +++ b/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} diff --git a/tikz/chapter-3/3-4-use-case-fetch-topic-alternate-flow-1-sequence-diagram.tex b/tikz/chapter-3/3-4-use-case-fetch-topic-alternate-flow-1-sequence-diagram.tex new file mode 100644 index 0000000..e7b0aef --- /dev/null +++ b/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} diff --git a/tikz/chapter-3/3-4-use-case-fetch-topic-sequence-diagram.tex b/tikz/chapter-3/3-4-use-case-fetch-topic-sequence-diagram.tex new file mode 100644 index 0000000..15f0b95 --- /dev/null +++ b/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} diff --git a/tikz/chapter-3/3-4-use-case-modify-post-sequence-diagram.tex b/tikz/chapter-3/3-4-use-case-modify-post-sequence-diagram.tex new file mode 100644 index 0000000..c37303b --- /dev/null +++ b/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} diff --git a/tikz/chapter-3/3-4-use-case-sign-in-sequence-diagram.tex b/tikz/chapter-3/3-4-use-case-sign-in-sequence-diagram.tex new file mode 100644 index 0000000..9473ffb --- /dev/null +++ b/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} diff --git a/tikz/chapter-3/3-4-use-case-sign-up-sequence-diagram.tex b/tikz/chapter-3/3-4-use-case-sign-up-sequence-diagram.tex new file mode 100644 index 0000000..0220bf1 --- /dev/null +++ b/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} diff --git a/tikz/chapter-3/3-4-use-case-vote-in-poll-sequence-diagram.tex b/tikz/chapter-3/3-4-use-case-vote-in-poll-sequence-diagram.tex new file mode 100644 index 0000000..2fb9620 --- /dev/null +++ b/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} diff --git a/tikz/chapter-3/3-4-use-case-vote-post-sequence-diagram.tex b/tikz/chapter-3/3-4-use-case-vote-post-sequence-diagram.tex new file mode 100644 index 0000000..404c21b --- /dev/null +++ b/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}