Commit 770e764f26e8c6d1ebf417cc2fbe58496930caba

Authored by Melody
1 parent 2ea9c20eb9
Exists in master

Might have possibly fixed the titles. We shall see

Showing 1 changed file with 24 additions and 47 deletions Inline Diff

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