352 Requirements - bounswe/bounswe2024group1 GitHub Wiki
Requirements Specification
The Requirements Changelog is available here Source of truth for this requirements document is in Google docs. This markdown document is generated using an Apps Script that converts the Google Doc into proper markdown.
Glossary
-
User: Anybody using the system via web or mobile interfaces. Also referred to as "All Users" to make things clearer.
-
Registered User: Users who have registered to the system or logged in through Google and whose authentication tokens have not expired.
-
Guest: Users who aren't Registered Users.
-
Diet: A grouping of food that is related to a special eating routine.
-
Dish: A specific food preparation with cooking finished, and ready to eat, or be served. (Q746549) / (Q2095)
-
Cuisine: A characteristic style of cooking practices and traditions. (Q1778821)
-
Food Type: The categorization of food based on certain characteristics, ingredients, or preparation methods. Instances include, but are not limited to: Salads, desserts, pastas, and drinks. (Q19861951)
-
Recipe Page: A user-created page that contains a list of ingredients, a list of steps, and optionally some photos.
-
Cuisine Page: A system-generated page that has information about a cuisine and the dishes linked to that cuisine.
-
Dish Page: A system-generated page that has information about a dish and the recipes linked to that dish.
-
Profile Page: A page that shows a Registered User’s recipes, and information and allows others to follow them.
-
Rating: A decimal number associated with a dish having 1 decimal place, calculated as the average of Registered Users’ ratings.
-
Platform: The operating system of the device that the User accesses the System through.
-
“Recent” Recipes: A list of recipes generated by querying by descending chronological order.
-
“Top-Rated” Recipes: A list of recipes generated by querying by descending average rating with a filter of a minimum of 10 ratings.
1. Functional Requirements
-
1.1. User Registration and Authentication
-
1.1.1. Registration
- 1.1.1.1. Guests shall be able to register with a username, email, password, name, surname, and country (required).
- 1.1.1.1.1. The username must be unique in the system.
- 1.1.1.1.2. The password must have at least 8 characters, one lowercase letter, one uppercase letter, and one digit.
- 1.1.1.1.3. E-mail, password, and username may consist of at most 25 characters.
- 1.1.1.1. Guests shall be able to register with a username, email, password, name, surname, and country (required).
-
1.1.2. E-Mail Verification
- 1.1.2.1. Upon registration, a Registered User shall receive a verification email.
- 1.1.2.2. A Registered User shall be able to verify their email through the aforementioned verification email.
- 1.1.2.3. The User should not be able to sign in before they verify their email through the aforementioned method.
- 1.1.2.4. The Registered User should be able to resend the verification email upon trying to sign in before verification.
-
1.1.3. Personal Information
- 1.1.3.1. Registered Users shall be able to add a short Bio of at most 200 characters, specify their gender (male, female, or neither), and add the labels for the Diet(s) they are following.
-
1.1.4. Sign In
- 1.1.4.1. Guests shall be able to log in with email and password.
- 1.1.4.2. Registered Users shall be able to log out.
-
1.1.5. Password Recovery
- 1.1.5.1. A Registered User shall be able to create a password recovery request.
- 1.1.5.2. A Registered User shall receive a password recovery email upon their request.
- 1.1.5.3. A Registered User shall be able to reset their password using the password recovery email.
-
1.1.6. Logout
- 1.1.6.1. Registered Users shall be able to log out from their accounts, becoming a Guest.
-
-
1.2. Profile Page
-
1.2.1. Registered Users shall have a personalized Profile Page.
-
1.2.2. Registered Users shall be able to upload profile pictures.
-
1.2.3. Registered Users shall be able to edit their profile picture and the personal information on their profile page.
-
1.2.4. Users shall be able to see the followers that the Registered User has on their Profile Page.
-
1.2.5. The Profile Page shall show the follower count of the Registered User.
-
1.2.6. The Users shall be able to see the Registered Users that Registered User follows on their Profile Page.
-
1.2.7. Profile Pages of Registered Users shall be visible to every other User.
-
1.2.8. The Profile Page shall show the number of recipes that the Registered User created.
-
1.2.9. The Profile Page shall show the Recipes that the Registered User has created.
-
-
1.3. User Interaction
-
1.3.1. Follow
- 1.3.1.1. Registered Users shall be able to follow other Registered Users through the Profile of the other Registered User.
- 1.3.1.2. Registered Users shall be able to follow Cuisines and Diets.
- 1.3.1.3. Registered Users shall be able to unfollow other Registered Users through the Profile of the other User.
- 1.3.1.4. Registered Users shall be able to unfollow Cuisines and Diets.
-
1.3.2. Pages
- 1.3.2.1. All Users shall be able to view Dish Pages and Cuisine Pages and the listed recipes in them.
-
1.3.3. Search
- 1.3.3.1. All Users shall be able to search for Profiles.
- 1.3.3.2. All Users shall be able to search for Dishes using keywords with semantic search.
-
1.3.4. Bookmark
- 1.3.4.1. Registered Users shall be able to bookmark Recipes.
- 1.3.4.2. Registered Users shall be able to view their bookmarks.
-
-
1.4. Search
-
1.4.1. Search Types
- 1.4.1.1. All Users shall be able to search for Profiles or Dishes.
- 1.4.1.2. All Users shall be able to choose the type of search they want to perform (Profile/Dish).
-
1.4.2. Dish Search
- 1.4.2.1. All Users shall be able to search by keywords that the system does a semantic search for.
- 1.4.2.2. All Users shall see information about the Dishes in the search results including
- 1.4.2.2.1. A picture representing the dish
- 1.4.2.2.2. Its description in Wikidata
- 1.4.2.3. All Users shall be able to further filter by Cuisine, or Food Type (e.g., baked, fried) when searching for Dishes
-
1.4.3. Profile Search
- 1.4.3.1. All Users shall be able to search for Registered Users by the following criteria:
- 1.4.3.1.1. Username
- 1.4.3.1.2. First name
- 1.4.3.1.3. Last name
- 1.4.3.2. The search results shall include the following information for each Registered User:
- 1.4.3.2.1. Username
- 1.4.3.2.2. Profile picture
- 1.4.3.2.3. Number of followers
- 1.4.3.2.4. Number of recipes published
- 1.4.3.2.5. Average rating of recipes
- 1.4.3.2.6. User's biographical information
- 1.4.3.1. All Users shall be able to search for Registered Users by the following criteria:
-
-
1.5. Feed
-
1.5.1. Feed Types
- 1.5.1.1. The Feed shall be shown to a User upon entry to the system.
- 1.5.1.2. Registered Users shall be able to choose between two sections of the Feed: Following, or Explore.
- 1.5.1.3. Guests shall only be able to see the Explore Feed.
-
1.5.2. Explore
- 1.5.2.1. In the Explore section, All Users shall be able to view “Top Rated” Recipes.
-
1.5.3. Following
- 1.5.3.1. In the Following section, Registered Users shall be able to view Recipes from the Cuisines and Profiles that they follow.
- 1.5.3.2. Registered Users shall see these Recipes in descending chronological order.
-
1.5.4. Feed Interaction
- 1.5.4.1. All Users shall be able to go to the Recipes page from the Feed.
- 1.5.4.2. Registered Users shall be able to rate Recipes from the Feed.
- 1.5.4.3. Registered Users shall be able to bookmark Recipes from the Feed.
- 1.5.4.4. All Users shall be able to filter the Recipes in their Feed by food type.
-
-
1.6. Dish Page
-
1.6.1. All Users shall be able to view “Top Rated” recipes for a Dish.
-
1.6.2. All Users shall be able to view “Recent” recipes for a Dish.
- 1.6.2.1. Recent is defined as reverse chronological order.
-
1.6.3. All Users shall be able to see which Cuisine a Dish belongs to.
-
1.6.4. All Users shall be able to view information about the Dish such as;
- 1.6.4.1. its description in Wikidata,
- 1.6.4.2. a link to its Wikipedia page if it exists,
-
1.6.5. All Users shall be able to view an image associated with the dish.
-
1.6.6. Registered Users shall be able to create a new Recipe linked to the Dish from the Dish Page
-
-
1.7. Cuisine Page
-
1.7.1. All Users shall be able to view “Top Rated” recipes for the dishes belonging to a Cuisine.
-
1.7.2. All Users shall be able to view “Recent” recipes for the dishes belonging to a Cuisine.
-
1.7.3. All Users shall be able to view information about the Cuisine such as;
- 1.7.3.1. its description in Wikidata,
- 1.7.3.2. a link to its Wikipedia page if it exists
-
1.7.4. All Users shall be able to list all dishes associated with a cuisine.
-
-
1.8. Recipe Page
-
1.8.1. Creation
- 1.8.1.1. Registered Users shall be able to create Recipes with:
- 1.8.1.1.1. a name
- 1.8.1.1.2. list of instructions
- 1.8.1.1.3. list of ingredients
- 1.8.1.1.4. (optional) photos
- 1.8.1.1.5. time required
- 1.8.1.1.6. number of servings
- 1.8.1.1.7. (optional) allergens
- 1.8.1.2. Registered Users shall be able to link a Dish with their Recipe.
- 1.8.1.1. Registered Users shall be able to create Recipes with:
-
1.8.2. Deletion
- 1.8.2.1. Registered Users shall be able to delete their Recipes.
-
1.8.3. Interaction
- 1.8.3.1. Registered Users shall be able to rate recipes.
- 1.8.3.1.1. Registered Users shall be able to rate recipes an integer in the range 1-5.
- 1.8.3.1.2. All Users shall be able to see the Average Rating of a recipe.
- 1.8.3.1.3. All Users shall be able to see the number of ratings.
- 1.8.3.2. All Users shall be able to copy a link to the Recipe.
- 1.8.3.3. All Users shall be able to see all the Registered Users that bookmarked the Recipe.
- 1.8.3.4. Registered Users shall be able to follow Registered Users that bookmarked the Recipe.
- 1.8.3.5. Registered Users shall be able to add comments for a Recipe.
- 1.8.3.6. Registered Users shall be able to upvote a comment
- 1.8.3.1. Registered Users shall be able to rate recipes.
-
1.8.4. Content
- 1.8.4.1. All Users shall be able to see all the information for that recipe, as listed under 1.8.1.
-
2. System Requirements
-
2.1. Wikidata API
-
2.1.1. The System shall periodically pull data from the Wikidata API to create Dish Pages for all Q746549 instances.
-
2.1.2. The System shall periodically pull data from the WIkidata API to create Cuisine Pages for all Q1778821 instances.
- 2.1.2.1. A linked data query shall be performed to link Dishes with their Cuisines.
- 2.1.2.2. A Dish may be linked to multiple Cuisines.
-
2.1.3. The System shall pull photos from the Wikimedia API for Dishes and Cuisines.
-
2.1.4. Food types are the following entities that are instances of (P31) “type of food or dish” (Q19861951):
- 2.1.4.1. cookies (Q122762245)
- 2.1.4.2. baked good (Q2251745)
- 2.1.4.3. bread (Q7802)
- 2.1.4.4. chicken dish (Q27994917)
- 2.1.4.5. dessert (Q182940)
- 2.1.4.6. dip (Q2046560)
- 2.1.4.7. drink (Q40050)
- 2.1.4.8. fruit dish (Q100290176)
- 2.1.4.9. halal food (Q8504067)
- 2.1.4.10. hamburger (Q6663)
- 2.1.4.11. kosher food (Q8576313)
- 2.1.4.12. meat dish (Q1427844)
- 2.1.4.13. noodle dish (Q98826752)
- 2.1.4.14. pasta dish (Q18679685)
- 2.1.4.15. pizza (Q177)
- 2.1.4.16. pork dish (Q28100020)
- 2.1.4.17. rice dish (Q21976260)
- 2.1.4.18. roll (Q115499544)
- 2.1.4.19. salad (Q9266)
- 2.1.4.20. sandwich (Q28803)
- 2.1.4.21. seafood (Q192935)
- 2.1.4.22. skewer (Q17062980)
- 2.1.4.23. soft drink (Q147538)
- 2.1.4.24. soup (Q41415)
- 2.1.4.25. sushi (Q46383)
- 2.1.4.26. vegan food (Q899696)
- 2.1.4.27. vegetarian cuisine (Q638022)
-
-
2.2. Feed
-
2.2.1. The System shall calculate Top-Rated recipes using a descending rating order with a minimum number of ratings of 10.
-
-
2.3. Search
-
2.3.1. The System shall search for the keyword given by the user in food ingredients through Wikidata and will return results that contain the food ingredients that are returned by the previous query.
-
2.3.2. The System shall search for the keyword given by the user in locations through Wikidata, by first querying for the keyword as a label, then querying for all entities that are the subject of a P2341 (indigenous to), P495 (country of origin) with those locations.
-
-
2.4. Communication
-
2.4.1. Comments
- 2.4.1.1. The comments for a Recipe shall be sorted in descending order from the most upvoted to the least.
-
-
2.5. Input Validation
-
2.5.1. The System shall validate all User-provided inputs.
-
2.5.2. The System shall limit the amount of content that can be written in a Recipe with a reasonable limit.
-
2.5.3. The System shall limit the size of images that can be uploaded for a Recipe within a reasonable limit.
-
3. Non-Functional Requirements
-
3.1. Security
-
3.1.1. The system shall enforce that the e-mail address used in Registration is unique and valid, as it will be used to activate the account.
-
3.1.2. The system shall enforce that passwords have at least 8 characters, one lowercase letter, one uppercase letter, and one digit.
-
3.1.3. The system shall use the bcrypt algorithm to store hashes of the inputted passwords.
-
3.1.4. The system shall enforce SSL encryption.
-
3.1.5. Password fields shall hide the password as it’s typed in.
- 3.1.5.1. The User may choose to make the password visible.
-
3.1.6. The database used by the system shall be in a private VPC that restricts access from the public internet.
-
-
3.2. Compatibility
-
3.2.1. The platform shall be accessed via an Android application or web interface that supports all browser versions listed in the “defaults” “browserslist” Query.
-
3.2.2. The platform language shall be English.
-
3.2.3. The platform shall support UTF-8 character encoding.
-
-
3.3. Versioning
-
3.3.1. The system shall use Semantic Versioning internally to track major, minor, and patch changes.
-
-
3.4. Accessibility
-
3.4.1. The platform shall provide aria labels for all buttons.
-
-
3.5. Performance and Reliability
-
3.5.1. The platform shall support at least 200 Registered Users being online simultaneously.
-
3.5.2. The platform shall support at least 1000 Users actively using it at the same time.
-
3.5.3. Any page shall take at most 3 seconds to load, regardless of how many photos are present.
-
3.5.4. The platform shall have at least 99% uptime, i.e. up to 14 minutes of downtime is acceptable in a day.
-
3.5.5. The system shall back up the database in 24-hour intervals.
-
-
3.6. Legal and Ethical Issues
-
3.6.1. Any usage of personal information shall comply with GDPR and KVKK.
-
3.6.2. Users must agree to “Terms of Use” and “Privacy Policy” to complete the sign-up.
-