89 lines
2.1 KiB
PHP
89 lines
2.1 KiB
PHP
<?php
|
|
|
|
|
|
namespace App\Repositories;
|
|
|
|
|
|
use App\Models\User;
|
|
use App\UsersRecipes;
|
|
use Carbon\Carbon;
|
|
|
|
class UsersRepository implements UsersRepositoryInterface
|
|
{
|
|
public function getAll()
|
|
{
|
|
return User::all();
|
|
}
|
|
|
|
public function paginate($chunkSize)
|
|
{
|
|
return User::paginate($chunkSize);
|
|
}
|
|
|
|
public function create($data)
|
|
{
|
|
return User::create($data);
|
|
}
|
|
|
|
public function delete($id)
|
|
{
|
|
$user = User::find($id);
|
|
return $user->delete();
|
|
}
|
|
|
|
public function getById($id)
|
|
{
|
|
$user = User::find($id);
|
|
return $user;
|
|
}
|
|
|
|
public function getWhereEquals($field, $actual)
|
|
{
|
|
return User::where($field, $actual);
|
|
}
|
|
|
|
public function saveRecipe(int $userID, int $recipeID)
|
|
{
|
|
return UsersRecipes::create(['user_id' => $userID, 'recipe_id' => $recipeID]);
|
|
}
|
|
|
|
public function getRecipeHistory(int $userID, string $groupBy = 'day')
|
|
{
|
|
$userRecipes = UsersRecipes::where('user_id', $userID)->orderBy('created_at')->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 $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;
|
|
}
|
|
}
|
|
|
|
foreach($nutritionSum as $k => $v){
|
|
$nutritionSum[$k] = round($v, 2);
|
|
}
|
|
|
|
$recipeHistory[] = array_merge(['date' => $date], $nutritionSum);
|
|
}
|
|
|
|
return $recipeHistory;
|
|
}
|
|
}
|