Commit 345f92a8a15d7d9dfc6cc520f1f3b943d8d5133b

Authored by mjeng
Exists in master

Merge branch 'master' of https://git.ucsd.edu/110swag/docs

Showing 14 changed files Inline Diff

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