Commit ca345eb7e2d89429952b32f417fdd38f2ab3b605

Authored by Andrew Buss
1 parent 770e764f26
Exists in master

Restructured Change Password with error handling cases, simplifying workflow

Showing 5 changed files with 918 additions and 15 deletions Inline Diff

DesignUseCases.aux View file @ ca345eb
File was created 1 \relax
2 \providecommand\hyper@newdestlabel[2]{}
3 \providecommand\HyperFirstAtBeginDocument{\AtBeginDocument}
4 \HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined
5 \global\let\oldcontentsline\contentsline
6 \gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}}
7 \global\let\oldnewlabel\newlabel
8 \gdef\newlabel#1#2{\newlabelxx{#1}#2}
9 \gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
10 \AtEndDocument{\ifx\hyper@anchor\@undefined
11 \let\contentsline\oldcontentsline
12 \let\newlabel\oldnewlabel
13 \fi}
14 \fi}
15 \global\let\hyper@last\relax
16 \gdef\HyperFirstAtBeginDocument#1{#1}
17 \providecommand\HyField@AuxAddToFields[1]{}
18 \providecommand\HyField@AuxAddToCoFields[2]{}
19 \@writefile{toc}{\contentsline {section}{\numberline {1}Accounts}{4}{section.1}}
20 \@writefile{toc}{\contentsline {subsection}{\numberline {1.1}[A1] User Registration}{4}{subsection.1.1}}
21 \@writefile{toc}{\contentsline {subsection}{\numberline {1.2}[A2] User Login}{6}{subsection.1.2}}
22 \@writefile{toc}{\contentsline {subsection}{\numberline {1.3}[A3] Add a Class}{7}{subsection.1.3}}
23 \@writefile{toc}{\contentsline {subsection}{\numberline {1.4}[A4] Drop a Class}{9}{subsection.1.4}}
24 \@writefile{toc}{\contentsline {subsection}{\numberline {1.5}[A5] Password change}{10}{subsection.1.5}}
25 \@writefile{toc}{\contentsline {subsection}{\numberline {1.6}[A6] Password reset}{12}{subsection.1.6}}
26 \@writefile{toc}{\contentsline {subsection}{\numberline {1.7}[A7] Limit Student Access to Courses}{14}{subsection.1.7}}
27 \@writefile{toc}{\contentsline {subsection}{\numberline {1.8}[A8] User Logout}{15}{subsection.1.8}}
28 \@writefile{toc}{\contentsline {subsection}{\numberline {1.9}[A9] Contact Admin}{16}{subsection.1.9}}
29 \@writefile{toc}{\contentsline {section}{\numberline {2}Flashcards}{17}{section.2}}
30 \@writefile{toc}{\contentsline {subsection}{\numberline {2.1}[F1] Push Flashcard}{17}{subsection.2.1}}
31 \@writefile{toc}{\contentsline {subsection}{\numberline {2.2}[F2] Edit Flashcard}{19}{subsection.2.2}}
32 \@writefile{toc}{\contentsline {subsection}{\numberline {2.3}[F3] Pull Flashcard}{20}{subsection.2.3}}
33 \@writefile{toc}{\contentsline {subsection}{\numberline {2.4}[F4] Flag Inappropriate Cards}{21}{subsection.2.4}}
34 \@writefile{toc}{\contentsline {subsection}{\numberline {2.5}[F5] Filter Flashcards}{22}{subsection.2.5}}
35 \@writefile{toc}{\contentsline {subsection}{\numberline {2.6}[F6] Blank Out Words in Flashcard}{23}{subsection.2.6}}
36 \@writefile{toc}{\contentsline {subsection}{\numberline {2.7}[F7] Fix Flashcard}{25}{subsection.2.7}}
37 \@writefile{toc}{\contentsline {subsection}{\numberline {2.8}[F8] Hide cards from feed}{26}{subsection.2.8}}
38 \@writefile{toc}{\contentsline {subsection}{\numberline {2.9}[F9] View a Feed}{27}{subsection.2.9}}
39 \@writefile{toc}{\contentsline {section}{\numberline {3}Decks}{28}{section.3}}
40 \@writefile{toc}{\contentsline {subsection}{\numberline {3.1}[-D2-] Making a deck}{28}{subsection.3.1}}
41 \@writefile{toc}{\contentsline {subsection}{\numberline {3.2}[D1] Remove a card from a deck}{30}{subsection.3.2}}
42 \@writefile{toc}{\contentsline {subsection}{\numberline {3.3}[-D2-] Shuffling deck}{31}{subsection.3.3}}
43 \@writefile{toc}{\contentsline {subsection}{\numberline {3.4}[D2] Viewing cards in deck by pull time}{33}{subsection.3.4}}
44 \@writefile{toc}{\contentsline {section}{\numberline {4}Review}{34}{section.4}}
45 \@writefile{toc}{\contentsline {subsection}{\numberline {4.1}[R1] Study Deck}{34}{subsection.4.1}}
46 \@writefile{toc}{\contentsline {subsection}{\numberline {4.2}[R2] Review Notification}{36}{subsection.4.2}}
47 \@writefile{toc}{\contentsline {subsection}{\numberline {4.3}[R3] Configure Account Notifications}{37}{subsection.4.3}}
DesignUseCases.log View file @ ca345eb
File was created 1 This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014/Arch Linux) (preloaded format=pdflatex 2015.4.28) 11 MAY 2015 22:28
2 entering extended mode
3 restricted \write18 enabled.
4 %&-line parsing enabled.
5 **\input DesignUseCases.tex
6 (./DesignUseCases.tex (/usr/share/texmf-dist/tex/latex/koma-script/scrartcl.cls
7 Document Class: scrartcl 2015/02/07 v3.16 KOMA-Script document class (article)
8 (/usr/share/texmf-dist/tex/latex/koma-script/scrkbase.sty
9 Package: scrkbase 2015/02/07 v3.16 KOMA-Script package (KOMA-Script-dependent b
10 asics and keyval usage)
11
12 (/usr/share/texmf-dist/tex/latex/koma-script/scrbase.sty
13 Package: scrbase 2015/02/07 v3.16 KOMA-Script package (KOMA-Script-independent
14 basics and keyval usage)
15
16 (/usr/share/texmf-dist/tex/latex/graphics/keyval.sty
17 Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
18 \KV@toks@=\toks14
19 )
20 (/usr/share/texmf-dist/tex/latex/koma-script/scrlfile.sty
21 Package: scrlfile 2015/02/07 v3.16 KOMA-Script package (loading files)
22
23 Package scrlfile, 2015/02/07 v3.16 KOMA-Script package (loading files)
24 Copyright (C) Markus Kohm
25
26 ))) (/usr/share/texmf-dist/tex/latex/koma-script/tocbasic.sty
27 Package: tocbasic 2015/02/07 v3.16 KOMA-Script package (handling toc-files)
28 )
29 Package tocbasic Info: omitting babel extension for `toc'
30 (tocbasic) because of feature `nobabel' available
31 (tocbasic) for `toc' on input line 116.
32 Package tocbasic Info: omitting babel extension for `lof'
33 (tocbasic) because of feature `nobabel' available
34 (tocbasic) for `lof' on input line 117.
35 Package tocbasic Info: omitting babel extension for `lot'
36 (tocbasic) because of feature `nobabel' available
37 (tocbasic) for `lot' on input line 118.
38 Class scrartcl Info: File `scrsize11pt.clo' used instead of
39 (scrartcl) file `scrsize11.clo' to setup font sizes on input line 156
40 4.
41
42 (/usr/share/texmf-dist/tex/latex/koma-script/scrsize11pt.clo
43 File: scrsize11pt.clo 2015/02/07 v3.16 KOMA-Script font size class option (11pt
44 )
45 )
46 (/usr/share/texmf-dist/tex/latex/koma-script/typearea.sty
47 Package: typearea 2015/02/07 v3.16 KOMA-Script package (type area)
48
49 Package typearea, 2015/02/07 v3.16 KOMA-Script package (type area)
50 Copyright (C) Frank Neukam, 1992-1994
51 Copyright (C) Markus Kohm, 1994-
52
53 \ta@bcor=\skip41
54 \ta@div=\count79
55 Package typearea Info: You've used standard option `letterpaper'.
56 (typearea) This is correct!
57 (typearea) Internally I'm using `paper=letter'.
58 (typearea) If you'd like to set the option with \KOMAoptions,
59 (typearea) you'd have to use `paper=letter' there
60 (typearea) instead of `letterpaper', too.
61 \ta@hblk=\skip42
62 \ta@vblk=\skip43
63 \ta@temp=\skip44
64 \footheight=\skip45
65 Package typearea Info: These are the values describing the layout:
66 (typearea) DIV = 10
67 (typearea) BCOR = 0.0pt
68 (typearea) \paperwidth = 614.295pt
69 (typearea) \textwidth = 430.00653pt
70 (typearea) DIV departure = -9%
71 (typearea) \evensidemargin = 19.87424pt
72 (typearea) \oddsidemargin = 19.87424pt
73 (typearea) \paperheight = 794.96999pt
74 (typearea) \textheight = 568.60025pt
75 (typearea) \topmargin = -30.173pt
76 (typearea) \headheight = 17.0pt
77 (typearea) \headsep = 20.40001pt
78 (typearea) \topskip = 11.0pt
79 (typearea) \footskip = 47.6pt
80 (typearea) \baselineskip = 13.6pt
81 (typearea) on input line 1342.
82 )
83 \c@part=\count80
84 \c@section=\count81
85 \c@subsection=\count82
86 \c@subsubsection=\count83
87 \c@paragraph=\count84
88 \c@subparagraph=\count85
89 \abovecaptionskip=\skip46
90 \belowcaptionskip=\skip47
91 \c@pti@nb@sid@b@x=\box26
92 \c@figure=\count86
93 \c@table=\count87
94 \bibindent=\dimen102
95 ) (/usr/share/texmf-dist/tex/latex/tex-gyre/tgpagella.sty
96 Package: tgpagella 2009/09/27 v1.2 TeX Gyre Pagella as default roman family
97
98 (/usr/share/texmf-dist/tex/latex/oberdiek/kvoptions.sty
99 Package: kvoptions 2011/06/30 v3.11 Key value format for package options (HO)
100
101 (/usr/share/texmf-dist/tex/generic/oberdiek/ltxcmds.sty
102 Package: ltxcmds 2011/11/09 v1.22 LaTeX kernel commands for general use (HO)
103 )
104 (/usr/share/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
105 Package: kvsetkeys 2012/04/25 v1.16 Key value parser (HO)
106
107 (/usr/share/texmf-dist/tex/generic/oberdiek/infwarerr.sty
108 Package: infwarerr 2010/04/08 v1.3 Providing info/warning/error messages (HO)
109 )
110 (/usr/share/texmf-dist/tex/generic/oberdiek/etexcmds.sty
111 Package: etexcmds 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO)
112
113 (/usr/share/texmf-dist/tex/generic/oberdiek/ifluatex.sty
114 Package: ifluatex 2010/03/01 v1.3 Provides the ifluatex switch (HO)
115 Package ifluatex Info: LuaTeX not detected.
116 )
117 Package etexcmds Info: Could not find \expanded.
118 (etexcmds) That can mean that you are not using pdfTeX 1.50 or
119 (etexcmds) that some package has redefined \expanded.
120 (etexcmds) In the latter case, load this package earlier.
121 ))))
122 (/usr/share/texmf-dist/tex/latex/geometry/geometry.sty
123 Package: geometry 2010/09/12 v5.6 Page Geometry
124
125 (/usr/share/texmf-dist/tex/generic/oberdiek/ifpdf.sty
126 Package: ifpdf 2011/01/30 v2.3 Provides the ifpdf switch (HO)
127 Package ifpdf Info: pdfTeX in PDF mode is detected.
128 )
129 (/usr/share/texmf-dist/tex/generic/oberdiek/ifvtex.sty
130 Package: ifvtex 2010/03/01 v1.5 Detect VTeX and its facilities (HO)
131 Package ifvtex Info: VTeX not detected.
132 )
133 (/usr/share/texmf-dist/tex/generic/ifxetex/ifxetex.sty
134 Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional
135 )
136 \Gm@cnth=\count88
137 \Gm@cntv=\count89
138 \c@Gm@tempcnt=\count90
139 \Gm@bindingoffset=\dimen103
140 \Gm@wd@mp=\dimen104
141 \Gm@odd@mp=\dimen105
142 \Gm@even@mp=\dimen106
143 \Gm@layoutwidth=\dimen107
144 \Gm@layoutheight=\dimen108
145 \Gm@layouthoffset=\dimen109
146 \Gm@layoutvoffset=\dimen110
147 \Gm@dimlist=\toks15
148 )
149 (/usr/share/texmf-dist/tex/latex/hyperref/hyperref.sty
150 Package: hyperref 2012/11/06 v6.83m Hypertext links for LaTeX
151
152 (/usr/share/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty
153 Package: hobsub-hyperref 2012/05/28 v1.13 Bundle oberdiek, subset hyperref (HO)
154
155
156 (/usr/share/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty
157 Package: hobsub-generic 2012/05/28 v1.13 Bundle oberdiek, subset generic (HO)
158 Package: hobsub 2012/05/28 v1.13 Construct package bundles (HO)
159 Package hobsub Info: Skipping package `infwarerr' (already loaded).
160 Package hobsub Info: Skipping package `ltxcmds' (already loaded).
161 Package hobsub Info: Skipping package `ifluatex' (already loaded).
162 Package hobsub Info: Skipping package `ifvtex' (already loaded).
163 Package: intcalc 2007/09/27 v1.1 Expandable calculations with integers (HO)
164 Package hobsub Info: Skipping package `ifpdf' (already loaded).
165 Package hobsub Info: Skipping package `etexcmds' (already loaded).
166 Package hobsub Info: Skipping package `kvsetkeys' (already loaded).
167 Package: kvdefinekeys 2011/04/07 v1.3 Define keys (HO)
168 Package: pdftexcmds 2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO
169 )
170 Package pdftexcmds Info: LuaTeX not detected.
171 Package pdftexcmds Info: \pdf@primitive is available.
172 Package pdftexcmds Info: \pdf@ifprimitive is available.
173 Package pdftexcmds Info: \pdfdraftmode found.
174 Package: pdfescape 2011/11/25 v1.13 Implements pdfTeX's escape features (HO)
175 Package: bigintcalc 2012/04/08 v1.3 Expandable calculations on big integers (HO
176 )
177 Package: bitset 2011/01/30 v1.1 Handle bit-vector datatype (HO)
178 Package: uniquecounter 2011/01/30 v1.2 Provide unlimited unique counter (HO)
179 )
180 Package hobsub Info: Skipping package `hobsub' (already loaded).
181 Package: letltxmacro 2010/09/02 v1.4 Let assignment for LaTeX macros (HO)
182 Package: hopatch 2012/05/28 v1.2 Wrapper for package hooks (HO)
183 Package: xcolor-patch 2011/01/30 xcolor patch
184 Package: atveryend 2011/06/30 v1.8 Hooks at the very end of document (HO)
185 Package atveryend Info: \enddocument detected (standard20110627).
186 Package: atbegshi 2011/10/05 v1.16 At begin shipout hook (HO)
187 Package: refcount 2011/10/16 v3.4 Data extraction from label references (HO)
188 Package: hycolor 2011/01/30 v1.7 Color options for hyperref/bookmark (HO)
189 )
190 (/usr/share/texmf-dist/tex/latex/oberdiek/auxhook.sty
191 Package: auxhook 2011/03/04 v1.3 Hooks for auxiliary files (HO)
192 )
193 \@linkdim=\dimen111
194 \Hy@linkcounter=\count91
195 \Hy@pagecounter=\count92
196
197 (/usr/share/texmf-dist/tex/latex/hyperref/pd1enc.def
198 File: pd1enc.def 2012/11/06 v6.83m Hyperref: PDFDocEncoding definition (HO)
199 )
200 \Hy@SavedSpaceFactor=\count93
201
202 (/usr/share/texmf-dist/tex/latex/latexconfig/hyperref.cfg
203 File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive
204 )
205 Package hyperref Info: Hyper figures OFF on input line 4443.
206 Package hyperref Info: Link nesting OFF on input line 4448.
207 Package hyperref Info: Hyper index ON on input line 4451.
208 Package hyperref Info: Plain pages OFF on input line 4458.
209 Package hyperref Info: Backreferencing OFF on input line 4463.
210 Package hyperref Info: Implicit mode ON; LaTeX internals redefined.
211 Package hyperref Info: Bookmarks ON on input line 4688.
212 \c@Hy@tempcnt=\count94
213
214 (/usr/share/texmf-dist/tex/latex/url/url.sty
215 \Urlmuskip=\muskip10
216 Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc.
217 )
218 LaTeX Info: Redefining \url on input line 5041.
219 \XeTeXLinkMargin=\dimen112
220 \Fld@menulength=\count95
221 \Field@Width=\dimen113
222 \Fld@charsize=\dimen114
223 Package hyperref Info: Hyper figures OFF on input line 6295.
224 Package hyperref Info: Link nesting OFF on input line 6300.
225 Package hyperref Info: Hyper index ON on input line 6303.
226 Package hyperref Info: backreferencing OFF on input line 6310.
227 Package hyperref Info: Link coloring OFF on input line 6315.
228 Package hyperref Info: Link coloring with OCG OFF on input line 6320.
229 Package hyperref Info: PDF/A mode OFF on input line 6325.
230 LaTeX Info: Redefining \ref on input line 6365.
231 LaTeX Info: Redefining \pageref on input line 6369.
232 \Hy@abspage=\count96
233 \c@Item=\count97
234 \c@Hfootnote=\count98
235 )
236
237 Package hyperref Message: Driver (autodetected): hpdftex.
238
239 (/usr/share/texmf-dist/tex/latex/hyperref/hpdftex.def
240 File: hpdftex.def 2012/11/06 v6.83m Hyperref driver for pdfTeX
241 \Fld@listcount=\count99
242 \c@bookmark@seq@number=\count100
243
244 (/usr/share/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty
245 Package: rerunfilecheck 2011/04/15 v1.7 Rerun checks for auxiliary files (HO)
246 Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2
247 82.
248 )
249 \Hy@SectionHShift=\skip48
250 )
251 (/usr/share/texmf-dist/tex/latex/graphics/graphicx.sty
252 Package: graphicx 2014/10/28 v1.0g Enhanced LaTeX Graphics (DPC,SPQR)
253
254 (/usr/share/texmf-dist/tex/latex/graphics/graphics.sty
255 Package: graphics 2014/10/28 v1.0p Standard LaTeX Graphics (DPC,SPQR)
256
257 (/usr/share/texmf-dist/tex/latex/graphics/trig.sty
258 Package: trig 1999/03/16 v1.09 sin cos tan (DPC)
259 )
260 (/usr/share/texmf-dist/tex/latex/latexconfig/graphics.cfg
261 File: graphics.cfg 2010/04/23 v1.9 graphics configuration of TeX Live
262 )
263 Package graphics Info: Driver file: pdftex.def on input line 91.
264
265 (/usr/share/texmf-dist/tex/latex/pdftex-def/pdftex.def
266 File: pdftex.def 2011/05/27 v0.06d Graphics/color for pdfTeX
267 \Gread@gobject=\count101
268 ))
269 \Gin@req@height=\dimen115
270 \Gin@req@width=\dimen116
271 )
272 (/usr/share/texmf-dist/tex/latex/enumitem/enumitem.sty
273 Package: enumitem 2011/09/28 v3.5.2 Customized lists
274 \labelindent=\skip49
275 \enit@outerparindent=\dimen117
276 \enit@toks=\toks16
277 \enit@inbox=\box27
278 \enitdp@description=\count102
279 ) (./DesignUseCases.aux)
280 \openout1 = `DesignUseCases.aux'.
281
282 LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 25.
283 LaTeX Font Info: ... okay on input line 25.
284 LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 25.
285 LaTeX Font Info: ... okay on input line 25.
286 LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 25.
287 LaTeX Font Info: ... okay on input line 25.
288 LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 25.
289 LaTeX Font Info: ... okay on input line 25.
290 LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 25.
291 LaTeX Font Info: ... okay on input line 25.
292 LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 25.
293 LaTeX Font Info: ... okay on input line 25.
294 LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 25.
295 LaTeX Font Info: ... okay on input line 25.
296 LaTeX Font Info: Try loading font information for OT1+qpl on input line 25.
297
298 (/usr/share/texmf-dist/tex/latex/tex-gyre/ot1qpl.fd
299 File: ot1qpl.fd 2009/09/25 v1.2 font definition file for OT1/qpl
300 )
301 *geometry* driver: auto-detecting
302 *geometry* detected driver: pdftex
303 *geometry* verbose mode - [ preamble ] result:
304 * pass: disregarded the geometry package!
305 * \paperwidth=614.295pt
306 * \paperheight=794.96999pt
307 * \textwidth=430.00653pt
308 * \textheight=568.60025pt
309 * \oddsidemargin=19.87424pt
310 * \evensidemargin=19.87424pt
311 * \topmargin=-30.173pt
312 * \headheight=17.0pt
313 * \headsep=20.40001pt
314 * \topskip=11.0pt
315 * \footskip=47.6pt
316 * \marginparwidth=61.42949pt
317 * \marginparsep=12.8401pt
318 * \columnsep=10.0pt
319 * \skip\footins=10.0pt plus 4.0pt minus 2.0pt
320 * \hoffset=0.0pt
321 * \voffset=0.0pt
322 * \mag=1000
323 * \@twocolumnfalse
324 * \@twosidefalse
325 * \@mparswitchfalse
326 * \@reversemarginfalse
327 * (1in=72.27pt=25.4mm, 1cm=28.453pt)
328
329 \AtBeginShipoutBox=\box28
330 Package hyperref Info: Link coloring OFF on input line 25.
331 (/usr/share/texmf-dist/tex/latex/hyperref/nameref.sty
332 Package: nameref 2012/10/27 v2.43 Cross-referencing by name of section
333
334 (/usr/share/texmf-dist/tex/generic/oberdiek/gettitlestring.sty
335 Package: gettitlestring 2010/12/03 v1.4 Cleanup title references (HO)
336 )
337 \c@section@level=\count103
338 )
339 LaTeX Info: Redefining \ref on input line 25.
340 LaTeX Info: Redefining \pageref on input line 25.
341 LaTeX Info: Redefining \nameref on input line 25.
342
343 (./DesignUseCases.out) (./DesignUseCases.out)
344 \@outlinefile=\write3
345 \openout3 = `DesignUseCases.out'.
346
347
348 (/usr/share/texmf-dist/tex/context/base/supp-pdf.mkii
349 [Loading MPS to PDF converter (version 2006.09.02).]
350 \scratchcounter=\count104
351 \scratchdimen=\dimen118
352 \scratchbox=\box29
353 \nofMPsegments=\count105
354 \nofMParguments=\count106
355 \everyMPshowfont=\toks17
356 \MPscratchCnt=\count107
357 \MPscratchDim=\dimen119
358 \MPnumerator=\count108
359 \makeMPintoPDFobject=\count109
360 \everyMPtoPDFconversion=\toks18
361 ) (/usr/share/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty
362 Package: epstopdf-base 2010/02/09 v2.5 Base part for package epstopdf
363
364 (/usr/share/texmf-dist/tex/latex/oberdiek/grfext.sty
365 Package: grfext 2010/08/19 v1.1 Manage graphics extensions (HO)
366 )
367 Package grfext Info: Graphics extension search list:
368 (grfext) [.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPE
369 G,.JBIG2,.JB2,.eps]
370 (grfext) \AppendGraphicsExtensions on input line 452.
371
372 (/usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
373 File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
374 e
375 ))
376 LaTeX Font Info: External font `cmex10' loaded for size
377 (Font) <14.4> on input line 27.
378 LaTeX Font Info: External font `cmex10' loaded for size
379 (Font) <7> on input line 27.
380
381
382 LaTeX Warning: File `../swag_logo.png' not found on input line 28.
383
384
385 ! Package pdftex.def Error: File `../swag_logo.png' not found.
386
387 See the pdftex.def package documentation for explanation.
388 Type H <return> for immediate help.
389 ...
390
391 l.28 ...ludegraphics[width=12cm]{../swag_logo.png}
392 \\
393 Using draft setting for this image.
394 Try typing <return> to proceed.
395 If that doesn't work, type X <return> to quit.
396
397 LaTeX Font Info: External font `cmex10' loaded for size
398 (Font) <10.95> on input line 30.
399 LaTeX Font Info: External font `cmex10' loaded for size
400 (Font) <8> on input line 30.
401 LaTeX Font Info: External font `cmex10' loaded for size
402 (Font) <6> on input line 30.
403 [1
404
405
406 {/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] [2]
407 (./DesignUseCases.toc)
408 \tf@toc=\write4
409 \openout4 = `DesignUseCases.toc'.
410
411 [3]
412
413 LaTeX Font Warning: Font shape `OT1/cmss/b/n' undefined
414 (Font) using `OT1/cmss/m/n' instead on input line 49.
415
416
417 Underfull \hbox (badness 10000) in paragraph at lines 52--56
418
419 []
420
421
422 Underfull \hbox (badness 10000) in paragraph at lines 61--63
423
424 []
425
426 [4] [5]
427 Underfull \hbox (badness 10000) in paragraph at lines 144--149
428
429 []
430
431
432 Underfull \hbox (badness 10000) in paragraph at lines 154--156
433
434 []
435
436 [6]
437 Underfull \hbox (badness 10000) in paragraph at lines 202--206
438
439 []
440
441
442 Underfull \hbox (badness 10000) in paragraph at lines 211--214
443
444 []
445
446 [7] [8]
447 Underfull \hbox (badness 10000) in paragraph at lines 312--316
448
449 []
450
451
452 Underfull \hbox (badness 10000) in paragraph at lines 322--325
453
454 []
455
456 LaTeX Font Info: Try loading font information for OML+qpl on input line 366.
457
458 LaTeX Font Info: No file OMLqpl.fd. on input line 366.
459
460 LaTeX Font Warning: Font shape `OML/qpl/m/n' undefined
461 (Font) using `OML/cmm/m/it' instead
462 (Font) for symbol `textless' on input line 366.
463
464
465 Overfull \hbox (25.44695pt too wide) in paragraph at lines 365--368
466 []\OT1/qpl/m/n/10.95 The client shall sub-mit a DELETE re-quest to /api/me/sect
467 ions/\OML/qpl/m/n/10.95 <\OT1/qpl/m/n/10.95 section
468 []
469
470
471 Overfull \hbox (1.91853pt too wide) in paragraph at lines 372--375
472 []\OT1/qpl/m/n/10.95 The server shall re-move the se-lected class from a user's
473 list of classes.
474 []
475
476 [9]
477 Underfull \hbox (badness 10000) in paragraph at lines 389--392
478
479 []
480
481
482 Underfull \hbox (badness 10000) in paragraph at lines 389--392
483
484 []
485
486
487 Underfull \hbox (badness 10000) in paragraph at lines 396--399
488
489 []
490
491
492 Overfull \hbox (8.8938pt too wide) in paragraph at lines 450--453
493 \OT1/qpl/m/n/10.95 re-quest to /api/me con-tain-ing ``old[]password'' and ``new
494 []password''
495 []
496
497 ! Extra }, or forgotten \endgroup.
498 l.453 ...n email and password have been submitted}
499
500 I've deleted a group-closing symbol because it seems to be
501 spurious, as in `$x}$'. But perhaps the } is legitimate and
502 you forgot something else, as in `\hbox{$x}'. In such cases
503 the way to recover is to insert both the forgotten and the
504 deleted material, e.g., by typing `I$}'.
505
506 [10] [11]
507 Underfull \hbox (badness 10000) in paragraph at lines 479--482
508
509 []
510
511
512 Underfull \hbox (badness 10000) in paragraph at lines 487--489
513
514 []
515
516 [12]
517 Overfull \hbox (14.66437pt too wide) in paragraph at lines 565--568
518 []\OT1/qpl/m/n/10.95 The user shall click the link in the email and visit /app/
519 password[]reset
520 []
521
522 [13]
523 Overfull \hbox (5.76196pt too wide) in paragraph at lines 597--600
524 |[] \OT1/qpl/m/n/10.95 The class will have lim-ited ac-cess and only those u
525 sers who are whitelisted
526 []
527
528
529 Underfull \hbox (badness 10000) in paragraph at lines 597--600
530
531 []
532
533
534 Underfull \hbox (badness 10000) in paragraph at lines 606--609
535
536 []
537
538
539 Overfull \hbox (6.94463pt too wide) in paragraph at lines 645--648
540 []\OT1/qpl/m/n/10.95 The server shall cre-ate a WhitelistedAd-dress for each pr
541 o-vided email,
542 []
543
544 [14]
545 Underfull \hbox (badness 10000) in paragraph at lines 660--663
546
547 []
548
549
550 Underfull \hbox (badness 10000) in paragraph at lines 669--671
551
552 []
553
554 [15]
555 Underfull \hbox (badness 10000) in paragraph at lines 709--711
556
557 []
558
559 [16]
560 Underfull \hbox (badness 10000) in paragraph at lines 740--743
561
562 []
563
564
565 Underfull \hbox (badness 10000) in paragraph at lines 746--749
566
567 []
568
569 [17] [18]
570 Underfull \hbox (badness 10000) in paragraph at lines 857--859
571
572 []
573
574 [19]
575 Underfull \hbox (badness 10000) in paragraph at lines 942--945
576
577 []
578
579
580 Underfull \hbox (badness 10000) in paragraph at lines 949--952
581
582 []
583
584
585 Overfull \hbox (13.27055pt too wide) in paragraph at lines 994--997
586 []\OT1/qpl/m/n/10.95 The Client shall sub-mit a POST re-quest to /api/flashcard
587 s/\OML/qpl/m/n/10.95 <\OT1/qpl/m/n/10.95 flashcard
588 []
589
590 [20]
591 Underfull \hbox (badness 10000) in paragraph at lines 1016--1019
DesignUseCases.out View file @ ca345eb
File was created 1 \BOOKMARK [1][-]{section.1}{Accounts}{}% 1
2 \BOOKMARK [2][-]{subsection.1.1}{[A1] User Registration}{section.1}% 2
3 \BOOKMARK [2][-]{subsection.1.2}{[A2] User Login}{section.1}% 3
4 \BOOKMARK [2][-]{subsection.1.3}{[A3] Add a Class}{section.1}% 4
5 \BOOKMARK [2][-]{subsection.1.4}{[A4] Drop a Class}{section.1}% 5
6 \BOOKMARK [2][-]{subsection.1.5}{[A5] Password change}{section.1}% 6
7 \BOOKMARK [2][-]{subsection.1.6}{[A6] Password reset}{section.1}% 7
8 \BOOKMARK [2][-]{subsection.1.7}{[A7] Limit Student Access to Courses}{section.1}% 8
9 \BOOKMARK [2][-]{subsection.1.8}{[A8] User Logout}{section.1}% 9
10 \BOOKMARK [2][-]{subsection.1.9}{[A9] Contact Admin}{section.1}% 10
11 \BOOKMARK [1][-]{section.2}{Flashcards}{}% 11
12 \BOOKMARK [2][-]{subsection.2.1}{[F1] Push Flashcard}{section.2}% 12
13 \BOOKMARK [2][-]{subsection.2.2}{[F2] Edit Flashcard}{section.2}% 13
14 \BOOKMARK [2][-]{subsection.2.3}{[F3] Pull Flashcard}{section.2}% 14
15 \BOOKMARK [2][-]{subsection.2.4}{[F4] Flag Inappropriate Cards}{section.2}% 15
16 \BOOKMARK [2][-]{subsection.2.5}{[F5] Filter Flashcards}{section.2}% 16
17 \BOOKMARK [2][-]{subsection.2.6}{[F6] Blank Out Words in Flashcard}{section.2}% 17
18 \BOOKMARK [2][-]{subsection.2.7}{[F7] Fix Flashcard}{section.2}% 18
19 \BOOKMARK [2][-]{subsection.2.8}{[F8] Hide cards from feed}{section.2}% 19
20 \BOOKMARK [2][-]{subsection.2.9}{[F9] View a Feed}{section.2}% 20
21 \BOOKMARK [1][-]{section.3}{Decks}{}% 21
22 \BOOKMARK [2][-]{subsection.3.1}{[-D2-] Making a deck}{section.3}% 22
23 \BOOKMARK [2][-]{subsection.3.2}{[D1] Remove a card from a deck}{section.3}% 23
24 \BOOKMARK [2][-]{subsection.3.3}{[-D2-] Shuffling deck}{section.3}% 24
25 \BOOKMARK [2][-]{subsection.3.4}{[D2] Viewing cards in deck by pull time}{section.3}% 25
26 \BOOKMARK [1][-]{section.4}{Review}{}% 26
27 \BOOKMARK [2][-]{subsection.4.1}{[R1] Study Deck}{section.4}% 27
28 \BOOKMARK [2][-]{subsection.4.2}{[R2] Review Notification}{section.4}% 28
29 \BOOKMARK [2][-]{subsection.4.3}{[R3] Configure Account Notifications}{section.4}% 29
DesignUseCases.tex View file @ ca345eb
\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/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 Login} 139 139 \subsection{[A2] User Login}
140 140
\begin{description} 141 141 \begin{description}
\item[Description]{User is able to login to personal account.} 142 142 \item[Description]{User is able to login to personal account.}
143 143
\item[Desired Outcome]{The user shall be able to provide their username and 144 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 145 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 146 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.} 147 147 the flash cards they have added to their decks.}
\\ 148 148 \\
\item[User Goals]{The user wants to resume use of the site on another 149 149 \item[User Goals]{The user wants to resume use of the site on another
device, or use the site after logging out.} 150 150 device, or use the site after logging out.}
151 151
\item[Primary Actor]{User (student)} 152 152 \item[Primary Actor]{User (student)}
153 153
\item[Dependency Use Cases]{{[}A1{]} User Registration} 154 154 \item[Dependency Use Cases]{{[}A1{]} User Registration}
\\ 155 155 \\
\item[Priority Level]{``Must''} 156 156 \item[Priority Level]{``Must''}
157 157
\item[Status]{Not Implemented} 158 158 \item[Status]{Not Implemented}
159 159
\item[Pre-conditions] 160 160 \item[Pre-conditions]
161 161
\begin{itemize} 162 162 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 163 163 \itemsep1pt\parskip0pt\parsep0pt
\item 164 164 \item
{The user has created an account before.} 165 165 {The user has created an account before.}
\end{itemize} 166 166 \end{itemize}
167 167
\item[Post-conditions] 168 168 \item[Post-conditions]
169 169
\begin{itemize} 170 170 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 171 171 \itemsep1pt\parskip0pt\parsep0pt
\item 172 172 \item
{The user can navigate the site and see their data.} 173 173 {The user can navigate the site and see their data.}
\end{itemize} 174 174 \end{itemize}
175 175
\item[Trigger]{The User shall enter their email and password into the Login 176 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'' 177 177 form. The user then submits this information by clicking the ``Login''
button or pressing the return key.} 178 178 button or pressing the return key.}
179 179
\item[Workflow] 180 180 \item[Workflow]
181 181
\begin{enumerate} 182 182 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 183 183 \itemsep1pt\parskip0pt\parsep0pt
\item 184 184 \item
{The server verifies that the User has submitted an email and password} 185 185 {The server verifies that the User has submitted an email and password}
\item 186 186 \item
{The server authenticates the User's email and password and checks if the 187 187 {The server authenticates the User's email and password and checks if the
User is active} 188 188 User is active}
\item 189 189 \item
{The server logs the User in using the Django login feature} 190 190 {The server logs the User in using the Django login feature}
\item 191 191 \item
{Front-end displays the home page for the User} 192 192 {Front-end displays the home page for the User}
\end{enumerate} 193 193 \end{enumerate}
\end{description} 194 194 \end{description}
\newpage 195 195 \newpage
196 196
\subsection{[A3] Add a Class} 197 197 \subsection{[A3] Add a Class}
\begin{description} 198 198 \begin{description}
\item[Description]{The user shall be able to add a class and access the 199 199 \item[Description]{The user shall be able to add a class and access the
flashcards associated with that class.} 200 200 flashcards associated with that class.}
201 201
\item[Desired Outcome]{The class shall be linked with the student's account 202 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 203 203 and the student shall have the ability to read and publish flashcards
for this class.} 204 204 for this class.}
\\ 205 205 \\
\item[User Goals]{The user wants to publish flashcards for this class, and 206 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.} 207 207 reads the flashcards for this class that are published by other users.}
208 208
\item[Primary Actor]{User (student)} 209 209 \item[Primary Actor]{User (student)}
210 210
\item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User 211 211 \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User
Login} 212 212 Login}
\\ 213 213 \\
\item[Priority Level]{``Must''} 214 214 \item[Priority Level]{``Must''}
215 215
\item[Status]{Not implemented} 216 216 \item[Status]{Not implemented}
217 217
\item[Pre-conditions] 218 218 \item[Pre-conditions]
219 219
\begin{itemize} 220 220 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 221 221 \itemsep1pt\parskip0pt\parsep0pt
\item 222 222 \item
{The user has created an account.} 223 223 {The user has created an account.}
\item 224 224 \item
{The user is logged in to their account and is at root view} 225 225 {The user is logged in to their account and is at root view}
\end{itemize} 226 226 \end{itemize}
227 227
\item[Post-conditions] 228 228 \item[Post-conditions]
229 229
\begin{itemize} 230 230 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 231 231 \itemsep1pt\parskip0pt\parsep0pt
\item 232 232 \item
{The user can read the flashcards being published for the class and 233 233 {The user can read the flashcards being published for the class and
add them to his/her deck.} 234 234 add them to his/her deck.}
\item 235 235 \item
{The user can publish flashcards to be viewed and added by other users 236 236 {The user can publish flashcards to be viewed and added by other users
in the same class.} 237 237 in the same class.}
\end{itemize} 238 238 \end{itemize}
239 239
\item[Trigger]{The user wants to add a class.} 240 240 \item[Trigger]{The user wants to add a class.}
241 241
\item[Workflow] 242 242 \item[Workflow]
243 243
\begin{enumerate} 244 244 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 245 245 \itemsep1pt\parskip0pt\parsep0pt
\item 246 246 \item
{The user shall click add a class on the sidebar.} 247 247 {The user shall click add a class on the sidebar.}
\item 248 248 \item
{The client shall bring the user to a AddClassView.} 249 249 {The client shall bring the user to a AddClassView.}
\item 250 250 \item
{The user begins to type their class name or number.} 251 251 {The user begins to type their class name or number.}
\item 252 252 \item
{The ShowSuggestion shall show suggestions as a user types.} 253 253 {The ShowSuggestion shall show suggestions as a user types.}
\end{enumerate} 254 254 \end{enumerate}
255 255
\begin{itemize} 256 256 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 257 257 \itemsep1pt\parskip0pt\parsep0pt
\item 258 258 \item
{Implementation unspecified at present; need to do further research 259 259 {Implementation unspecified at present; need to do further research
(django-autocomplete-lite?)} 260 260 (django-autocomplete-lite?)}
\end{itemize} 261 261 \end{itemize}
262 262
\begin{enumerate} 263 263 \begin{enumerate}
\setcounter{enumi}{3} 264 264 \setcounter{enumi}{3}
\itemsep1pt\parskip0pt\parsep0pt 265 265 \itemsep1pt\parskip0pt\parsep0pt
\item 266 266 \item
{The user shall select a class by clicking on ``Add Class''.} 267 267 {The user shall select a class by clicking on ``Add Class''.}
\item 268 268 \item
{The client shall submit a POST request to /api/users/me/sections with 269 269 {The client shall submit a POST request to /api/me/sections with
the course ID that the User added. } 270 270 the course ID that the User added. }
\item 271 271 \item
{The server shall check if there is a whitelist for the class that the 272 272 {The server shall check if there is a whitelist for the class that the
user is trying to add.} 273 273 user is trying to add.}
\item 274 274 \item
{The server shall ensure that the user is whitelisted.} 275 275 {The server shall ensure that the user is whitelisted.}
\item 276 276 \item
{The server shall link the user to the section.} 277 277 {The server shall link the user to the section.}
\end{enumerate} 278 278 \end{enumerate}
279 279
\item[Alternate Workflow: User is not whitelisted.] 280 280 \item[Alternate Workflow: User is not whitelisted.]
\begin{enumerate} 281 281 \begin{enumerate}
\setcounter{enumi}{7} 282 282 \setcounter{enumi}{7}
\itemsep1pt\parskip0pt\parsep0pt 283 283 \itemsep1pt\parskip0pt\parsep0pt
\item 284 284 \item
{The server shall deny user access to class.} 285 285 {The server shall deny user access to class.}
\item 286 286 \item
{The client shall display failure message to user.} 287 287 {The client shall display failure message to user.}
\end{enumerate} 288 288 \end{enumerate}
289 289
\item[Alternate Workflow: There is no whitelist.] 290 290 \item[Alternate Workflow: There is no whitelist.]
\begin{enumerate} 291 291 \begin{enumerate}
\setcounter{enumi}{6} 292 292 \setcounter{enumi}{6}
\itemsep1pt\parskip0pt\parsep0pt 293 293 \itemsep1pt\parskip0pt\parsep0pt
\item 294 294 \item
{The server shall link the user to the section.} 295 295 {The server shall link the user to the section.}
\item 296 296 \item
{The client shall display success message to user.} 297 297 {The client shall display success message to user.}
\end{enumerate} 298 298 \end{enumerate}
\end{description} 299 299 \end{description}
{} 300 300 {}
301 301
\newpage 302 302 \newpage
303 303
{} 304 304 {}
305 305
\subsection{[A4] Drop a Class} 306 306 \subsection{[A4] Drop a Class}
307 307
\begin{description} 308 308 \begin{description}
\item[Description]{The user can remove themselves from a course he/she is 309 309 \item[Description]{The user can remove themselves from a course he/she is
registered to} 310 310 registered to}
311 311
\item[Desired Outcome]{The user has dropped the class and no longer need 312 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 313 313 access to the flashcards for said class. This means they can no longer
see the flashcards associated to the class that they dropped } 314 314 see the flashcards associated to the class that they dropped }
\\ 315 315 \\
\item[User Goals]{The user shall not have access to a class and the 316 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 317 317 flashcards associated with that class. They will no longer see the class
listed in their list of ``Enrolled Classes''} 318 318 listed in their list of ``Enrolled Classes''}
319 319
\item[Primary Actor]{User (student)} 320 320 \item[Primary Actor]{User (student)}
321 321
\item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User 322 322 \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User
Login, {[}A3{]} Add a Class} 323 323 Login, {[}A3{]} Add a Class}
\\ 324 324 \\
\item[Priority Level]{ ``Should''} 325 325 \item[Priority Level]{ ``Should''}
326 326
\item[Status]{Not Implemented } 327 327 \item[Status]{Not Implemented }
328 328
\item[Pre-conditions] 329 329 \item[Pre-conditions]
330 330
\begin{itemize} 331 331 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 332 332 \itemsep1pt\parskip0pt\parsep0pt
\item 333 333 \item
{User has a valid account.} 334 334 {User has a valid account.}
\item 335 335 \item
{User is logged in.} 336 336 {User is logged in.}
\item 337 337 \item
{User has enrolled in classes.} 338 338 {User has enrolled in classes.}
\end{itemize} 339 339 \end{itemize}
340 340
\item[Post-conditions]{} 341 341 \item[Post-conditions]{}
342 342
\begin{itemize} 343 343 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 344 344 \itemsep1pt\parskip0pt\parsep0pt
\item 345 345 \item
{User shall no longer have access to dropped class, or associated 346 346 {User shall no longer have access to dropped class, or associated
flashcards} 347 347 flashcards}
\end{itemize} 348 348 \end{itemize}
349 349
\item[Trigger]{User clicked button to drop class.} 350 350 \item[Trigger]{User clicked button to drop class.}
351 351
\item[Workflow] 352 352 \item[Workflow]
353 353
\begin{enumerate} 354 354 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 355 355 \itemsep1pt\parskip0pt\parsep0pt
\item 356 356 \item
{The user shall click ``Drop'' (or equivalent) button.} 357 357 {The user shall click ``Drop'' (or equivalent) button.}
\item 358 358 \item
{The client shall display a dialogue box which will say ``Are you 359 359 {The client shall display a dialogue box which will say ``Are you
sure you want to drop this class?''} 360 360 sure you want to drop this class?''}
\item 361 361 \item
{The user shall click ``Yes'' to confirm that they want to drop the 362 362 {The user shall click ``Yes'' to confirm that they want to drop the
class} 363 363 class}
\item 364 364 \item
{The client shall submit a DELETE request to 365 365 {The client shall submit a DELETE request to
/api/users/me/sections/\textless{}section ID number\textgreater{}.} 366 366 /api/me/sections/\textless{}section ID number\textgreater{}.}
\item 367 367 \item
{If the user is not already enrolled in the section, the server will 368 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 369 369 return a 404 Not Found error, which the client shall handle. (The
client should not show an error to the user)} 370 370 client should not show an error to the user)}
\item 371 371 \item
{The server shall remove the selected class from a user's list of 372 372 {The server shall remove the selected class from a user's list of
classes. } 373 373 classes. }
\item 374 374 \item
{The server shall return success to the client} 375 375 {The server shall return success to the client}
\end{enumerate} 376 376 \end{enumerate}
\end{description} 377 377 \end{description}
\newpage 378 378 \newpage
379 379
{} 380 380 {}
381 381
\subsection{[A5] Password change} 382 382 \subsection{[A5] Password change}
383 383
\begin{description} 384 384 \begin{description}
\item[Description]{The user shall be able to change the password for their 385 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. 386 386 account in the account settings. This requires that they are logged in.
} 387 387 }
388 388
\item[Desired Outcome]{The user's password shall be changed and the user 389 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} 390 390 shall be able to log in with the new password in the future}
\\\\ 391 391 \\\\
\item[User Goals]{The user wants to use a different password in the future} 392 392 \item[User Goals]{The user wants to use a different password in the future}
393 393
\item[Primary Actor]{User (student)} 394 394 \item[Primary Actor]{User (student)}
395 395
\item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User 396 396 \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User
Login} 397 397 Login}
\\ 398 398 \\
\item[Details]{The user provides their current password and a new password 399 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 400 400 in a form. If the current password is correct, the system updates their
password to the requested new password.} 401 401 password to the requested new password.}
402 402
\item[Priority Level]{``Must''} 403 403 \item[Priority Level]{``Must''}
404 404
\item[Status]{Not }{implemented} 405 405 \item[Status]{Not }{implemented}
406 406
\item[Pre-conditions] 407 407 \item[Pre-conditions]
408 408
\begin{itemize} 409 409 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 410 410 \itemsep1pt\parskip0pt\parsep0pt
\item 411 411 \item
{The user has created an account} 412 412 {The user has created an account}
\item 413 413 \item
{The user has logged in } 414 414 {The user has logged in }
\item 415 415 \item
{The user knows their current password} 416 416 {The user knows their current password}
\end{itemize} 417 417 \end{itemize}
418 418
\item[Post-conditions] 419 419 \item[Post-conditions]
420 420
\begin{itemize} 421 421 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 422 422 \itemsep1pt\parskip0pt\parsep0pt
\item 423 423 \item
{The user's password is changed} 424 424 {The user's password is changed}
\item 425 425 \item
{The user can log in with the new password} 426 426 {The user can log in with the new password}
\end{itemize} 427 427 \end{itemize}
428 428
\item[Trigger]{User clicks ``Change Password'' button in Accounts page} 429 429 \item[Trigger]{User clicks ``Change Password'' button in Accounts page}
430 430
431 \item[Error Handling]
432 \begin{description}
433 \item[\small Missing Fields] \begin{itemize}
434 \item The client shall enforce required fields
435 \item The server will return an HTTP Bad Request error to the client.
436 \end{itemize}
437 \item[\small Incorrect Old Password] \begin{itemize}
438 \item The server will return an HTTP Forbidden error to the client.
439 \end{itemize}
440 \item[\small Blank New Password] \begin{itemize}
441 \item The server will return an HTTP Bad Request error to the client.
442 \end{itemize}
443 \end{description}
\item[Workflow] 431 444 \item[Workflow]
432 445
\begin{enumerate} 433 446 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 434 447 \itemsep1pt\parskip0pt\parsep0pt
\item 435 448 \item
{The user shall press the ``Change Password'' button} 436 449 {The user shall press the ``Change Password'' button}
\item 437 450 \item
{The client shall render a form that requires the user to enter their 438 451 {The client shall render a form that requires the user to enter their
old password and new password} 439 452 old password and new password}
\item 440 453 \item
{The user shall enter their current password and the desired new 441 454 {The user shall enter their current password and the desired new
password} 442 455 password}
\item 443 456 \item
{The client shall verify that no fields are blank} 444
\item 445
{The client shall submit the data to the server by sending a PATCH 446 457 {The client shall submit the data to the server by sending a PATCH
request to /api/users/me containing ``old\_password'' and 447 458 request to /api/me containing ``old\_password'' and
``new\_password'' values.} 448 459 ``new\_password'' values.}
460 \item (The )
\item 449 461 \item
{The server shall validate the pre-existing password} 450 462 {The server shall check the user's current password}
463 \item The server shall update the user's current password
\item 451 464 \item
{If server cannot validate the pre-existing password, the client will 452 465 {The client shall report success to the user}
render the same form with a message informing the user that the 453
pre-existing password that they have provided is incorrect} 454
\item 455
{If the server successfully validates the pre-existing password, the 456
system shall change the user's password} 457
\item 458
{The client shall return a success to the user} 459
\end{enumerate} 460 466 \end{enumerate}
\end{description} 461 467 \end{description}
{} 462 468 {}
463 469
\newpage 464 470 \newpage
465 471
{} 466 472 {}
467 473
\subsection{[A6] Password reset} 468 474 \subsection{[A6] Password reset}
469 475
\begin{description} 470 476 \begin{description}
\item[Description]{The user shall be able to reset their password without 471 477 \item[Description]{The user shall be able to reset their password without
being logged in } 472 478 being logged in }
473 479
\item[Desired Outcome]{The user's password shall be changed to one that 474 480 \item[Desired Outcome]{The user's password shall be changed to one that
they remember} 475 481 they remember}
\\ 476 482 \\
\item[User Goals]{The user does not know their current password but wants 477 483 \item[User Goals]{The user does not know their current password but wants
to log into the site} 478 484 to log into the site}
479 485
\item[Primary Actor]{User (student)} 480 486 \item[Primary Actor]{User (student)}
481 487
\item[Dependency Use Cases]{{[}A1{]} User Registration} 482 488 \item[Dependency Use Cases]{{[}A1{]} User Registration}
\\ 483 489 \\
\item[Details]{The user provides their email in a password reset form. If 484 490 \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 485 491 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 486 492 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 487 493 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 488 494 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 489 495 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 490 496 password in a form. When they submit the form, their password is updated
if the token is correct. } 491 497 if the token is correct. }
492 498
\item[Priority Level]{``Must''} 493 499 \item[Priority Level]{``Must''}
494 500
\item[Status]{Not i}{mplemented} 495 501 \item[Status]{Not i}{mplemented}
496 502
\item[Pre-conditions] 497 503 \item[Pre-conditions]
498 504
\begin{itemize} 499 505 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 500 506 \itemsep1pt\parskip0pt\parsep0pt
\item 501 507 \item
{The user has created an account before} 502 508 {The user has created an account before}
\item 503 509 \item
{The user knows the email address attached to their account} 504 510 {The user knows the email address attached to their account}
\end{itemize} 505 511 \end{itemize}
506 512
\item[Post-conditions] 507 513 \item[Post-conditions]
508 514
\begin{itemize} 509 515 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 510 516 \itemsep1pt\parskip0pt\parsep0pt
\item 511 517 \item
{The user's password is changed} 512 518 {The user's password is changed}
\item 513 519 \item
{The user can log in with the new password} 514 520 {The user can log in with the new password}
\end{itemize} 515 521 \end{itemize}
516 522
\item[Trigger]{User clicks ``Forgot Password'' button on the login page} 517 523 \item[Trigger]{User clicks ``Forgot Password'' button on the login page}
518 524
\item[Workflow, requesting password reset] 519 525 \item[Workflow, requesting password reset]
520 526
\begin{enumerate} 521 527 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 522 528 \itemsep1pt\parskip0pt\parsep0pt
\item 523 529 \item
{The user shall click ``Forgot Password'' (or equivalent) button} 524 530 {The user shall click ``Forgot Password'' (or equivalent) button}
\item 525 531 \item
{The client shall prompt the user for their current email} 526 532 {The client shall prompt the user for their current email}
\item 527 533 \item
{The user shall submit their email address} 528 534 {The user shall submit their email address}
\item 529 535 \item
{The client shall validate that the email address is formatted 530 536 {The client shall validate that the email address is formatted
correctly} 531 537 correctly}
\item 532 538 \item
{The client shall submit the email address to the server in a POST 533 539 {The client shall submit the email address to the server in a POST
request to /api/reset\_password with an ``email'' value} 534 540 request to /api/reset\_password with an ``email'' value}
\item 535 541 \item
{The server shall check if an account exists with the email entered by 536 542 {The server shall check if an account exists with the email entered by
the user} 537 543 the user}
\item 538 544 \item
{If no such account exists, the server shall return an error to the 539 545 {If no such account exists, the server shall return an error to the
frontend, which will display it to the user} 540 546 frontend, which will display it to the user}
\item 541 547 \item
{If the account does exist, the server will:} 542 548 {If the account does exist, the server will:}
\end{enumerate} 543 549 \end{enumerate}
544 550
\begin{enumerate} 545 551 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 546 552 \itemsep1pt\parskip0pt\parsep0pt
\item 547 553 \item
{Create a new password reset token for the user} 548 554 {Create a new password reset token for the user}
\item 549 555 \item
{Send an email to the user with a link containing the token and the 550 556 {Send an email to the user with a link containing the token and the
user's ID} 551 557 user's ID}
\end{enumerate} 552 558 \end{enumerate}
553 559
\item[Workflow, resetting password] 554 560 \item[Workflow, resetting password]
555 561
\begin{enumerate} 556 562 \begin{enumerate}
\setcounter{enumi}{8} 557 563 \setcounter{enumi}{8}
\itemsep1pt\parskip0pt\parsep0pt 558 564 \itemsep1pt\parskip0pt\parsep0pt
\item 559 565 \item
{The user shall click the link in the email and visit 560 566 {The user shall click the link in the email and visit
/app/password\_reset} 561 567 /app/password\_reset}
\item 562 568 \item
{The client shall render a form that will prompt the user for a new 563 569 {The client shall render a form that will prompt the user for a new
password} 564 570 password}
\item 565 571 \item
{The user shall provide a new password in the form} 566 572 {The user shall provide a new password in the form}
\item 567 573 \item
{The client shall submit the password to the server} 568 574 {The client shall submit the password to the server}
\item 569 575 \item
{If the user tries to submit without a password in the text field, the 570 576 {If the user tries to submit without a password in the text field, the
client shall display a message saying ``Password cannot be blank.''} 571 577 client shall display a message saying ``Password cannot be blank.''}
\item 572 578 \item
{The server first verifies that the token is valid for the user} 573 579 {The server first verifies that the token is valid for the user}
\item 574 580 \item
{The server then verifies that the user's new password is non-blank} 575 581 {The server then verifies that the user's new password is non-blank}
\item 576 582 \item
{If neither of the above verifications fail, the server shall change 577 583 {If neither of the above verifications fail, the server shall change
the password associated with the user's email. } 578 584 the password associated with the user's email. }
\end{enumerate} 579 585 \end{enumerate}
\end{description} 580 586 \end{description}
\newpage 581 587 \newpage
582 588
{} 583 589 {}
584 590
\subsection{[A7] Limit Student Access to Courses} 585 591 \subsection{[A7] Limit Student Access to Courses}
586 592
\begin{description} 587 593 \begin{description}
\item[Description]{The instructor shall be able to limit access to the 588 594 \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 589 595 courses that he is in charge of by whitelisting only those students that
are actually in the class.} 590 596 are actually in the class.}
591 597
\item[Desired Outcome]{The class will have limited access and only those 592 598 \item[Desired Outcome]{The class will have limited access and only those
users who are whitelisted may enroll in the class.} 593 599 users who are whitelisted may enroll in the class.}
\\ 594 600 \\
\item[User Goals]{The instructor wants to limit access to his class so only 595 601 \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 596 602 the students who are actually in his class participate, and nobody
else.} 597 603 else.}
598 604
{Primary Actor: }{User (instructor)} 599 605 {Primary Actor: }{User (instructor)}
600 606
\item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User 601 607 \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User
Login} 602 608 Login}
\\ 603 609 \\
\item[Priority Level]{``Should''} 604 610 \item[Priority Level]{``Should''}
605 611
\item[Status]{Not Implemented} 606 612 \item[Status]{Not Implemented}
607 613
\item[Pre-conditions] 608 614 \item[Pre-conditions]
609 615
\begin{itemize} 610 616 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 611 617 \itemsep1pt\parskip0pt\parsep0pt
\item 612 618 \item
{User has valid instructor's account} 613 619 {User has valid instructor's account}
\end{itemize} 614 620 \end{itemize}
615 621
\item[Post-conditions] 616 622 \item[Post-conditions]
617 623
\begin{itemize} 618 624 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 619 625 \itemsep1pt\parskip0pt\parsep0pt
\item 620 626 \item
{Only those users who were whitelisted may add the class.} 621 627 {Only those users who were whitelisted may add the class.}
\end{itemize} 622 628 \end{itemize}
623 629
\item[Trigger]{The instructor emails the administrator and requests to 624 630 \item[Trigger]{The instructor emails the administrator and requests to
limit access to his class.} 625 631 limit access to his class.}
626 632
\item[Workflow] 627 633 \item[Workflow]
628 634
\begin{enumerate} 629 635 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 630 636 \itemsep1pt\parskip0pt\parsep0pt
\item 631 637 \item
{The instructor emails the administrators from his UCSD email address 632 638 {The instructor emails the administrators from his UCSD email address
and requests to limit access to his course. He provides a list of 633 639 and requests to limit access to his course. He provides a list of
emails of the students that are to be whitelisted.} 634 640 emails of the students that are to be whitelisted.}
\item 635 641 \item
{The administrators visit a custom admin page, select the course, and 636 642 {The administrators visit a custom admin page, select the course, and
paste the list of emails. They submit the page directly (no separate 637 643 paste the list of emails. They submit the page directly (no separate
frontend here) to the server.} 638 644 frontend here) to the server.}
\item 639 645 \item
{The server shall create a WhitelistedAddress for each provided email, 640 646 {The server shall create a WhitelistedAddress for each provided email,
attaching it to the section taught by the instructor.} 641 647 attaching it to the section taught by the instructor.}
\item 642 648 \item
{The server shall add any existing users whose email addresses appear 643 649 {The server shall add any existing users whose email addresses appear
in the whitelist to the class. } 644 650 in the whitelist to the class. }
\end{enumerate} 645 651 \end{enumerate}
\end{description} 646 652 \end{description}
\newpage 647 653 \newpage
648 654
\subsection{[A8] User Logout} 649 655 \subsection{[A8] User Logout}
650 656
\begin{description} 651 657 \begin{description}
\item[Description]{The user shall be able to log out of his/her account on 652 658 \item[Description]{The user shall be able to log out of his/her account on
the site.} 653 659 the site.}
654 660
\item[Desired Outcome]{The user's information and data will no longer be 655 661 \item[Desired Outcome]{The user's information and data will no longer be
accessible after logging out. } 656 662 accessible after logging out. }
\\ 657 663 \\
\item[User Goals]{The user is done with his/her session of using the 658 664 \item[User Goals]{The user is done with his/her session of using the
website, and wants to make sure others cannot access the data in his/her 659 665 website, and wants to make sure others cannot access the data in his/her
account.} 660 666 account.}
661 667
\item[Primary Actor]{User (student)} 662 668 \item[Primary Actor]{User (student)}
663 669
\item[Dependency Use Cases] None 664 670 \item[Dependency Use Cases] None
\\ 665 671 \\
\item[Priority Level]{``Must''} 666 672 \item[Priority Level]{``Must''}
667 673
\item[Status]{Implemented} 668 674 \item[Status]{Implemented}
669 675
\item[Pre-conditions]{The user is logged into their account} 670 676 \item[Pre-conditions]{The user is logged into their account}
671 677
\item[Post-conditions]{}{The user's data can no longer be accessed.} 672 678 \item[Post-conditions]{}{The user's data can no longer be accessed.}
673 679
\item[Trigger]{User clicks ``Logout'' button} 674 680 \item[Trigger]{User clicks ``Logout'' button}
675 681
\item[Workflow] 676 682 \item[Workflow]
677 683
\begin{enumerate} 678 684 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 679 685 \itemsep1pt\parskip0pt\parsep0pt
\item 680 686 \item
{The server logs the User out using the Django logout feature} 681 687 {The server logs the User out using the Django logout feature}
\item 682 688 \item
{Front-end displays application login page} 683 689 {Front-end displays application login page}
\end{enumerate} 684 690 \end{enumerate}
685 691
\end{description} 686 692 \end{description}
687 693
\newpage 688 694 \newpage
689 695
690 696
691 697
\subsection{[A9] Contact Admin} 692 698 \subsection{[A9] Contact Admin}
693 699
\begin{description} 694 700 \begin{description}
\item[Description]{The user shall be able to contact the admin.} 695 701 \item[Description]{The user shall be able to contact the admin.}
696 702
\item[Desired Outcome]{The user shall send a message to the admin; the 697 703 \item[Desired Outcome]{The user shall send a message to the admin; the
admin shall receive the message.} 698 704 admin shall receive the message.}
699 705
{User Goals:}{The user sends a message to the admin.} 700 706 {User Goals:}{The user sends a message to the admin.}
701 707
\item[Primary Actor]{User} 702 708 \item[Primary Actor]{User}
703 709
\item[Dependency Use Cases]{None} 704 710 \item[Dependency Use Cases]{None}
\\ 705 711 \\
\item[Priority Level]{``Must''} 706 712 \item[Priority Level]{``Must''}
707 713
\item[Status]{Not implemented} 708 714 \item[Status]{Not implemented}
709 715
\item[Pre-conditions]{None.} 710 716 \item[Pre-conditions]{None.}
711 717
\item[Post-conditions]{The admin receives the user's message.} 712 718 \item[Post-conditions]{The admin receives the user's message.}
713 719
\item[Trigger]{User has navigated to our website. } 714 720 \item[Trigger]{User has navigated to our website. }
715 721
\item[Workflow] 716 722 \item[Workflow]
717 723
\begin{enumerate} 718 724 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 719 725 \itemsep1pt\parskip0pt\parsep0pt
\item 720 726 \item
{The frontend displays the admin email address on every page in the 721 727 {The frontend displays the admin email address on every page in the
application.} 722 728 application.}
\end{enumerate} 723 729 \end{enumerate}
\end{description} 724 730 \end{description}
\newpage 725 731 \newpage
726 732
{} 727 733 {}
\section{Flashcards} 728 734 \section{Flashcards}
\subsection{[F1] Push Flashcard} 729 735 \subsection{[F1] Push Flashcard}
730 736
\begin{description} 731 737 \begin{description}
\item[Description]{The user shall be able to create a flashcard with their 732 738 \item[Description]{The user shall be able to create a flashcard with their
input. } 733 739 input. }
734 740
\item[Desired Outcome]{The user shall have the flashcard added to their own 735 741 \item[Desired Outcome]{The user shall have the flashcard added to their own
deck and the Live Feed. } 736 742 deck and the Live Feed. }
\\ 737 743 \\
\item[User Goals]{The user will see their flashcard in their deck and the 738 744 \item[User Goals]{The user will see their flashcard in their deck and the
flashcard will be shared with others. } 739 745 flashcard will be shared with others. }
740 746
\item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User 741 747 \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User
Login, {[}A3{]} Add a Class} 742 748 Login, {[}A3{]} Add a Class}
\\ 743 749 \\
\item[Pre-conditions] 744 750 \item[Pre-conditions]
745 751
\begin{itemize} 746 752 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 747 753 \itemsep1pt\parskip0pt\parsep0pt
\item 748 754 \item
{The User has an account } 749 755 {The User has an account }
\item 750 756 \item
{The User has added at least one class} 751 757 {The User has added at least one class}
\item 752 758 \item
{The User is on the class' page} 753 759 {The User is on the class' page}
\end{itemize} 754 760 \end{itemize}
755 761
\item[Post-conditions] 756 762 \item[Post-conditions]
757 763
\begin{itemize} 758 764 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 759 765 \itemsep1pt\parskip0pt\parsep0pt
\item 760 766 \item
{The User has flashcard added to their deck} 761 767 {The User has flashcard added to their deck}
\item 762 768 \item
{The Flashcard is shown in the Live Feed} 763 769 {The Flashcard is shown in the Live Feed}
\item 764 770 \item
{Other users can add this flashcard to their decks} 765 771 {Other users can add this flashcard to their decks}
\end{itemize} 766 772 \end{itemize}
767 773
\item[Trigger]{} 768 774 \item[Trigger]{}
769 775
\begin{itemize} 770 776 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 771 777 \itemsep1pt\parskip0pt\parsep0pt
\item 772 778 \item
{The User has clicked on the button ``Make New Flashcard''.} 773 779 {The User has clicked on the button ``Make New Flashcard''.}
\item 774 780 \item
{The Server receives a POST request containing the flashcard data.} 775 781 {The Server receives a POST request containing the flashcard data.}
\end{itemize} 776 782 \end{itemize}
777 783
\item[Workflow] 778 784 \item[Workflow]
779 785
\begin{enumerate} 780 786 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 781 787 \itemsep1pt\parskip0pt\parsep0pt
\item 782 788 \item
{The User is at the live feed for the class.} 783 789 {The User is at the live feed for the class.}
\item 784 790 \item
{The User shall click on the button}{Push 785 791 {The User shall click on the button}{Push
Flashcard} 786 792 Flashcard}
\item 787 793 \item
{The 788 794 {The
}{Client}{shall 789 795 }{Client}{shall
present a dialog box for inputting the flashcard text to the User.} 790 796 present a dialog box for inputting the flashcard text to the User.}
\item 791 797 \item
{The User shall input the flashcard text.} 792 798 {The User shall input the flashcard text.}
\item 793 799 \item
{Optionally, the User shall mark keywords in the flashcard text.} 794 800 {Optionally, the User shall mark keywords in the flashcard text.}
\item 795 801 \item
{If the User creates this flashcard outside of the lecture time, he 796 802 {If the User creates this flashcard outside of the lecture time, he
will get the option to change the material date.} 797 803 will get the option to change the material date.}
\item 798 804 \item
{The User shall click on the `Submit' button to submit the flashcard 799 805 {The User shall click on the `Submit' button to submit the flashcard
text, blanks, and material date, in JSON form as a POST request.} 800 806 text, blanks, and material date, in JSON form as a POST request.}
\item 801 807 \item
{The Server shall obtain the flashcard information by deserializing 802 808 {The Server shall obtain the flashcard information by deserializing
the JSON in the POST request.} 803 809 the JSON in the POST request.}
\item 804 810 \item
{The Server shall create a new record for this flashcard in the 805 811 {The Server shall create a new record for this flashcard in the
Flashcards table in the database.} 806 812 Flashcards table in the database.}
\item 807 813 \item
{The Server shall publish the newly created card to the live feed of 808 814 {The Server shall publish the newly created card to the live feed of
the class.} 809 815 the class.}
\end{enumerate} 810 816 \end{enumerate}
\end{description} 811 817 \end{description}
{Alternative Workflow:} 812 818 {Alternative Workflow:}
813 819
\begin{enumerate} 814 820 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 815 821 \itemsep1pt\parskip0pt\parsep0pt
\item 816 822 \item
{The User shall view a flashcard that he/she did not create} 817 823 {The User shall view a flashcard that he/she did not create}
\item 818 824 \item
{The User shall click ``Edit''} 819 825 {The User shall click ``Edit''}
\item 820 826 \item
{The client shall present a dialog box for editing the existing 821 827 {The client shall present a dialog box for editing the existing
flashcard text} 822 828 flashcard text}
\item 823 829 \item
{The User shall make edits} 824 830 {The User shall make edits}
\item 825 831 \item
{The User shall click ``save''} 826 832 {The User shall click ``save''}
\item 827 833 \item
{The client shall send a POST request} 828 834 {The client shall send a POST request}
\item 829 835 \item
{The server shall remove the original card from user's deck} 830 836 {The server shall remove the original card from user's deck}
\item 831 837 \item
{The Server shall obtain the flashcard information by deserializing 832 838 {The Server shall obtain the flashcard information by deserializing
the JSON in the POST request.} 833 839 the JSON in the POST request.}
\item 834 840 \item
{The Server shall create a new record for this flashcard in the 835 841 {The Server shall create a new record for this flashcard in the
Flashcards table in the database.} 836 842 Flashcards table in the database.}
\item 837 843 \item
{The Server shall publish the newly created card to the live feed of 838 844 {The Server shall publish the newly created card to the live feed of
the class.} 839 845 the class.}
\end{enumerate} 840 846 \end{enumerate}
841 847
\newpage 842 848 \newpage
843 849
{} 844 850 {}
845 851
\subsection{[F2] Edit Flashcard} 846 852 \subsection{[F2] Edit Flashcard}
847 853
\begin{description} 848 854 \begin{description}
\item[Description]{The user shall be able to edit the text on their own 849 855 \item[Description]{The user shall be able to edit the text on their own
flashcard } 850 856 flashcard }
851 857
\item[Desired Outcome]{Flashcard is edited and saved appropriately} 852 858 \item[Desired Outcome]{Flashcard is edited and saved appropriately}
\\ 853 859 \\
\item[User Goals]{To be able to change text on a flashcard} 854 860 \item[User Goals]{To be able to change text on a flashcard}
855 861
\item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User 856 862 \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User
Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard, {[}F3{]} Pull 857 863 Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard, {[}F3{]} Pull
Flashcard} 858 864 Flashcard}
859 865
\item[Pre-conditions] 860 866 \item[Pre-conditions]
861 867
\begin{itemize} 862 868 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 863 869 \itemsep1pt\parskip0pt\parsep0pt
\item 864 870 \item
{Flashcard is created} 865 871 {Flashcard is created}
\item 866 872 \item
{Flashcard in user's deck} 867 873 {Flashcard in user's deck}
\item 868 874 \item
{Flashcard is viewable} 869 875 {Flashcard is viewable}
\end{itemize} 870 876 \end{itemize}
871 877
\item[Post-conditions] 872 878 \item[Post-conditions]
873 879
\begin{itemize} 874 880 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 875 881 \itemsep1pt\parskip0pt\parsep0pt
\item 876 882 \item
{Flashcard is edited} 877 883 {Flashcard is edited}
\end{itemize} 878 884 \end{itemize}
879 885
\item[Trigger]{User has clicked ``Edit'' button when viewing a specific 880 886 \item[Trigger]{User has clicked ``Edit'' button when viewing a specific
flashcard} 881 887 flashcard}
882 888
\item[Workflow] 883 889 \item[Workflow]
884 890
\begin{enumerate} 885 891 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 886 892 \itemsep1pt\parskip0pt\parsep0pt
\item 887 893 \item
{The user shall view their deck} 888 894 {The user shall view their deck}
\item 889 895 \item
{The client shall present user with a grid view of cards in 890 896 {The client shall present user with a grid view of cards in
chronological creation order} 891 897 chronological creation order}
\item 892 898 \item
{The user shall select a flashcard and click `Edit'} 893 899 {The user shall select a flashcard and click `Edit'}
\item 894 900 \item
{The client shall produce an editable dialog box containing flashcard 895 901 {The client shall produce an editable dialog box containing flashcard
text} 896 902 text}
\item 897 903 \item
{The user shall make desired changes} 898 904 {The user shall make desired changes}
\item 899 905 \item
{The user shall click `Save'} 900 906 {The user shall click `Save'}
\item 901 907 \item
{The client shall generate a POST request for a new flashcard and send 902 908 {The client shall generate a POST request for a new flashcard and send
it to the server} 903 909 it to the server}
\item 904 910 \item
{If the user changed only the blanks of the cards, the server shall 905 911 {If the user changed only the blanks of the cards, the server shall
create a new FlashcardMask object and update the appropriate 906 912 create a new FlashcardMask object and update the appropriate
UserFlashcard object with a reference to it.} 907 913 UserFlashcard object with a reference to it.}
\item 908 914 \item
{If the user changed the text of the card, the server will instead:} 909 915 {If the user changed the text of the card, the server will instead:}
\end{enumerate} 910 916 \end{enumerate}
911 917
\begin{enumerate} 912 918 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 913 919 \itemsep1pt\parskip0pt\parsep0pt
\item 914 920 \item
{create a new flashcard for the section} 915 921 {create a new flashcard for the section}
\item 916 922 \item
{push it to the feed} 917 923 {push it to the feed}
\item 918 924 \item
{add it to the user's deck} 919 925 {add it to the user's deck}
\item 920 926 \item
{hide the old card from the user} 921 927 {hide the old card from the user}
\item 922 928 \item
{and return the new card to the user} 923 929 {and return the new card to the user}
\end{enumerate} 924 930 \end{enumerate}
\end{description} 925 931 \end{description}
{} 926 932 {}
927 933
\newpage 928 934 \newpage
929 935
{} 930 936 {}
931 937
\subsection{[F3] Pull Flashcard} 932 938 \subsection{[F3] Pull Flashcard}
\begin{description} 933 939 \begin{description}
\item[Description]{The User shall be able to add flash cards to their own 934 940 \item[Description]{The User shall be able to add flash cards to their own
deck from the Live Feed. } 935 941 deck from the Live Feed. }
936 942
\item[Desired Outcome]{The User shall have the flashcard added to their own 937 943 \item[Desired Outcome]{The User shall have the flashcard added to their own
deck } 938 944 deck }
\\ 939 945 \\
\item[User Goals]{The user will be able to review that flashcard. } 940 946 \item[User Goals]{The user will be able to review that flashcard. }
941 947
\item[Primary Actor]{User (student)} 942 948 \item[Primary Actor]{User (student)}
943 949
\item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User 944 950 \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User
Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashard} 945 951 Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashard}
\\ 946 952 \\
\item[Priority Level]{``Must'' } 947 953 \item[Priority Level]{``Must'' }
948 954
\item[Status]{Not Implemented} 949 955 \item[Status]{Not Implemented}
950 956
\item[Pre-conditions] 951 957 \item[Pre-conditions]
952 958
\begin{itemize} 953 959 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 954 960 \itemsep1pt\parskip0pt\parsep0pt
\item 955 961 \item
{Flashcard has been created } 956 962 {Flashcard has been created }
\item 957 963 \item
{That flashcard is in the Live Feed} 958 964 {That flashcard is in the Live Feed}
\end{itemize} 959 965 \end{itemize}
960 966
\item[Post-conditions] 961 967 \item[Post-conditions]
962 968
\begin{itemize} 963 969 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 964 970 \itemsep1pt\parskip0pt\parsep0pt
\item 965 971 \item
{User shall have that flashcard added to their deck} 966 972 {User shall have that flashcard added to their deck}
\item 967 973 \item
{User can review this flashcard later} 968 974 {User can review this flashcard later}
\end{itemize} 969 975 \end{itemize}
970 976
\item[Trigger]{User has clicked on the flashcard in the Live Feed.} 971 977 \item[Trigger]{User has clicked on the flashcard in the Live Feed.}
972 978
\item[Workflow] 973 979 \item[Workflow]
974 980
\begin{enumerate} 975 981 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 976 982 \itemsep1pt\parskip0pt\parsep0pt
\item 977 983 \item
{The User is in the Live Feed.} 978 984 {The User is in the Live Feed.}
\item 979 985 \item
{User shall click on the ``Pull Flashcard'' button on a Flashcard in 980 986 {User shall click on the ``Pull Flashcard'' button on a Flashcard in
the Feed.} 981 987 the Feed.}
\item 982 988 \item
{The Client shall make the pulled Flashcard disappear from the Live 983 989 {The Client shall make the pulled Flashcard disappear from the Live
Feed} 984 990 Feed}
\item 985 991 \item
{The Client shall make the pulled Flashcard appear in the User's Deck 986 992 {The Client shall make the pulled Flashcard appear in the User's Deck
on the sidebar.} 987 993 on the sidebar.}
\item 988 994 \item
{The Client shall submit a POST request to 989 995 {The Client shall submit a POST request to
/api/flashcards/\textless{}flashcard id\textgreater{}/pull} 990 996 /api/flashcards/\textless{}flashcard id\textgreater{}/pull}
\item 991 997 \item
{The server shall create a UserFlashcard object to represent that the 992 998 {The server shall create a UserFlashcard object to represent that the
user's deck contains the card.} 993 999 user's deck contains the card.}
\item 994 1000 \item
{The server shall notify connected clients about the new card rating, 995 1001 {The server shall notify connected clients about the new card rating,
if any} 996 1002 if any}
\item 997 1003 \item
{Connected clients will take the new rating into account when next 998 1004 {Connected clients will take the new rating into account when next
rearranging the feed.} 999 1005 rearranging the feed.}
\end{enumerate} 1000 1006 \end{enumerate}
\end{description} 1001 1007 \end{description}
\newpage 1002 1008 \newpage
1003 1009
{} 1004 1010 {}
1005 1011
\subsection{[F4] Flag Inappropriate Cards} 1006 1012 \subsection{[F4] Flag Inappropriate Cards}
1007 1013
\begin{description} 1008 1014 \begin{description}
\item[Description]{Cards may be flagged indicating inappropriate content} 1009 1015 \item[Description]{Cards may be flagged indicating inappropriate content}
1010 1016
\item[Desired Outcome]{The flashcard's inappropriateness variable is 1011 1017 \item[Desired Outcome]{The flashcard's inappropriateness variable is
adjusted} 1012 1018 adjusted}
\\ 1013 1019 \\
\item[User Goals]{To note if a card should not belong in the class and 1014 1020 \item[User Goals]{To note if a card should not belong in the class and
should not be displayed in the feed} 1015 1021 should not be displayed in the feed}
1016 1022
\item[Primary Actor]{User (Student)} 1017 1023 \item[Primary Actor]{User (Student)}
1018 1024
\item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User 1019 1025 \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User
Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard} 1020 1026 Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard}
\\ 1021 1027 \\
\item[Priority Level]{``Should''} 1022 1028 \item[Priority Level]{``Should''}
1023 1029
\item[Status]{Unimplemented} 1024 1030 \item[Status]{Unimplemented}
1025 1031
\item[Pre-conditions] 1026 1032 \item[Pre-conditions]
1027 1033
\begin{itemize} 1028 1034 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1029 1035 \itemsep1pt\parskip0pt\parsep0pt
\item 1030 1036 \item
{User is enrolled in a class} 1031 1037 {User is enrolled in a class}
\end{itemize} 1032 1038 \end{itemize}
1033 1039
\begin{itemize} 1034 1040 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1035 1041 \itemsep1pt\parskip0pt\parsep0pt
\item 1036 1042 \item
{Flashcard is created} 1037 1043 {Flashcard is created}
\item 1038 1044 \item
{Flashcard is viewable in feed} 1039 1045 {Flashcard is viewable in feed}
\end{itemize} 1040 1046 \end{itemize}
1041 1047
\item[Post-conditions] 1042 1048 \item[Post-conditions]
1043 1049
\begin{itemize} 1044 1050 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1045 1051 \itemsep1pt\parskip0pt\parsep0pt
\item 1046 1052 \item
{Flashcard is hidden from user} 1047 1053 {Flashcard is hidden from user}
\item 1048 1054 \item
{Flashcard internal variable is adjusted} 1049 1055 {Flashcard internal variable is adjusted}
\end{itemize} 1050 1056 \end{itemize}
1051 1057
\item[Trigger]{User clicks flag on a specific flashcard} 1052 1058 \item[Trigger]{User clicks flag on a specific flashcard}
1053 1059
\item[Workflow] 1054 1060 \item[Workflow]
1055 1061
\begin{enumerate} 1056 1062 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1057 1063 \itemsep1pt\parskip0pt\parsep0pt
\item 1058 1064 \item
{The User is at a page of their classes.} 1059 1065 {The User is at a page of their classes.}
\item 1060 1066 \item
{The User selects one of their classes to enter the Live Feed.} 1061 1067 {The User selects one of their classes to enter the Live Feed.}
\item 1062 1068 \item
{The User is on the Live Feed for his/her class.} 1063 1069 {The User is on the Live Feed for his/her class.}
\item 1064 1070 \item
{The User shall identify an inappropriate card and flag the card.} 1065 1071 {The User shall identify an inappropriate card and flag the card.}
\item 1066 1072 \item
{The User clicks the ``Flag as Inappropriate'' button on the flashcard 1067 1073 {The User clicks the ``Flag as Inappropriate'' button on the flashcard
that he/she wants to report} 1068 1074 that he/she wants to report}
\item 1069 1075 \item
{The Client shall hide the card from the user} 1070 1076 {The Client shall hide the card from the user}
\item 1071 1077 \item
{The server shall create a FlashcardReport object} 1072 1078 {The server shall create a FlashcardReport object}
\end{enumerate} 1073 1079 \end{enumerate}
\end{description} 1074 1080 \end{description}
{} 1075 1081 {}
1076 1082
{} 1077 1083 {}
1078 1084
\newpage 1079 1085 \newpage
1080 1086
{} 1081 1087 {}
1082 1088
\subsection{[F5] Filter Flashcards} 1083 1089 \subsection{[F5] Filter Flashcards}
1084 1090
\begin{description} 1085 1091 \begin{description}
\item[Description]{The user is able to filter for flashcards by date} 1086 1092 \item[Description]{The user is able to filter for flashcards by date}
1087 1093
\item[Desired Outcome]{The user shall see flashcards based on the filter 1088 1094 \item[Desired Outcome]{The user shall see flashcards based on the filter
options} 1089 1095 options}
1090 1096
{User Goals:}{The user can find what he/she is specifically looking 1091 1097 {User Goals:}{The user can find what he/she is specifically looking
for} 1092 1098 for}
1093 1099
\item[Primary Actor]{User (student)} 1094 1100 \item[Primary Actor]{User (student)}
1095 1101
\item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User 1096 1102 \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User
Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard, {[}F3{]} Pull 1097 1103 Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard, {[}F3{]} Pull
Flashcard} 1098 1104 Flashcard}
\\ 1099 1105 \\
\item[Priority Level]{''Should''} 1100 1106 \item[Priority Level]{''Should''}
1101 1107
\item[Status]{Not}{}{Implemented } 1102 1108 \item[Status]{Not}{}{Implemented }
1103 1109
\item[Pre-conditions] 1104 1110 \item[Pre-conditions]
1105 1111
\begin{itemize} 1106 1112 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1107 1113 \itemsep1pt\parskip0pt\parsep0pt
\item 1108 1114 \item
{User has registered for the course } 1109 1115 {User has registered for the course }
\item 1110 1116 \item
{Flashcards exist in the course} 1111 1117 {Flashcards exist in the course}
\end{itemize} 1112 1118 \end{itemize}
1113 1119
\item[Post-conditions]{} 1114 1120 \item[Post-conditions]{}
1115 1121
\begin{itemize} 1116 1122 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1117 1123 \itemsep1pt\parskip0pt\parsep0pt
\item 1118 1124 \item
{User only sees specific flashcards} 1119 1125 {User only sees specific flashcards}
\end{itemize} 1120 1126 \end{itemize}
1121 1127
\item[Trigger]{User has selected advanced options from menu} 1122 1128 \item[Trigger]{User has selected advanced options from menu}
1123 1129
\item[Workflow] 1124 1130 \item[Workflow]
1125 1131
\begin{enumerate} 1126 1132 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1127 1133 \itemsep1pt\parskip0pt\parsep0pt
\item 1128 1134 \item
{The User chooses one of their classes.} 1129 1135 {The User chooses one of their classes.}
\item 1130 1136 \item
{The User presses the class they want to view.} 1131 1137 {The User presses the class they want to view.}
\item 1132 1138 \item
{The Client displays the Live Feed.} 1133 1139 {The Client displays the Live Feed.}
\item 1134 1140 \item
{The User is at the Live Feed.} 1135 1141 {The User is at the Live Feed.}
\item 1136 1142 \item
{The User wants to filter the cards on the Live Feed.} 1137 1143 {The User wants to filter the cards on the Live Feed.}
\item 1138 1144 \item
{The User shall select what filter option they want from a drop down 1139 1145 {The User shall select what filter option they want from a drop down
menu.} 1140 1146 menu.}
\item 1141 1147 \item
{The Client shall display only relevant flashcards.} 1142 1148 {The Client shall display only relevant flashcards.}
\end{enumerate} 1143 1149 \end{enumerate}
\end{description} 1144 1150 \end{description}
{} 1145 1151 {}
1146 1152
\newpage 1147 1153 \newpage
1148 1154
{} 1149 1155 {}
1150 1156
\subsection{[F6] Blank Out Words in Flashcard} 1151 1157 \subsection{[F6] Blank Out Words in Flashcard}
1152 1158
\begin{description} 1153 1159 \begin{description}
\item[Description]{The User shall be able to blank out keywords in any 1154 1160 \item[Description]{The User shall be able to blank out keywords in any
flashcard in his deck. } 1155 1161 flashcard in his deck. }
1156 1162
\item[Desired Outcome]{The blanked out words in the flashcard notify the 1157 1163 \item[Desired Outcome]{The blanked out words in the flashcard notify the
System that they are keywords. } 1158 1164 System that they are keywords. }
\\ 1159 1165 \\
\item[User Goals]{The User shall mark some words as keywords so the System 1160 1166 \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 1161 1167 may later quiz theirself by blanking out the keywords and having the
User guess what they are.} 1162 1168 User guess what they are.}
1163 1169
{Primary Actor: }{User (student)} 1164 1170 {Primary Actor: }{User (student)}
1165 1171
\item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User 1166 1172 \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User
Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard} 1167 1173 Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard}
\\ 1168 1174 \\
\item[Priority Level]{``Must''} 1169 1175 \item[Priority Level]{``Must''}
1170 1176
\item[Status]{Not implemented.} 1171 1177 \item[Status]{Not implemented.}
1172 1178
\item[Pre-conditions] 1173 1179 \item[Pre-conditions]
1174 1180
\begin{itemize} 1175 1181 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1176 1182 \itemsep1pt\parskip0pt\parsep0pt
\item 1177 1183 \item
{The User has the flashcard he wishes to blank out words from in his 1178 1184 {The User has the flashcard he wishes to blank out words from in his
deck.} 1179 1185 deck.}
\item 1180 1186 \item
{The User shall (be on the class page and) view deck} 1181 1187 {The User shall (be on the class page and) view deck}
\end{itemize} 1182 1188 \end{itemize}
1183 1189
{Post-conditions: } 1184 1190 {Post-conditions: }
1185 1191
\begin{itemize} 1186 1192 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1187 1193 \itemsep1pt\parskip0pt\parsep0pt
\item 1188 1194 \item
{The blanked out words in the flashcard are marked as keywords.} 1189 1195 {The blanked out words in the flashcard are marked as keywords.}
\item 1190 1196 \item
{The System shall blank out the keywords and let the User guess what 1191 1197 {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.} 1192 1198 they are when it presents the flashcard to the User for reviewing.}
\end{itemize} 1193 1199 \end{itemize}
1194 1200
\item[Trigger]{The User clicks on a flashcard.} 1195 1201 \item[Trigger]{The User clicks on a flashcard.}
1196 1202
\item[Workflow] 1197 1203 \item[Workflow]
1198 1204
\begin{enumerate} 1199 1205 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1200 1206 \itemsep1pt\parskip0pt\parsep0pt
\item 1201 1207 \item
{The Client shall a show deck to user} 1202 1208 {The Client shall a show deck to user}
\item 1203 1209 \item
{The User shall click on the flashcard in his deck that he wants to 1204 1210 {The User shall click on the flashcard in his deck that he wants to
blank out words from} 1205 1211 blank out words from}
\item 1206 1212 \item
{The client shall bring user to edit flashcard page/popup} 1207 1213 {The client shall bring user to edit flashcard page/popup}
\item 1208 1214 \item
{The User shall click on the words that he wishes to blank out} 1209 1215 {The User shall click on the words that he wishes to blank out}
\item 1210 1216 \item
{The client shall specify a character range as blank} 1211 1217 {The client shall specify a character range as blank}
\item 1212 1218 \item
{The server shall mark those words by updating the Flashcard Mask for 1213 1219 {The server shall mark those words by updating the Flashcard Mask for
that flashcard. } 1214 1220 that flashcard. }
\item 1215 1221 \item
{The User shall click on `Save' or the equivalent button to save the 1216 1222 {The User shall click on `Save' or the equivalent button to save the
changes} 1217 1223 changes}
\item 1218 1224 \item
{The server will save the blanked out words as keywords to the 1219 1225 {The server will save the blanked out words as keywords to the
Flashcard Mask to review} 1220 1226 Flashcard Mask to review}
\item 1221 1227 \item
{The client shall cover the keywords with whitespace to hide them from 1222 1228 {The client shall cover the keywords with whitespace to hide them from
the User} 1223 1229 the User}
\end{enumerate} 1224 1230 \end{enumerate}
1225 1231
{Alternative Workflows:} 1226 1232 {Alternative Workflows:}
1227 1233
\begin{enumerate} 1228 1234 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1229 1235 \itemsep1pt\parskip0pt\parsep0pt
\item 1230 1236 \item
{The User shall (be on the class page and) click ``Make New 1231 1237 {The User shall (be on the class page and) click ``Make New
Flashcard''} 1232 1238 Flashcard''}
\item 1233 1239 \item
{The client shall present user with a new flashcard to fill in} 1234 1240 {The client shall present user with a new flashcard to fill in}
\item 1235 1241 \item
{The User shall fill in the information} 1236 1242 {The User shall fill in the information}
\item 1237 1243 \item
{The client shall ask if the user wants to specify blanks} 1238 1244 {The client shall ask if the user wants to specify blanks}
\item 1239 1245 \item
{The System will save the blanked out words as keywords to the 1240 1246 {The System will save the blanked out words as keywords to the
Flashcard Mask to review} 1241 1247 Flashcard Mask to review}
\item 1242 1248 \item
{The client shall cover the keywords with whitespace to hide them from 1243 1249 {The client shall cover the keywords with whitespace to hide them from
the User} 1244 1250 the User}
\end{enumerate} 1245 1251 \end{enumerate}
\end{description} 1246 1252 \end{description}
{} 1247 1253 {}
1248 1254
\newpage 1249 1255 \newpage
1250 1256
{} 1251 1257 {}
1252 1258
\subsection{[F7] Fix Flashcard} 1253 1259 \subsection{[F7] Fix Flashcard}
1254 1260
\begin{description} 1255 1261 \begin{description}
\item[Description]{The User shall be able to alter a flashcard he/she made 1256 1262 \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.} 1257 1263 originally and not have to make a new copy of it.}
1258 1264
\item[Desired Outcome]{The User shall alter one flashcard and that 1259 1265 \item[Desired Outcome]{The User shall alter one flashcard and that
alteration will be shown to all users of that flashcard} 1260 1266 alteration will be shown to all users of that flashcard}
\\ 1261 1267 \\
\item[User Goals]{The user shall make the flashcard say something different 1262 1268 \item[User Goals]{The user shall make the flashcard say something different
than it did originally.} 1263 1269 than it did originally.}
1264 1270
\item[Primary Actor]{User (student) } 1265 1271 \item[Primary Actor]{User (student) }
1266 1272
\item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User 1267 1273 \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User
Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard} 1268 1274 Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard}
\\ 1269 1275 \\
\item[Priority Level]{Must} 1270 1276 \item[Priority Level]{Must}
1271 1277
\item[Status]{Not Implemented} 1272 1278 \item[Status]{Not Implemented}
1273 1279
\item[Pre-conditions] 1274 1280 \item[Pre-conditions]
1275 1281
\begin{itemize} 1276 1282 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1277 1283 \itemsep1pt\parskip0pt\parsep0pt
\item 1278 1284 \item
{User has created the flashcard} 1279 1285 {User has created the flashcard}
\end{itemize} 1280 1286 \end{itemize}
1281 1287
\item[Post-conditions]{} 1282 1288 \item[Post-conditions]{}
1283 1289
\begin{itemize} 1284 1290 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1285 1291 \itemsep1pt\parskip0pt\parsep0pt
\item 1286 1292 \item
{The user shall see their alteration for that flashcard} 1287 1293 {The user shall see their alteration for that flashcard}
\item 1288 1294 \item
{Other users will be notified of the alteration} 1289 1295 {Other users will be notified of the alteration}
\end{itemize} 1290 1296 \end{itemize}
1291 1297
\item[Trigger]{User (creator of original card) has clicked on the button 1292 1298 \item[Trigger]{User (creator of original card) has clicked on the button
``Edit''} 1293 1299 ``Edit''}
1294 1300
\item[Workflow] 1295 1301 \item[Workflow]
1296 1302
\begin{enumerate} 1297 1303 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1298 1304 \itemsep1pt\parskip0pt\parsep0pt
\item 1299 1305 \item
{User shall select one of the Flashcards they authored.} 1300 1306 {User shall select one of the Flashcards they authored.}
\item 1301 1307 \item
{User shall select ``Edit'' button on the flashcard.} 1302 1308 {User shall select ``Edit'' button on the flashcard.}
\item 1303 1309 \item
{Client shall display an ``Edit Flashcard'' view.} 1304 1310 {Client shall display an ``Edit Flashcard'' view.}
\item 1305 1311 \item
{The Flashcard will display editable fields/areas.} 1306 1312 {The Flashcard will display editable fields/areas.}
\item 1307 1313 \item
{The User shall input any changes to the Flashcard.} 1308 1314 {The User shall input any changes to the Flashcard.}
\item 1309 1315 \item
{The User shall select the ``Done Editing'' button.} 1310 1316 {The User shall select the ``Done Editing'' button.}
\item 1311 1317 \item
{The Client shall close the ``Edit Flashcard'' view.} 1312 1318 {The Client shall close the ``Edit Flashcard'' view.}
\item 1313 1319 \item
{The server shall update the Flashcard's content.} 1314 1320 {The server shall update the Flashcard's content.}
\item 1315 1321 \item
{Client shall notify users with the Flashcard that the Flashcard has 1316 1322 {Client shall notify users with the Flashcard that the Flashcard has
been edited, allowing the other users to keep or to discard the 1317 1323 been edited, allowing the other users to keep or to discard the
changes.} 1318 1324 changes.}
\end{enumerate} 1319 1325 \end{enumerate}
\end{description} 1320 1326 \end{description}
{} 1321 1327 {}
1322 1328
{} 1323 1329 {}
1324 1330
{} 1325 1331 {}
1326 1332
\newpage 1327 1333 \newpage
1328 1334
{} 1329 1335 {}
1330 1336
\subsection{[F8] Hide cards from feed} 1331 1337 \subsection{[F8] Hide cards from feed}
1332 1338
\begin{description} 1333 1339 \begin{description}
\item[Description]{The user shall be able to hide cards from feed} 1334 1340 \item[Description]{The user shall be able to hide cards from feed}
1335 1341
\item[Desired Outcome]{The card is no longer visible to the user} 1336 1342 \item[Desired Outcome]{The card is no longer visible to the user}
\\ 1337 1343 \\
\item[User Goals]{The card has been looked at and should be hidden to 1338 1344 \item[User Goals]{The card has been looked at and should be hidden to
reduce screen clutter} 1339 1345 reduce screen clutter}
1340 1346
{Primary Actor: }{User (Student)} 1341 1347 {Primary Actor: }{User (Student)}
1342 1348
\item[Dependency Use Cases]{}{}{{[}A1{]} User Registration, {[}A2{]} User 1343 1349 \item[Dependency Use Cases]{}{}{{[}A1{]} User Registration, {[}A2{]} User
Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard} 1344 1350 Login, {[}A3{]} Add a Class, {[}F1{]} Push Flashcard}
\\ 1345 1351 \\
\item[Priority Level]{``Should''} 1346 1352 \item[Priority Level]{``Should''}
1347 1353
{Status:}{Not implemented} 1348 1354 {Status:}{Not implemented}
1349 1355
\item[Pre-conditions]{Flashcard is created, flashcard is viewable by user} 1350 1356 \item[Pre-conditions]{Flashcard is created, flashcard is viewable by user}
1351 1357
\item[Post-conditions]{Flashcard is not viewable by user} 1352 1358 \item[Post-conditions]{Flashcard is not viewable by user}
1353 1359
\item[Trigger]{Card is flagged; Card is noted to be hidden} 1354 1360 \item[Trigger]{Card is flagged; Card is noted to be hidden}
1355 1361
\item[Workflow] 1356 1362 \item[Workflow]
1357 1363
\begin{enumerate} 1358 1364 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1359 1365 \itemsep1pt\parskip0pt\parsep0pt
\item 1360 1366 \item
{The User chooses a class from the dashboard.} 1361 1367 {The User chooses a class from the dashboard.}
\item 1362 1368 \item
{The Client shows the Live Feed for the selected class.} 1363 1369 {The Client shows the Live Feed for the selected class.}
\item 1364 1370 \item
{The User sees a card they want to hide from the Live Feed.} 1365 1371 {The User sees a card they want to hide from the Live Feed.}
\item 1366 1372 \item
{The User shall press a ``Hide Flashcard'' button on the card to be 1367 1373 {The User shall press a ``Hide Flashcard'' button on the card to be
hidden.} 1368 1374 hidden.}
\item 1369 1375 \item
{The Client shall hide the card of interest from the Live Feed, for 1370 1376 {The Client shall hide the card of interest from the Live Feed, for
only that User.} 1371 1377 only that User.}
\end{enumerate} 1372 1378 \end{enumerate}
1373 1379
\end{description} 1374 1380 \end{description}
1375 1381
\newpage 1376 1382 \newpage
1377 1383
{} 1378 1384 {}
1379 1385
\subsection{[F9] View a Feed} 1380 1386 \subsection{[F9] View a Feed}
1381 1387
\begin{description} 1382 1388 \begin{description}
\item[Description]{The user shall be able to view Live Feeds for different 1383 1389 \item[Description]{The user shall be able to view Live Feeds for different
classes} 1384 1390 classes}
1385 1391
\item[Desired Outcome]{The system shall only show the user Live Feeds for 1386 1392 \item[Desired Outcome]{The system shall only show the user Live Feeds for
specific classes. } 1387 1393 specific classes. }
\\ 1388 1394 \\
\item[User Goals]{The user will see only one Live Feed at a time. } 1389 1395 \item[User Goals]{The user will see only one Live Feed at a time. }
1390 1396
\item[Dependency Use Cases]{}{}{{[}A1{]} User Registration, {[}A2{]} User 1391 1397 \item[Dependency Use Cases]{}{}{{[}A1{]} User Registration, {[}A2{]} User
Login, {[}A3{]} Add a Class} 1392 1398 Login, {[}A3{]} Add a Class}
\\ 1393 1399 \\
\item[Priority Level]{``Must''} 1394 1400 \item[Priority Level]{``Must''}
1395 1401
{Status:}{Not implemented} 1396 1402 {Status:}{Not implemented}
1397 1403
\item[Pre-conditions]{User has added a class} 1398 1404 \item[Pre-conditions]{User has added a class}
1399 1405
\item[Post-conditions]{User shall see the Live Feed for that class} 1400 1406 \item[Post-conditions]{User shall see the Live Feed for that class}
1401 1407
\item[Trigger]{User shall select a class} 1402 1408 \item[Trigger]{User shall select a class}
1403 1409
\item[Workflow] 1404 1410 \item[Workflow]
1405 1411
\begin{enumerate} 1406 1412 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1407 1413 \itemsep1pt\parskip0pt\parsep0pt
\item 1408 1414 \item
{The User logs into their account.} 1409 1415 {The User logs into their account.}
\item 1410 1416 \item
{The System verifies the User's credentials and saves their session.} 1411 1417 {The System verifies the User's credentials and saves their session.}
\item 1412 1418 \item
{The User is at their dashboard.} 1413 1419 {The User is at their dashboard.}
\item 1414 1420 \item
{The Client shows the User's dashboard.} 1415 1421 {The Client shows the User's dashboard.}
\item 1416 1422 \item
{The User selects a class from their dashboard.} 1417 1423 {The User selects a class from their dashboard.}
\item 1418 1424 \item
{The Client displays the Live Feed for the class.} 1419 1425 {The Client displays the Live Feed for the class.}
\end{enumerate} 1420 1426 \end{enumerate}
1421 1427
\end{description} 1422 1428 \end{description}
\newpage 1423 1429 \newpage
1424 1430
{} 1425 1431 {}
\section{Decks} 1426 1432 \section{Decks}
\subsection{[-D2-] Making a deck} 1427 1433 \subsection{[-D2-] Making a deck}
1428 1434
\begin{description} 1429 1435 \begin{description}
\item[Description]{Upon selecting the right course, the student has the 1430 1436 \item[Description]{Upon selecting the right course, the student has the
power to make a deck by either selecting existing flashcard or adding a 1431 1437 power to make a deck by either selecting existing flashcard or adding a
new flashcard.} 1432 1438 new flashcard.}
1433 1439
\item[Desired Outcome]{The user can keep track of cards that s/he wants.} 1434 1440 \item[Desired Outcome]{The user can keep track of cards that s/he wants.}
\\ 1435 1441 \\
\item[User Goals]{The user has a personal deck ready for review later.} 1436 1442 \item[User Goals]{The user has a personal deck ready for review later.}
1437 1443
\item[Primary Actor]{User (student)} 1438 1444 \item[Primary Actor]{User (student)}
1439 1445
\item[Dependency Use Cases]{Add a class {[}A3{]}, Add Flashcards to Deck 1440 1446 \item[Dependency Use Cases]{Add a class {[}A3{]}, Add Flashcards to Deck
{[}F1{]}, Make a Flashcard {[}F3{]}} 1441 1447 {[}F1{]}, Make a Flashcard {[}F3{]}}
\\ 1442 1448 \\
\item[Priority Level]{``Must''} 1443 1449 \item[Priority Level]{``Must''}
1444 1450
\item[Status]{In Progress} 1445 1451 \item[Status]{In Progress}
1446 1452
\item[Pre-conditions] 1447 1453 \item[Pre-conditions]
1448 1454
\begin{itemize} 1449 1455 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1450 1456 \itemsep1pt\parskip0pt\parsep0pt
\item 1451 1457 \item
{The user has an account with the application. } 1452 1458 {The user has an account with the application. }
\item 1453 1459 \item
{The user has been added to the desired class.} 1454 1460 {The user has been added to the desired class.}
\end{itemize} 1455 1461 \end{itemize}
1456 1462
\item[Post-conditions] 1457 1463 \item[Post-conditions]
1458 1464
\begin{itemize} 1459 1465 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1460 1466 \itemsep1pt\parskip0pt\parsep0pt
\item 1461 1467 \item
{Desired cards are added to user's deck to the specific class } 1462 1468 {Desired cards are added to user's deck to the specific class }
\item 1463 1469 \item
{User's deck is added to the database.} 1464 1470 {User's deck is added to the database.}
\end{itemize} 1465 1471 \end{itemize}
1466 1472
\item[Trigger]{User has selected a card from the pool. User submitted a 1467 1473 \item[Trigger]{User has selected a card from the pool. User submitted a
new flashcard after ``Make New Flashcard''.} 1468 1474 new flashcard after ``Make New Flashcard''.}
1469 1475
\item[Workflow] 1470 1476 \item[Workflow]
1471 1477
\begin{enumerate} 1472 1478 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1473 1479 \itemsep1pt\parskip0pt\parsep0pt
\item 1474 1480 \item
{User is at their dashboard.} 1475 1481 {User is at their dashboard.}
\item 1476 1482 \item
{User selects the class of interest that they had no activity in yet.} 1477 1483 {User selects the class of interest that they had no activity in yet.}
\item 1478 1484 \item
{Client displays the Live Feed for the class.} 1479 1485 {Client displays the Live Feed for the class.}
\item 1480 1486 \item
{User presses ``Pull Flashcard'' button on a Flashcard that they want 1481 1487 {User presses ``Pull Flashcard'' button on a Flashcard that they want
in their Deck.} 1482 1488 in their Deck.}
\item 1483 1489 \item
{The server creates a Deck for the User for the Class of interest.} 1484 1490 {The server creates a Deck for the User for the Class of interest.}
\item 1485 1491 \item
{The server adds the Flashcard to the User's Deck.} 1486 1492 {The server adds the Flashcard to the User's Deck.}
\item 1487 1493 \item
{The Client makes the Flashcard disappear from the Live Feed.} 1488 1494 {The Client makes the Flashcard disappear from the Live Feed.}
\item 1489 1495 \item
{The Client displays the Flashcard in the User's Deck in the sidebar.} 1490 1496 {The Client displays the Flashcard in the User's Deck in the sidebar.}
\end{enumerate} 1491 1497 \end{enumerate}
1492 1498
{Alternate Workflow:} 1493 1499 {Alternate Workflow:}
1494 1500
\begin{enumerate} 1495 1501 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1496 1502 \itemsep1pt\parskip0pt\parsep0pt
\item 1497 1503 \item
{User is at their dashboard.} 1498 1504 {User is at their dashboard.}
\item 1499 1505 \item
{User selects the class of interest that they had no activity in yet.} 1500 1506 {User selects the class of interest that they had no activity in yet.}
\item 1501 1507 \item
{Client displays the Live Feed for the class.} 1502 1508 {Client displays the Live Feed for the class.}
\item 1503 1509 \item
{The User adds a Flashcard into the Class.} 1504 1510 {The User adds a Flashcard into the Class.}
\item 1505 1511 \item
{The server creates a Deck for the User for the Class of interest.} 1506 1512 {The server creates a Deck for the User for the Class of interest.}
\item 1507 1513 \item
{The server adds the new Flashcard to the User's Deck.} 1508 1514 {The server adds the new Flashcard to the User's Deck.}
\item 1509 1515 \item
{The Client makes the Flashcard disappear from the Live Feed.} 1510 1516 {The Client makes the Flashcard disappear from the Live Feed.}
\item 1511 1517 \item
{The Client displays the Flashcard in the User's Deck in the sidebar.} 1512 1518 {The Client displays the Flashcard in the User's Deck in the sidebar.}
\end{enumerate} 1513 1519 \end{enumerate}
\end{description} 1514 1520 \end{description}
\newpage 1515 1521 \newpage
1516 1522
{} 1517 1523 {}
1518 1524
\subsection{[D1] Remove a card from a deck} 1519 1525 \subsection{[D1] Remove a card from a deck}
1520 1526
\begin{description} 1521 1527 \begin{description}
\item[Description]{The user can remove flashcards from their deck.} 1522 1528 \item[Description]{The user can remove flashcards from their deck.}
1523 1529
\item[Desired Outcome]{The user will not be notified about that card. } 1524 1530 \item[Desired Outcome]{The user will not be notified about that card. }
\\ 1525 1531 \\
\item[User Goals]{To only review cards that the user wants to review. } 1526 1532 \item[User Goals]{To only review cards that the user wants to review. }
1527 1533
\item[Primary Actor]{User (student)} 1528 1534 \item[Primary Actor]{User (student)}
1529 1535
\item[Dependency Use Cases]{Add a class {[}A3{]}, Add Flashcards to Deck 1530 1536 \item[Dependency Use Cases]{Add a class {[}A3{]}, Add Flashcards to Deck
{[}F1{]}, Make a Flashcard {[}F3{]}} 1531 1537 {[}F1{]}, Make a Flashcard {[}F3{]}}
\\ 1532 1538 \\
\item[Priority Level]{``Must''} 1533 1539 \item[Priority Level]{``Must''}
1534 1540
\item[Status]{Unimplemented} 1535 1541 \item[Status]{Unimplemented}
1536 1542
\item[Pre-conditions] 1537 1543 \item[Pre-conditions]
1538 1544
\begin{itemize} 1539 1545 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1540 1546 \itemsep1pt\parskip0pt\parsep0pt
\item 1541 1547 \item
{The User has an account with the application} 1542 1548 {The User has an account with the application}
\item 1543 1549 \item
{The User is logged in} 1544 1550 {The User is logged in}
\end{itemize} 1545 1551 \end{itemize}
1546 1552
\item[Post-conditions] 1547 1553 \item[Post-conditions]
1548 1554
\begin{itemize} 1549 1555 \begin{itemize}
\itemsep1pt\parskip0pt\parsep0pt 1550 1556 \itemsep1pt\parskip0pt\parsep0pt
\item 1551 1557 \item
{Desired cards are hidden to the user.} 1552 1558 {Desired cards are hidden to the user.}
\end{itemize} 1553 1559 \end{itemize}
1554 1560
\item[Trigger]{User has selected a card to be hidden.} 1555 1561 \item[Trigger]{User has selected a card to be hidden.}
1556 1562
\item[Workflow] 1557 1563 \item[Workflow]
1558 1564
\begin{enumerate} 1559 1565 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1560 1566 \itemsep1pt\parskip0pt\parsep0pt
\item 1561 1567 \item
{The Client shows the user the dashboard.} 1562 1568 {The Client shows the user the dashboard.}
\item 1563 1569 \item
{The User shall select the appropriate class.} 1564 1570 {The User shall select the appropriate class.}
\item 1565 1571 \item
{The System checks if the class is in session.} 1566 1572 {The System checks if the class is in session.}
\item 1567 1573 \item
{The User shall select deck view.} 1568 1574 {The User shall select deck view.}
\item 1569 1575 \item
{The Client shall route the user to the deck view.} 1570 1576 {The Client shall route the user to the deck view.}
\item 1571 1577 \item
{The User clicks a flashcard's remove button.} 1572 1578 {The User clicks a flashcard's remove button.}
\item 1573 1579 \item
{The Client shall send a DELETE request to the server}{}{at 1574 1580 {The Client shall send a DELETE request to the server}{}{at
/api/flashcard/\textless{}flashcard ID\textgreater{}/remove} 1575 1581 /api/flashcard/\textless{}flashcard ID\textgreater{}/remove}
\item 1576 1582 \item
{The Server removes the flashcard from the User's Deck.} 1577 1583 {The Server removes the flashcard from the User's Deck.}
\item 1578 1584 \item
{The Server updates the flashcard's position in the Live Feed.} 1579 1585 {The Server updates the flashcard's position in the Live Feed.}
\item 1580 1586 \item
{The Client updates the User's Deck.} 1581 1587 {The Client updates the User's Deck.}
\end{enumerate} 1582 1588 \end{enumerate}
1583 1589
{} 1584 1590 {}
1585 1591
{Alternate Workflow:} 1586 1592 {Alternate Workflow:}
1587 1593
\begin{enumerate} 1588 1594 \begin{enumerate}
\itemsep1pt\parskip0pt\parsep0pt 1589 1595 \itemsep1pt\parskip0pt\parsep0pt
\item 1590 1596 \item
{The Client shows the user the dashboard.} 1591 1597 {The Client shows the user the dashboard.}
\item 1592 1598 \item
{The User shall select the appropriate class.} 1593 1599 {The User shall select the appropriate class.}
\item 1594 1600 \item
{The System checks if the class is }{not}{in session.} 1595 1601 {The System checks if the class is }{not}{in session.}
\item 1596 1602 \item
{The Client shall the user to the deck view.} 1597 1603 {The Client shall the user to the deck view.}
\item 1598 1604 \item
{The User clicks a flashcard's remove button.} 1599 1605 {The User clicks a flashcard's remove button.}
\item 1600 1606 \item
{The Client shall send a DELETE request to the server}{}{at 1601 1607 {The Client shall send a DELETE request to the server}{}{at
/api/flashcard/\textless{}flashcard ID\textgreater{}/remove} 1602 1608 /api/flashcard/\textless{}flashcard ID\textgreater{}/remove}
\item 1603 1609 \item
{The Server removes the flashcard from the User's Deck.} 1604 1610 {The Server removes the flashcard from the User's Deck.}
\item 1605 1611 \item
{The Server updates the flashcard's position in the Live Feed.} 1606 1612 {The Server updates the flashcard's position in the Live Feed.}
\item 1607 1613 \item
{The Client updates the User's Deck.} 1608 1614 {The Client updates the User's Deck.}
\end{enumerate} 1609 1615 \end{enumerate}
\end{description} 1610 1616 \end{description}
1611 1617
\subsection{[-D2-] Shuffling deck} 1612 1618 \subsection{[-D2-] Shuffling deck}
1613 1619
\begin{description} 1614 1620 \begin{description}
\item[Description]{User is able to shuffle his/her deck as a way to study 1615 1621 \item[Description]{User is able to shuffle his/her deck as a way to study
the flashcards} 1616 1622 the flashcards}
1617 1623
\item[Desired Outcome]{When taking a quiz, the user will notice that 1618 1624 \item[Desired Outcome]{When taking a quiz, the user will notice that
flashcards appear in random order} 1619 1625 flashcards appear in random order}
1620 1626
{User Goals:}{Improve quiz taking skills and knowledge consumption} 1621 1627 {User Goals:}{Improve quiz taking skills and knowledge consumption}
1622 1628
\item[Primary Actor]{User (student)} 1623 1629 \item[Primary Actor]{User (student)}
1624 1630
\item[Dependency Use Cases]{Deck has been created {[}D2{]}} 1625 1631 \item[Dependency Use Cases]{Deck has been created {[}D2{]}}
\\ 1626 1632 \\
\item[Priority Level]{}{''Won't''} 1627 1633 \item[Priority Level]{}{''Won't''}
1628 1634
\item[Status]{Implemented } 1629 1635 \item[Status]{Implemented }
DesignUseCases.toc View file @ ca345eb
File was created 1 \contentsline {section}{\numberline {1}Accounts}{4}{section.1}
2 \contentsline {subsection}{\numberline {1.1}[A1] User Registration}{4}{subsection.1.1}
3 \contentsline {subsection}{\numberline {1.2}[A2] User Login}{6}{subsection.1.2}
4 \contentsline {subsection}{\numberline {1.3}[A3] Add a Class}{7}{subsection.1.3}
5 \contentsline {subsection}{\numberline {1.4}[A4] Drop a Class}{9}{subsection.1.4}
6 \contentsline {subsection}{\numberline {1.5}[A5] Password change}{10}{subsection.1.5}
7 \contentsline {subsection}{\numberline {1.6}[A6] Password reset}{12}{subsection.1.6}
8 \contentsline {subsection}{\numberline {1.7}[A7] Limit Student Access to Courses}{14}{subsection.1.7}
9 \contentsline {subsection}{\numberline {1.8}[A8] User Logout}{15}{subsection.1.8}
10 \contentsline {subsection}{\numberline {1.9}[A9] Contact Admin}{16}{subsection.1.9}
11 \contentsline {section}{\numberline {2}Flashcards}{17}{section.2}
12 \contentsline {subsection}{\numberline {2.1}[F1] Push Flashcard}{17}{subsection.2.1}
13 \contentsline {subsection}{\numberline {2.2}[F2] Edit Flashcard}{19}{subsection.2.2}
14 \contentsline {subsection}{\numberline {2.3}[F3] Pull Flashcard}{20}{subsection.2.3}
15 \contentsline {subsection}{\numberline {2.4}[F4] Flag Inappropriate Cards}{21}{subsection.2.4}
16 \contentsline {subsection}{\numberline {2.5}[F5] Filter Flashcards}{22}{subsection.2.5}
17 \contentsline {subsection}{\numberline {2.6}[F6] Blank Out Words in Flashcard}{23}{subsection.2.6}
18 \contentsline {subsection}{\numberline {2.7}[F7] Fix Flashcard}{25}{subsection.2.7}
19 \contentsline {subsection}{\numberline {2.8}[F8] Hide cards from feed}{26}{subsection.2.8}
20 \contentsline {subsection}{\numberline {2.9}[F9] View a Feed}{27}{subsection.2.9}
21 \contentsline {section}{\numberline {3}Decks}{28}{section.3}
22 \contentsline {subsection}{\numberline {3.1}[-D2-] Making a deck}{28}{subsection.3.1}
23 \contentsline {subsection}{\numberline {3.2}[D1] Remove a card from a deck}{30}{subsection.3.2}
24 \contentsline {subsection}{\numberline {3.3}[-D2-] Shuffling deck}{31}{subsection.3.3}
25 \contentsline {subsection}{\numberline {3.4}[D2] Viewing cards in deck by pull time}{33}{subsection.3.4}
26 \contentsline {section}{\numberline {4}Review}{34}{section.4}
27 \contentsline {subsection}{\numberline {4.1}[R1] Study Deck}{34}{subsection.4.1}
28 \contentsline {subsection}{\numberline {4.2}[R2] Review Notification}{36}{subsection.4.2}
29 \contentsline {subsection}{\numberline {4.3}[R3] Configure Account Notifications}{37}{subsection.4.3}