From 4a76d38d2051600f2ff4148f1445785dafb3583b Mon Sep 17 00:00:00 2001 From: Kevin Mach Date: Fri, 5 Jun 2015 03:30:49 -0700 Subject: [PATCH] updated account design use cases --- DesignUseCases.tex | 267 +++++++++++++++++++++++++---------------------------- 1 file changed, 127 insertions(+), 140 deletions(-) diff --git a/DesignUseCases.tex b/DesignUseCases.tex index 1ed7b8a..51c4ca7 100644 --- a/DesignUseCases.tex +++ b/DesignUseCases.tex @@ -47,11 +47,9 @@ Kevin Mach & User Interface Specialist\\ \section{Accounts} \subsection{[A1] User Registration} \begin{description}[style=multiline,leftmargin=3cm] -\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 -through registering.} +\item[Description]{To create flashcards and save them into decks, the system requires the user to create an account prior. The user will be able to create an account by registering.} \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 +specified username, password, and email. The user will be able to log into the aforementioned account.} \\ \item[User Goals]{The user shall have an account to participate in the @@ -65,7 +63,7 @@ application's activities.} \item[Status]{Implemented} -\item[Pre-conditions]: None. +\item[Pre-conditions]{None} \item[Post-conditions] @@ -84,37 +82,33 @@ application's activities.} \item {The frontend renders the login form described in login.html.} \item - {The User shall click the sign up toggle.} + {The user shall click the sign up tab.} \item - {The frontend shall render a registration form and display it to the User.} + {The frontend shall render a registration form and display it to the user.} \item - {The User shal fill in the form.} + {The user shall fill in the form.} \item {The frontend checks that the provided email is not invalid, and that - the password is not valid. If anything is not valid, it displays an + the password is not invalid. If anything is not valid, it displays an error and returns this to the user. } \item - {If the form is valid, the frontent POSTs the form in JSON format to the - server API at /api/verify\_email/.} + {If the form is valid, the frontend POSTs the form in JSON format to the + backend API at /api/verify\_email/.} \item - {The backend deserializes and validates the data in /api/register. If it's not valid, it - returns an error to the frontend.} + {The backend deserializes and validates the data in /api/register. If it's not valid, it returns an error to the frontend.} \item - {The backend creates a new User object from the provided data, filling + {The backend creates a new user object from the provided data, filling in the email and password fields in models.py in model method create\_user.} \item - {The backend saves the User object in models.py.} + {The backend saves the user object in models.py.} \item - {The backend marks the User's email as unverified.} + {The backend marks the user's email as unverified.} \item - {The backend sends an email to the User's address with a link to - validate the user's email address from models.py in function send\_confirmation\_email.} + {The backend sends an email to the user's address with a link to validate the user's email address from models.py in function send\_confirmation\_email.} \item - {The backend responds with success and logs the User in on a new - session for the User. } + {The backend responds with success and logs the user in on a new session for the User.} \item - {The frontend reports success to the User and stores the sessionid for - future requests.} + {The frontend reports success to the user and stores the sessionid for future requests.} \end{enumerate} {Verification Workflow:} @@ -122,18 +116,16 @@ application's activities.} \begin{enumerate} \itemsep1pt\parskip0pt\parsep0pt \item - {The User receives an email with a link to verify their email. The - User clicks the link} + {The user receives an email with a link to verify their email. The user clicks the link} \item {The frontend in VerifyEmailController submits a POST request to the backend.} \item - {The backend validates the code in views.py in function veryify\_email. If the code is not valid, it returns - an error to the frontend.} + {The backend validates the code in views.py in function veryify\_email. If the code is not valid, it returns an error to the frontend.} \item - {The backend marks the user's email as confirmed and saves the User object + {The backend marks the user's email as confirmed and saves the user object again in models.py in function confirm\_email. The user's account is now active.} \item - {The frontend's VerifyEmailController.js reports success and logs the User in to the application. } + {The frontend's VerifyEmailController.js reports success and logs the user in to the application.} \end{enumerate} \end{description} @@ -142,7 +134,7 @@ application's activities.} \subsection{[A2] User Login} \begin{description} -\item[Description]{User is able to login to personal account.} +\item[Description]{The user is able to login to personal account.} \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 @@ -165,8 +157,8 @@ device, or use the site after logging out.} \begin{itemize} \itemsep1pt\parskip0pt\parsep0pt \item - {The User has registered an account.} - {The User knows their email and password.} + {The user has registered an account.} + {The user knows their email and password.} \end{itemize} \item[Post-conditions] @@ -174,10 +166,10 @@ device, or use the site after logging out.} \begin{itemize} \itemsep1pt\parskip0pt\parsep0pt \item - {The User can navigate the site and see their data.} + {The user can navigate the site and see their data.} \end{itemize} -\item[Trigger]{The User wants to use the application and its core features.} +\item[Trigger]{The user wants to use the application and its core features.} \item[Workflow] @@ -186,29 +178,29 @@ device, or use the site after logging out.} \item {The frontend shall render the login form described in login.html and implemented in LoginController.js} \item -{The User shall type in their email and password.} +{The user shall type in their email and password.} \item - {The backend shall verify that the User has submitted their email and password in views.py in function login.} + {The backend shall verify that the user has submitted their email and password in views.py in function login.} \item - {The backend shall check that the User is active in views.py in function login.} + {The backend shall check that the user is active in views.py in function login.} \item - {The backend shall log the User in using the Django login feature.} + {The backend shall log the user in using the Django login feature.} \item - {The frontend shall displays the home page for the User.} + {The frontend shall displays the home page for the user.} \end{enumerate} \end{description} \newpage \subsection{[A3] Add a Class} \begin{description} -\item[Description]{The User shall be able to add a class and access the +\item[Description]{The user shall be able to add a class and access the flashcards associated with that class.} \item[Desired Outcome]{The class shall be connected to the student's account -and the User shall have the ability to read and publish flashcards +and the user shall have the ability to read and publish flashcards for this class.} \\ -\item[User Goals]{The User wants to publish flashcards for this class, and +\item[User Goals]{The user wants to publish flashcards for this class, and read the flashcards for this class that are published by other users.} \item[Primary Actor]{User (student)} @@ -225,9 +217,9 @@ Login} \begin{itemize} \itemsep1pt\parskip0pt\parsep0pt \item - {The User has registered an account.} + {The user has registered an account.} \item - {The User has successfully logged in to the application.} + {The user has successfully logged in to the application.} \end{itemize} \item[Post-conditions] @@ -235,25 +227,25 @@ Login} \begin{itemize} \itemsep1pt\parskip0pt\parsep0pt \item - {The User can view the flashcards being published for the class and + {The user can view the flashcards being published for the class and add them to their deck.} \item - {The User can publish flashcards to be viewed and added by other users + {The user can publish flashcards to be viewed and added by other users in the same class.} \end{itemize} -\item[Trigger]{The User wants to make flashcards and view flashcards for a class.} +\item[Trigger]{The user wants to make flashcards and view flashcards for a class.} \item[Workflow] \begin{enumerate} \itemsep1pt\parskip0pt\parsep0pt \item - {The User shall click "Add a Class" from the drop down menu in the upper left hand corner.} + {The user shall click "Add a Class" from the "Classes" drop down menu in the upper left hand corner.} \item {The frontend shall navigate to the new page described by addclass.html.} \item - {The User shall begin to type the class department code, course title, course number, or instructor in the text box.} + {The user shall begin to type the class department code, course title, course number, or instructor in the text box.} \item {The frontend in ClassAddController.js shall send a get request to the backend at api/sections/search/.} \item @@ -261,11 +253,11 @@ Login} \item {The frontend shall show the classes that the backend has found.} \item - {The User shall select from the classes the one that they want to add.} + {The user shall select from the classes the one that they want to add.} \item {The frontend shall enable the 'Add Class' button.} \item - {The User shall click 'Add Class' button to the right of the text box.} + {The user shall click 'Add Class' button to the right of the text box.} \item {The frontend shall send a post request to api/sections/.} \item @@ -273,7 +265,7 @@ Login} \item {The backend in models.py in function enroll shall add the class to the User's sections.} \item - {The frontend shall redirect the User to the class's Live Feed using the ClassAddController.js.} + {The frontend shall redirect the user to the class's Live Feed using the ClassAddController.js.} \item {The frontend shall present the live feed for the class by using feed.html and FeedController.js.} @@ -285,20 +277,20 @@ Login} \itemsep1pt\parskip0pt\parsep0pt \item []{ Precondition: The class has a whitelist, a whitelist is a list of email addresses that can add themselves to the class.\\} \item - {The User shall select their desired class, which has a whitelist, by clicking on ``Add Class''.} + {The user shall select their desired class, which has a whitelist, by clicking on ``Add Class''.} \item {The frontend shall submit a POST request to /api/me/sections with the course ID that the User typed. } \item {The backend shall check if there is a whitelist for the class that the - User has selected in models.py at function is\_whitelisted.} + user has selected in models.py at function is\_whitelisted.} \item {The backend shall check if the user is on the whitelist in models.py in function is\_user\_on\_whitelist.} \item - {The backend shall add the User to the class following steps above.} + {The backend shall add the user to the class following steps above.} \item - {The frontend shall redirect the User to the class's live feed followed the last step in the Workflow above.} + {The frontend shall redirect the user to the class's live feed followed the last step in the Workflow above.} \end{enumerate} \item[Alternate Workflow: User is not whitelisted.] @@ -322,14 +314,14 @@ Login} \subsection{[A4] Drop a Class} \begin{description} -\item[Description]{The User can remove themselves from a course he/she is +\item[Description]{The user can remove themselves from a course he/she is registered to} -\item[Desired Outcome]{The User has dropped the class and no longer need +\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 see the flashcards associated to the class that they dropped } \\ -\item[User Goals]{The User shall not have access to a class and the +\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 listed in their drop down menu.} @@ -347,13 +339,13 @@ Login, {[}A3{]} Add a Class} \begin{itemize} \itemsep1pt\parskip0pt\parsep0pt \item - {The User has a valid account.} + {The user has a valid account.} \item - {The User is logged in.} + {The user is logged in.} \item - {The User has enrolled in at least one class.} + {The user has enrolled in at least one class.} \item - {The User has navigated to the Settings page.} + {The user has navigated to the Settings page.} \end{itemize} \item[Post-conditions]{} @@ -361,25 +353,25 @@ Login, {[}A3{]} Add a Class} \begin{itemize} \itemsep1pt\parskip0pt\parsep0pt \item - {User shall no longer have access to dropped class, or associated + {The user shall no longer have access to dropped class, or associated flashcards} \end{itemize} -\item[Trigger]{User no longer wants to see flashcards from that class.} +\item[Trigger]{The user no longer wants to see flashcards from that class.} \item[Workflow] \begin{enumerate} \itemsep1pt\parskip0pt\parsep0pt \item - {The User shall click `Drop' button to the right of the class they wish to drop.} + {The user shall click `Drop' button to the right of the class they wish to drop.} \item {The frontend shall submit a DELETE request to /api/me/sections/\textless{}section ID number\textgreater{}.} \item - {The backend shall check that the User is enrolled in the section in models.py in function drop.} + {The backend shall check that the user is enrolled in the section in models.py in function drop.} \item - {The server shall remove the selected class from a user's list of section in models.py in function drop. } + {The server shall remove the selected class from a user's list of section in models.py in function drop.} \item {The frontend shall remove the class from the list in setting and show toast reading 'Dropped'.} \end{enumerate} @@ -391,10 +383,10 @@ Login, {[}A3{]} Add a Class} \subsection{[A5] Password change} \begin{description} -\item[Description]{The User shall be able to change the password for their +\item[Description]{The user shall be able to change the password for their account in the account settings. } -\item[Desired Outcome]{The User's password shall be changed and the User +\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} \\\\ \item[User Goals]{The User wants to use a different password in the future} @@ -404,7 +396,7 @@ shall be able to log in with the new password in the future} \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User Login} \\ -\item[Details]{The User provides their current password and a new password +\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 password to the requested new password.} @@ -417,13 +409,13 @@ password to the requested new password.} \begin{itemize} \itemsep1pt\parskip0pt\parsep0pt \item - {The User has registered an account.} + {The user has registered an account.} \item - {The User has logged in.} + {The user has logged in.} \item - {The User knows their current password.} + {The user knows their current password.} \item - {The User has navigated to the Settings page.} + {The user has navigated to the Settings page.} \end{itemize} \item[Post-conditions] @@ -431,24 +423,24 @@ password to the requested new password.} \begin{itemize} \itemsep1pt\parskip0pt\parsep0pt \item - {The User's password is changed} + {The user's password is changed} \item - {The User can log in with the new password} + {The user can log in with the new password} \end{itemize} -\item[Trigger]{The User wants to change their password.} +\item[Trigger]{The user wants to change their password.} \item[Error Handling] \begin{description} \item[\small Missing Fields] \begin{itemize} -\item The client shall enforce required fields -\item The server will return an HTTP Bad Request error to the client. +\item The frontend shall enforce required fields +\item The backend will return an HTTP Bad Request error to the frontend. \end{itemize} \item[\small Incorrect Old Password] \begin{itemize} -\item The server will return an HTTP Forbidden error to the client. +\item The backend will return an HTTP Forbidden error to the frontend. \end{itemize} \item[\small Blank New Password] \begin{itemize} -\item The server will return an HTTP Bad Request error to the client. +\item The backend will return an HTTP Bad Request error to the frontend. \end{itemize} \end{description} \item[Workflow] @@ -459,7 +451,7 @@ password to the requested new password.} {The frontend shall render a form that requires the user to enter their old password and new password from settings.html} \item - {The User shall type in their current password, the desired new + {The user shall type in their current password, the desired new password, and retype the desired new password to confirm.} \item {The frontend shall submit the data to the server by sending a PATCH @@ -470,7 +462,7 @@ password to the requested new password.} {The backend shall check the user's current password in views.py in function patch under UserDetail.} \item The backend shall update the user's current password in views.py in function patch under UserDetail. \item - {The frontend shall present a toast reading "Password successfully changed" and redirect the User to the Add a Class page.} + {The frontend shall present a toast reading "Password successfully changed" and redirect the user to the Add a Class page.} \end{enumerate} \end{description} {} @@ -482,13 +474,13 @@ password to the requested new password.} \subsection{[A6] Password reset} \begin{description} -\item[Description]{The User shall be able to reset their password without +\item[Description]{The user shall be able to reset their password without being logged in.} -\item[Desired Outcome]{The User's password shall be changed to one that +\item[Desired Outcome]{The user's password shall be changed to one that they remember.} \\ -\item[User Goals]{The User will be able to log into the site with a new password.} +\item[User Goals]{The user will be able to log into the site with a new password.} \item[Primary Actor]{User (student)} @@ -497,7 +489,7 @@ they remember.} \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 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 +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 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 @@ -512,11 +504,11 @@ if the token is correct. } \begin{itemize} \itemsep1pt\parskip0pt\parsep0pt \item - {The User has created an account before.} + {The user has created an account before.} \item - {The User knows the email address attached to their account for our application.} + {The user knows the email address attached to their account for our application.} \item - {The User can log into their email account.} + {The user can log into their email account.} \end{itemize} \item[Post-conditions] @@ -524,12 +516,12 @@ if the token is correct. } \begin{itemize} \itemsep1pt\parskip0pt\parsep0pt \item - {The User's password is changed.} + {The user's password is changed.} \item - {The User can log in with the new password.} + {The user can log in with the new password.} \end{itemize} -\item[Trigger]{The User wants to log into the site but does not know their password.} +\item[Trigger]{The user wants to log into the site but does not know their password.} \item[Workflow] \begin{enumerate} @@ -539,7 +531,7 @@ if the token is correct. } \item {The frontend shall render the password reset page from the template requestpasswordreset.html.} \item - {The User shall type in their email address for their account and click the "Reset" button.} + {The user shall type in their email address for their account and click the "Reset" button.} \item {The frontend shall send a POST request to /api/request\_password\_reset/ from RequestResetController.js.} \item @@ -549,14 +541,13 @@ if the token is correct. } {The backend shal send an email to the User with a link to the password reset page in models.py in function request\_password\_reset.} \item - {The User will navigate to their email account, open the email, and click the link.} + {The user will navigate to their email account, open the email, and click the link.} \item {The frontend shall render the password reset page from the template resetpassword.html.} \item - {The User shall type in their new password and re-type it to confirm it.} + {The user shall type in their new password and re-type it to confirm it.} \item - {The frontend shall check if the new password is long enough and if the confirmed password is the same as - the new password in ResetPasswordController.js.} + {The frontend shall check if the new password is long enough and if the confirmed password is the same as the new password in ResetPasswordController.js.} \item {The frontend shall send a POST request to /api/reset\_password from ResetPasswordController.js.} \item @@ -564,7 +555,7 @@ if the token is correct. } \item {The frontend shall redirect the User to the login page. } \item - {The User shall use their new password to login to the application.} + {The user shall use their new password to login to the application.} \end{enumerate} \end{description} \newpage @@ -574,16 +565,12 @@ if the token is correct. } \subsection{[A7] Limit Student Access to Courses} \begin{description} -\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 -are actually in the class.} +\item[Description]{The instructor shall be able to limit access to the courses that they are in charge of by whitelisting only those students that are actually in the class.} -\item[Desired Outcome]{The class will have limited access and only those -users who are whitelisted may enroll in the class.} +\item[Desired Outcome]{The class will have limited access and only those Users who are whitelisted may enroll in the class.} \\ -\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 -else.} +\item[User Goals]{The instructor wants to limit access to their class so only +the students who are actually in their class participate, and nobody else.} \item[Primary Actor]{Instructor} @@ -599,7 +586,7 @@ Login} \begin{itemize} \itemsep1pt\parskip0pt\parsep0pt \item - {User has valid instructor's account} + {The user has valid instructor's account} \end{itemize} \item[Post-conditions] @@ -611,15 +598,15 @@ Login} \end{itemize} \item[Trigger]{The course instructor wants to limit the students who -can add his class on our application.} +can add their class on our application.} \item[Workflow] \begin{enumerate} \itemsep1pt\parskip0pt\parsep0pt \item - {The instructor emails the administrators from his UCSD email address - and requests to limit access to his course. He provides a list of + {The instructor emails the administrators from their UCSD email address + and requests to limit access to their course. They provides a list of emails of the students that are to be whitelisted.} \item {The administrators visit a custom admin page, select the course, and @@ -630,7 +617,7 @@ can add his class on our application.} attaching it to the section taught by the instructor.} \item {The backend shall add any existing users whose email addresses appear - in the whitelist to the class. } + in the whitelist to the class.} \end{enumerate} \end{description} \newpage @@ -638,14 +625,14 @@ can add his class on our application.} \subsection{[A8] User Logout} \begin{description} -\item[Description]{The User shall be able to log out of his/her account on +\item[Description]{The user shall be able to log out of their account on the site.} -\item[Desired Outcome]{The User's information and data will no longer be +\item[Desired Outcome]{The user's information and data will no longer be accessible after logging out. } \\ -\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 +\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 their account.} \item[Primary Actor]{User (student)} @@ -660,16 +647,16 @@ account.} \item[Post-conditions]{}{The user's data can no longer be accessed.} -\item[Trigger]{The User no longer wants to be logged into the application.} +\item[Trigger]{The user no longer wants to be logged into the application.} \item[Workflow] \begin{enumerate} \itemsep1pt\parskip0pt\parsep0pt \item - {The User clicks the 'Logout' button in the upper right hand corner.} + {The user clicks the 'Logout' button in the upper right hand corner.} \item - {The backend shall log the User out using the Django logout feature.} + {The backend shall log the user out using the Django logout feature.} \item {The frontend renders the application login page using login.html.} \end{enumerate} @@ -683,12 +670,12 @@ account.} \subsection{[A9] Contact Admin} \begin{description} -\item[Description]{The User shall be able to contact the admin.} +\item[Description]{The user shall be able to contact the admin.} -\item[Desired Outcome]{The User shall send a message to the admin; the +\item[Desired Outcome]{The user shall send a message to the admin; the admin shall receive the message.} -{User Goals:}{The User sends a message to the admin.} +{User Goals:}{The user sends a message to the admin.} \item[Primary Actor]{User} @@ -702,7 +689,7 @@ admin shall receive the message.} \item[Post-conditions]{The admin receives the user's message.} -\item[Trigger]{The User wants to contact the adiminstators of the site with +\item[Trigger]{The user wants to contact the adiminstators of the site with bug reports, questions, or praise. } \item[Workflow] @@ -710,17 +697,17 @@ bug reports, questions, or praise. } \begin{enumerate} \itemsep1pt\parskip0pt\parsep0pt \item - {The User shall click the '?' button in the right corner of the navigation bar.} + {The user shall click the '?' button in the right corner of the navigation bar.} \item {The frontend shall render the page using the help.html template.} \item - {The User shall scroll to the bottom of the page.} + {The user shall scroll to the bottom of the page.} \item - {The User shall click the text reading "Send Us an Email!"} + {The user shall click the text reading "Send Us an Email!"} \item {The frontend shall open Microsoft Outlook or a similar application using the HelpController.js.} \item - {The User shall see our email address in the recipients text box.} + {The user shall see our email address in the recipients text box.} \end{enumerate} \end{description} \newpage @@ -730,13 +717,13 @@ bug reports, questions, or praise. } \subsection{[F1] Push Flashcard} \begin{description} -\item[Description]{The User shall be able to create a flashcard with their +\item[Description]{The user shall be able to create a flashcard with their input. } -\item[Desired Outcome]{The User shall have the flashcard added to their own +\item[Desired Outcome]{The user shall have the flashcard added to their own deck and the Live Feed. } \\ -\item[User Goals]{The User will see their flashcard in their deck and the +\item[User Goals]{The user will see their flashcard in their deck and the flashcard will be shared with others. } \item[Dependency Use Cases]{{[}A1{]} User Registration, {[}A2{]} User @@ -747,11 +734,11 @@ Login, {[}A3{]} Add a Class} \begin{itemize} \itemsep1pt\parskip0pt\parsep0pt \item - {The User has an account.} + {The user has an account.} \item - {The User has added at least one class.} + {The user has added at least one class.} \item - {The User has navigated to the live feed for a class.} + {The user has navigated to the live feed for a class.} \end{itemize} \item[Post-conditions] @@ -759,31 +746,31 @@ Login, {[}A3{]} Add a Class} \begin{itemize} \itemsep1pt\parskip0pt\parsep0pt \item - {The User has flashcard added to their deck.} + {The user has flashcard added to their deck.} \item {The Flashcard is shown in the Live Feed.} \item {Other users can add this flashcard to their decks.} \end{itemize} -\item[Trigger]{The User wants to make a flashcard to study.} +\item[Trigger]{The user wants to make a flashcard to study.} \item[Workflow] \begin{enumerate} \itemsep1pt\parskip0pt\parsep0pt \item - {The User is at the live feed for the class from feed.html.} + {The user is at the live feed for the class from feed.html.} \item - {The User shall click on the '+' button at the bottom right of the screen.} + {The user shall click on the '+' button at the bottom right of the screen.} \item {The frontend shall present a modal for inputting the flashcard text to the User.} \item - {The User shall type in the content of their flashcard.} + {The user shall type in the content of their flashcard.} \item - {The User shall highlight keywords in the flashcard text.} + {The user shall highlight keywords in the flashcard text.} \item - {The User shall click on the `Contribute' button.} + {The user shall click on the `Contribute' button.} \item {The frontend shall generate a POST request consisting of the flashcard text, blanks, and material date, in JSON form in FeedController.js and send it to /api/flashcards/.} \item -- 1.9.1