### First development iteration: * Register * Login - profile page - food category - food listing - Add to cart - search * Logout --- **User Story:** As a new customer, I want to be able to create an account so that I can benefit from the app’s services. Acceptance Criteria: 1. The new user will be able to enter the Register page 2. Register page contain a textfield of username, email and passwor 3. Password must be more than 8 charachter length, and contains chatachters, numbers 4. Email field has to have a real email as input else it wo'nt register 5. An Email can only have one account in the system 6. Clicking on the active register button will store the user’s data in database 7. After a succesfull sign up, the new user is logged in by default **Tasks:** - [x] Create a Register button and link it to the Register page.`15 m` - [x] On the Register page, create input fields for the user's username, email, and password.`1 hours` - [x] Add validation to the password field to ensure it has at least 8 characters and includes both letters and numbers.`30 m` - [x] confirm password by the user `10 m` - [x] Validate the email field to ensure it only accepts valid email addresses.`10 m` - [x] Check if the email already exists in the system before allowing the user to create a new account. - [x] Create a function to save the user's data to the database and log the user in automatically upon clicking the Register button.`7 hours` - [x] Redirect the user to the app's login page after a successful register`10 m` ----- **User Story:** As a registered customer, I should be able to log in to my account so that the system can authenticate me. **Another user story for same goal** As a registered customer, I should be able to log in to my account so that I don't have to enter them every time I open the application. **Another user story for same goal** As a registered customer, I should be able to log in to my account so that I can access my personal information and use the application's features **Acceptance Criteria:** 1. By entering the correct email and password, the user should successfully login. 2. By entering an incorrect email or password, the user should be alerted. 3. After the login is complete, the user should be redirected to the home page **Tasks:** - [x] create input fields for the user's email and password, and a button for logging in with Google.`1 hours` - [x] Validate the user's email and password or Google credentials before logging them in.`3 hours` - [x] If the email or password is incorrect, display an error message and prompt the user to try again.`30 m` - [x] If the user is already logged in, redirect them to the app's home page.`10 m` --- # Yara's tasks **User Story:** As a registered user, I want to retrieve my password so i can access application Acceptance Criteria: 1. The user will be able to enter the Forget password page 2. Forget page contain a textfield email 3. Email field has to have a real email as input else it wo'nt work 6. Clicking on the active Forget button will send amessage to email to enter new password 7. After a succesfull reset, the user is logged in by login page **Tasks:** - [x] Design the Forget password page and add a textfield for the email input.`30 m` - [x] Implement validation for the email field to ensure that the user enters a valid email address. - [x] Implement a "Forget" button that will send an email to the user's email address with instructions on how to reset their password.`10 m` - [x] The email should contain a link to a password reset page, where the user can enter their new password.`1 houre` - [x] After the user successfully resets their password, redirect them to the login page`10 m` - [x] Ensure that the user can log in using their new password.`5 m` --- # Ghada's tasks **User Story:** As a registered customer, I should be able to log out of my account so that I can stop authorizing the current device to access the app. **Acceptance Criteria:** 1. By pressing the logout button, the user should be alerted first. 2. If the user confirms logout, then the data associated with his account won’t be accessible on that device. 3. After the logout is complete, the user should be redirected to the login screen. **Tasks:** - [ ] Create a user interface design for the logout button.`(10 m)` - [ ] Create a user interface design for alerted the user before logout.`(20 m)` - [ ] Develop the frontend side `(10 m)` - [ ] Update the user interface to display appropriate messaging after the user logs out.`(15 m)` # Ghada's tasks * **User Story:**  As a registered user, I want to have a profile page that includes my personal information, and delivery addresse. * **Acceptance Criteria:** 1. The user should have a profile including his default personal information, and delivery addresse. 2. The user should be able to view and update his profile information at any time. 3. User's changes to their profile information, and delivery addresses are saved and displayed correctly on the profile page. 4. User's profile information, and delivery addresses are securely stored. * **Tasks:** - [ ] Design a user interface for managing user profiles. *('12 hours')* - [ ] Implement a button/icon to allow the user to edit their personal information, payment methods, and delivery addresses . *('30 minutes')* - [ ] Implement client-side validation to ensure that all required fields are filled in and that user input is in the correct format. *('2 hours')* - [ ] Implement a database schema to refresh user profile information. *('2 hours')* # Tasneem's tasks * **User Story:** As a user, I want to be able to search for food items in the application, So that I can find specific items quickly and easily. * **Acceptance Criteria:** 1. The search bar should be displayed on the screen. 2. When the user taps on the search bar, a search screen should appear. 3. The search screen should allow the user to enter a search query. 4. As the user types in the search query, the search screen should display the matching food items in real-time. 5. The search results should include the food item's category, image, and name. 6. The search results should be filtered based on the entered search query. 7. Tapping on a search result should navigate the user to the food details screen. 8. Tapping on the back button should close the search screen and return to the previous screen. 9. Tapping on the clear button should clear the search query. * **Tasks:** - [x] Create a new widget called DataSearch: This involves creating a new class in Flutter to implement the search functionality(**30 m**). - [x] Define a searchDelegate variable: Declare a variable of type SearchDelegate in the DataSearch widget to manage the search operations(**10 m**). - [x] Implement the build method of DataSearch: Build the user interface for the search bar in the DataSearch widget(**30 m**). - [x] Add an onTap callback to the search bar: Attach a callback function to the search bar's onTap event to open the search screen using the showSearch function(**15 m**). - [x] Implement the Search class: Create a new class that extends the SearchDelegate class to handle search operations(**30 m**). - [x] Pass the list of food item collections: Modify the Search class constructor to accept the list of food item collections(**10 m**). - [x] Implement the buildActions method: Implement the buildActions method in the Search class to display the clear button(**30 m**). - [x] Implement the buildLeading method: Implement the buildLeading method in the Search class to display the back button(**20 m**). - [x] Implement the buildResults method: Implement the buildResults method in the Search class to display the search results(**30 m**). - [x] Implement the buildSuggestions method: Implement the buildSuggestions method in the Search class to display real-time search suggestions(**40 m**). - [x] Connect the Search class to Firestore: Integrate the Search class with Firestore to fetch the food items based on the search query(**1 hour**). - [x] Implement onTap callback for search results: Implement the onTap callback in the Search class to navigate to the food details screen when a search result is selected(**30 m**). - [x] Implement log functionality: Add logging code to log a message when a search result is tapped (**20 m**). - [x] Implement navigateAndFinishRoute2 function: Implement the navigateAndFinishRoute2 function to navigate to the food details screen and pass necessary information (name, category, description, price, and image)(**30 m**). --- # Amal's tasks * **User Story**: As a customer I want the items categorized so its easy to reach a certain type of food. A customer I want the category easy to find. As a user I want to be able to brows through the category and look at various food options available in that category by clicking on the name of the category. As a user I want to click on the item picture and see its details. As a user I want to scroll through the pictures so its easy to me to brows the options. * **Acceptance Criteria**: 1. Put the category in the home page. 2. The items should be categorized and displayed for the user as follow (sandwiches, snacks, desserts drinks, appetizers). 3. The user can browsing the category easily by scrolling left and right. 4. The name of the category is clickable. * **Tasks**: - [x] Implement a user interface design for category in the home page (**1 day**) - [x] Implement a code to view the item picture by clicking it (**8 hours**) - [x] Implement the category names as button to be clickable (**3 hours**) - [x] Implement the category names and make them scrollable(**8 hours**) ----- # Amany's tasks **User Story(food listing):** As a customer I want to be able to view a specific item to see the price and a brief description about the item. As a customer I want to be able to add the item to a favorite list so its easy to reach again whenever I want. As a customer I want to be able of adding the item to my cart after I finish browsing it. As a customer I want to be able to return to the home page to continue browsing the item. **Acceptance Criteria :** 1. The user can go to the item detail by clicking the item name. 2. The user can put the item in the favorite list. 3. The user can add the item to the cart from 4. The user can go back to the home page. **task:** - [ ] Implement an interface design to view the picture of the item and description along with the price for the item.`(5hours)` - [ ] Implement a button that adds the item to the cart`(1 day)` - [ ] Implement a button that return the user to the home page by clicking it`.(3 hours)` --- # Shima's tasks * **User Stories**: "As a customer , I want to add all the meals I want to order in a cart  , so that I can check out the total price before I order". "As a customer , I want to delete items from the cart , so that I won't buy un-needed meals" . * **Acceptance Criteria** : - If the customer presses the “Add to cart” button in the app, the number of items in his ordering cart should increase by the selected meals quantity . - if the customer deleted an item from the cart , the number of items on his ordering cart should decrease to the number of meals still selected  . - If the customer in the app adds an item to the ordering cart that is already there, the number of items should increase accordingly and not the same item should be created a second time . - The customer can only place an order if he has filled in all mandatory fields (name, address, e-mail, telephone number) . - If the customer presses the “Order now” button in the app, the cart interface will return to default page with no items and 0 total price. * **Tasks** : - [ ] we  need a new user interface element for the cart . (1 days ) - [ ] implement a database to add items to the cart.(12 hours) - [ ] implement a database to delete items from the cart .(12 hours ) - [ ] implement a database to show the total price .( 3 hours) - [ ] implement a "order now " button .(1 hour ) --- | Name | ID | |:---------------- |:---------:| | Yara Hashem Madi | 220192604 | | Amany Abu Nada | 220190351 | | Amal Asaad Abdel Rahman | 220190838| | Shimaa Hasan Ayyash| 220191058 | | Tasneem Nabil Mansour| 220190878 | | Ghada Abed Elhay Abu Aita | 220190474|