Commit 345f92a8a15d7d9dfc6cc520f1f3b943d8d5133b
Exists in
master
Merge branch 'master' of https://git.ucsd.edu/110swag/docs
Showing 14 changed files Inline Diff
- UserStories.tex
- screen_sequence_diagrams/aaa_legend.dot
- screen_sequence_diagrams/add_class.dot
- screen_sequence_diagrams/blank_out_words.dot
- screen_sequence_diagrams/change_password.dot
- screen_sequence_diagrams/drop_class.dot
- screen_sequence_diagrams/fix_flashcard.dot
- screen_sequence_diagrams/reset_password.dot
- screen_sequence_diagrams/review_notification.dot
- screen_sequence_diagrams/study_deck.dot
- screen_sequence_diagrams/user_login_out.dot
- screen_sequence_diagrams/user_register.dot
- screen_sequence_diagrams/view_by_material_time.dot
- screen_sequence_diagrams/view_by_pull_time.dot
UserStories.tex
View file @
345f92a
\documentclass[letterpaper]{scrartcl} % or whatever | 1 | 1 | \documentclass[letterpaper]{scrartcl} % or whatever | |
\usepackage{tgpagella} | 2 | 2 | \usepackage{tgpagella} | |
\setkomafont{disposition}{\normalfont\bfseries} | 3 | 3 | \setkomafont{disposition}{\normalfont\bfseries} | |
%\usepackage[markuppercase]{scrpage2} | 4 | 4 | %\usepackage[markuppercase]{scrpage2} | |
\title{\huge User Stories} | 5 | 5 | \title{\huge User Stories} | |
\date{\today} | 6 | 6 | \date{\today} | |
\author{\Large Students With A Goal (S.W.A.G.)} | 7 | 7 | \author{\Large Students With A Goal (S.W.A.G.)} | |
\usepackage[pass]{geometry} | 8 | 8 | \usepackage[pass]{geometry} | |
\usepackage{hyperref} | 9 | 9 | \usepackage{hyperref} | |
\usepackage{graphicx} | 10 | 10 | \usepackage{graphicx} | |
\usepackage{enumitem} | 11 | 11 | \usepackage{enumitem} | |
\setlist[description]{style=multiline,leftmargin=3cm,font=\normalfont\textbf} | 12 | 12 | \setlist[description]{style=multiline,leftmargin=3cm,font=\normalfont\textbf} | |
\setlistdepth{9} | 13 | 13 | \setlistdepth{9} | |
14 | 14 | |||
\setlist[itemize,1]{label=$\bullet$} | 15 | 15 | \setlist[itemize,1]{label=$\bullet$} | |
\setlist[itemize,2]{label=$\bullet$} | 16 | 16 | \setlist[itemize,2]{label=$\bullet$} | |
\setlist[itemize,3]{label=$\bullet$} | 17 | 17 | \setlist[itemize,3]{label=$\bullet$} | |
\setlist[itemize,4]{label=$\bullet$} | 18 | 18 | \setlist[itemize,4]{label=$\bullet$} | |
\setlist[itemize,5]{label=$\bullet$} | 19 | 19 | \setlist[itemize,5]{label=$\bullet$} | |
\setlist[itemize,6]{label=$\bullet$} | 20 | 20 | \setlist[itemize,6]{label=$\bullet$} | |
\setlist[itemize,7]{label=$\bullet$} | 21 | 21 | \setlist[itemize,7]{label=$\bullet$} | |
\setlist[itemize,8]{label=$\bullet$} | 22 | 22 | \setlist[itemize,8]{label=$\bullet$} | |
\setlist[itemize,9]{label=$\bullet$} | 23 | 23 | \setlist[itemize,9]{label=$\bullet$} | |
\renewlist{itemize}{itemize}{9} | 24 | 24 | \renewlist{itemize}{itemize}{9} | |
\begin{document} | 25 | 25 | \begin{document} | |
\maketitle | 26 | 26 | \maketitle | |
\begin{center} | 27 | 27 | \begin{center} | |
\includegraphics[width=12cm]{../swag_logo.png}\\ | 28 | 28 | \includegraphics[width=12cm]{../swag_logo.png}\\ | |
29 | 29 | |||
\begin{tabular}{l r} | 30 | 30 | \begin{tabular}{l r} | |
Melody Jeng & System Architect \\ | 31 | 31 | Melody Jeng & System Architect \\ | |
Arno Gau & Senior System Analyst \\ | 32 | 32 | Arno Gau & Senior System Analyst \\ | |
Rachel Lee & Software Development Lead \\ | 33 | 33 | Rachel Lee & Software Development Lead \\ | |
Laura Hawkins & Project Manager \\ | 34 | 34 | Laura Hawkins & Project Manager \\ | |
Rohan Rangray & Algorithms Specialist\\ | 35 | 35 | Rohan Rangray & Algorithms Specialist\\ | |
Andrew Buss & Database Specialist \\ | 36 | 36 | Andrew Buss & Database Specialist \\ | |
Phuong Tran & Quality Assurance Lead \\ | 37 | 37 | Phuong Tran & Quality Assurance Lead \\ | |
Chung Kang Wang & Business Analyst\\ | 38 | 38 | Chung Kang Wang & Business Analyst\\ | |
Masud Rahman & User Interface Specialist\\ | 39 | 39 | Masud Rahman & User Interface Specialist\\ | |
Kevin Mach & User Interface Specialist\\ | 40 | 40 | Kevin Mach & User Interface Specialist\\ | |
\end{tabular} | 41 | 41 | \end{tabular} | |
\end{center} | 42 | 42 | \end{center} | |
\newpage | 43 | 43 | \newpage | |
\textbf{\LARGE{These User Stories supercede the the User Stories listed on the post it notes on the CSE Software Tools | 44 | 44 | \textbf{\LARGE{These User Stories supercede the the User Stories listed on the post it notes on the CSE Software Tools | |
Site. We were not able to remove those User Stories. Please use these as the User Stories. }} | 45 | 45 | Site. We were not able to remove those User Stories. Please use these as the User Stories. }} | |
\tableofcontents | 46 | 46 | \tableofcontents | |
\newpage | 47 | 47 | \newpage | |
\section{ Account } | 48 | 48 | \section{ Account } | |
\begin {enumerate} | 49 | 49 | \begin {enumerate} | |
\item {As a student, I want to be able to log in to the account I signed up with.} | 50 | 50 | \item {As a student, I want to be able to log in to the account I signed up with.} | |
\item {As a student, I want to be able to change my password for my account.} | 51 | 51 | \item {As a student, I want to be able to change my password for my account.} | |
\item {As a student, I want to be able to recover my password when I forget it.} | 52 | 52 | \item {As a student, I want to be able to recover my password when I forget it.} | |
\item {As a student, I want to configure my notifications.} | 53 | 53 | \item {As a student, I want to configure my notifications.} | |
\item {As a student, I want to be able to logout my account. } | 54 | 54 | \item {As a student, I want to be able to logout my account. } | |
\item {As a first time user, I want to be able build my deck without going through registration process in class.} | 55 | 55 | \item {As a first time user, I want to be able build my deck without going through registration process in class.} | |
\item {As an instructor, I want to limit access to the cards for my course.} | 56 | 56 | \item {As an instructor, I want to limit access to the cards for my course.} | |
\item {As an instructor, I want to invite students to the class group I created.} | 57 | 57 | \item {As an instructor, I want to invite students to the class group I created.} | |
\item {As a student I want to receive notifications without installing an app.} | 58 | 58 | \item {As a student, I want to receive notifications without installing an app.} | |
\item {As a student I want to be able to delete my account.} | 59 | 59 | \item {As a student, I want to be able to delete my account.} | |
\end{enumerate} | 60 | 60 | \end{enumerate} | |
\newpage | 61 | 61 | \newpage | |
\section{ Flashcards } | 62 | 62 | \section{ Flashcards } | |
\begin{enumerate} | 63 | 63 | \begin{enumerate} | |
\item As a student, I want to pick flashcards. | 64 | 64 | \item As a student, I want to pick flashcards. | |
\item As a student, I want to be able to make my own flashcard. | 65 | 65 | \item As a student, I want to be able to make my own flashcard. | |
\item As a student, I want to remove cards from my deck. | 66 | 66 | \item As a student, I want to remove cards from my deck. | |
\item As a student, I don't want to see low-quality cards. | 67 | 67 | \item As a student, I don't want to see low-quality cards. | |
\item As a student, I want to edit my card. | 68 | 68 | \item As a student, I want to edit my card. | |
\item As a student, I want to make flashcards quickly | 69 | 69 | \item As a student, I want to make flashcards quickly | |
\item As a student, I want to flag abusive flash cards. | 70 | 70 | \item As a student, I want to flag abusive flash cards. | |
\item As a student I want to see other cards at the time they are added to the feed. | 71 | 71 | \item As a student, I want to see other cards at the time they are added to the feed. | |
\item As a student, I want to be able to hide unwanted cards from my live feed. | 72 | 72 | \item As a student, I want to be able to hide unwanted cards from my live feed. | |
\end{enumerate} | 73 | 73 | \end{enumerate} | |
\newpage | 74 | 74 | \newpage | |
\section{ Decks} | 75 | 75 | \section{ Decks} | |
\begin {enumerate} | 76 | 76 | \begin {enumerate} | |
\item As a student, I want to be able to make my own deck. | 77 | 77 | \item As a student, I want to be able to make my own deck. | |
\item As a student, I want to be able to separate the live feed for each class. | 78 | 78 | \item As a student, I want to be able to separate the live feed for each class. | |
\item As a student, I want to add myself to a class. | 79 | 79 | \item As a student, I want to add myself to a class. | |
\item As a student, I want to my deck to be private. | 80 | 80 | \item As a student, I want to my deck to be private. | |
\item As a student, I want to be able to shuffle my deck. | 81 | 81 | \item As a student, I want to be able to shuffle my deck. | |
\item As a student, I want to be able to remove courses that I was registered to. | 82 | 82 | \item As a student, I want to be able to remove courses that I was registered to. | |
\end{enumerate} | 83 | 83 | \end{enumerate} | |
\newpage | 84 | 84 | \newpage | |
\section{Study} | 85 | 85 | \section{Study} | |
\begin{enumerate} | 86 | 86 | \begin{enumerate} | |
\item As a student, I want to be able to study my deck. | 87 | 87 | \item As a student, I want to be able to study my deck. | |
\item As a student, I want to have the app remind me when to review my cards. | 88 | 88 | \item As a student, I want to have the app remind me when to review my cards. | |
\item As a student, I want to be able to blank out words to make cards. | 89 | 89 | \item As a student, I want to be able to blank out words to make cards. | |
\item As a student I want to review cards without waiting for a notification. | 90 | 90 | \item As a student, I want to review cards without waiting for a notification. | |
\item As a student I want to view cards in my deck in the order they were created. | 91 | 91 | \item As a student, I want to view cards in my deck in the order they were created. | |
\item As a student, I want to be able to search/sort/filter for flashcards by date, class, tag, keywords. | 92 | 92 | \item As a student, I want to be able to search/sort/filter for flashcards by date, class, tag, keywords. | |
\item As a student, I want to be able to scroll infinitely. | 93 | 93 | \item As a student, I want to be able to scroll infinitely. | |
\item As a student I want to use the keyboard to interact with the app. | 94 | 94 | \item As a student, I want to use the keyboard to interact with the app. | |
\end{enumerate} | 95 | 95 | \end{enumerate} | |
\newpage | 96 | 96 | \newpage | |
\end{document} | 97 | 97 | \end{document} | |
98 | 98 | |||
screen_sequence_diagrams/aaa_legend.dot
View file @
345f92a
File was created | 1 | digraph G{ | ||
2 | ratio=0.75; | |||
3 | //rankdir="LR"; | |||
4 | labelloc="t"; | |||
5 | label=" Screen Sequence Diagram Legend"; | |||
6 | node[shape=box, style="rounded,filled,bold"]; | |||
7 | ||||
8 | ||||
9 | "Pages"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |||
10 | ||||
11 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | |||
12 | fixedsize=true, width=1.4, height=1.4]; |
screen_sequence_diagrams/add_class.dot
View file @
345f92a
digraph G{ | 1 | 1 | digraph G{ | |
ratio=0.75; | 2 | 2 | ratio=0.75; | |
//rankdir="LR"; | 3 | 3 | //rankdir="LR"; | |
node[shape=box, style="rounded,filled,bold"]; | 4 | 4 | node[shape=box, style="rounded,filled,bold"]; | |
splines=ortho; | 5 | 5 | splines=ortho; | |
nodesep=1.4; | 6 | 6 | nodesep=1.4; | |
labelloc="t"; | 7 | 7 | labelloc="t"; | |
label = "[A3] Add a Class"; | 8 | 8 | label = "[A3] Add a Class"; | |
"Navigation Menu"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | 9 | 9 | "Navbar"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, | 10 | 10 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, | |
fixedsize=true, width=1.4, height=1.4]; | 11 | 11 | fixedsize=true, width=1.4, height=1.4]; | |
"POST /api/sections/{pk}/enroll"[shape=none]; | 12 | 12 | "POST /api/sections/{pk}/enroll"[shape=none]; | |
labelfloat=true; | 13 | 13 | labelfloat=true; | |
lp=100; | 14 | 14 | lp=100; | |
15 | 15 | |||
"Permission Denied: \n User cannot be enrolled in class"[shape=none] | 16 | 16 | "Permission Denied: \n User cannot be enrolled in class"[shape=none] | |
"Success! \n User is added to class"[shape=none]; | 17 | 17 | "Success! \n User is added to class"[shape=none]; | |
"SUCCESS"[shape=none]; | 18 | 18 | "SUCCESS"[shape=none]; | |
"FAILURE"[shape=none]; | 19 | 19 | "FAILURE"[shape=none]; | |
20 | 20 | |||
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, | 21 | 21 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, | |
fixedsize=true, width=1.4, height=1.4]; | 22 | 22 | fixedsize=true, width=1.4, height=1.4]; | |
"WhiteListCheck"[center=true, fillcolor="#aaaaff", style=filled, style=filled]; | 23 | 23 | "WhiteListCheck"[center=true, fillcolor="#aaaaff", style=filled, style=filled]; | |
"Navigation Menu" -> "POST /api/sections/{pk}/enroll"[dir=none]; | 24 | 24 | "Navbar" -> "POST /api/sections/{pk}/enroll"[dir=none]; | |
"POST /api/sections/{pk}/enroll" -> "Controller"; | 25 | 25 | "POST /api/sections/{pk}/enroll" -> "Controller"; | |
"Controller" -> "FAILURE"; | 26 | 26 | "Controller" -> "FAILURE"; | |
"FAILURE" -> "Navigation Menu"; | 27 | 27 | "FAILURE" -> "Navbar"; | |
"Controller" -> "SUCCESS"; | 28 | 28 | "Controller" -> "SUCCESS"; | |
"SUCCESS"->"WhiteListCheck"; | 29 | 29 | "SUCCESS"->"WhiteListCheck"; | |
"WhiteListCheck" -> "Permission Denied: \n User cannot be enrolled in class"; | 30 | 30 | "WhiteListCheck" -> "Permission Denied: \n User cannot be enrolled in class"; | |
"WhiteListCheck" -> "Success! \n User is added to class"; | 31 | 31 | "WhiteListCheck" -> "Success! \n User is added to class"; | |
"Success! \n User is added to class" -> "Navigation Menu"; | 32 | 32 | "Success! \n User is added to class" -> "Navbar"; | |
"Permission Denied: \n User cannot be enrolled in class" -> "Navigation Menu"; | 33 | 33 | "Permission Denied: \n User cannot be enrolled in class" -> "Navbar"; | |
34 | 34 | |||
} | 35 | 35 | } | |
36 | 36 | |||
screen_sequence_diagrams/blank_out_words.dot
View file @
345f92a
digraph G{ | 1 | 1 | digraph G{ | |
ratio=0.75; | 2 | 2 | ratio=0.75; | |
//rankdir="LR"; | 3 | 3 | //rankdir="LR"; | |
labelloc="t"; | 4 | 4 | labelloc="t"; | |
label="[F6] Blank Out Words in Flashcards"; | 5 | 5 | label="[F6] Blank Out Words in Flashcards"; | |
node[shape=box, style="rounded,filled,bold"]; | 6 | 6 | node[shape=box, style="rounded,filled,bold"]; | |
splines=ortho; | 7 | 7 | splines=ortho; | |
nodesep=1.0; | 8 | 8 | nodesep=1.0; | |
"View Deck"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | 9 | 9 | "View Deck"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | 10 | 10 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | |
fixedsize=true, width=1.4, height=1.4]; | 11 | 11 | fixedsize=true, width=1.4, height=1.4]; | |
"POST /api/flashcards/{pk}"[shape=none] | 12 | 12 | "POST /api/flashcards/{pk}"[shape=none] | |
13 | 13 | |||
"View Deck" -> "Flashcard"; | 14 | 14 | "View Deck" -> "Flashcard"; | |
"Flashcard" -> "Edit Flashcard Page"; | 15 | 15 | "Flashcard" -> "Edit Flashcard Page"; | |
"Edit Flashcard Page" -> "POST /api/flashcards/{pk}"; | 16 | 16 | "Edit Flashcard Page" -> "POST /api/flashcards/{pk}"; | |
"POST /api/flashcards/{pk}" -> "Controller"; | 17 | 17 | "POST /api/flashcards/{pk}" -> "Controller"; | |
18 | 18 | |||
//Only blanks(mask) altered | 19 | 19 | //Only blanks(mask) altered | |
"Only mask altered"[shape=none]; | 20 | 20 | "Only mask altered"[shape=none]; | |
"Server Updates FlashcardMask object"[fillcolor="#aaaaff", style=filled,pos="0,0!"]; | 21 | 21 | "Server Updates FlashcardMask object"[fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
"Controller" -> "Only mask altered"; | 22 | 22 | "Controller" -> "Only mask altered"; | |
"Only mask altered" -> "Server Updates FlashcardMask object"; | 23 | 23 | "Only mask altered" -> "Server Updates FlashcardMask object"; | |
"Server Updates FlashcardMask object" -> "View Deck"; | 24 | 24 | "Server Updates FlashcardMask object" -> "View Deck"; | |
25 | 25 | |||
labelfloat=true; | 26 | 26 | labelfloat=true; |
screen_sequence_diagrams/change_password.dot
View file @
345f92a
digraph G{ | 1 | 1 | digraph G{ | |
ratio=0.75; | 2 | 2 | ratio=0.75; | |
//rankdir="LR"; | 3 | 3 | //rankdir="LR"; | |
node[shape=box, style="rounded,filled,bold"]; | 4 | 4 | node[shape=box, style="rounded,filled,bold"]; | |
splines=ortho; | 5 | 5 | splines=ortho; | |
nodesep=1.4; | 6 | 6 | nodesep=1.4; | |
labelloc="t"; | 7 | 7 | labelloc="t"; | |
label="[A5] Change password & [A6] Reset password"; | 8 | 8 | label="[A5] Change password"; | |
"Navigation Menu/Settings"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | 9 | 9 | "Settings"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond]; | 10 | 10 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond]; | |
"POST /api/request_password_reset"[shape=none]; | 11 | 11 | "PATCH /api/me"[shape=none]; | |
labelfloat=true; | 12 | 12 | labelfloat=true; | |
lp=100; | 13 | 13 | lp=100; | |
14 | 14 | |||
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | 15 | 15 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | |
fixedsize=true, width=1.4, height=1.4]; | 16 | 16 | fixedsize=true, width=1.4, height=1.4]; | |
"Navigation Menu/Settings" -> "POST /api/request_password_reset"[dir=none]; | 17 | 17 | "Failure: User did not\nchange password"[shape=none]; | |
"POST /api/request_password_reset" -> "Controller"; | 18 | 18 | "Success: User \nchanged password"[shape=none]; | |
"Controller" -> "Email"; | 19 | 19 | ||
"Failure: User did not\nchange password"[shape=none]; | 20 | 20 | "Settings" -> "PATCH /api/me"; | |
"Email" -> "Failure: User did not\nchange password"; | 21 | 21 | "PATCH /api/me" -> "Controller"; | |
"Failure: User did not\nchange password" -> "Navigation Menu"; | 22 | 22 | "Controller" -> "Failure: User did not\nchange password"; | |
"Success: User \nchanged password"[shape=none]; | 23 | 23 | "Failure: User did not\nchange password" -> "Settings"; | |
"Email" -> "Success: User \nchanged password"; | 24 | 24 | "Email" -> "Success: User \nchanged password"; | |
"Success: User \nchanged password" -> "Navigation Menu"; | 25 | 25 | "Success: User \nchanged password" -> "Settings"; | |
} | 26 | 26 | } | |
27 | 27 | |||
screen_sequence_diagrams/drop_class.dot
View file @
345f92a
digraph G{ | 1 | 1 | digraph G{ | |
ratio=0.75; | 2 | 2 | ratio=0.75; | |
// rankdir="LR"; | 3 | 3 | // rankdir="LR"; | |
node[shape=box, style="rounded,filled,bold"]; | 4 | 4 | node[shape=box, style="rounded,filled,bold"]; | |
splines=ortho; | 5 | 5 | splines=ortho; | |
nodesep=1.4; | 6 | 6 | nodesep=1.4; | |
labelloc="t"; | 7 | 7 | labelloc="t"; | |
label="[A4] Drop a class"; | 8 | 8 | label="[A4] Drop a Class"; | |
"Navigation Menu/Settings"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | 9 | 9 | "Navbar"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, | 10 | 10 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, | |
fixedsize=true, width=1.4, height=1.4]; | 11 | 11 | fixedsize=true, width=1.4, height=1.4]; | |
"User Check"[center=true, fillcolor="#aaaaff", style=filled]; | 12 | 12 | "User Check"[center=true, fillcolor="#aaaaff", style=filled]; | |
13 | "SUCCESS"[shape=none]; | |||
14 | "FAILURE"[shape=none]; | |||
//labelfloat=true; | 13 | 15 | //labelfloat=true; | |
//lp=100; | 14 | 16 | //lp=100; | |
15 | 17 | |||
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, | 16 | 18 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, | |
fixedsize=true, width=1.4, height=1.4]; | 17 | 19 | fixedsize=true, width=1.4, height=1.4]; | |
"POST /api/sections/{pk}/drop"[shape=none]; | 18 | 20 | "POST /api/sections/{pk}/drop"[shape=none]; | |
"Navigation Menu/Settings" -> "POST /api/sections/{pk}/drop"; | 19 | 21 | "Navbar" -> "POST /api/sections/{pk}/drop"; | |
"POST /api/sections/{pk}/drop" -> "Controller"; | 20 | 22 | "POST /api/sections/{pk}/drop" -> "Controller"; | |
"Controller" -> "User Check"; | 21 | 23 | "Controller" -> "User Check"; | |
"User did not\ndrop class"[shape=none]; | 22 | 24 | ||
"User Check" -> "User did not\ndrop class"; | 23 | 25 | "Class not dropped"[shape=none]; | |
"User did not\ndrop class" -> "Navigation Menu/Settings"; | 24 | 26 | "User Check" -> "FAILURE"; | |
"User successfully\ndropped class"[shape=none]; | 25 | 27 | "FAILURE" -> "Class not dropped"; | |
"User Check" -> "User successfully\ndropped class"; | 26 | 28 | "Class not dropped" -> "Navbar"; | |
"User successfully\ndropped class" -> "Navigation Menu/Settings"; | 27 | 29 | ||
30 | "Class dropped"[shape=none]; | |||
31 | "User Check" -> "SUCCESS"; | |||
32 | "SUCCESS" -> "Class dropped"; | |||
33 | "Class dropped" -> "Navbar"; | |||
} | 28 | 34 | } | |
29 | 35 | |||
screen_sequence_diagrams/fix_flashcard.dot
View file @
345f92a
digraph G{ | 1 | 1 | digraph G{ | |
ratio=0.75; | 2 | 2 | ratio=0.75; | |
//rankdir="LR"; | 3 | 3 | //rankdir="LR"; | |
labelloc="t"; | 4 | 4 | labelloc="t"; | |
label="[F7] Fix Flashcard"; | 5 | 5 | label="[F7] Fix Flashcard"; | |
node[shape=box, style="rounded,filled,bold"]; | 6 | 6 | node[shape=box, style="rounded,filled,bold"]; | |
splines=ortho; | 7 | 7 | splines=ortho; | |
nodesep=0.4; | 8 | 8 | nodesep=0.4; | |
ranksep=0.1; | 9 | 9 | ranksep=0.1; | |
"View Deck"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | 10 | 10 | "View Deck"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
"View Deck" -> "Edit Flashcard"; | 11 | 11 | "View Deck" -> "Edit Flashcard"; | |
"Edit Flashcard" -> "POST /api/flashcard/{pk}/edit"; | 12 | 12 | "Edit Flashcard" -> "POST /api/flashcard/{pk}/edit"; | |
"POST /api/flashcard/{pk}/edit" -> "FlashcardViewSet.edit"; | 13 | 13 | "POST /api/flashcard/{pk}/edit" -> "Controller"; | |
"FlashcardViewSet.edit" -> "Text or material date altered"; | 14 | 14 | "Controller" -> "Text or material date altered"; | |
"FlashcardViewSet.edit" -> "Only mask altered"; | 15 | 15 | "Controller" -> "Only mask altered"; | |
"Only mask altered" -> "Update UserFlashcard object"; | 16 | 16 | "Only mask altered" -> "Update UserFlashcard object"; | |
"Text or material date altered" -> "Create new Flashcard with prev pointer\nNotify all users who've pulled the card"; | 17 | 17 | "Text or material date altered" -> "Create new Flashcard with prev pointer\nNotify all users who've pulled the card"; | |
"Only mask altered"[shape=none]; | 18 | 18 | "Only mask altered"[shape=none]; | |
"Text or material date altered"[shape=none]; | 19 | 19 | "Text or material date altered"[shape=none]; | |
"Update UserFlashcard object" -> "View Deck"; | 20 | 20 | "Update UserFlashcard object" -> "View Deck"; | |
"Create new Flashcard with prev pointer\nNotify all users who've pulled the card" -> "View Deck"; | 21 | 21 | "Create new Flashcard with prev pointer\nNotify all users who've pulled the card" -> "View Deck"; | |
"POST /api/flashcard/{pk}/edit"[shape=none]; | 22 | 22 | "POST /api/flashcard/{pk}/edit"[shape=none]; | |
labelfloat=true; | 23 | 23 | labelfloat=true; | |
lp=100; | 24 | 24 | lp=100; | |
"FlashcardViewSet.edit"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, fixedsize=true, width=2.2, height=2.2]; | 25 | 25 | "Navbar"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
"Navigation Menu"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | 26 | |||
"WhiteListCheck"[center=true, fillcolor="#aaaaff", style=filled, style=filled]; | 27 | 26 | "WhiteListCheck"[center=true, fillcolor="#aaaaff", style=filled, style=filled]; | |
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, fixedsize=true, width=1.1, height=1.1]; | 28 | 27 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, fixedsize=true, width=2.2, height=2.2]; | |
"POST"[shape=none]; | 29 | 28 | "POST"[shape=none]; | |
"FAILURE"[shape=none]; | 30 | 29 | "FAILURE"[shape=none]; | |
"SUCCESS"[shape=none]; | 31 | 30 | "SUCCESS"[shape=none]; | |
"Navigation Menu" -> "POST"; | 32 | 31 | "Navbar" -> "POST"; | |
"POST" -> "Controller"; | 33 | 32 | "POST" -> "Controller"; | |
"Controller" -> "FAILURE"; | 34 | 33 | "Controller" -> "FAILURE"; | |
"FAILURE" -> "Navigation Menu"; | 35 | 34 | "FAILURE" -> "Navbar"; | |
"Controller" -> "SUCCESS"; | 36 | 35 | "Controller" -> "SUCCESS"; | |
"SUCCESS"->"WhiteListCheck"; | 37 | 36 | "SUCCESS"->"WhiteListCheck"; | |
"WhiteListCheck" -> "Permission Denied: \n User cannot be enrolled in class"; | 38 | 37 | "WhiteListCheck" -> "Permission Denied: \n User cannot be enrolled in class"; | |
"WhiteListCheck" -> "Success! \n User is added to class"; | 39 | 38 | "WhiteListCheck" -> "Success! \n User is added to class"; | |
"Success! \n User is added to class" -> "Navigation Menu"; | 40 | 39 | "Success! \n User is added to class" -> "Navbar"; | |
"Permission Denied: \n User cannot be enrolled in class" -> "Navigation Menu"; | 41 | 40 | "Permission Denied: \n User cannot be enrolled in class" -> "Navbar"; | |
} | 42 | 41 | } | |
43 | 42 | |||
screen_sequence_diagrams/reset_password.dot
View file @
345f92a
File was created | 1 | digraph G{ | ||
2 | ratio=0.75; | |||
3 | //rankdir="LR"; | |||
4 | node[shape=box, style="rounded,filled,bold"]; | |||
5 | splines=ortho; | |||
6 | nodesep=1.4; | |||
7 | labelloc="t"; | |||
8 | label="[A6] Reset password"; | |||
9 | "Settings"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |||
10 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond]; | |||
11 | "POST /api/request_password_reset"[shape=none]; | |||
12 | labelfloat=true; | |||
13 | lp=100; | |||
14 | ||||
15 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | |||
16 | fixedsize=true, width=1.4, height=1.4]; | |||
17 | "Failure: User did not\nchange password"[shape=none]; | |||
18 | "Success: User \nchanged password"[shape=none]; | |||
19 | ||||
20 | "Settings" -> "POST /api/request_password_reset"; | |||
21 | "POST /api/request_password_reset" -> "Controller"; | |||
22 | "Controller" -> "Email"; | |||
23 | ||||
24 | "Email" -> "Failure: User did not\nreset password"; | |||
25 | "Failure: User did not\nreset password" -> "Settings"; |
screen_sequence_diagrams/review_notification.dot
View file @
345f92a
digraph G{ | 1 | 1 | digraph G{ | |
ratio=0.75; | 2 | 2 | ratio=0.75; | |
//rankdir="LR"; | 3 | 3 | //rankdir="LR"; | |
labelloc="t"; | 4 | 4 | labelloc="t"; | |
label="[R2] Review Notifications"; | 5 | 5 | label="[R2] Review Notifications"; | |
node[shape=box, style="rounded,filled,bold"]; | 6 | 6 | node[shape=box, style="rounded,filled,bold"]; | |
splines=ortho; | 7 | 7 | splines=ortho; | |
nodesep=1.4; | 8 | 8 | nodesep=1.4; | |
"Sidebar Menu"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | 9 | 9 | "Navbar"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
"Server"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | 10 | 10 | "Server"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
11 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, fixedsize=true, width=1.1, height=1.1]; | |||
11 | 12 | |||
"Notification"[shape=none]; | 12 | 13 | "Notification"[shape=none]; | |
"UPDATE"[shape=none]; | 13 | 14 | "UPDATE"[shape=none]; | |
14 | 15 | |||
"Server" -> "Notification"; | 15 | 16 | "Server" -> "Notification"; | |
"Notification" -> "Controller"; | 16 | 17 | "Notification" -> "Controller"; | |
"Controller" -> "UPDATE"; | 17 | 18 | "Controller" -> "UPDATE"; | |
"UPDATE" -> "Sidebar Menu"; | 18 | 19 | "UPDATE" -> "Navbar"; | |
19 | 20 |
screen_sequence_diagrams/study_deck.dot
View file @
345f92a
digraph G{ | 1 | 1 | digraph G{ | |
// Title | 2 | 2 | // Title | |
labelloc="t" | 3 | 3 | labelloc="t" | |
label="[R1] Study Deck" | 4 | 4 | label="[R1] Study Deck" | |
5 | 5 | |||
ratio=0.75; | 6 | 6 | ratio=0.75; | |
//rankdir="LR"; | 7 | 7 | //rankdir="LR"; | |
node[shape=box, style="rounded,filled,bold"]; | 8 | 8 | node[shape=box, style="rounded,filled,bold"]; | |
splines=ortho; | 9 | 9 | splines=ortho; | |
nodesep=1.4; | 10 | 10 | nodesep=1.4; | |
"Navbar"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | 11 | 11 | "Navbar"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
"ClassView"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | 12 | 12 | "ClassView"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
"StudyView Blank"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | 13 | 13 | "StudyView Blank"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
"StudyView Response"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | 14 | 14 | "StudyView Response"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | 15 | 15 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | |
fixedsize=true, width=1.4, height=1.4]; | 16 | 16 | fixedsize=true, width=2.2, height=2.2]; | |
"POST"[shape=none]; | 17 | 17 | "POST"[shape=none]; | |
labelfloat=true; | 18 | 18 | labelfloat=true; | |
lp=100; | 19 | 19 | lp=100; | |
20 | 20 | |||
"SUCCESS\nUser has at least a card in the deck."[shape=none]; | 21 | 21 | "SUCCESS\nUser has at least a card in the deck."[shape=none]; | |
"FAILURE:\nUser has no card in the deck."[shape=none]; | 22 | 22 | "FAILURE:\nUser has no card in the deck."[shape=none]; | |
23 | 23 | |||
"Navbar" -> "ClassView"; | 24 | 24 | "Navbar" -> "ClassView"; | |
"ClassView" -> "POST"; | 25 | 25 | "ClassView" -> "POST"; | |
"POST" -> "Controller"; | 26 | 26 | "POST" -> "Controller"; | |
"Controller" -> "FAILURE:\nUser has no card in the deck."; | 27 | 27 | "Controller" -> "FAILURE:\nUser has no card in the deck."; | |
"Controller" -> "SUCCESS\nUser has at least a card in the deck."; | 28 | 28 | "Controller" -> "SUCCESS\nUser has at least a card in the deck."; | |
"FAILURE:\nUser has no card in the deck." -> "Sidebar Menu"; | 29 | 29 | "FAILURE:\nUser has no card in the deck." -> "Navbar"; | |
"SUCCESS\nUser has at least a card in the deck." -> "StudyView Blank"; | 30 | 30 | "SUCCESS\nUser has at least a card in the deck." -> "StudyView Blank"; | |
"StudyView Blank" -> "POST"; | 31 | 31 | "StudyView Blank" -> "POST"; | |
"Controller" -> "StudyView Response"; | 32 | 32 | "Controller" -> "StudyView Response"; | |
"StudyView Response" -> "POST"; | 33 | 33 | "StudyView Response" -> "POST"; | |
"Controller" -> "StudyView Blank"; | 34 | 34 | "Controller" -> "StudyView Blank"; |
screen_sequence_diagrams/user_login_out.dot
View file @
345f92a
digraph G{ | 1 | 1 | digraph G{ | |
labelloc="t"; | 2 | 2 | labelloc="t"; | |
label="[A2] Login & [A8] Logout"; | 3 | 3 | label="[A2] Login & [A8] Logout"; | |
4 | 4 | |||
// Other | 5 | 5 | // Other | |
ratio=0.75; | 6 | 6 | ratio=0.75; | |
node[shape=box, style="rounded,filled,bold"]; | 7 | 7 | node[shape=box, style="rounded,filled,bold"]; | |
splines=ortho; | 8 | 8 | splines=ortho; | |
nodesep=1.4; | 9 | 9 | nodesep=1.4; | |
"Navbar"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | 10 | 10 | "Navbar"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
"Login/Register Page"[center=true, fillcolor="#aaaaff", style=filled]; | 11 | 11 | "Login/Register Page"[center=true, fillcolor="#aaaaff", style=filled]; | |
"Logout Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, | 12 | 12 | "Logout Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, | |
fixedsize=true, width=1.8, height=1.8]; | 13 | 13 | fixedsize=true, width=1.8, height=1.8]; | |
"Login Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, | 14 | 14 | "Login Controller"[center=true, fillcolor="#aaaaff", style=filled, shape=diamond, | |
fixedsize=true, width=1.8, height=1.8]; | 15 | 15 | fixedsize=true, width=1.8, height=1.8]; | |
"POST"[shape=none]; | 16 | 16 | "POST"[shape=none]; | |
labelfloat=true; | 17 | 17 | labelfloat=true; | |
lp=100; | 18 | 18 | lp=100; | |
19 | 19 | |||
"SUCCESS:\n User logged in"[shape=none]; | 20 | 20 | "SUCCESS:\n User logged in"[shape=none]; | |
"SUCCESS:\n User logged out"[shape=none]; | 21 | 21 | "SUCCESS:\n User logged out"[shape=none]; | |
"Logout FAILURE"[shape=none]; | 22 | 22 | "Logout FAILURE"[shape=none]; | |
"Login FAILURE"[shape=none]; | 23 | 23 | "Login FAILURE"[shape=none]; | |
24 | 24 | |||
"Logout Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | 25 | 25 | "Logout Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | |
fixedsize=true, width=1.8, height=1.8]; | 26 | 26 | fixedsize=true, width=1.8, height=1.8]; | |
"Login Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | 27 | 27 | "Login Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | |
fixedsize=true, width=1.8, height=1.8]; | 28 | 28 | fixedsize=true, width=1.8, height=1.8]; | |
29 | 29 | |||
// Graph | 30 | 30 | // Graph | |
"Navbar" -> "POST"[dir=none]; | 31 | 31 | "Navbar" -> "POST"; | |
"POST" -> "Logout Controller"; | 32 | 32 | "POST" -> "Logout Controller"; | |
"Logout Controller" -> "Logout FAILURE"[dir=none]; | 33 | 33 | "Logout Controller" -> "Logout FAILURE"; | |
"Logout FAILURE" -> "Sidebar Menu"; | 34 | 34 | "Logout FAILURE" -> "Sidebar Menu"; | |
35 | 35 | |||
"Logout Controller" -> "SUCCESS:\n User logged out"; | 36 | 36 | "Logout Controller" -> "SUCCESS:\n User logged out"; | |
"SUCCESS:\n User logged out" -> "Login/Register Page"; | 37 | 37 | "SUCCESS:\n User logged out" -> "Login/Register Page"; | |
38 | 38 | |||
"Login/Register Page" -> "Login Controller"; | 39 | 39 | "Login/Register Page" -> "Login Controller"; | |
"Login Controller" -> "SUCCESS:\n User logged in"; | 40 | 40 | "Login Controller" -> "SUCCESS:\n User logged in"; | |
"SUCCESS:\n User logged in" -> "Sidebar Menu"; | 41 | 41 | "SUCCESS:\n User logged in" -> "Sidebar Menu"; | |
42 | 42 | |||
"Login Controller" -> "Login FAILURE"; | 43 | 43 | "Login Controller" -> "Login FAILURE"; | |
"Login FAILURE" -> "Login/Register Page"; | 44 | 44 | "Login FAILURE" -> "Login/Register Page"; | |
} | 45 | 45 | } | |
46 | 46 | |||
screen_sequence_diagrams/user_register.dot
View file @
345f92a
digraph G{ | 1 | 1 | digraph G{ | |
// Title | 2 | 2 | // Title | |
//"Login/Logout"[center=true,fillcolor="#ffffff",pos="0,0!",shape=none,fontsize=20]; | 3 | 3 | //"Login/Logout"[center=true,fillcolor="#ffffff",pos="0,0!",shape=none,fontsize=20]; | |
labelloc="t"; | 4 | 4 | labelloc="t"; | |
label="[A1] User Registration"; | 5 | 5 | label="[A1] User Registration"; | |
6 | 6 | |||
// Other | 7 | 7 | // Other | |
ratio=0.75; | 8 | 8 | ratio=0.75; | |
node[shape=box, style="rounded,filled,bold"]; | 9 | 9 | node[shape=box, style="rounded,filled,bold"]; | |
splines=ortho; | 10 | 10 | splines=ortho; | |
// nodesep=1.3; | 11 | 11 | // nodesep=1.3; | |
nodesep=3.0; | 12 | 12 | nodesep=3.0; | |
ranksep=0.05; | 13 | 13 | ranksep=0.05; | |
"Login/Register Page"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | 14 | 14 | "Login/Register Page"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
"POST"[shape=none]; | 15 | 15 | "POST"[shape=none]; | |
labelfloat=true; | 16 | 16 | labelfloat=true; | |
lp=100; | 17 | 17 | lp=100; | |
18 | 18 | |||
"SUCCESS:\nValid, send JSON."[shape=none]; | 19 | 19 | "SUCCESS:\nValid, send JSON."[shape=none]; | |
"SUCCESS:\nValid, unverified user created.\nEmail verification message displayed."[shape=none]; | 20 | 20 | "SUCCESS:\nValid, unverified user created.\nEmail verification message displayed."[shape=none]; | |
"FAILURE"[shape=none]; | 21 | 21 | "FAILURE"[shape=none]; | |
"FAILURE:\nData invalid"[shape=none]; | 22 | 22 | "FAILURE:\nData invalid"[shape=none]; | |
23 | 23 | |||
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | 24 | 24 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | |
fixedsize=true, width=1.5, height=1.5]; | 25 | 25 | fixedsize=true, width=1.5, height=1.5]; | |
"Server"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | 26 | 26 | "Server"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |
fixedsize=true, width=1.5, height=1.5]; | 27 | |||
28 | 27 | |||
// Graph | 29 | 28 | // Graph | |
"Login/Register Page" -> "POST"; | 30 | 29 | "Login/Register Page" -> "POST"; | |
"POST" -> "Controller"; | 31 | 30 | "POST" -> "Controller"; | |
32 | 31 | |||
"Controller" -> "FAILURE"; | 33 | 32 | "Controller" -> "FAILURE"; | |
"FAILURE" -> "Login/Register Page"; | 34 | 33 | "FAILURE" -> "Login/Register Page"; | |
35 | 34 | |||
"Controller" -> "SUCCESS:\nValid, send JSON."; | 36 | 35 | "Controller" -> "SUCCESS:\nValid, send JSON."; | |
"SUCCESS:\nValid, send JSON." -> "Server"; | 37 | 36 | "SUCCESS:\nValid, send JSON." -> "Server"; | |
38 | 37 | |||
"Server" -> "FAILURE:\nData invalid"; | 39 | 38 | "Server" -> "FAILURE:\nData invalid"; |
screen_sequence_diagrams/view_by_material_time.dot
View file @
345f92a
File was created | 1 | digraph G{ | ||
2 | ratio=0.75; | |||
3 | //rankdir="LR"; | |||
4 | labelloc="t"; | |||
5 | label="[D2] View A Card by Material Time"; | |||
6 | node[shape=box, style="rounded,filled,bold"]; | |||
7 | splines=ortho; | |||
8 | nodesep=1.0; | |||
9 | "View Deck"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | |||
10 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | |||
11 | fixedsize=true, width=1.4, height=1.4]; | |||
12 | "POST"[shape=none]; | |||
13 | labelfloat=true; | |||
14 | lp=100; | |||
15 | ||||
16 | "FAILURE"[shape=none]; | |||
17 | ||||
18 | "Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | |||
19 | fixedsize=true, width=1.4, height=1.4]; | |||
20 | "POST"[shape=none]; | |||
21 | "View Deck" -> "POST"; | |||
22 | "POST" -> "Controller"; | |||
23 | "Controller" -> "FAILURE"; | |||
24 | "FAILURE" -> "View Deck"; | |||
25 | "Controller" -> "Sort by Ascending\nor Descending Time"; |
screen_sequence_diagrams/view_by_pull_time.dot
View file @
345f92a
digraph G{ | 1 | File was deleted | ||
ratio=0.75; | 2 | |||
//rankdir="LR"; | 3 | |||
labelloc="t"; | 4 | |||
label="[D2] View A Card by Pull Time"; | 5 | |||
node[shape=box, style="rounded,filled,bold"]; | 6 | |||
splines=ortho; | 7 | |||
nodesep=1.0; | 8 | |||
"View Deck"[center=true, fillcolor="#aaaaff", style=filled,pos="0,0!"]; | 9 | |||
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | 10 | |||
fixedsize=true, width=1.4, height=1.4]; | 11 | |||
"POST"[shape=none]; | 12 | |||
labelfloat=true; | 13 | |||
lp=100; | 14 | |||
15 | ||||
"FAILURE"[shape=none]; | 16 | |||
17 | ||||
"Controller"[center=true, fillcolor="#aaaaff", style=filled, shape = diamond, | 18 | |||
fixedsize=true, width=1.4, height=1.4]; | 19 | |||
"POST"[shape=none]; | 20 | |||
"View Deck" -> "POST"; | 21 | |||
"POST" -> "Controller"; | 22 | |||
"Controller" -> "FAILURE"; | 23 | |||
"FAILURE" -> "View Deck"; | 24 | |||
"Controller" -> "Sort by Ascending\nor Descending Time"; | 25 |