Files
eatvio-infra/app/Http/Controllers/DietController.php
2023-12-25 14:37:31 +03:00

82 lines
2.1 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Diet;
use App\Models\User;
use Illuminate\Http\Request;
use Spatie\QueryBuilder\AllowedFilter;
use Spatie\QueryBuilder\QueryBuilder;
class DietController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
$hasTypes = [];
if ($request->has('author')) {
$author = $request->get('author');
$user = User::find($author);
$diets = $user ? $user->author_of_diets : [];
} else {
$hasTypes = data_get($request->get('filter'), 'contains_type', []);
$diets = QueryBuilder::for(Diet::class)
->allowedFilters([
'name',
AllowedFilter::callback('contains_type', function ($query, $v) use ($hasTypes) {
return $query->containsType($hasTypes);
}),
AllowedFilter::scope('duration_min'),
AllowedFilter::scope('duration_max'),
AllowedFilter::scope('involved_min'),
AllowedFilter::scope('involved_max'),
])
->get();
}
return view(
'diet/index',
[
'diets' => $diets,
'filter' => $request->get('filter'),
'hasTypes' => $hasTypes,
]
);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('diet/edit_form');
}
public function edit(Diet $diet)
{
return view('diet/edit_form', ['diet' => $diet]);
}
/**
* Display the specified resource.
*
* @return \Illuminate\Http\Response
*/
public function show(Diet $diet)
{
$expiresAt = now()->addHours(24);
views($diet)
->cooldown($expiresAt)
->record();
return view('diet/show', ['diet' => $diet]);
}
}