Commit 2ea9c20eb93e5a90e75c3fa2fbe1a855dceb8342

Authored by Melody
1 parent 2b15e202e2
Exists in master

Edited 'Study Deck'

Showing 1 changed file with 35 additions and 15 deletions Inline Diff

DesignUseCases.tex View file @ 2ea9c20
\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 Design Use Cases} 5 5 \title{\huge Design Use Cases}
\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
\tableofcontents 44 44 \tableofcontents
\newpage 45 45 \newpage
\section{Accounts} 46 46 \section{Accounts}
\subsection{[A1] User Registration} 47 47 \subsection{[A1] User Registration}
\begin{description}[style=multiline,leftmargin=3cm] 48 48 \begin{description}[style=multiline,leftmargin=3cm]
\item[Description]{To create and save decks, the system requires the user 49 49 \item[Description]{To create and save decks, the system requires the user
to create an account prior. The user will be able to create an account 50 50 to create an account prior. The user will be able to create an account
through registering.} 51 51 through registering.}
\item[Desired Outcome]{An account will be created for the user from the 52 52 \item[Desired Outcome]{An account will be created for the user from the
specified username, password, email. The user will be able to log into 53 53 specified username, password, email. The user will be able to log into
the aforementioned account.} 54 54 the aforementioned account.}
\\ 55 55 \\
\item[User Goals]{The user shall have an account to participate in the 56 56 \item[User Goals]{The user shall have an account to participate in the
website's activities.} 57 57 website's activities.}
58 58
\item[Primary Actor]{User (student)} 59 59 \item[Primary Actor]{User (student)}
60 60
\item[Dependency Use Cases]{None} 61 61 \item[Dependency Use Cases]{None}
\\ 62 62 \\
\item[Priority Level]{``Must''} 63 63 \item[Priority Level]{``Must''}
64 64
\item[Status]{Not Implemented} 65 65 \item[Status]{Not Implemented}
66 66
\item[Pre-conditions] 67 67 \item[Pre-conditions]
68 68
\item[Post-conditions] 69 69 \item[Post-conditions]
70 70
\begin{itemize} 71 71 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 72 72 \itemsep1pt\parskip0pt\parsep0pt
\item 73 73 \item
{The user has an account registered with the system.} 74 74 {The user has an account registered with the system.}
\end{itemize} 75 75 \end{itemize}
76 76
\item[Trigger]{The user wants to create an account.} 77 77 \item[Trigger]{The user wants to create an account.}
78 78
\item[Workflow] 79 79 \item[Workflow]
80 80
\begin{enumerate} 81 81 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 82 82 \itemsep1pt\parskip0pt\parsep0pt
\item 83 83 \item
{The user shall click the sign up button.} 84 84 {The user shall click the sign up button.}
\item 85 85 \item
{The client renders a registration form and displays it to the user} 86 86 {The client renders a registration form and displays it to the user}
\item 87 87 \item
{The user fills the form} 88 88 {The user fills the form}
\item 89 89 \item
{The client checks that the provided email is not invalid, and that 90 90 {The client checks that the provided email is not invalid, and that
the password is not valid. If anything is not valid, it displays an 91 91 the password is not valid. If anything is not valid, it displays an
error and returns this to the user. } 92 92 error and returns this to the user. }
\item 93 93 \item
{If the form is valid, the client POSTs the form in JSON format to the 94 94 {If the form is valid, the client POSTs the form in JSON format to the
server API at /api/users/me.} 95 95 server API at /api/users/me.}
\item 96 96 \item
{The server deserializes and validates the data. If it's not valid, it 97 97 {The server deserializes and validates the data. If it's not valid, it
returns an error to the client.} 98 98 returns an error to the client.}
\item 99 99 \item
{The server creates a new User object from the provided data, filling 100 100 {The server creates a new User object from the provided data, filling
in the appropriate fields} 101 101 in the appropriate fields}
\item 102 102 \item
{The server saves the user object} 103 103 {The server saves the user object}
\item 104 104 \item
{The server marks the user's email as unverified} 105 105 {The server marks the user's email as unverified}
\item 106 106 \item
{The server sends an email to the user's address with a link to 107 107 {The server sends an email to the user's address with a link to
validate the user's email address.} 108 108 validate the user's email address.}
\item 109 109 \item
{The server responds with success and logs the user in on a new 110 110 {The server responds with success and logs the user in on a new
session for the user. } 111 111 session for the user. }
\item 112 112 \item
{The client reports success to the user and stores the sessionid for 113 113 {The client reports success to the user and stores the sessionid for
future requests.} 114 114 future requests.}
\end{enumerate} 115 115 \end{enumerate}
116 116
{Verification Workflow:} 117 117 {Verification Workflow:}
118 118
\begin{enumerate} 119 119 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 120 120 \itemsep1pt\parskip0pt\parsep0pt
\item 121 121 \item
{The user receives an email with a link to verify their email. The 122 122 {The user receives an email with a link to verify their email. The
user clicks the link} 123 123 user clicks the link}
\item 124 124 \item
{The client submits the verification code to the server} 125 125 {The client submits the verification code to the server}
\item 126 126 \item
{The server validates the code. If the code is not valid, it returns 127 127 {The server validates the code. If the code is not valid, it returns
an error to the client.} 128 128 an error to the client.}
\item 129 129 \item
{The server marks the user's email as valid and saves the User object 130 130 {The server marks the user's email as valid and saves the User object
again. The user's account is now active} 131 131 again. The user's account is now active}
\item 132 132 \item
{The client reports success. } 133 133 {The client reports success. }
\end{enumerate} 134 134 \end{enumerate}
135 135
\end{description} 136 136 \end{description}
137 137
\newpage 138 138 \newpage
\subsection{{{{[}A2{]} User 139 139 \subsection{{{{[}A2{]} User
Login}}{{[}A2{]} User Login}} 140 140 Login}}{{[}A2{]} User Login}}
141 141
\begin{description} 142 142 \begin{description}
\item[Description]{User is able to login to personal account.} 143 143 \item[Description]{User is able to login to personal account.}
144 144
\item[Desired Outcome]{The user shall be able to provide their username and 145 145 \item[Desired Outcome]{The user shall be able to provide their username and
password to access their courses and flash cards. The user shall gain 146 146 password to access their courses and flash cards. The user shall gain
access to the list of the courses they have added, and be able to review 147 147 access to the list of the courses they have added, and be able to review
the flash cards they have added to their decks.} 148 148 the flash cards they have added to their decks.}
\\ 149 149 \\
\item[User Goals]{The user wants to resume use of the site on another 150 150 \item[User Goals]{The user wants to resume use of the site on another
device, or use the site after logging out.} 151 151 device, or use the site after logging out.}
152 152
\item[Primary Actor]{User (student)} 153 153 \item[Primary Actor]{User (student)}
154 154
\item[Dependency Use Cases]{{[}A1{]} User Registration} 155 155 \item[Dependency Use Cases]{{[}A1{]} User Registration}
\\ 156 156 \\
\item[Priority Level]{``Must''} 157 157 \item[Priority Level]{``Must''}
158 158
\item[Status]{Not Implemented} 159 159 \item[Status]{Not Implemented}
160 160
\item[Pre-conditions] 161 161 \item[Pre-conditions]
162 162
\begin{itemize} 163 163 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 164 164 \itemsep1pt\parskip0pt\parsep0pt
\item 165 165 \item
{The user has created an account before.} 166 166 {The user has created an account before.}
\end{itemize} 167 167 \end{itemize}
168 168
\item[Post-conditions] 169 169 \item[Post-conditions]
170 170
\begin{itemize} 171 171 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 172 172 \itemsep1pt\parskip0pt\parsep0pt
\item 173 173 \item
{The user can navigate the site and see their data.} 174 174 {The user can navigate the site and see their data.}
\end{itemize} 175 175 \end{itemize}
176 176
\item[Trigger]{The User shall enter their email and password into the Login 177 177 \item[Trigger]{The User shall enter their email and password into the Login
form. The user then submits this information by clicking the ``Login'' 178 178 form. The user then submits this information by clicking the ``Login''
button or pressing the return key.} 179 179 button or pressing the return key.}
180 180
\item[Workflow] 181 181 \item[Workflow]
182 182
\begin{enumerate} 183 183 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 184 184 \itemsep1pt\parskip0pt\parsep0pt
\item 185 185 \item
{The server verifies that the User has submitted an email and password} 186 186 {The server verifies that the User has submitted an email and password}
\item 187 187 \item
{The server authenticates the User's email and password and checks if the 188 188 {The server authenticates the User's email and password and checks if the
User is active} 189 189 User is active}
\item 190 190 \item
{The server logs the User in using the Django login feature} 191 191 {The server logs the User in using the Django login feature}
\item 192 192 \item
{Front-end displays the home page for the User} 193 193 {Front-end displays the home page for the User}
\end{enumerate} 194 194 \end{enumerate}
\end{description} 195 195 \end{description}
\newpage 196 196 \newpage
197 197
\subsection{{[}A3{]} Add a Class} 198 198 \subsection{{[}A3{]} Add a Class}
\begin{description} 199 199 \begin{description}
\item[Description]{The user shall be able to add a class and access the 200 200 \item[Description]{The user shall be able to add a class and access the
flashcards associated with that class.} 201 201 flashcards associated with that class.}
202 202
\item[Desired Outcome]{The class shall be linked with the student's account 203 203 \item[Desired Outcome]{The class shall be linked with the student's account
and the student shall have the ability to read and publish flashcards 204 204 and the student shall have the ability to read and publish flashcards
for this class.} 205 205 for this class.}
\\ 206 206 \\
\item[User Goals]{The user wants to publish flashcards for this class, and 207 207 \item[User Goals]{The user wants to publish flashcards for this class, and
reads the flashcards for this class that are published by other users.} 208 208 reads the flashcards for this class that are published by other users.}
209 209
\item[Primary Actor]{User (student)} 210 210 \item[Primary Actor]{User (student)}
211 211
\item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User 212 212 \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User
Login} 213 213 Login}
\\ 214 214 \\
\item[Priority Level]{``Must''} 215 215 \item[Priority Level]{``Must''}
216 216
\item[Status]{Not implemented} 217 217 \item[Status]{Not implemented}
218 218
\item[Pre-conditions] 219 219 \item[Pre-conditions]
220 220
\begin{itemize} 221 221 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 222 222 \itemsep1pt\parskip0pt\parsep0pt
\item 223 223 \item
{The user has created an account.} 224 224 {The user has created an account.}
\item 225 225 \item
{The user is logged in to their account and is at root view} 226 226 {The user is logged in to their account and is at root view}
\end{itemize} 227 227 \end{itemize}
228 228
\item[Post-conditions] 229 229 \item[Post-conditions]
230 230
\begin{itemize} 231 231 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 232 232 \itemsep1pt\parskip0pt\parsep0pt
\item 233 233 \item
{The user can read the flashcards being published for the class and 234 234 {The user can read the flashcards being published for the class and
add them to his/her deck.} 235 235 add them to his/her deck.}
\item 236 236 \item
{The user can publish flashcards to be viewed and added by other users 237 237 {The user can publish flashcards to be viewed and added by other users
in the same class.} 238 238 in the same class.}
\end{itemize} 239 239 \end{itemize}
240 240
\item[Trigger]{The user wants to add a class.} 241 241 \item[Trigger]{The user wants to add a class.}
242 242
\item[Workflow] 243 243 \item[Workflow]
244 244
\begin{enumerate} 245 245 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 246 246 \itemsep1pt\parskip0pt\parsep0pt
\item 247 247 \item
{The user shall click add a class on the sidebar.} 248 248 {The user shall click add a class on the sidebar.}
\item 249 249 \item
{The client shall bring the user to a AddClassView.} 250 250 {The client shall bring the user to a AddClassView.}
\item 251 251 \item
{The user begins to type their class name or number.} 252 252 {The user begins to type their class name or number.}
\item 253 253 \item
{The ShowSuggestion shall show suggestions as a user types.} 254 254 {The ShowSuggestion shall show suggestions as a user types.}
\end{enumerate} 255 255 \end{enumerate}
256 256
\begin{itemize} 257 257 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 258 258 \itemsep1pt\parskip0pt\parsep0pt
\item 259 259 \item
{Implementation unspecified at present; need to do further research 260 260 {Implementation unspecified at present; need to do further research
(django-autocomplete-lite?)} 261 261 (django-autocomplete-lite?)}
\end{itemize} 262 262 \end{itemize}
263 263
\begin{enumerate} 264 264 \begin{enumerate}
\setcounter{enumi}{3} 265 265 \setcounter{enumi}{3}
\itemsep1pt\parskip0pt\parsep0pt 266 266 \itemsep1pt\parskip0pt\parsep0pt
\item 267 267 \item
{The user shall select a class by clicking on ``Add Class''.} 268 268 {The user shall select a class by clicking on ``Add Class''.}
\item 269 269 \item
{The client shall submit a POST request to /api/users/me/sections with 270 270 {The client shall submit a POST request to /api/users/me/sections with
the course ID that the User added. } 271 271 the course ID that the User added. }
\item 272 272 \item
{The server shall check if there is a whitelist for the class that the 273 273 {The server shall check if there is a whitelist for the class that the
user is trying to add.} 274 274 user is trying to add.}
\item 275 275 \item
{The server shall ensure that the user is whitelisted.} 276 276 {The server shall ensure that the user is whitelisted.}
\item 277 277 \item
{The server shall link the user to the section.} 278 278 {The server shall link the user to the section.}
\end{enumerate} 279 279 \end{enumerate}
280 280
\item[Alternate Workflow: User is not whitelisted.] 281 281 \item[Alternate Workflow: User is not whitelisted.]
\begin{enumerate} 282 282 \begin{enumerate}
\setcounter{enumi}{7} 283 283 \setcounter{enumi}{7}
\itemsep1pt\parskip0pt\parsep0pt 284 284 \itemsep1pt\parskip0pt\parsep0pt
\item 285 285 \item
{The server shall . } 286 286 {The server shall deny user access to class.}
287 \item
288 {The client shall display failure message to user.}
289 \end{enumerate}
287 290
291 \item[Alternate Workflow: There is no whitelist.]
292 \begin{enumerate}
293 \setcounter{enumi}{6}
294 \itemsep1pt\parskip0pt\parsep0pt
295 \item
296 {The server shall link the user to the section.}
297 \item
298 {The client shall display success message to user.}
\end{enumerate} 288 299 \end{enumerate}
\end{description} 289 300 \end{description}
{} 290 301 {}
291 302
\newpage 292 303 \newpage
293 304
{} 294 305 {}
295 306
\subsection{{{{[}A4{]} }{Drop a 296 307 \subsection{{{{[}A4{]} }{Drop a
Class}}{{[}A4{]} Drop a Class}} 297 308 Class}}{{[}A4{]} Drop a Class}}
298 309
\begin{description} 299 310 \begin{description}
\item[Description]{The user can remove themselves from a course he/she is 300 311 \item[Description]{The user can remove themselves from a course he/she is
registered to} 301 312 registered to}
302 313
\item[Desired Outcome]{The user has dropped the class and no longer need 303 314 \item[Desired Outcome]{The user has dropped the class and no longer need
access to the flashcards for said class. This means they can no longer 304 315 access to the flashcards for said class. This means they can no longer
see the flashcards associated to the class that they dropped } 305 316 see the flashcards associated to the class that they dropped }
\\ 306 317 \\
\item[User Goals]{The user shall not have access to a class and the 307 318 \item[User Goals]{The user shall not have access to a class and the
flashcards associated with that class. They will no longer see the class 308 319 flashcards associated with that class. They will no longer see the class
listed in their list of ``Enrolled Classes''} 309 320 listed in their list of ``Enrolled Classes''}
310 321
\item[Primary Actor]{User (student)} 311 322 \item[Primary Actor]{User (student)}
312 323
\item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User 313 324 \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User
Login, {[}A3{]} Add a Class} 314 325 Login, {[}A3{]} Add a Class}
\\ 315 326 \\
\item[Priority Level]{ ``Should''} 316 327 \item[Priority Level]{ ``Should''}
317 328
\item[Status]{Not Implemented } 318 329 \item[Status]{Not Implemented }
319 330
\item[Pre-conditions] 320 331 \item[Pre-conditions]
321 332
\begin{itemize} 322 333 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 323 334 \itemsep1pt\parskip0pt\parsep0pt
\item 324 335 \item
{User has a valid account.} 325 336 {User has a valid account.}
\item 326 337 \item
{User is logged in.} 327 338 {User is logged in.}
\item 328 339 \item
{User has enrolled in classes.} 329 340 {User has enrolled in classes.}
\end{itemize} 330 341 \end{itemize}
331 342
\item[Post-conditions]{} 332 343 \item[Post-conditions]{}
333 344
\begin{itemize} 334 345 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 335 346 \itemsep1pt\parskip0pt\parsep0pt
\item 336 347 \item
{User shall no longer have access to dropped class, or associated 337 348 {User shall no longer have access to dropped class, or associated
flashcards} 338 349 flashcards}
\end{itemize} 339 350 \end{itemize}
340 351
\item[Trigger]{User clicked button to drop class.} 341 352 \item[Trigger]{User clicked button to drop class.}
342 353
\item[Workflow] 343 354 \item[Workflow]
344 355
\begin{enumerate} 345 356 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 346 357 \itemsep1pt\parskip0pt\parsep0pt
\item 347 358 \item
{The user shall click ``Drop'' (or equivalent) button.} 348 359 {The user shall click ``Drop'' (or equivalent) button.}
\item 349 360 \item
{The client shall display a dialogue box which will say ``Are you 350 361 {The client shall display a dialogue box which will say ``Are you
sure you want to drop this class?''} 351 362 sure you want to drop this class?''}
\item 352 363 \item
{The user shall click ``Yes'' to confirm that they want to drop the 353 364 {The user shall click ``Yes'' to confirm that they want to drop the
class} 354 365 class}
\item 355 366 \item
{The client shall submit a DELETE request to 356 367 {The client shall submit a DELETE request to
/api/users/me/sections/\textless{}section ID number\textgreater{}.} 357 368 /api/users/me/sections/\textless{}section ID number\textgreater{}.}
\item 358 369 \item
{If the user is not already enrolled in the section, the server will 359 370 {If the user is not already enrolled in the section, the server will
return a 404 Not Found error, which the client shall handle. (The 360 371 return a 404 Not Found error, which the client shall handle. (The
client should not show an error to the user)} 361 372 client should not show an error to the user)}
\item 362 373 \item
{The server shall remove the selected class from a user's list of 363 374 {The server shall remove the selected class from a user's list of
classes. } 364 375 classes. }
\item 365 376 \item
{The server shall return success to the client} 366 377 {The server shall return success to the client}
\end{enumerate} 367 378 \end{enumerate}
\end{description} 368 379 \end{description}
\newpage 369 380 \newpage
370 381
{} 371 382 {}
372 383
\subsection{{{{[}A5{]} Password 373 384 \subsection{{{{[}A5{]} Password
change}}{{[}A5{]} Password change}} 374 385 change}}{{[}A5{]} Password change}}
375 386
\begin{description} 376 387 \begin{description}
\item[Description]{The user shall be able to change the password for their 377 388 \item[Description]{The user shall be able to change the password for their
account in the account settings. This requires that they are logged in. 378 389 account in the account settings. This requires that they are logged in.
} 379 390 }
380 391
\item[Desired Outcome]{The user's password shall be changed and the user 381 392 \item[Desired Outcome]{The user's password shall be changed and the user
shall be able to log in with the new password in the future} 382 393 shall be able to log in with the new password in the future}
\\\\ 383 394 \\\\
\item[User Goals]{The user wants to use a different password in the future} 384 395 \item[User Goals]{The user wants to use a different password in the future}
385 396
\item[Primary Actor]{User (student)} 386 397 \item[Primary Actor]{User (student)}
387 398
\item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User 388 399 \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User
Login} 389 400 Login}
\\ 390 401 \\
\item[Details]{The user provides their current password and a new password 391 402 \item[Details]{The user provides their current password and a new password
in a form. If the current password is correct, the system updates their 392 403 in a form. If the current password is correct, the system updates their
password to the requested new password.} 393 404 password to the requested new password.}
394 405
\item[Priority Level]{``Must''} 395 406 \item[Priority Level]{``Must''}
396 407
\item[Status]{Not }{implemented} 397 408 \item[Status]{Not }{implemented}
398 409
\item[Pre-conditions] 399 410 \item[Pre-conditions]
400 411
\begin{itemize} 401 412 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 402 413 \itemsep1pt\parskip0pt\parsep0pt
\item 403 414 \item
{The user has created an account} 404 415 {The user has created an account}
\item 405 416 \item
{The user has logged in } 406 417 {The user has logged in }
\item 407 418 \item
{The user knows their current password} 408 419 {The user knows their current password}
\end{itemize} 409 420 \end{itemize}
410 421
\item[Post-conditions] 411 422 \item[Post-conditions]
412 423
\begin{itemize} 413 424 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 414 425 \itemsep1pt\parskip0pt\parsep0pt
\item 415 426 \item
{The user's password is changed} 416 427 {The user's password is changed}
\item 417 428 \item
{The user can log in with the new password} 418 429 {The user can log in with the new password}
\end{itemize} 419 430 \end{itemize}
420 431
\item[Trigger]{User clicks ``Change Password'' button in Accounts page} 421 432 \item[Trigger]{User clicks ``Change Password'' button in Accounts page}
422 433
\item[Workflow] 423 434 \item[Workflow]
424 435
\begin{enumerate} 425 436 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 426 437 \itemsep1pt\parskip0pt\parsep0pt
\item 427 438 \item
{The user shall press the ``Change Password'' button} 428 439 {The user shall press the ``Change Password'' button}
\item 429 440 \item
{The client shall render a form that requires the user to enter their 430 441 {The client shall render a form that requires the user to enter their
old password and new password} 431 442 old password and new password}
\item 432 443 \item
{The user shall enter their current password and the desired new 433 444 {The user shall enter their current password and the desired new
password} 434 445 password}
\item 435 446 \item
{The client shall verify that no fields are blank} 436 447 {The client shall verify that no fields are blank}
\item 437 448 \item
{The client shall submit the data to the server by sending a PATCH 438 449 {The client shall submit the data to the server by sending a PATCH
request to /api/users/me containing ``old\_password'' and 439 450 request to /api/users/me containing ``old\_password'' and
``new\_password'' values.} 440 451 ``new\_password'' values.}
\item 441 452 \item
{The server shall validate the pre-existing password} 442 453 {The server shall validate the pre-existing password}
\item 443 454 \item
{If server cannot validate the pre-existing password, the client will 444 455 {If server cannot validate the pre-existing password, the client will
render the same form with a message informing the user that the 445 456 render the same form with a message informing the user that the
pre-existing password that they have provided is incorrect} 446 457 pre-existing password that they have provided is incorrect}
\item 447 458 \item
{If the server successfully validates the pre-existing password, the 448 459 {If the server successfully validates the pre-existing password, the
system shall change the user's password} 449 460 system shall change the user's password}
\item 450 461 \item
{The client shall return a success to the user} 451 462 {The client shall return a success to the user}
\end{enumerate} 452 463 \end{enumerate}
\end{description} 453 464 \end{description}
{} 454 465 {}
455 466
\newpage 456 467 \newpage
457 468
{} 458 469 {}
459 470
\subsection{{{{[}A6{]} Password reset 460 471 \subsection{{{{[}A6{]} Password reset
}}{{[}A6{]} Password reset }} 461 472 }}{{[}A6{]} Password reset }}
462 473
\begin{description} 463 474 \begin{description}
\item[Description]{The user shall be able to reset their password without 464 475 \item[Description]{The user shall be able to reset their password without
being logged in } 465 476 being logged in }
466 477
\item[Desired Outcome]{The user's password shall be changed to one that 467 478 \item[Desired Outcome]{The user's password shall be changed to one that
they remember} 468 479 they remember}
\\ 469 480 \\
\item[User Goals]{The user does not know their current password but wants 470 481 \item[User Goals]{The user does not know their current password but wants
to log into the site} 471 482 to log into the site}
472 483
\item[Primary Actor]{User (student)} 473 484 \item[Primary Actor]{User (student)}
474 485
\item[Dependency Use Cases]{{[}A1{]} User Registration} 475 486 \item[Dependency Use Cases]{{[}A1{]} User Registration}
\\ 476 487 \\
\item[Details]{The user provides their email in a password reset form. If 477 488 \item[Details]{The user provides their email in a password reset form. If
the address is valid, the site sends a password reset link with a random 478 489 the address is valid, the site sends a password reset link with a random
token to that address. If the address is invalid, the site does not send 479 490 token to that address. If the address is invalid, the site does not send
a link. For security reasons, we do not reveal to the user whether the 480 491 a link. For security reasons, we do not reveal to the user whether the
email address was valid, and we expire the link after 24 hours. When a 481 492 email address was valid, and we expire the link after 24 hours. When a
user visits the link emailed to them, they are able to specify a new 482 493 user visits the link emailed to them, they are able to specify a new
password in a form. When they submit the form, their password is updated 483 494 password in a form. When they submit the form, their password is updated
if the token is correct. } 484 495 if the token is correct. }
485 496
\item[Priority Level]{``Must''} 486 497 \item[Priority Level]{``Must''}
487 498
\item[Status]{Not i}{mplemented} 488 499 \item[Status]{Not i}{mplemented}
489 500
\item[Pre-conditions] 490 501 \item[Pre-conditions]
491 502
\begin{itemize} 492 503 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 493 504 \itemsep1pt\parskip0pt\parsep0pt
\item 494 505 \item
{The user has created an account before} 495 506 {The user has created an account before}
\item 496 507 \item
{The user knows the email address attached to their account} 497 508 {The user knows the email address attached to their account}
\end{itemize} 498 509 \end{itemize}
499 510
\item[Post-conditions] 500 511 \item[Post-conditions]
501 512
\begin{itemize} 502 513 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 503 514 \itemsep1pt\parskip0pt\parsep0pt
\item 504 515 \item
{The user's password is changed} 505 516 {The user's password is changed}
\item 506 517 \item
{The user can log in with the new password} 507 518 {The user can log in with the new password}
\end{itemize} 508 519 \end{itemize}
509 520
\item[Trigger]{User clicks ``Forgot Password'' button on the login page} 510 521 \item[Trigger]{User clicks ``Forgot Password'' button on the login page}
511 522
\item[Workflow, requesting password reset] 512 523 \item[Workflow, requesting password reset]
513 524
\begin{enumerate} 514 525 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 515 526 \itemsep1pt\parskip0pt\parsep0pt
\item 516 527 \item
{The user shall click ``Forgot Password'' (or equivalent) button} 517 528 {The user shall click ``Forgot Password'' (or equivalent) button}
\item 518 529 \item
{The client shall prompt the user for their current email} 519 530 {The client shall prompt the user for their current email}
\item 520 531 \item
{The user shall submit their email address} 521 532 {The user shall submit their email address}
\item 522 533 \item
{The client shall validate that the email address is formatted 523 534 {The client shall validate that the email address is formatted
correctly} 524 535 correctly}
\item 525 536 \item
{The client shall submit the email address to the server in a POST 526 537 {The client shall submit the email address to the server in a POST
request to /api/reset\_password with an ``email'' value} 527 538 request to /api/reset\_password with an ``email'' value}
\item 528 539 \item
{The server shall check if an account exists with the email entered by 529 540 {The server shall check if an account exists with the email entered by
the user} 530 541 the user}
\item 531 542 \item
{If no such account exists, the server shall return an error to the 532 543 {If no such account exists, the server shall return an error to the
frontend, which will display it to the user} 533 544 frontend, which will display it to the user}
\item 534 545 \item
{If the account does exist, the server will:} 535 546 {If the account does exist, the server will:}
\end{enumerate} 536 547 \end{enumerate}
537 548
\begin{enumerate} 538 549 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 539 550 \itemsep1pt\parskip0pt\parsep0pt
\item 540 551 \item
{Create a new password reset token for the user} 541 552 {Create a new password reset token for the user}
\item 542 553 \item
{Send an email to the user with a link containing the token and the 543 554 {Send an email to the user with a link containing the token and the
user's ID} 544 555 user's ID}
\end{enumerate} 545 556 \end{enumerate}
546 557
\item[Workflow, resetting password] 547 558 \item[Workflow, resetting password]
548 559
\begin{enumerate} 549 560 \begin{enumerate}
\setcounter{enumi}{8} 550 561 \setcounter{enumi}{8}
\itemsep1pt\parskip0pt\parsep0pt 551 562 \itemsep1pt\parskip0pt\parsep0pt
\item 552 563 \item
{The user shall click the link in the email and visit 553 564 {The user shall click the link in the email and visit
/app/password\_reset} 554 565 /app/password\_reset}
\item 555 566 \item
{The client shall render a form that will prompt the user for a new 556 567 {The client shall render a form that will prompt the user for a new
password} 557 568 password}
\item 558 569 \item
{The user shall provide a new password in the form} 559 570 {The user shall provide a new password in the form}
\item 560 571 \item
{The client shall submit the password to the server} 561 572 {The client shall submit the password to the server}
\item 562 573 \item
{If the user tries to submit without a password in the text field, the 563 574 {If the user tries to submit without a password in the text field, the
client shall display a message saying ``Password cannot be blank.''} 564 575 client shall display a message saying ``Password cannot be blank.''}
\item 565 576 \item
{The server first verifies that the token is valid for the user} 566 577 {The server first verifies that the token is valid for the user}
\item 567 578 \item
{The server then verifies that the user's new password is non-blank} 568 579 {The server then verifies that the user's new password is non-blank}
\item 569 580 \item
{If neither of the above verifications fail, the server shall change 570 581 {If neither of the above verifications fail, the server shall change
the password associated with the user's email. } 571 582 the password associated with the user's email. }
\end{enumerate} 572 583 \end{enumerate}
\end{description} 573 584 \end{description}
\newpage 574 585 \newpage
575 586
{} 576 587 {}
577 588
\subsection{{{{[}A7{]} Limit Student Access to Courses 578 589 \subsection{{{{[}A7{]} Limit Student Access to Courses
}}{{[}A7{]} Limit Student Access to Courses }} 579 590 }}{{[}A7{]} Limit Student Access to Courses }}
580 591
\begin{description} 581 592 \begin{description}
\item[Description]{The instructor shall be able to limit access to the 582 593 \item[Description]{The instructor shall be able to limit access to the
courses that he is in charge of by whitelisting only those students that 583 594 courses that he is in charge of by whitelisting only those students that
are actually in the class.} 584 595 are actually in the class.}
585 596
\item[Desired Outcome]{The class will have limited access and only those 586 597 \item[Desired Outcome]{The class will have limited access and only those
users who are whitelisted may enroll in the class.} 587 598 users who are whitelisted may enroll in the class.}
\\ 588 599 \\
\item[User Goals]{The instructor wants to limit access to his class so only 589 600 \item[User Goals]{The instructor wants to limit access to his class so only
the students who are actually in his class participate, and nobody 590 601 the students who are actually in his class participate, and nobody
else.} 591 602 else.}
592 603
{Primary Actor: }{User (instructor)} 593 604 {Primary Actor: }{User (instructor)}
594 605
\item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User 595 606 \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User
Login} 596 607 Login}
\\ 597 608 \\
\item[Priority Level]{``Should''} 598 609 \item[Priority Level]{``Should''}
599 610
\item[Status]{Not Implemented} 600 611 \item[Status]{Not Implemented}
601 612
\item[Pre-conditions] 602 613 \item[Pre-conditions]
603 614
\begin{itemize} 604 615 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 605 616 \itemsep1pt\parskip0pt\parsep0pt
\item 606 617 \item
{User has valid instructor's account} 607 618 {User has valid instructor's account}
\end{itemize} 608 619 \end{itemize}
609 620
\item[Post-conditions] 610 621 \item[Post-conditions]
611 622
\begin{itemize} 612 623 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 613 624 \itemsep1pt\parskip0pt\parsep0pt
\item 614 625 \item
{Only those users who were whitelisted may add the class.} 615 626 {Only those users who were whitelisted may add the class.}
\end{itemize} 616 627 \end{itemize}
617 628
\item[Trigger]{The instructor emails the administrator and requests to 618 629 \item[Trigger]{The instructor emails the administrator and requests to
limit access to his class.} 619 630 limit access to his class.}
620 631
\item[Workflow] 621 632 \item[Workflow]
622 633
\begin{enumerate} 623 634 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 624 635 \itemsep1pt\parskip0pt\parsep0pt
\item 625 636 \item
{The instructor emails the administrators from his UCSD email address 626 637 {The instructor emails the administrators from his UCSD email address
and requests to limit access to his course. He provides a list of 627 638 and requests to limit access to his course. He provides a list of
emails of the students that are to be whitelisted.} 628 639 emails of the students that are to be whitelisted.}
\item 629 640 \item
{The administrators visit a custom admin page, select the course, and 630 641 {The administrators visit a custom admin page, select the course, and
paste the list of emails. They submit the page directly (no separate 631 642 paste the list of emails. They submit the page directly (no separate
frontend here) to the server.} 632 643 frontend here) to the server.}
\item 633 644 \item
{The server shall create a WhitelistedAddress for each provided email, 634 645 {The server shall create a WhitelistedAddress for each provided email,
attaching it to the section taught by the instructor.} 635 646 attaching it to the section taught by the instructor.}
\item 636 647 \item
{The server shall add any existing users whose email addresses appear 637 648 {The server shall add any existing users whose email addresses appear
in the whitelist to the class. } 638 649 in the whitelist to the class. }
\end{enumerate} 639 650 \end{enumerate}
\end{description} 640 651 \end{description}
\newpage 641 652 \newpage
642 653
\subsection{{{{[}A8{]} User 643 654 \subsection{{{{[}A8{]} User
Logout}}{{[}A8{]} User Logout}} 644 655 Logout}}{{[}A8{]} User Logout}}
645 656
\begin{description} 646 657 \begin{description}
\item[Description]{The user shall be able to log out of his/her account on 647 658 \item[Description]{The user shall be able to log out of his/her account on
the site.} 648 659 the site.}
649 660
\item[Desired Outcome]{The user's information and data will no longer be 650 661 \item[Desired Outcome]{The user's information and data will no longer be
accessible after logging out. } 651 662 accessible after logging out. }
\\ 652 663 \\
\item[User Goals]{The user is done with his/her session of using the 653 664 \item[User Goals]{The user is done with his/her session of using the
website, and wants to make sure others cannot access the data in his/her 654 665 website, and wants to make sure others cannot access the data in his/her
account.} 655 666 account.}
656 667
\item[Primary Actor]{User (student)} 657 668 \item[Primary Actor]{User (student)}
658 669
\item[Dependency Use Cases] None 659 670 \item[Dependency Use Cases] None
\\ 660 671 \\
\item[Priority Level]{``Must''} 661 672 \item[Priority Level]{``Must''}
662 673
\item[Status]{Implemented} 663 674 \item[Status]{Implemented}
664 675
\item[Pre-conditions]{The user is logged into their account} 665 676 \item[Pre-conditions]{The user is logged into their account}
666 677
\item[Post-conditions]{}{The user's data can no longer be accessed.} 667 678 \item[Post-conditions]{}{The user's data can no longer be accessed.}
668 679
\item[Trigger]{User clicks ``Logout'' button} 669 680 \item[Trigger]{User clicks ``Logout'' button}
670 681
\item[Workflow] 671 682 \item[Workflow]
672 683
\begin{enumerate} 673 684 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 674 685 \itemsep1pt\parskip0pt\parsep0pt
\item 675 686 \item
{The server logs the User out using the Django logout feature} 676 687 {The server logs the User out using the Django logout feature}
\item 677 688 \item
{Front-end displays application login page} 678 689 {Front-end displays application login page}
\end{enumerate} 679 690 \end{enumerate}
680 691
\end{description} 681 692 \end{description}
682 693
\newpage 683 694 \newpage
684 695
685 696
686 697
\subsection{{{{[}A9{]} Contact 687 698 \subsection{{{{[}A9{]} Contact
Admin}}{{[}A9{]} Contact Admin}} 688 699 Admin}}{{[}A9{]} Contact Admin}}
689 700
\begin{description} 690 701 \begin{description}
\item[Description]{The user shall be able to contact the admin.} 691 702 \item[Description]{The user shall be able to contact the admin.}
692 703
\item[Desired Outcome]{The user shall send a message to the admin; the 693 704 \item[Desired Outcome]{The user shall send a message to the admin; the
admin shall receive the message.} 694 705 admin shall receive the message.}
695 706
{User Goals:}{The user sends a message to the admin.} 696 707 {User Goals:}{The user sends a message to the admin.}
697 708
\item[Primary Actor]{User} 698 709 \item[Primary Actor]{User}
699 710
\item[Dependency Use Cases]{None} 700 711 \item[Dependency Use Cases]{None}
\\ 701 712 \\
\item[Priority Level]{``Must''} 702 713 \item[Priority Level]{``Must''}
703 714
\item[Status]{Not implemented} 704 715 \item[Status]{Not implemented}
705 716
\item[Pre-conditions]{None.} 706 717 \item[Pre-conditions]{None.}
707 718
\item[Post-conditions]{The admin receives the user's message.} 708 719 \item[Post-conditions]{The admin receives the user's message.}
709 720
\item[Trigger]{User has navigated to our website. } 710 721 \item[Trigger]{User has navigated to our website. }
711 722
\item[Workflow] 712 723 \item[Workflow]
713 724
\begin{enumerate} 714 725 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 715 726 \itemsep1pt\parskip0pt\parsep0pt
\item 716 727 \item
{The frontend displays the admin email address on every page in the 717 728 {The frontend displays the admin email address on every page in the
application.} 718 729 application.}
\end{enumerate} 719 730 \end{enumerate}
\end{description} 720 731 \end{description}
\newpage 721 732 \newpage
722 733
{} 723 734 {}
\section{Flashcards} 724 735 \section{Flashcards}
\subsection{{{{[}F1{]} Push Flashcard 725 736 \subsection{{{{[}F1{]} Push Flashcard
}}{{[}F1{]} Push Flashcard }} 726 737 }}{{[}F1{]} Push Flashcard }}
727 738
\begin{description} 728 739 \begin{description}
\item[Description]{The user shall be able to create a flashcard with their 729 740 \item[Description]{The user shall be able to create a flashcard with their
input. } 730 741 input. }
731 742
\item[Desired Outcome]{The user shall have the flashcard added to their own 732 743 \item[Desired Outcome]{The user shall have the flashcard added to their own
deck and the Live Feed. } 733 744 deck and the Live Feed. }
\\ 734 745 \\
\item[User Goals]{The user will see their flashcard in their deck and the 735 746 \item[User Goals]{The user will see their flashcard in their deck and the
flashcard will be shared with others. } 736 747 flashcard will be shared with others. }
737 748
\item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User 738 749 \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User
Login, {[}A3{]} Add a Class} 739 750 Login, {[}A3{]} Add a Class}
\\ 740 751 \\
\item[Pre-conditions] 741 752 \item[Pre-conditions]
742 753
\begin{itemize} 743 754 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 744 755 \itemsep1pt\parskip0pt\parsep0pt
\item 745 756 \item
{The User has an account } 746 757 {The User has an account }
\item 747 758 \item
{The User has added at least one class} 748 759 {The User has added at least one class}
\item 749 760 \item
{The User is on the class' page} 750 761 {The User is on the class' page}
\end{itemize} 751 762 \end{itemize}
752 763
\item[Post-conditions] 753 764 \item[Post-conditions]
754 765
\begin{itemize} 755 766 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 756 767 \itemsep1pt\parskip0pt\parsep0pt
\item 757 768 \item
{The User has flashcard added to their deck} 758 769 {The User has flashcard added to their deck}
\item 759 770 \item
{The Flashcard is shown in the Live Feed} 760 771 {The Flashcard is shown in the Live Feed}
\item 761 772 \item
{Other users can add this flashcard to their decks} 762 773 {Other users can add this flashcard to their decks}
\end{itemize} 763 774 \end{itemize}
764 775
\item[Trigger]{} 765 776 \item[Trigger]{}
766 777
\begin{itemize} 767 778 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 768 779 \itemsep1pt\parskip0pt\parsep0pt
\item 769 780 \item
{The User has clicked on the button ``Make New Flashcard''.} 770 781 {The User has clicked on the button ``Make New Flashcard''.}
\item 771 782 \item
{The Server receives a POST request containing the flashcard data.} 772 783 {The Server receives a POST request containing the flashcard data.}
\end{itemize} 773 784 \end{itemize}
774 785
\item[Workflow] 775 786 \item[Workflow]
776 787
\begin{enumerate} 777 788 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 778 789 \itemsep1pt\parskip0pt\parsep0pt
\item 779 790 \item
{The User is at the live feed for the class.} 780 791 {The User is at the live feed for the class.}
\item 781 792 \item
{The User shall click on the button}{Push 782 793 {The User shall click on the button}{Push
Flashcard} 783 794 Flashcard}
\item 784 795 \item
{The 785 796 {The
}{Client}{shall 786 797 }{Client}{shall
present a dialog box for inputting the flashcard text to the User.} 787 798 present a dialog box for inputting the flashcard text to the User.}
\item 788 799 \item
{The User shall input the flashcard text.} 789 800 {The User shall input the flashcard text.}
\item 790 801 \item
{Optionally, the User shall mark keywords in the flashcard text.} 791 802 {Optionally, the User shall mark keywords in the flashcard text.}
\item 792 803 \item
{If the User creates this flashcard outside of the lecture time, he 793 804 {If the User creates this flashcard outside of the lecture time, he
will get the option to change the material date.} 794 805 will get the option to change the material date.}
\item 795 806 \item
{The User shall click on the `Submit' button to submit the flashcard 796 807 {The User shall click on the `Submit' button to submit the flashcard
text, blanks, and material date, in JSON form as a POST request.} 797 808 text, blanks, and material date, in JSON form as a POST request.}
\item 798 809 \item
{The Server shall obtain the flashcard information by deserializing 799 810 {The Server shall obtain the flashcard information by deserializing
the JSON in the POST request.} 800 811 the JSON in the POST request.}
\item 801 812 \item
{The Server shall create a new record for this flashcard in the 802 813 {The Server shall create a new record for this flashcard in the
Flashcards table in the database.} 803 814 Flashcards table in the database.}
\item 804 815 \item
{The Server shall publish the newly created card to the live feed of 805 816 {The Server shall publish the newly created card to the live feed of
the class.} 806 817 the class.}
\end{enumerate} 807 818 \end{enumerate}
\end{description} 808 819 \end{description}
{Alternative Workflow:} 809 820 {Alternative Workflow:}
810 821
\begin{enumerate} 811 822 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 812 823 \itemsep1pt\parskip0pt\parsep0pt
\item 813 824 \item
{The User shall view a flashcard that he/she did not create} 814 825 {The User shall view a flashcard that he/she did not create}
\item 815 826 \item
{The User shall click ``Edit''} 816 827 {The User shall click ``Edit''}
\item 817 828 \item
{The client shall present a dialog box for editing the existing 818 829 {The client shall present a dialog box for editing the existing
flashcard text} 819 830 flashcard text}
\item 820 831 \item
{The User shall make edits} 821 832 {The User shall make edits}
\item 822 833 \item
{The User shall click ``save''} 823 834 {The User shall click ``save''}
\item 824 835 \item
{The client shall send a POST request} 825 836 {The client shall send a POST request}
\item 826 837 \item
{The server shall remove the original card from user's deck} 827 838 {The server shall remove the original card from user's deck}
\item 828 839 \item
{The Server shall obtain the flashcard information by deserializing 829 840 {The Server shall obtain the flashcard information by deserializing
the JSON in the POST request.} 830 841 the JSON in the POST request.}
\item 831 842 \item
{The Server shall create a new record for this flashcard in the 832 843 {The Server shall create a new record for this flashcard in the
Flashcards table in the database.} 833 844 Flashcards table in the database.}
\item 834 845 \item
{The Server shall publish the newly created card to the live feed of 835 846 {The Server shall publish the newly created card to the live feed of
the class.} 836 847 the class.}
\end{enumerate} 837 848 \end{enumerate}
838 849
\newpage 839 850 \newpage
840 851
{} 841 852 {}
842 853
\subsection{{{{[}F2{]} Edit 843 854 \subsection{{{{[}F2{]} Edit
Flashcard}}{{[}F2{]} Edit Flashcard}} 844 855 Flashcard}}{{[}F2{]} Edit Flashcard}}
845 856
\begin{description} 846 857 \begin{description}
\item[Description]{The user shall be able to edit the text on their own 847 858 \item[Description]{The user shall be able to edit the text on their own
flashcard } 848 859 flashcard }
849 860
\item[Desired Outcome]{Flashcard is edited and saved appropriately} 850 861 \item[Desired Outcome]{Flashcard is edited and saved appropriately}
\\ 851 862 \\
\item[User Goals]{To be able to change text on a flashcard} 852 863 \item[User Goals]{To be able to change text on a flashcard}
853 864
\item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User 854 865 \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User
Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard, {[}F3{]} Pull 855 866 Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard, {[}F3{]} Pull
Flashcard} 856 867 Flashcard}
857 868
\item[Pre-conditions] 858 869 \item[Pre-conditions]
859 870
\begin{itemize} 860 871 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 861 872 \itemsep1pt\parskip0pt\parsep0pt
\item 862 873 \item
{Flashcard is created} 863 874 {Flashcard is created}
\item 864 875 \item
{Flashcard in user's deck} 865 876 {Flashcard in user's deck}
\item 866 877 \item
{Flashcard is viewable} 867 878 {Flashcard is viewable}
\end{itemize} 868 879 \end{itemize}
869 880
\item[Post-conditions] 870 881 \item[Post-conditions]
871 882
\begin{itemize} 872 883 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 873 884 \itemsep1pt\parskip0pt\parsep0pt
\item 874 885 \item
{Flashcard is edited} 875 886 {Flashcard is edited}
\end{itemize} 876 887 \end{itemize}
877 888
\item[Trigger]{User has clicked ``Edit'' button when viewing a specific 878 889 \item[Trigger]{User has clicked ``Edit'' button when viewing a specific
flashcard} 879 890 flashcard}
880 891
\item[Workflow] 881 892 \item[Workflow]
882 893
\begin{enumerate} 883 894 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 884 895 \itemsep1pt\parskip0pt\parsep0pt
\item 885 896 \item
{The user shall view their deck} 886 897 {The user shall view their deck}
\item 887 898 \item
{The client shall present user with a grid view of cards in 888 899 {The client shall present user with a grid view of cards in
chronological creation order} 889 900 chronological creation order}
\item 890 901 \item
{The user shall select a flashcard and click `Edit'} 891 902 {The user shall select a flashcard and click `Edit'}
\item 892 903 \item
{The client shall produce an editable dialog box containing flashcard 893 904 {The client shall produce an editable dialog box containing flashcard
text} 894 905 text}
\item 895 906 \item
{The user shall make desired changes} 896 907 {The user shall make desired changes}
\item 897 908 \item
{The user shall click `Save'} 898 909 {The user shall click `Save'}
\item 899 910 \item
{The client shall generate a POST request for a new flashcard and send 900 911 {The client shall generate a POST request for a new flashcard and send
it to the server} 901 912 it to the server}
\item 902 913 \item
{If the user changed only the blanks of the cards, the server shall 903 914 {If the user changed only the blanks of the cards, the server shall
create a new FlashcardMask object and update the appropriate 904 915 create a new FlashcardMask object and update the appropriate
UserFlashcard object with a reference to it.} 905 916 UserFlashcard object with a reference to it.}
\item 906 917 \item
{If the user changed the text of the card, the server will instead:} 907 918 {If the user changed the text of the card, the server will instead:}
\end{enumerate} 908 919 \end{enumerate}
909 920
\begin{enumerate} 910 921 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 911 922 \itemsep1pt\parskip0pt\parsep0pt
\item 912 923 \item
{create a new flashcard for the section} 913 924 {create a new flashcard for the section}
\item 914 925 \item
{push it to the feed} 915 926 {push it to the feed}
\item 916 927 \item
{add it to the user's deck} 917 928 {add it to the user's deck}
\item 918 929 \item
{hide the old card from the user} 919 930 {hide the old card from the user}
\item 920 931 \item
{and return the new card to the user} 921 932 {and return the new card to the user}
\end{enumerate} 922 933 \end{enumerate}
\end{description} 923 934 \end{description}
{} 924 935 {}
925 936
\newpage 926 937 \newpage
927 938
{} 928 939 {}
929 940
\subsection{{{{[}F3{]} Pull 930 941 \subsection{{{{[}F3{]} Pull
Flashcard}}{{[}F3{]} Pull Flashcard}} 931 942 Flashcard}}{{[}F3{]} Pull Flashcard}}
\begin{description} 932 943 \begin{description}
\item[Description]{The User shall be able to add flash cards to their own 933 944 \item[Description]{The User shall be able to add flash cards to their own
deck from the Live Feed. } 934 945 deck from the Live Feed. }
935 946
\item[Desired Outcome]{The User shall have the flashcard added to their own 936 947 \item[Desired Outcome]{The User shall have the flashcard added to their own
deck } 937 948 deck }
\\ 938 949 \\
\item[User Goals]{The user will be able to review that flashcard. } 939 950 \item[User Goals]{The user will be able to review that flashcard. }
940 951
\item[Primary Actor]{User (student)} 941 952 \item[Primary Actor]{User (student)}
942 953
\item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User 943 954 \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User
Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashard} 944 955 Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashard}
\\ 945 956 \\
\item[Priority Level]{``Must'' } 946 957 \item[Priority Level]{``Must'' }
947 958
\item[Status]{Not Implemented} 948 959 \item[Status]{Not Implemented}
949 960
\item[Pre-conditions] 950 961 \item[Pre-conditions]
951 962
\begin{itemize} 952 963 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 953 964 \itemsep1pt\parskip0pt\parsep0pt
\item 954 965 \item
{Flashcard has been created } 955 966 {Flashcard has been created }
\item 956 967 \item
{That flashcard is in the Live Feed} 957 968 {That flashcard is in the Live Feed}
\end{itemize} 958 969 \end{itemize}
959 970
\item[Post-conditions] 960 971 \item[Post-conditions]
961 972
\begin{itemize} 962 973 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 963 974 \itemsep1pt\parskip0pt\parsep0pt
\item 964 975 \item
{User shall have that flashcard added to their deck} 965 976 {User shall have that flashcard added to their deck}
\item 966 977 \item
{User can review this flashcard later} 967 978 {User can review this flashcard later}
\end{itemize} 968 979 \end{itemize}
969 980
\item[Trigger]{User has clicked on the flashcard in the Live Feed.} 970 981 \item[Trigger]{User has clicked on the flashcard in the Live Feed.}
971 982
\item[Workflow] 972 983 \item[Workflow]
973 984
\begin{enumerate} 974 985 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 975 986 \itemsep1pt\parskip0pt\parsep0pt
\item 976 987 \item
{The User is in the Live Feed.} 977 988 {The User is in the Live Feed.}
\item 978 989 \item
{User shall click on the ``Pull Flashcard'' button on a Flashcard in 979 990 {User shall click on the ``Pull Flashcard'' button on a Flashcard in
the Feed.} 980 991 the Feed.}
\item 981 992 \item
{The Client shall make the pulled Flashcard disappear from the Live 982 993 {The Client shall make the pulled Flashcard disappear from the Live
Feed} 983 994 Feed}
\item 984 995 \item
{The Client shall make the pulled Flashcard appear in the User's Deck 985 996 {The Client shall make the pulled Flashcard appear in the User's Deck
on the sidebar.} 986 997 on the sidebar.}
\item 987 998 \item
{The Client shall submit a POST request to 988 999 {The Client shall submit a POST request to
/api/flashcards/\textless{}flashcard id\textgreater{}/pull} 989 1000 /api/flashcards/\textless{}flashcard id\textgreater{}/pull}
\item 990 1001 \item
{The server shall create a UserFlashcard object to represent that the 991 1002 {The server shall create a UserFlashcard object to represent that the
user's deck contains the card.} 992 1003 user's deck contains the card.}
\item 993 1004 \item
{The server shall notify connected clients about the new card rating, 994 1005 {The server shall notify connected clients about the new card rating,
if any} 995 1006 if any}
\item 996 1007 \item
{Connected clients will take the new rating into account when next 997 1008 {Connected clients will take the new rating into account when next
rearranging the feed.} 998 1009 rearranging the feed.}
\end{enumerate} 999 1010 \end{enumerate}
\end{description} 1000 1011 \end{description}
\newpage 1001 1012 \newpage
1002 1013
{} 1003 1014 {}
1004 1015
\subsection{{{{[}F4{]} Flag Inappropriate 1005 1016 \subsection{{{{[}F4{]} Flag Inappropriate
Cards}}{{[}F4{]} Flag Inappropriate Cards}} 1006 1017 Cards}}{{[}F4{]} Flag Inappropriate Cards}}
1007 1018
\begin{description} 1008 1019 \begin{description}
\item[Description]{Cards may be flagged indicating inappropriate content} 1009 1020 \item[Description]{Cards may be flagged indicating inappropriate content}
1010 1021
\item[Desired Outcome]{The flashcard's inappropriateness variable is 1011 1022 \item[Desired Outcome]{The flashcard's inappropriateness variable is
adjusted} 1012 1023 adjusted}
\\ 1013 1024 \\
\item[User Goals]{To note if a card should not belong in the class and 1014 1025 \item[User Goals]{To note if a card should not belong in the class and
should not be displayed in the feed} 1015 1026 should not be displayed in the feed}
1016 1027
\item[Primary Actor]{User (Student)} 1017 1028 \item[Primary Actor]{User (Student)}
1018 1029
\item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User 1019 1030 \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User
Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard} 1020 1031 Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard}
\\ 1021 1032 \\
\item[Priority Level]{``Should''} 1022 1033 \item[Priority Level]{``Should''}
1023 1034
\item[Status]{Unimplemented} 1024 1035 \item[Status]{Unimplemented}
1025 1036
\item[Pre-conditions] 1026 1037 \item[Pre-conditions]
1027 1038
\begin{itemize} 1028 1039 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1029 1040 \itemsep1pt\parskip0pt\parsep0pt
\item 1030 1041 \item
{User is enrolled in a class} 1031 1042 {User is enrolled in a class}
\end{itemize} 1032 1043 \end{itemize}
1033 1044
\begin{itemize} 1034 1045 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1035 1046 \itemsep1pt\parskip0pt\parsep0pt
\item 1036 1047 \item
{Flashcard is created} 1037 1048 {Flashcard is created}
\item 1038 1049 \item
{Flashcard is viewable in feed} 1039 1050 {Flashcard is viewable in feed}
\end{itemize} 1040 1051 \end{itemize}
1041 1052
\item[Post-conditions] 1042 1053 \item[Post-conditions]
1043 1054
\begin{itemize} 1044 1055 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1045 1056 \itemsep1pt\parskip0pt\parsep0pt
\item 1046 1057 \item
{Flashcard is hidden from user} 1047 1058 {Flashcard is hidden from user}
\item 1048 1059 \item
{Flashcard internal variable is adjusted} 1049 1060 {Flashcard internal variable is adjusted}
\end{itemize} 1050 1061 \end{itemize}
1051 1062
\item[Trigger]{User clicks flag on a specific flashcard} 1052 1063 \item[Trigger]{User clicks flag on a specific flashcard}
1053 1064
\item[Workflow] 1054 1065 \item[Workflow]
1055 1066
\begin{enumerate} 1056 1067 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1057 1068 \itemsep1pt\parskip0pt\parsep0pt
\item 1058 1069 \item
{The User is at a page of their classes.} 1059 1070 {The User is at a page of their classes.}
\item 1060 1071 \item
{The User selects one of their classes to enter the Live Feed.} 1061 1072 {The User selects one of their classes to enter the Live Feed.}
\item 1062 1073 \item
{The User is on the Live Feed for his/her class.} 1063 1074 {The User is on the Live Feed for his/her class.}
\item 1064 1075 \item
{The User shall identify an inappropriate card and flag the card.} 1065 1076 {The User shall identify an inappropriate card and flag the card.}
\item 1066 1077 \item
{The User clicks the ``Flag as Inappropriate'' button on the flashcard 1067 1078 {The User clicks the ``Flag as Inappropriate'' button on the flashcard
that he/she wants to report} 1068 1079 that he/she wants to report}
\item 1069 1080 \item
{The Client shall hide the card from the user} 1070 1081 {The Client shall hide the card from the user}
\item 1071 1082 \item
{The server shall create a FlashcardReport object} 1072 1083 {The server shall create a FlashcardReport object}
\end{enumerate} 1073 1084 \end{enumerate}
\end{description} 1074 1085 \end{description}
{} 1075 1086 {}
1076 1087
{} 1077 1088 {}
1078 1089
\newpage 1079 1090 \newpage
1080 1091
{} 1081 1092 {}
1082 1093
\subsection{{{{[}F5{]} Filter 1083 1094 \subsection{{{{[}F5{]} Filter
Flashcards}}{{[}F5{]} Filter Flashcards}} 1084 1095 Flashcards}}{{[}F5{]} Filter Flashcards}}
1085 1096
\begin{description} 1086 1097 \begin{description}
\item[Description]{The user is able to filter for flashcards by date} 1087 1098 \item[Description]{The user is able to filter for flashcards by date}
1088 1099
\item[Desired Outcome]{The user shall see flashcards based on the filter 1089 1100 \item[Desired Outcome]{The user shall see flashcards based on the filter
options} 1090 1101 options}
1091 1102
{User Goals:}{The user can find what he/she is specifically looking 1092 1103 {User Goals:}{The user can find what he/she is specifically looking
for} 1093 1104 for}
1094 1105
\item[Primary Actor]{User (student)} 1095 1106 \item[Primary Actor]{User (student)}
1096 1107
\item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User 1097 1108 \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User
Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard, {[}F3{]} Pull 1098 1109 Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard, {[}F3{]} Pull
Flashcard} 1099 1110 Flashcard}
\\ 1100 1111 \\
\item[Priority Level]{''Should''} 1101 1112 \item[Priority Level]{''Should''}
1102 1113
\item[Status]{Not}{}{Implemented } 1103 1114 \item[Status]{Not}{}{Implemented }
1104 1115
\item[Pre-conditions] 1105 1116 \item[Pre-conditions]
1106 1117
\begin{itemize} 1107 1118 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1108 1119 \itemsep1pt\parskip0pt\parsep0pt
\item 1109 1120 \item
{User has registered for the course } 1110 1121 {User has registered for the course }
\item 1111 1122 \item
{Flashcards exist in the course} 1112 1123 {Flashcards exist in the course}
\end{itemize} 1113 1124 \end{itemize}
1114 1125
\item[Post-conditions]{} 1115 1126 \item[Post-conditions]{}
1116 1127
\begin{itemize} 1117 1128 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1118 1129 \itemsep1pt\parskip0pt\parsep0pt
\item 1119 1130 \item
{User only sees specific flashcards} 1120 1131 {User only sees specific flashcards}
\end{itemize} 1121 1132 \end{itemize}
1122 1133
\item[Trigger]{User has selected advanced options from menu} 1123 1134 \item[Trigger]{User has selected advanced options from menu}
1124 1135
\item[Workflow] 1125 1136 \item[Workflow]
1126 1137
\begin{enumerate} 1127 1138 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1128 1139 \itemsep1pt\parskip0pt\parsep0pt
\item 1129 1140 \item
{The User chooses one of their classes.} 1130 1141 {The User chooses one of their classes.}
\item 1131 1142 \item
{The User presses the class they want to view.} 1132 1143 {The User presses the class they want to view.}
\item 1133 1144 \item
{The Client displays the Live Feed.} 1134 1145 {The Client displays the Live Feed.}
\item 1135 1146 \item
{The User is at the Live Feed.} 1136 1147 {The User is at the Live Feed.}
\item 1137 1148 \item
{The User wants to filter the cards on the Live Feed.} 1138 1149 {The User wants to filter the cards on the Live Feed.}
\item 1139 1150 \item
{The User shall select what filter option they want from a drop down 1140 1151 {The User shall select what filter option they want from a drop down
menu.} 1141 1152 menu.}
\item 1142 1153 \item
{The Client shall display only relevant flashcards.} 1143 1154 {The Client shall display only relevant flashcards.}
\end{enumerate} 1144 1155 \end{enumerate}
\end{description} 1145 1156 \end{description}
{} 1146 1157 {}
1147 1158
\newpage 1148 1159 \newpage
1149 1160
{} 1150 1161 {}
1151 1162
\subsection{{{{[}F6{]} Blank Out Words in 1152 1163 \subsection{{{{[}F6{]} Blank Out Words in
Flashcard}}{{[}F6{]} Blank Out Words in Flashcard}} 1153 1164 Flashcard}}{{[}F6{]} Blank Out Words in Flashcard}}
1154 1165
\begin{description} 1155 1166 \begin{description}
\item[Description]{The User shall be able to blank out keywords in any 1156 1167 \item[Description]{The User shall be able to blank out keywords in any
flashcard in his deck. } 1157 1168 flashcard in his deck. }
1158 1169
\item[Desired Outcome]{The blanked out words in the flashcard notify the 1159 1170 \item[Desired Outcome]{The blanked out words in the flashcard notify the
System that they are keywords. } 1160 1171 System that they are keywords. }
\\ 1161 1172 \\
\item[User Goals]{The User shall mark some words as keywords so the System 1162 1173 \item[User Goals]{The User shall mark some words as keywords so the System
may later quiz theirself by blanking out the keywords and having the 1163 1174 may later quiz theirself by blanking out the keywords and having the
User guess what they are.} 1164 1175 User guess what they are.}
1165 1176
{Primary Actor: }{User (student)} 1166 1177 {Primary Actor: }{User (student)}
1167 1178
\item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User 1168 1179 \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User
Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard} 1169 1180 Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard}
\\ 1170 1181 \\
\item[Priority Level]{``Must''} 1171 1182 \item[Priority Level]{``Must''}
1172 1183
\item[Status]{Not implemented.} 1173 1184 \item[Status]{Not implemented.}
1174 1185
\item[Pre-conditions] 1175 1186 \item[Pre-conditions]
1176 1187
\begin{itemize} 1177 1188 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1178 1189 \itemsep1pt\parskip0pt\parsep0pt
\item 1179 1190 \item
{The User has the flashcard he wishes to blank out words from in his 1180 1191 {The User has the flashcard he wishes to blank out words from in his
deck.} 1181 1192 deck.}
\item 1182 1193 \item
{The User shall (be on the class page and) view deck} 1183 1194 {The User shall (be on the class page and) view deck}
\end{itemize} 1184 1195 \end{itemize}
1185 1196
{Post-conditions: } 1186 1197 {Post-conditions: }
1187 1198
\begin{itemize} 1188 1199 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1189 1200 \itemsep1pt\parskip0pt\parsep0pt
\item 1190 1201 \item
{The blanked out words in the flashcard are marked as keywords.} 1191 1202 {The blanked out words in the flashcard are marked as keywords.}
\item 1192 1203 \item
{The System shall blank out the keywords and let the User guess what 1193 1204 {The System shall blank out the keywords and let the User guess what
they are when it presents the flashcard to the User for reviewing.} 1194 1205 they are when it presents the flashcard to the User for reviewing.}
\end{itemize} 1195 1206 \end{itemize}
1196 1207
\item[Trigger]{The User clicks on a flashcard.} 1197 1208 \item[Trigger]{The User clicks on a flashcard.}
1198 1209
\item[Workflow] 1199 1210 \item[Workflow]
1200 1211
\begin{enumerate} 1201 1212 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1202 1213 \itemsep1pt\parskip0pt\parsep0pt
\item 1203 1214 \item
{The Client shall a show deck to user} 1204 1215 {The Client shall a show deck to user}
\item 1205 1216 \item
{The User shall click on the flashcard in his deck that he wants to 1206 1217 {The User shall click on the flashcard in his deck that he wants to
blank out words from} 1207 1218 blank out words from}
\item 1208 1219 \item
{The client shall bring user to edit flashcard page/popup} 1209 1220 {The client shall bring user to edit flashcard page/popup}
\item 1210 1221 \item
{The User shall click on the words that he wishes to blank out} 1211 1222 {The User shall click on the words that he wishes to blank out}
\item 1212 1223 \item
{The client shall specify a character range as blank} 1213 1224 {The client shall specify a character range as blank}
\item 1214 1225 \item
{The server shall mark those words by updating the Flashcard Mask for 1215 1226 {The server shall mark those words by updating the Flashcard Mask for
that flashcard. } 1216 1227 that flashcard. }
\item 1217 1228 \item
{The User shall click on `Save' or the equivalent button to save the 1218 1229 {The User shall click on `Save' or the equivalent button to save the
changes} 1219 1230 changes}
\item 1220 1231 \item
{The server will save the blanked out words as keywords to the 1221 1232 {The server will save the blanked out words as keywords to the
Flashcard Mask to review} 1222 1233 Flashcard Mask to review}
\item 1223 1234 \item
{The client shall cover the keywords with whitespace to hide them from 1224 1235 {The client shall cover the keywords with whitespace to hide them from
the User} 1225 1236 the User}
\end{enumerate} 1226 1237 \end{enumerate}
1227 1238
{Alternative Workflows:} 1228 1239 {Alternative Workflows:}
1229 1240
\begin{enumerate} 1230 1241 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1231 1242 \itemsep1pt\parskip0pt\parsep0pt
\item 1232 1243 \item
{The User shall (be on the class page and) click ``Make New 1233 1244 {The User shall (be on the class page and) click ``Make New
Flashcard''} 1234 1245 Flashcard''}
\item 1235 1246 \item
{The client shall present user with a new flashcard to fill in} 1236 1247 {The client shall present user with a new flashcard to fill in}
\item 1237 1248 \item
{The User shall fill in the information} 1238 1249 {The User shall fill in the information}
\item 1239 1250 \item
{The client shall ask if the user wants to specify blanks} 1240 1251 {The client shall ask if the user wants to specify blanks}
\item 1241 1252 \item
{The System will save the blanked out words as keywords to the 1242 1253 {The System will save the blanked out words as keywords to the
Flashcard Mask to review} 1243 1254 Flashcard Mask to review}
\item 1244 1255 \item
{The client shall cover the keywords with whitespace to hide them from 1245 1256 {The client shall cover the keywords with whitespace to hide them from
the User} 1246 1257 the User}
\end{enumerate} 1247 1258 \end{enumerate}
\end{description} 1248 1259 \end{description}
{} 1249 1260 {}
1250 1261
\newpage 1251 1262 \newpage
1252 1263
{} 1253 1264 {}
1254 1265
\subsection{{{{[}F7{]} Fix 1255 1266 \subsection{{{{[}F7{]} Fix
Flashcard}}{{[}F7{]} Fix Flashcard}} 1256 1267 Flashcard}}{{[}F7{]} Fix Flashcard}}
1257 1268
\begin{description} 1258 1269 \begin{description}
\item[Description]{The User shall be able to alter a flashcard he/she made 1259 1270 \item[Description]{The User shall be able to alter a flashcard he/she made
originally and not have to make a new copy of it.} 1260 1271 originally and not have to make a new copy of it.}
1261 1272
\item[Desired Outcome]{The User shall alter one flashcard and that 1262 1273 \item[Desired Outcome]{The User shall alter one flashcard and that
alteration will be shown to all users of that flashcard} 1263 1274 alteration will be shown to all users of that flashcard}
\\ 1264 1275 \\
\item[User Goals]{The user shall make the flashcard say something different 1265 1276 \item[User Goals]{The user shall make the flashcard say something different
than it did originally.} 1266 1277 than it did originally.}
1267 1278
\item[Primary Actor]{User (student) } 1268 1279 \item[Primary Actor]{User (student) }
1269 1280
\item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User 1270 1281 \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User
Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard} 1271 1282 Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard}
\\ 1272 1283 \\
\item[Priority Level]{Must} 1273 1284 \item[Priority Level]{Must}
1274 1285
\item[Status]{Not Implemented} 1275 1286 \item[Status]{Not Implemented}
1276 1287
\item[Pre-conditions] 1277 1288 \item[Pre-conditions]
1278 1289
\begin{itemize} 1279 1290 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1280 1291 \itemsep1pt\parskip0pt\parsep0pt
\item 1281 1292 \item
{User has created the flashcard} 1282 1293 {User has created the flashcard}
\end{itemize} 1283 1294 \end{itemize}
1284 1295
\item[Post-conditions]{} 1285 1296 \item[Post-conditions]{}
1286 1297
\begin{itemize} 1287 1298 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1288 1299 \itemsep1pt\parskip0pt\parsep0pt
\item 1289 1300 \item
{The user shall see their alteration for that flashcard} 1290 1301 {The user shall see their alteration for that flashcard}
\item 1291 1302 \item
{Other users will be notified of the alteration} 1292 1303 {Other users will be notified of the alteration}
\end{itemize} 1293 1304 \end{itemize}
1294 1305
\item[Trigger]{User (creator of original card) has clicked on the button 1295 1306 \item[Trigger]{User (creator of original card) has clicked on the button
``Edit''} 1296 1307 ``Edit''}
1297 1308
\item[Workflow] 1298 1309 \item[Workflow]
1299 1310
\begin{enumerate} 1300 1311 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1301 1312 \itemsep1pt\parskip0pt\parsep0pt
\item 1302 1313 \item
{User shall select one of the Flashcards they authored.} 1303 1314 {User shall select one of the Flashcards they authored.}
\item 1304 1315 \item
{User shall select ``Edit'' button on the flashcard.} 1305 1316 {User shall select ``Edit'' button on the flashcard.}
\item 1306 1317 \item
{Client shall display an ``Edit Flashcard'' view.} 1307 1318 {Client shall display an ``Edit Flashcard'' view.}
\item 1308 1319 \item
{The Flashcard will display editable fields/areas.} 1309 1320 {The Flashcard will display editable fields/areas.}
\item 1310 1321 \item
{The User shall input any changes to the Flashcard.} 1311 1322 {The User shall input any changes to the Flashcard.}
\item 1312 1323 \item
{The User shall select the ``Done Editing'' button.} 1313 1324 {The User shall select the ``Done Editing'' button.}
\item 1314 1325 \item
{The Client shall close the ``Edit Flashcard'' view.} 1315 1326 {The Client shall close the ``Edit Flashcard'' view.}
\item 1316 1327 \item
{The server shall update the Flashcard's content.} 1317 1328 {The server shall update the Flashcard's content.}
\item 1318 1329 \item
{Client shall notify users with the Flashcard that the Flashcard has 1319 1330 {Client shall notify users with the Flashcard that the Flashcard has
been edited, allowing the other users to keep or to discard the 1320 1331 been edited, allowing the other users to keep or to discard the
changes.} 1321 1332 changes.}
\end{enumerate} 1322 1333 \end{enumerate}
\end{description} 1323 1334 \end{description}
{} 1324 1335 {}
1325 1336
{} 1326 1337 {}
1327 1338
{} 1328 1339 {}
1329 1340
\newpage 1330 1341 \newpage
1331 1342
{} 1332 1343 {}
1333 1344
\subsection{{{{[}F8{]} Hide cards from 1334 1345 \subsection{{{{[}F8{]} Hide cards from
feed}}{{[}F8{]} Hide cards from feed}} 1335 1346 feed}}{{[}F8{]} Hide cards from feed}}
1336 1347
\begin{description} 1337 1348 \begin{description}
\item[Description]{The user shall be able to hide cards from feed} 1338 1349 \item[Description]{The user shall be able to hide cards from feed}
1339 1350
\item[Desired Outcome]{The card is no longer visible to the user} 1340 1351 \item[Desired Outcome]{The card is no longer visible to the user}
\\ 1341 1352 \\
\item[User Goals]{The card has been looked at and should be hidden to 1342 1353 \item[User Goals]{The card has been looked at and should be hidden to
reduce screen clutter} 1343 1354 reduce screen clutter}
1344 1355
{Primary Actor: }{User (Student)} 1345 1356 {Primary Actor: }{User (Student)}
1346 1357
\item[Dependency Use Cases]{}{}{{[}A1{]} User Registration, {[}A2{]} User 1347 1358 \item[Dependency Use Cases]{}{}{{[}A1{]} User Registration, {[}A2{]} User
Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard} 1348 1359 Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard}
\\ 1349 1360 \\
\item[Priority Level]{``Should''} 1350 1361 \item[Priority Level]{``Should''}
1351 1362
{Status:}{Not implemented} 1352 1363 {Status:}{Not implemented}
1353 1364
\item[Pre-conditions]{Flashcard is created, flashcard is viewable by user} 1354 1365 \item[Pre-conditions]{Flashcard is created, flashcard is viewable by user}
1355 1366
\item[Post-conditions]{Flashcard is not viewable by user} 1356 1367 \item[Post-conditions]{Flashcard is not viewable by user}
1357 1368
\item[Trigger]{Card is flagged; Card is noted to be hidden} 1358 1369 \item[Trigger]{Card is flagged; Card is noted to be hidden}
1359 1370
\item[Workflow] 1360 1371 \item[Workflow]
1361 1372
\begin{enumerate} 1362 1373 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1363 1374 \itemsep1pt\parskip0pt\parsep0pt
\item 1364 1375 \item
{The User chooses a class from the dashboard.} 1365 1376 {The User chooses a class from the dashboard.}
\item 1366 1377 \item
{The Client shows the Live Feed for the selected class.} 1367 1378 {The Client shows the Live Feed for the selected class.}
\item 1368 1379 \item
{The User sees a card they want to hide from the Live Feed.} 1369 1380 {The User sees a card they want to hide from the Live Feed.}
\item 1370 1381 \item
{The User shall press a ``Hide Flashcard'' button on the card to be 1371 1382 {The User shall press a ``Hide Flashcard'' button on the card to be
hidden.} 1372 1383 hidden.}
\item 1373 1384 \item
{The Client shall hide the card of interest from the Live Feed, for 1374 1385 {The Client shall hide the card of interest from the Live Feed, for
only that User.} 1375 1386 only that User.}
\end{enumerate} 1376 1387 \end{enumerate}
1377 1388
\end{description} 1378 1389 \end{description}
1379 1390
\newpage 1380 1391 \newpage
1381 1392
{} 1382 1393 {}
1383 1394
\subsection{{{{[}F9{]} View a 1384 1395 \subsection{{{{[}F9{]} View a
Feed}}{{[}F9{]} View a Feed}} 1385 1396 Feed}}{{[}F9{]} View a Feed}}
1386 1397
\begin{description} 1387 1398 \begin{description}
\item[Description]{The user shall be able to view Live Feeds for different 1388 1399 \item[Description]{The user shall be able to view Live Feeds for different
classes} 1389 1400 classes}
1390 1401
\item[Desired Outcome]{The system shall only show the user Live Feeds for 1391 1402 \item[Desired Outcome]{The system shall only show the user Live Feeds for
specific classes. } 1392 1403 specific classes. }
\\ 1393 1404 \\
\item[User Goals]{The user will see only one Live Feed at a time. } 1394 1405 \item[User Goals]{The user will see only one Live Feed at a time. }
1395 1406
\item[Dependency Use Cases]{}{}{{[}A1{]} User Registration, {[}A2{]} User 1396 1407 \item[Dependency Use Cases]{}{}{{[}A1{]} User Registration, {[}A2{]} User
Login, {[}A3{]} Add a Class} 1397 1408 Login, {[}A3{]} Add a Class}
\\ 1398 1409 \\
\item[Priority Level]{``Must''} 1399 1410 \item[Priority Level]{``Must''}
1400 1411
{Status:}{Not implemented} 1401 1412 {Status:}{Not implemented}
1402 1413
\item[Pre-conditions]{User has added a class} 1403 1414 \item[Pre-conditions]{User has added a class}
1404 1415
\item[Post-conditions]{User shall see the Live Feed for that class} 1405 1416 \item[Post-conditions]{User shall see the Live Feed for that class}
1406 1417
\item[Trigger]{User shall select a class} 1407 1418 \item[Trigger]{User shall select a class}
1408 1419
\item[Workflow] 1409 1420 \item[Workflow]
1410 1421
\begin{enumerate} 1411 1422 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1412 1423 \itemsep1pt\parskip0pt\parsep0pt
\item 1413 1424 \item
{The User logs into their account.} 1414 1425 {The User logs into their account.}
\item 1415 1426 \item
{The System verifies the User's credentials and saves their session.} 1416 1427 {The System verifies the User's credentials and saves their session.}
\item 1417 1428 \item
{The User is at their dashboard.} 1418 1429 {The User is at their dashboard.}
\item 1419 1430 \item
{The Client shows the User's dashboard.} 1420 1431 {The Client shows the User's dashboard.}
\item 1421 1432 \item
{The User selects a class from their dashboard.} 1422 1433 {The User selects a class from their dashboard.}
\item 1423 1434 \item
{The Client displays the Live Feed for the class.} 1424 1435 {The Client displays the Live Feed for the class.}
\end{enumerate} 1425 1436 \end{enumerate}
1426 1437
\end{description} 1427 1438 \end{description}
\newpage 1428 1439 \newpage
1429 1440
{} 1430 1441 {}
\section{Decks} 1431 1442 \section{Decks}
\subsection{{{{[}-D2-{]} Making a 1432 1443 \subsection{{{{[}-D2-{]} Making a
deck}}{{[}-D2-{]} Making a deck}} 1433 1444 deck}}{{[}-D2-{]} Making a deck}}
1434 1445
\begin{description} 1435 1446 \begin{description}
\item[Description]{Upon selecting the right course, the student has the 1436 1447 \item[Description]{Upon selecting the right course, the student has the
power to make a deck by either selecting existing flashcard or adding a 1437 1448 power to make a deck by either selecting existing flashcard or adding a
new flashcard.} 1438 1449 new flashcard.}
1439 1450
\item[Desired Outcome]{The user can keep track of cards that s/he wants.} 1440 1451 \item[Desired Outcome]{The user can keep track of cards that s/he wants.}
\\ 1441 1452 \\
\item[User Goals]{The user has a personal deck ready for review later.} 1442 1453 \item[User Goals]{The user has a personal deck ready for review later.}
1443 1454
\item[Primary Actor]{User (student)} 1444 1455 \item[Primary Actor]{User (student)}
1445 1456
\item[Dependency Use Cases]{Add a class {[}A3{]}, Add Flashcards to Deck 1446 1457 \item[Dependency Use Cases]{Add a class {[}A3{]}, Add Flashcards to Deck
{[}F1{]}, Make a Flashcard {[}F3{]}} 1447 1458 {[}F1{]}, Make a Flashcard {[}F3{]}}
\\ 1448 1459 \\
\item[Priority Level]{``Must''} 1449 1460 \item[Priority Level]{``Must''}
1450 1461
\item[Status]{In Progress} 1451 1462 \item[Status]{In Progress}
1452 1463
\item[Pre-conditions] 1453 1464 \item[Pre-conditions]
1454 1465
\begin{itemize} 1455 1466 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1456 1467 \itemsep1pt\parskip0pt\parsep0pt
\item 1457 1468 \item
{The user has an account with the application. } 1458 1469 {The user has an account with the application. }
\item 1459 1470 \item
{The user has been added to the desired class.} 1460 1471 {The user has been added to the desired class.}
\end{itemize} 1461 1472 \end{itemize}
1462 1473
\item[Post-conditions] 1463 1474 \item[Post-conditions]
1464 1475
\begin{itemize} 1465 1476 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1466 1477 \itemsep1pt\parskip0pt\parsep0pt
\item 1467 1478 \item
{Desired cards are added to user's deck to the specific class } 1468 1479 {Desired cards are added to user's deck to the specific class }
\item 1469 1480 \item
{User's deck is added to the database.} 1470 1481 {User's deck is added to the database.}
\end{itemize} 1471 1482 \end{itemize}
1472 1483
\item[Trigger]{User has selected a card from the pool. User submitted a 1473 1484 \item[Trigger]{User has selected a card from the pool. User submitted a
new flashcard after ``Make New Flashcard''.} 1474 1485 new flashcard after ``Make New Flashcard''.}
1475 1486
\item[Workflow] 1476 1487 \item[Workflow]
1477 1488
\begin{enumerate} 1478 1489 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1479 1490 \itemsep1pt\parskip0pt\parsep0pt
\item 1480 1491 \item
{User is at their dashboard.} 1481 1492 {User is at their dashboard.}
\item 1482 1493 \item
{User selects the class of interest that they had no activity in yet.} 1483 1494 {User selects the class of interest that they had no activity in yet.}
\item 1484 1495 \item
{Client displays the Live Feed for the class.} 1485 1496 {Client displays the Live Feed for the class.}
\item 1486 1497 \item
{User presses ``Pull Flashcard'' button on a Flashcard that they want 1487 1498 {User presses ``Pull Flashcard'' button on a Flashcard that they want
in their Deck.} 1488 1499 in their Deck.}
\item 1489 1500 \item
{The server creates a Deck for the User for the Class of interest.} 1490 1501 {The server creates a Deck for the User for the Class of interest.}
\item 1491 1502 \item
{The server adds the Flashcard to the User's Deck.} 1492 1503 {The server adds the Flashcard to the User's Deck.}
\item 1493 1504 \item
{The Client makes the Flashcard disappear from the Live Feed.} 1494 1505 {The Client makes the Flashcard disappear from the Live Feed.}
\item 1495 1506 \item
{The Client displays the Flashcard in the User's Deck in the sidebar.} 1496 1507 {The Client displays the Flashcard in the User's Deck in the sidebar.}
\end{enumerate} 1497 1508 \end{enumerate}
1498 1509
{Alternate Workflow:} 1499 1510 {Alternate Workflow:}
1500 1511
\begin{enumerate} 1501 1512 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1502 1513 \itemsep1pt\parskip0pt\parsep0pt
\item 1503 1514 \item
{User is at their dashboard.} 1504 1515 {User is at their dashboard.}
\item 1505 1516 \item
{User selects the class of interest that they had no activity in yet.} 1506 1517 {User selects the class of interest that they had no activity in yet.}
\item 1507 1518 \item
{Client displays the Live Feed for the class.} 1508 1519 {Client displays the Live Feed for the class.}
\item 1509 1520 \item
{The User adds a Flashcard into the Class.} 1510 1521 {The User adds a Flashcard into the Class.}
\item 1511 1522 \item
{The server creates a Deck for the User for the Class of interest.} 1512 1523 {The server creates a Deck for the User for the Class of interest.}
\item 1513 1524 \item
{The server adds the new Flashcard to the User's Deck.} 1514 1525 {The server adds the new Flashcard to the User's Deck.}
\item 1515 1526 \item
{The Client makes the Flashcard disappear from the Live Feed.} 1516 1527 {The Client makes the Flashcard disappear from the Live Feed.}
\item 1517 1528 \item
{The Client displays the Flashcard in the User's Deck in the sidebar.} 1518 1529 {The Client displays the Flashcard in the User's Deck in the sidebar.}
\end{enumerate} 1519 1530 \end{enumerate}
\end{description} 1520 1531 \end{description}
\newpage 1521 1532 \newpage
1522 1533
{} 1523 1534 {}
1524 1535
\subsection{{{{[}D1{]} Remove a card from a 1525 1536 \subsection{{{{[}D1{]} Remove a card from a
deck}}{{[}D1{]} Remove a card from a deck}} 1526 1537 deck}}{{[}D1{]} Remove a card from a deck}}
1527 1538
\begin{description} 1528 1539 \begin{description}
\item[Description]{The user can remove flashcards from their deck.} 1529 1540 \item[Description]{The user can remove flashcards from their deck.}
1530 1541
\item[Desired Outcome]{The user will not be notified about that card. } 1531 1542 \item[Desired Outcome]{The user will not be notified about that card. }
\\ 1532 1543 \\
\item[User Goals]{To only review cards that the user wants to review. } 1533 1544 \item[User Goals]{To only review cards that the user wants to review. }
1534 1545
\item[Primary Actor]{User (student)} 1535 1546 \item[Primary Actor]{User (student)}
1536 1547
\item[Dependency Use Cases]{Add a class {[}A3{]}, Add Flashcards to Deck 1537 1548 \item[Dependency Use Cases]{Add a class {[}A3{]}, Add Flashcards to Deck
{[}F1{]}, Make a Flashcard {[}F3{]}} 1538 1549 {[}F1{]}, Make a Flashcard {[}F3{]}}
\\ 1539 1550 \\
\item[Priority Level]{``Must''} 1540 1551 \item[Priority Level]{``Must''}
1541 1552
\item[Status]{Unimplemented} 1542 1553 \item[Status]{Unimplemented}
1543 1554
\item[Pre-conditions] 1544 1555 \item[Pre-conditions]
1545 1556
\begin{itemize} 1546 1557 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1547 1558 \itemsep1pt\parskip0pt\parsep0pt
\item 1548 1559 \item
{The User has an account with the application} 1549 1560 {The User has an account with the application}
\item 1550 1561 \item
{The User is logged in} 1551 1562 {The User is logged in}
\end{itemize} 1552 1563 \end{itemize}
1553 1564
\item[Post-conditions] 1554 1565 \item[Post-conditions]
1555 1566
\begin{itemize} 1556 1567 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1557 1568 \itemsep1pt\parskip0pt\parsep0pt
\item 1558 1569 \item
{Desired cards are hidden to the user.} 1559 1570 {Desired cards are hidden to the user.}
\end{itemize} 1560 1571 \end{itemize}
1561 1572
\item[Trigger]{User has selected a card to be hidden.} 1562 1573 \item[Trigger]{User has selected a card to be hidden.}
1563 1574
\item[Workflow] 1564 1575 \item[Workflow]
1565 1576
\begin{enumerate} 1566 1577 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1567 1578 \itemsep1pt\parskip0pt\parsep0pt
\item 1568 1579 \item
{The Client shows the user the dashboard.} 1569 1580 {The Client shows the user the dashboard.}
\item 1570 1581 \item
{The User shall select the appropriate class.} 1571 1582 {The User shall select the appropriate class.}
\item 1572 1583 \item
{The System checks if the class is in session.} 1573 1584 {The System checks if the class is in session.}
\item 1574 1585 \item
{The User shall select deck view.} 1575 1586 {The User shall select deck view.}
\item 1576 1587 \item
{The Client shall route the user to the deck view.} 1577 1588 {The Client shall route the user to the deck view.}
\item 1578 1589 \item
{The User clicks a flashcard's remove button.} 1579 1590 {The User clicks a flashcard's remove button.}
\item 1580 1591 \item
{The Client shall send a DELETE request to the server}{}{at 1581 1592 {The Client shall send a DELETE request to the server}{}{at
/api/flashcard/\textless{}flashcard ID\textgreater{}/remove} 1582 1593 /api/flashcard/\textless{}flashcard ID\textgreater{}/remove}
\item 1583 1594 \item
{The Server removes the flashcard from the User's Deck.} 1584 1595 {The Server removes the flashcard from the User's Deck.}
\item 1585 1596 \item
{The Server updates the flashcard's position in the Live Feed.} 1586 1597 {The Server updates the flashcard's position in the Live Feed.}
\item 1587 1598 \item
{The Client updates the User's Deck.} 1588 1599 {The Client updates the User's Deck.}
\end{enumerate} 1589 1600 \end{enumerate}
1590 1601
{} 1591 1602 {}
1592 1603
{Alternate Workflow:} 1593 1604 {Alternate Workflow:}
1594 1605
\begin{enumerate} 1595 1606 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1596 1607 \itemsep1pt\parskip0pt\parsep0pt
\item 1597 1608 \item
{The Client shows the user the dashboard.} 1598 1609 {The Client shows the user the dashboard.}
\item 1599 1610 \item
{The User shall select the appropriate class.} 1600 1611 {The User shall select the appropriate class.}
\item 1601 1612 \item
{The System checks if the class is }{not}{in session.} 1602 1613 {The System checks if the class is }{not}{in session.}
\item 1603 1614 \item
{The Client shall the user to the deck view.} 1604 1615 {The Client shall the user to the deck view.}
\item 1605 1616 \item
{The User clicks a flashcard's remove button.} 1606 1617 {The User clicks a flashcard's remove button.}
\item 1607 1618 \item
{The Client shall send a DELETE request to the server}{}{at 1608 1619 {The Client shall send a DELETE request to the server}{}{at
/api/flashcard/\textless{}flashcard ID\textgreater{}/remove} 1609 1620 /api/flashcard/\textless{}flashcard ID\textgreater{}/remove}
\item 1610 1621 \item
{The Server removes the flashcard from the User's Deck.} 1611 1622 {The Server removes the flashcard from the User's Deck.}
\item 1612 1623 \item
{The Server updates the flashcard's position in the Live Feed.} 1613 1624 {The Server updates the flashcard's position in the Live Feed.}
\item 1614 1625 \item
{The Client updates the User's Deck.} 1615 1626 {The Client updates the User's Deck.}
\end{enumerate} 1616 1627 \end{enumerate}
\end{description} 1617 1628 \end{description}
1618 1629
\subsection{{{{[}-D2-{]} Shuffling 1619 1630 \subsection{{{{[}-D2-{]} Shuffling
deck}}{{[}-D2-{]} Shuffling deck}} 1620 1631 deck}}{{[}-D2-{]} Shuffling deck}}
1621 1632
\begin{description} 1622 1633 \begin{description}
\item[Description]{User is able to shuffle his/her deck as a way to study 1623 1634 \item[Description]{User is able to shuffle his/her deck as a way to study
the flashcards} 1624 1635 the flashcards}
1625 1636
\item[Desired Outcome]{When taking a quiz, the user will notice that 1626 1637 \item[Desired Outcome]{When taking a quiz, the user will notice that
flashcards appear in random order} 1627 1638 flashcards appear in random order}
1628 1639
{User Goals:}{Improve quiz taking skills and knowledge consumption} 1629 1640 {User Goals:}{Improve quiz taking skills and knowledge consumption}
1630 1641
\item[Primary Actor]{User (student)} 1631 1642 \item[Primary Actor]{User (student)}
1632 1643
\item[Dependency Use Cases]{Deck has been created {[}D2{]}} 1633 1644 \item[Dependency Use Cases]{Deck has been created {[}D2{]}}
\\ 1634 1645 \\
\item[Priority Level]{}{''Won't''} 1635 1646 \item[Priority Level]{}{''Won't''}
1636 1647
\item[Status]{Implemented } 1637 1648 \item[Status]{Implemented }
1638 1649
\item[Pre-conditions] 1639 1650 \item[Pre-conditions]
1640 1651
\begin{itemize} 1641 1652 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1642 1653 \itemsep1pt\parskip0pt\parsep0pt
\item 1643 1654 \item
{User must have registered for course } 1644 1655 {User must have registered for course }
\end{itemize} 1645 1656 \end{itemize}
1646 1657
\begin{itemize} 1647 1658 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1648 1659 \itemsep1pt\parskip0pt\parsep0pt
\item 1649 1660 \item
{User must have added cards to deck} 1650 1661 {User must have added cards to deck}