---
# System prepended metadata

title: FridgeMeal

---


# FridgeMeal

## Table of Contents
1. [Overview](#Overview)
1. [Product Spec](#Product-Spec)
1. [Wireframes](#Wireframes)
2. [Schema](#Schema)

## Overview
### Description
After a user inputs ingredients they have at their disposal they are shown a list of recipes to meals they could possibly make. The user is also allowed to add their personal recipes to the entire list for others to see and use. 

### App Evaluation

- **Category:** Food & Nutrition
- **Mobile:** Android Phone
- **Story:** Takes user ingredient input and pull recipes based on relevance
- **Market:** Rated E for Everyone
- **Habit:** Daily use for ease of finding recipes to cook
- **Scope:** First we'd by making it easy to find recipes, then expanding to adding personal recipes, suggestions, offering changes to adjust existing recipes, a friend system and a comment system to assist users in adapting recipes to their own taste/style of cooking.

## Product Spec

### 1. User Stories (Required and Optional)

**Required Must-have Stories**

* User login in to access favorite/personal recipes/results
* User should be able to search recipes by ingredients
* Recipe results should be sorted by relevance
* User should be able to see a more detailed description of each recipe
* User should able to add personal recipes either public/private
* User should be able to see a list of favorite/indivudal recipes

**Optional Nice-to-have Stories**

* friend system/profile
* comment system
* rating system
* embedded video instructions

### 2. Screen Archetypes

* Login
   * User login in to access favorite/personal recipes/results
* Home/Recipe feed
   * User should be able to search recipes by ingredients
   * Recipe results should be sorted by relevance
* Recipe Details
    * User should be able to see a more detailed description of each recipe
* Profile screen
   * User should able to add personal recipes either public/private 
* Favorite/Individual Recipe screen
   * User should be able to see a list of favorite/indivudal recipes
### 3. Navigation

**Tab Navigation** (Tab to Screen)

* Profile
* Home
* Stored Recipe Screen

**Flow Navigation** (Screen to Screen)

* Profile
   * Stored Recipe Screen
* Home
   * Recipe details

## Wireframes
[Add picture of your hand sketched wireframes in this section]
<img src="YOUR_WIREFRAME_IMAGE_URL" width=600>



## Schema 
### Model
#### Post

   | Property      | Type     | Description |
   | ------------- | -------- | ------------|
   | userName    | String   | User name used to login |
   | userPassword    | String  | User password used to login |
   | userImage | File | User image for profile |
   | objectId      | String   | Unique id for the user posted recipe (default field) |
   | author        | String| Author name or blank if from api |
   | mealImage         | File     | Image for recipe |
   | mealName | String | Title of the meal |
   | directions      | String   | Directions by author or from api|
   | ingredients | String | Ingredients accessible for meal |
   | createdAt     | DateTime | date when post is created (default field) |
   | updatedAt     | DateTime | date when post is last updated (default field) |

### Networking
- ### Network Requests
#### Home Feed Screen
    (POST/GET) Query all posts that matches user search criteria
##### (Create/POST/PUT) Create a new recipe post
      Recipe recipe = new Recipe();
        recipe.setRecipeName();
        recipe.setUserID(currentUserId);
        recipe.setRecipeLink(enter apiURL);
        recipe.saveInBackground(new SaveCallback(){
            @Override
            public void done(ParseException e){}
        });
        recipe.setFavorite(Recipe.KEY_PRIVATE, true);

##### (Delete) Delete existing recipe created by current user
    ParseQuery<Recipe> query = ParseQuery.getQuery(Recipe.class);
        query.whereEqualTo(Recipe.KEY_CREATED, USER ID);
        Recipe recipe = query.getPosition(0);
        recipe.deleteInBackground(true);
        
    
#### Recipe Detail
##### (Read/GET) Recipe details
        ParseQuery<Recipe> query = ParseQuery.getQuery(Recipe.class);
        query.whereEqualTo(Recipe.KEY_CREATED, RECIPE ID);
##### (PUT) A new like/favorite 
    ParseQuery<Recipe> query = ParseQuery.getQuery(Recipe.class);
        query.whereEqualTo(Recipe.KEY_CREATED, RECIPE ID);
        Recipe recipe = query.getPosition(0);
        recipe.setFavorite(true) or recipe.put(Recipe.KEY_FAVORITE, true)

#### Profile Screen
      String currentUserId = ParseUser.getCurrentUser().getObjectId();
##### (Update/PUT) Update user profile image
     // String parseFile = link here
        if (parseFile != null){
            ParseUser current = ParseUser.getCurrentUser();
            current.put(PROFILE_PHOTO, parseFile);
        }
        else {
            Log.e("Profile Photo Error", "Photo is null cannot update", new Exception());
        }
##### (Read/GET) Most Recent Recipes 
    ParseQuery<Recipe> query = ParseQuery.getQuery(Recipe.class);
        query.whereLessThan(Recipe.KEY_CREATED_KEY, DATE Object);
        query.whereEqualTo(Recipe.KEY_USERID, CURRENT USERID);
        query.setLimit(20);

##### (Read/GET) Favorite User Recipes
    ParseQuery<Recipe> query = ParseQuery.getQuery(Recipe.class);
        query.whereEqualTo(Recipe.KEY_FAVORITE, TRUE);
        query.whereEqualTo(Recipe.KEY_USERID, CURRENT USERID);
        query.setLimit(20);
##### (Read/GET) Home feed of friends post
     ParseQuery<Recipe> query = ParseQuery.getQuery(Recipe.class);
        query.whereEqualTo(Recipe.KEY_USERID, CURRENT USERID);
        ParseQuery<User> friend = ParseQuery.getQuery(Friend.class);
        query.whereContainedIn(Recipe.Key_UserID, friend);
        query.setLimit(20);


- [Create basic snippets for each Parse network request]
- [OPTIONAL: List endpoints if using existing API such as Yelp]