https://github.com/mikeheft/bread_shop
Rails API that takes in recipe information and calculates the baker's percentage to return a family for that recipe. With the family set, a user can see a basic procedure to make and bake that recipe for the family of bread. Also it will calculate new totals based on the desired amount of bread.
https://github.com/mikeheft/bread_shop
baking bakingapp bread bread-baking
Last synced: 7 months ago
JSON representation
Rails API that takes in recipe information and calculates the baker's percentage to return a family for that recipe. With the family set, a user can see a basic procedure to make and bake that recipe for the family of bread. Also it will calculate new totals based on the desired amount of bread.
- Host: GitHub
- URL: https://github.com/mikeheft/bread_shop
- Owner: mikeheft
- Created: 2018-02-19T19:32:51.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2018-07-31T14:44:49.000Z (about 7 years ago)
- Last Synced: 2025-01-29T17:13:33.487Z (8 months ago)
- Topics: baking, bakingapp, bread, bread-baking
- Language: Ruby
- Homepage:
- Size: 375 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Bread Shop API [](https://travis-ci.org/mikeyduece/bread_shop)
[](https://waffle.io/mikeyduece/bread_shop)
##### Versions
Ruby 2.5.0 / Rails 5.1.5
---
### Endpoints
All requests require token from client app to be sent in the params. If no token is present, the request will be denied.Base URL for all requests is `https://bread-shop-api.herokuapp.com/api/v1`
`GET /users/:id/recipes?token=token` - Returns list of recipes that a user has created.
```ruby
[
{
:id=>1,
:name=>"1Recipe",
:tags=>[],
:total_percent=>nil,
:ingredient_list=>
{
:"9Ingredient"=>{:amount=>8.64, :bakers_percentage=>nil},
:"8Ingredient"=>{:amount=>6.01, :bakers_percentage=>nil},
:"7Ingredient"=>{:amount=>3.38, :bakers_percentage=>nil}
},
:family=>"Sweet",
:created_at=>"Created on 24 JUL '18 at 16:57",
:user=>{:id=>1, :name=>"Jamis", :email=>"giovanna@kleinmurray.info", :uid=>"1uid", :zipcode=>"53370-1675"}
},
...
]
````POST /users/:id/recipes?token=token` - Creates a new `Recipe` with associated `Ingredient` and `RecipeIngredient` records
Example payload sent to endpoint:
```ruby
{
{
name: 'baguette',
ingredients: [
{ name: 'flour', amount: 1.00 },
{ name: 'water', amount: 0.62 },
{ name: 'yeast', amount: 0.02 },
{ name: 'salt', amount: 0.02 }
]
}
```The response from the the `POST` request contains the submitted information along with baker's percentage and `total_percentage`. As seen below with the `GET` for a single recipe.
`GET /users/:id/recipes/:recipe_id?token=token` - Returns specific recipe.
Example JSON response```ruby
{
:id=>1,
:name=>"1Recipe",
:tags=>["awesome", "bread"],
:total_percent=>441.48,
:ingredient_list=>
{
:"51Ingredient"=>{:amount=>1.37, :bakers_percentage=>20.66},
:"50Ingredient"=>{:amount=>6.9, :bakers_percentage=>104.07},
:"49Ingredient"=>{:amount=>2.36, :bakers_percentage=>35.6},
:"48Ingredient"=>{:amount=>7.14, :bakers_percentage=>107.69},
:"47Ingredient"=>{:amount=>0.81, :bakers_percentage=>12.22},
:"46Ingredient"=>{:amount=>4.06, :bakers_percentage=>61.24},
:flour=>{:amount=>6.63, :bakers_percentage=>100.0}
},
:family=>"Rich",
:created_at=>"Created on 24 JUL '18 at 16:54"
}
````GET /families?family_name=:family_name&token=token` Returns a list of all recipes that are associated with that family_name.
```ruby
{
:name=>"Soft",
:recipes=>
[
{
:id=>1,
:name=>"1Recipe",
:tags=>[],
:total_percent=>nil,
:ingredient_list=>
{
:"9Ingredient"=>{:amount=>3.94, :bakers_percentage=>nil},
:"8Ingredient"=>{:amount=>0.15, :bakers_percentage=>nil},
:"7Ingredient"=>{:amount=>4.1, :bakers_percentage=>nil}
},
:family=>"Soft",
:created_at=>"Created on 24 JUL '18 at 17:00"
},
...
]
}
````GET /recipes/:recipe_id/new_totals` Given a request with a recipe and amounts, the request params would look like so.
```Ruby
{
recipe: {
name: 'baguette',
ingredients: {
'flour' => { amount: 1.00, bakers_percentage: 100.0 },
'water' => { amount: 0.62, bakers_percentage: 62.0 },
'yeast' => { amount: 0.02, bakers_percentage: 2.0 },
'salt' => { amount: 0.02, bakers_percentage: 2.0 }
},
total_percentage: 166.0,
new_dough_weight: 10.0
}
}
```The return from the previous request would be the recipe with the new amounts.
```Ruby
{
:id=>"5",
:name=>"baguette1",
:tags=>[""],
:total_percent=>"166.0",
:ingredient_list=>
{
:salt=>{:amount=>0.04, :bakers_percentage=>"2.0"},
:yeast=>{:amount=>0.04, :bakers_percentage=>"2.0"},
:water=>{:amount=>1.24, :bakers_percentage=>"62.0"},
:flour=>{:amount=>2.0, :bakers_percentage=>"100.0"}
},
:family=>"Lean",
:created_at=>"Created on 24 JUL '18 at 17:02"
}
```##### Likes
`POST /users/:id/like/:recipe_id`
>Allows one user to like another users recipes`DELETE /users/:id/unlike/:recipe_id`
>Allows a user to unlike a recipe that they previously 'liked'.---
### Activity Feed
#### Follows`POST /users/:id/follow/:target_id`
>Allows one user to follow another. Once the follow record is persisted, the target user is sent a notification.
`DELETE /users/:id/unfollow/:target_id`
>Allows a user to unfollow a user if already followed.
#### Notification
`GET /users/:id/feeds/notification`
>Sends the notification to the user when followed. Also sends notification to the user who initiated the follow, of when the target user creates a new recipe or when someone likes one of their recipes.
#### Flat Feed
`GET /users/:id/feeds/flat`
>Gets the feed for a given user. So far, showing when another user (that the current user follows) creates a new recipe
#### Nutrition Label
Analysis of recipe information provided by [Edamam](https://www.edamam.com/)`GET /recipes/:recipe_id/label?token=token`
JSON return is formatted as follows:
```ruby
{:uri=>"http://www.edamam.com/ontologies/edamam.owl#recipe_214022f9049e45f08add17c376e94174",
:yield=>"6.0",
:calories=>"1134",
:totalWeight=>"366.9477944061093",
:dietLabels=>"[\"LOW_FAT\"]",
:healthLabels=>"[\"SUGAR_CONSCIOUS\", \"VEGAN\", \"VEGETARIAN\", \"PEANUT_FREE\", \"TREE_NUT_FREE\", \"ALCOHOL_FREE\"]",
:cautions=>"[]",
:totalNutrients=>
"{:ENERC_KCAL=>{:label=>\"Energy\", :quantity=>1134.6358003197763, :unit=>\"kcal\"}, :FAT=>{:label=>\"Fat\", :quantity=>7.236244240028524, :unit=>\"g\"}, :FASAT=>{:label=>\"Saturated\", :quantity=>1.0187089435831413, :unit=>\"g\"}, :FAMS=>{:label=>\"Monounsaturated\", :quantity=>2.89822568212125, :unit=>\"g\"}, :FAPU=>{:label=>\"Polyunsaturated\", :quantity=>1.0689896390453246, :unit=>\"g\"}, :CHOCDF=>{:label=>\"Carbs\", :quantity=>221.158655373815, :unit=>\"g\"}, :FIBTG=>{:label=>\"Fiber\", :quantity=>23.620539579684102, :unit=>\"g\"}, :SUGAR=>{:label=>\"Sugars\", :quantity=>0.6919551575150892, :unit=>\"g\"}, :PROCNT=>{:label=>\"Protein\", :quantity=>51.581050685490524, :unit=>\"g\"}, :NA=>{:label=>\"Sodium\", :quantity=>848.4708254170117, :unit=>\"mg\"}, :CA=>{:label=>\"Calcium\", :quantity=>58.96385049716603, :unit=>\"mg\"}, :MG=>{:label=>\"Magnesium\", :quantity=>90.39350476839596, :unit=>\"mg\"}, :K=>{:label=>\"Potassium\", :quantity=>867.3025375480865, :unit=>\"mg\"}, :FE=>{:label=>\"Iron\", :quantity=>4.352621896354764, :unit=>\"mg\"}, :ZN=>{:label=>\"Zinc\", :quantity=>6.73028187609825, :unit=>\"mg\"}, :P=>{:label=>\"Phosphorus\", :quantity=>672.2664257899635, :unit=>\"mg\"}, :VITC=>{:label=>\"Vitamin C\", :quantity=>0.1862563717977682, :unit=>\"mg\"}, :THIA=>{:label=>\"Thiamin (B1)\", :quantity=>7.13072737908717, :unit=>\"mg\"}, :RIBF=>{:label=>\"Riboflavin (B2)\", :quantity=>2.5859301658243297, :unit=>\"mg\"}, :NIA=>{:label=>\"Niacin (B3)\", :quantity=>28.161849920507834, :unit=>\"mg\"}, :VITB6A=>{:label=>\"Vitamin B6\", :quantity=>1.0440449216950036, :unit=>\"mg\"}, :FOLDFE=>{:label=>\"Folate equivalent (total)\", :quantity=>1519.4324188944154, :unit=>\"µg\"}, :FOLFD=>{:label=>\"Folate (food)\", :quantity=>1519.4324188944154, :unit=>\"µg\"}, :VITB12=>{:label=>\"Vitamin B12\", :quantity=>0.04345982008614591, :unit=>\"µg\"}, :TOCPHA=>{:label=>\"Vitamin E\", :quantity=>0.1537678127811309, :unit=>\"mg\"}, :VITK1=>{:label=>\"Vitamin K\", :quantity=>1.0171808929693453, :unit=>\"µg\"}}",
:totalDaily=>
"{:ENERC_KCAL=>{:label=>\"Energy\", :quantity=>56.731790015988814, :unit=>\"%\"}, :FAT=>{:label=>\"Fat\", :quantity=>11.13268344619773, :unit=>\"%\"}, :FASAT=>{:label=>\"Saturated\", :quantity=>5.093544717915707, :unit=>\"%\"}, :CHOCDF=>{:label=>\"Carbs\", :quantity=>73.71955179127167, :unit=>\"%\"}, :FIBTG=>{:label=>\"Fiber\", :quantity=>94.4821583187364, :unit=>\"%\"}, :PROCNT=>{:label=>\"Protein\", :quantity=>103.16210137098105, :unit=>\"%\"}, :NA=>{:label=>\"Sodium\", :quantity=>35.352951059042155, :unit=>\"%\"}, :CA=>{:label=>\"Calcium\", :quantity=>5.896385049716603, :unit=>\"%\"}, :MG=>{:label=>\"Magnesium\", :quantity=>22.59837619209899, :unit=>\"%\"}, :K=>{:label=>\"Potassium\", :quantity=>24.7800725013739, :unit=>\"%\"}, :FE=>{:label=>\"Iron\", :quantity=>24.181232757526466, :unit=>\"%\"}, :ZN=>{:label=>\"Zinc\", :quantity=>44.868545840654996, :unit=>\"%\"}, :P=>{:label=>\"Phosphorus\", :quantity=>96.03806082713764, :unit=>\"%\"}, :VITC=>{:label=>\"Vitamin C\", :quantity=>0.3104272863296137, :unit=>\"%\"}, :THIA=>{:label=>\"Thiamin (B1)\", :quantity=>475.381825272478, :unit=>\"%\"}, :RIBF=>{:label=>\"Riboflavin (B2)\", :quantity=>152.11353916613703, :unit=>\"%\"}, :NIA=>{:label=>\"Niacin (B3)\", :quantity=>140.80924960253918, :unit=>\"%\"}, :VITB6A=>{:label=>\"Vitamin B6\", :quantity=>52.20224608475018, :unit=>\"%\"}, :FOLDFE=>{:label=>\"Folate equivalent (total)\", :quantity=>379.85810472360384, :unit=>\"%\"}, :VITB12=>{:label=>\"Vitamin B12\", :quantity=>0.7243303347690985, :unit=>\"%\"}, :TOCPHA=>{:label=>\"Vitamin E\", :quantity=>0.7688390639056546, :unit=>\"%\"}, :VITK1=>{:label=>\"Vitamin K\", :quantity=>1.2714761162116817, :unit=>\"%\"}}"}
```