Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,104 changes: 612 additions & 492 deletions .phpstorm.meta.php

Large diffs are not rendered by default.

401 changes: 336 additions & 65 deletions _ide_helper.php

Large diffs are not rendered by default.

119 changes: 100 additions & 19 deletions _ide_helper_models.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,46 @@
*/


namespace App\Models{
/**
* @property int $id
* @property string|null $log_name
* @property string $description
* @property string|null $subject_type
* @property int|null $subject_id
* @property string|null $event
* @property string|null $causer_type
* @property int|null $causer_id
* @property \Illuminate\Support\Collection<array-key, mixed>|null $properties
* @property string|null $batch_uuid
* @property \Illuminate\Support\Carbon|null $created_at
* @property-read \Illuminate\Database\Eloquent\Model|null $causer
* @property-read \Illuminate\Support\Collection $changes
* @property-read \Illuminate\Database\Eloquent\Model|null $subject
* @method static \Illuminate\Database\Eloquent\Builder<static>|Activity causedBy(\Illuminate\Database\Eloquent\Model $causer)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Activity forBatch(string $batchUuid)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Activity forEvent(string $event)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Activity forSubject(\Illuminate\Database\Eloquent\Model $subject)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Activity hasBatch()
* @method static \Illuminate\Database\Eloquent\Builder<static>|Activity inLog(...$logNames)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Activity newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|Activity newQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|Activity query()
* @method static \Illuminate\Database\Eloquent\Builder<static>|Activity whereBatchUuid($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Activity whereCauserId($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Activity whereCauserType($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Activity whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Activity whereDescription($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Activity whereEvent($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Activity whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Activity whereLogName($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Activity whereProperties($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Activity whereSubjectId($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Activity whereSubjectType($value)
*/
class Activity extends \Eloquent {}
}

namespace App\Models{
/**
* @mixin Builder<Allergen>
Expand All @@ -23,7 +63,9 @@
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property int|null $cached_recipes_count
* @property-read \App\Models\Country $country
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Activity> $activities
* @property-read int|null $activities_count
* @property-read \App\Models\Country|null $country
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Ingredient> $ingredients
* @property-read int|null $ingredients_count
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Recipe> $recipes
Expand Down Expand Up @@ -133,7 +175,9 @@ class Country extends \Eloquent {}
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property int|null $cached_recipes_count
* @property-read \App\Models\Country $country
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Activity> $activities
* @property-read int|null $activities_count
* @property-read \App\Models\Country|null $country
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Recipe> $recipes
* @property-read int|null $recipes_count
* @property-read mixed $translations
Expand Down Expand Up @@ -166,7 +210,7 @@ class Cuisine extends \Eloquent {}
* @property int $user_id
* @property string $email
* @property \Illuminate\Support\Carbon $verified_at
* @property-read \App\Models\User $user
* @property-read \App\Models\User|null $user
* @method static \Illuminate\Database\Eloquent\Builder<static>|EmailVerification newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|EmailVerification newQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|EmailVerification query()
Expand All @@ -187,9 +231,9 @@ class EmailVerification extends \Eloquent {}
* @property int $recipe_id
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \App\Models\Country $country
* @property-read \App\Models\Recipe $recipe
* @property-read \App\Models\User $user
* @property-read \App\Models\Country|null $country
* @property-read \App\Models\Recipe|null $recipe
* @property-read \App\Models\User|null $user
* @method static \Database\Factories\FavoriteFactory factory($count = null, $state = [])
* @method static \Illuminate\Database\Eloquent\Builder<static>|Favorite newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|Favorite newQuery()
Expand All @@ -204,6 +248,26 @@ class EmailVerification extends \Eloquent {}
class Favorite extends \Eloquent {}
}

namespace App\Models{
/**
* @property array<string, mixed> $filters
* @property string $id
* @property int $country_id
* @property string $page
* @property \Illuminate\Support\Carbon $created_at
* @property-read \App\Models\Country $country
* @method static \Illuminate\Database\Eloquent\Builder<static>|FilterShare newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|FilterShare newQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|FilterShare query()
* @method static \Illuminate\Database\Eloquent\Builder<static>|FilterShare whereCountryId($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|FilterShare whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|FilterShare whereFilters($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|FilterShare whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|FilterShare wherePage($value)
*/
class FilterShare extends \Eloquent {}
}

namespace App\Models{
/**
* @mixin Builder<Ingredient>
Expand All @@ -217,9 +281,11 @@ class Favorite extends \Eloquent {}
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property int|null $cached_recipes_count
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Activity> $activities
* @property-read int|null $activities_count
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Allergen> $allergens
* @property-read int|null $allergens_count
* @property-read \App\Models\Country $country
* @property-read \App\Models\Country|null $country
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Recipe> $recipes
* @property-read int|null $recipes_count
* @property-read mixed $translations
Expand Down Expand Up @@ -260,7 +326,9 @@ class Ingredient extends \Eloquent {}
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property int|null $cached_recipes_count
* @property-read \App\Models\Country $country
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Activity> $activities
* @property-read int|null $activities_count
* @property-read \App\Models\Country|null $country
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Recipe> $recipes
* @property-read int|null $recipes_count
* @property-read mixed $translations
Expand Down Expand Up @@ -297,7 +365,9 @@ class Label extends \Eloquent {}
* @property int $country_id
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \App\Models\Country $country
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Activity> $activities
* @property-read int|null $activities_count
* @property-read \App\Models\Country|null $country
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Recipe> $recipes
* @property-read int|null $recipes_count
* @method static \Illuminate\Database\Eloquent\Builder<static>|Menu active()
Expand Down Expand Up @@ -364,7 +434,7 @@ class PersonalAccessToken extends \Eloquent {}
* @property \Illuminate\Support\Carbon $created_at
* @property \Illuminate\Support\Carbon|null $deleted_at
* @property-read \App\Models\PersonalAccessToken|null $token
* @property-read \App\Models\User $user
* @property-read \App\Models\User|null $user
* @method static \Illuminate\Database\Eloquent\Builder<static>|PersonalAccessTokenUsage newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|PersonalAccessTokenUsage newQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|PersonalAccessTokenUsage onlyTrashed()
Expand Down Expand Up @@ -410,13 +480,18 @@ class PersonalAccessTokenUsage extends \Eloquent {}
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property \Illuminate\Support\Carbon|null $deleted_at
* @property bool $variant
* @property bool $published
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Activity> $activities
* @property-read int|null $activities_count
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Allergen> $allergens
* @property-read int|null $allergens_count
* @property-read Recipe|null $canonical
* @property-read string|null $card_image_url
* @property-read \App\Models\Country $country
* @property-read \App\Models\Country|null $country
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Cuisine> $cuisines
* @property-read int|null $cuisines_count
* @property-read int|null $display_time
* @property-read string|null $header_image_url
* @property-read string|null $hellofresh_url
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Ingredient> $ingredients
Expand Down Expand Up @@ -461,10 +536,12 @@ class PersonalAccessTokenUsage extends \Eloquent {}
* @method static \Illuminate\Database\Eloquent\Builder<static>|Recipe whereNutritionPrimary($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Recipe whereNutritionSecondary($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Recipe wherePrepTime($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Recipe wherePublished($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Recipe whereStepsPrimary($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Recipe whereStepsSecondary($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Recipe whereTotalTime($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Recipe whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Recipe whereVariant($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Recipe whereYieldsPrimary($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Recipe whereYieldsSecondary($value)
* @method static \Illuminate\Database\Eloquent\Builder<static>|Recipe withTrashed(bool $withTrashed = true)
Expand All @@ -488,7 +565,7 @@ class Recipe extends \Eloquent {}
* @property-read int|null $recipes_count
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\User> $sharedWith
* @property-read int|null $shared_with_count
* @property-read \App\Models\User $user
* @property-read \App\Models\User|null $user
* @method static \Database\Factories\RecipeListFactory factory($count = null, $state = [])
* @method static \Illuminate\Database\Eloquent\Builder<static>|RecipeList newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|RecipeList newQuery()
Expand All @@ -512,9 +589,9 @@ class RecipeList extends \Eloquent {}
* @property int $recipe_id
* @property \App\Enums\RecipeListActionEnum $action
* @property \Illuminate\Support\Carbon $created_at
* @property-read \App\Models\Recipe $recipe
* @property-read \App\Models\RecipeList $recipeList
* @property-read \App\Models\User $user
* @property-read \App\Models\Recipe|null $recipe
* @property-read \App\Models\RecipeList|null $recipeList
* @property-read \App\Models\User|null $user
* @method static \Illuminate\Database\Eloquent\Builder<static>|RecipeListActivity newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|RecipeListActivity newQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|RecipeListActivity query()
Expand All @@ -538,8 +615,8 @@ class RecipeListActivity extends \Eloquent {}
* @property string $name
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \App\Models\Country $country
* @property-read \App\Models\User $user
* @property-read \App\Models\Country|null $country
* @property-read \App\Models\User|null $user
* @method static \Database\Factories\ShoppingListFactory factory($count = null, $state = [])
* @method static \Illuminate\Database\Eloquent\Builder<static>|ShoppingList newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|ShoppingList newQuery()
Expand Down Expand Up @@ -567,7 +644,9 @@ class ShoppingList extends \Eloquent {}
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property int|null $cached_recipes_count
* @property-read \App\Models\Country $country
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Activity> $activities
* @property-read int|null $activities_count
* @property-read \App\Models\Country|null $country
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Recipe> $recipes
* @property-read int|null $recipes_count
* @property-read mixed $translations
Expand Down Expand Up @@ -655,7 +734,9 @@ class User extends \Eloquent implements \Spatie\MediaLibrary\HasMedia {}
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property int|null $cached_recipes_count
* @property-read \App\Models\Country $country
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Activity> $activities
* @property-read int|null $activities_count
* @property-read \App\Models\Country|null $country
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Recipe> $recipes
* @property-read int|null $recipes_count
* @property-read mixed $translations
Expand Down
6 changes: 3 additions & 3 deletions app/Livewire/Web/Recipes/RecipeIndex.php
Original file line number Diff line number Diff line change
Expand Up @@ -100,9 +100,9 @@ public function boot(): void
// Remove legacy filter properties that no longer exist
$legacyKeys = ['filterHideVariants', 'filterShowVariants', 'filterShowCanonical'];

foreach ($legacyKeys as $key) {
if (request()->has($key)) {
request()->request->remove($key);
foreach ($legacyKeys as $legacyKey) {
if (request()->has($legacyKey)) {
request()->request->remove($legacyKey);
}
}
}
Expand Down
10 changes: 10 additions & 0 deletions app/Models/Recipe.php
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,16 @@ public function menus(): BelongsToMany
return $this->belongsToMany(Menu::class);
}

/**
* Get highest prep time or total time.
*
* @return Attribute<int<0, max>|null, never>
*/
protected function displayTime(): Attribute
{
return Attribute::get(fn (): ?int => max($this->total_time, $this->prep_time));
}

/**
* Get the recipe card image URL.
*
Expand Down
1 change: 0 additions & 1 deletion app/Services/Portal/StatisticsService.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
use App\Models\RecipeList;
use App\Models\Tag;
use App\Models\User;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ class="absolute bottom-2 left-2 rounded px-2 py-1 text-xs font-semibold"
<div>

<div class="mt-3 flex items-center gap-4 text-sm text-zinc-500 dark:text-zinc-400">
@if ($recipe->total_time)
@if ($recipe->display_time)
<span class="flex items-center gap-1">
<flux:icon.clock variant="micro" />
{{ $recipe->total_time }} {{ __('min') }}
Expand Down
7 changes: 5 additions & 2 deletions resources/views/web/livewire/recipes/recipe-show.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,13 @@ class="rounded px-2 py-1 text-xs font-semibold"

{{-- Quick info bar --}}
<div class="flex flex-wrap items-center gap-4 py-4 border-b border-zinc-200 dark:border-zinc-700">
@if ($recipe->total_time)
@php
/** @var \App\Models\Recipe $recipe */
@endphp
@if ($recipe->display_time)
<div class="flex items-center gap-2">
<flux:icon.clock variant="mini" class="text-zinc-500" />
<span>{{ $recipe->total_time }} {{ __('min') }}</span>
<span>{{ $recipe->display_time }} {{ __('min') }}</span>
</div>
@endif
@if ($recipe->difficulty)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ public function it_returns_menus_grouped_by_week(): void
'items' => [
[
'id' => 'menu-1',
'product' => 'classic-box',
'week' => '2025-W01',
'courses' => [
['recipe' => ['id' => 'recipe-1']],
Expand All @@ -63,6 +64,7 @@ public function it_returns_menus_grouped_by_week(): void
],
[
'id' => 'menu-2',
'product' => 'classic-box',
'week' => '2025-W01',
'courses' => [
['recipe' => ['id' => 'recipe-3']],
Expand Down Expand Up @@ -93,13 +95,15 @@ public function it_groups_multiple_weeks(): void
'items' => [
[
'id' => 'menu-1',
'product' => 'classic-box',
'week' => '2025-W01',
'courses' => [
['recipe' => ['id' => 'recipe-1']],
],
],
[
'id' => 'menu-2',
'product' => 'classic-box',
'week' => '2025-W02',
'courses' => [
['recipe' => ['id' => 'recipe-2']],
Expand All @@ -126,6 +130,7 @@ public function it_parses_year_week_correctly(): void
'items' => [
[
'id' => 'menu-1',
'product' => 'classic-box',
'week' => '2025-W52',
'courses' => [
['recipe' => ['id' => 'recipe-1']],
Expand All @@ -150,6 +155,7 @@ public function it_pads_single_digit_week_number(): void
'items' => [
[
'id' => 'menu-1',
'product' => 'classic-box',
'week' => '2025-W5',
'courses' => [
['recipe' => ['id' => 'recipe-1']],
Expand All @@ -174,6 +180,7 @@ public function it_calculates_week_start_date(): void
'items' => [
[
'id' => 'menu-1',
'product' => 'classic-box',
'week' => '2025-W01',
'courses' => [
['recipe' => ['id' => 'recipe-1']],
Expand Down Expand Up @@ -201,6 +208,7 @@ public function it_parses_four_digit_year_correctly(): void
'items' => [
[
'id' => 'menu-1',
'product' => 'classic-box',
'week' => '2025-W10',
'courses' => [
['recipe' => ['id' => 'recipe-1']],
Expand Down Expand Up @@ -228,6 +236,7 @@ public function it_handles_different_years(): void
'items' => [
[
'id' => 'menu-1',
'product' => 'classic-box',
'week' => '2024-W52',
'courses' => [
['recipe' => ['id' => 'recipe-1']],
Expand Down
Loading