From 30d017a44f8deeb9e21bfb2979d270b453bcea67 Mon Sep 17 00:00:00 2001 From: Artur Nowakowski Date: Sun, 19 Jan 2020 14:53:23 +0100 Subject: [PATCH] [CLEAR-38] Grouping by day and month --- api/app/Http/Controllers/UsersController.php | 6 ++-- api/app/Repositories/UsersRepository.php | 29 +++++++++++++++++-- .../Repositories/UsersRepositoryInterface.php | 2 +- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/api/app/Http/Controllers/UsersController.php b/api/app/Http/Controllers/UsersController.php index 6885c27..e5a45ac 100644 --- a/api/app/Http/Controllers/UsersController.php +++ b/api/app/Http/Controllers/UsersController.php @@ -110,10 +110,12 @@ class UsersController extends Controller return response()->json(['success' => true, 'message' => 'Recipe saved successfully in history']); } - public function getRecipeHistory() + public function getRecipeHistory(Request $request) { $userID = auth()->id(); - $recipeHistory = $this->usersRepository->getRecipeHistory($userID); + $groupBy = $request->input('groupBy') ?? 'day'; + + $recipeHistory = $this->usersRepository->getRecipeHistory($userID, $groupBy); return response()->json(['success' => true, 'data' => ['history' => $recipeHistory]], 200); } diff --git a/api/app/Repositories/UsersRepository.php b/api/app/Repositories/UsersRepository.php index 6691fca..346cb11 100644 --- a/api/app/Repositories/UsersRepository.php +++ b/api/app/Repositories/UsersRepository.php @@ -6,6 +6,7 @@ namespace App\Repositories; use App\Models\User; use App\UsersRecipes; +use Carbon\Carbon; class UsersRepository implements UsersRepositoryInterface { @@ -46,13 +47,35 @@ class UsersRepository implements UsersRepositoryInterface return UsersRecipes::create(['user_id' => $userID, 'recipe_id' => $recipeID]); } - public function getRecipeHistory(int $userID) + public function getRecipeHistory(int $userID, string $groupBy = 'day') { $userRecipes = UsersRecipes::where('user_id', $userID)->get(); $recipeHistory = []; + if ($groupBy == 'month') { + $userRecipes = $userRecipes->groupBy(function ($d) { + return Carbon::parse($d->created_at)->format('Y-m'); + }); + } else { + $userRecipes = $userRecipes->groupBy(function ($d) { + return Carbon::parse($d->created_at)->format('Y-m-d'); + }); + } - foreach ($userRecipes as $userRecipe) { - $recipeHistory[] = array_merge(['date' => $userRecipe->created_at], $userRecipe->recipe->nutrition); + foreach ($userRecipes as $date => $dateRecipes) { + $nutritionSum = [ + 'kcal' => 0, + 'carbohydrates' => 0, + 'protein' => 0, + 'fat' => 0, + ]; + + foreach($dateRecipes as $userRecipe){ + $nutritionValues = $userRecipe->recipe->nutrition; + foreach($nutritionValues as $name => $value){ + $nutritionSum[$name] += $value; + } + } + $recipeHistory[] = array_merge(['date' => $date], $nutritionSum); } return $recipeHistory; diff --git a/api/app/Repositories/UsersRepositoryInterface.php b/api/app/Repositories/UsersRepositoryInterface.php index 1e2da23..b1602d7 100644 --- a/api/app/Repositories/UsersRepositoryInterface.php +++ b/api/app/Repositories/UsersRepositoryInterface.php @@ -21,5 +21,5 @@ interface UsersRepositoryInterface public function saveRecipe(int $userID, int $recipeID); - public function getRecipeHistory(int $userID); + public function getRecipeHistory(int $userID, string $groupBy); }