Skip to content

Commit a39e5ef

Browse files
committed
Add cocktail varieties
1 parent c07bc29 commit a39e5ef

File tree

9 files changed

+303
-196
lines changed

9 files changed

+303
-196
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
# v5.6.0
2+
## New
3+
- Added cocktail recipe parent ID tracking
4+
- Allows for recipe varieties/riffs
5+
- Copying recipe will automatically reference the copied recipe as a parent cocktail
6+
- Added `parent_cocktail_id` to `Cocktail` schema
7+
- Added `varieties` to `Cocktail` schema
8+
19
# v5.5.1
210
## Fixes
311
- Fixed missing cocktail recipes with duplicated names in datapack export

app/Http/Controllers/CocktailController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,7 @@ public function copy(string $idOrSlug, CocktailService $cocktailService, ImageSe
453453
$ingredients,
454454
$images,
455455
$cocktail->utensils->pluck('id')->toArray(),
456+
$cocktail->id,
456457
);
457458

458459
try {

app/Http/Resources/CocktailResource.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@
5959
'can_rate',
6060
'can_add_note',
6161
]),
62+
new OAT\Property(property: 'parent_cocktail', type: CocktailBasicResource::class, description: 'If this cocktail is a variety of existing cocktail, this will reference the original cocktail', nullable: true),
63+
new OAT\Property(property: 'varieties', type: 'array', items: new OAT\Items(type: CocktailBasicResource::class), description: 'List of varieties of this cocktail'),
6264
],
6365
required: [
6466
'id',
@@ -139,6 +141,10 @@ public function toArray($request)
139141
'can_add_note' => $request->user()->can('addNote', $this->resource),
140142
];
141143
}),
144+
'parent_cocktail' => $this->whenLoaded('parentCocktail', function () {
145+
return new CocktailBasicResource($this->parentCocktail);
146+
}),
147+
'varieties' => CocktailBasicResource::collection($this->whenLoaded('cocktailVarieties')),
142148
];
143149
}
144150
}

app/Models/Cocktail.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,22 @@ public function menuCocktails(): HasMany
129129
return $this->hasMany(MenuCocktail::class);
130130
}
131131

132+
/**
133+
* @return HasMany<Cocktail, $this>
134+
*/
135+
public function cocktailVarieties(): HasMany
136+
{
137+
return $this->hasMany(Cocktail::class, 'parent_cocktail_id');
138+
}
139+
140+
/**
141+
* @return BelongsTo<Cocktail, $this>
142+
*/
143+
public function parentCocktail(): BelongsTo
144+
{
145+
return $this->belongsTo(Cocktail::class, 'parent_cocktail_id');
146+
}
147+
132148
public function deleteFromMenu(): void
133149
{
134150
$this->menuCocktails()->delete();
@@ -434,6 +450,8 @@ public function loadDefaultRelations(): self
434450
'ratings',
435451
'ingredients.ingredient.bar.shelfIngredients',
436452
'ingredients.ingredient.descendants',
453+
'parentCocktail.images',
454+
'cocktailVarieties.images',
437455
]);
438456

439457
return $this;

app/OpenAPI/Schemas/CocktailRequest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ public function __construct(
4141
public array $images = [],
4242
#[OAT\Property(items: new OAT\Items(type: 'integer'), description: 'List of existing utensil ids')]
4343
public array $utensils = [],
44+
#[OAT\Property(example: 1, property: 'parent_cocktail_id')]
45+
public ?int $parentCocktailId = null,
4446
) {
4547
}
4648

@@ -68,6 +70,7 @@ public static function fromIlluminateRequest(Request $request, ?int $barId = nul
6870
$ingredients,
6971
$request->input('images', []),
7072
$request->input('utensils', []),
73+
$request->filled('parent_cocktail_id') ? $request->integer('parent_cocktail_id') : null,
7174
);
7275
}
7376
}

app/Services/CocktailService.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public function createCocktail(CocktailDTO $cocktailDTO): Cocktail
4242
$cocktail->glass_id = $cocktailDTO->glassId;
4343
$cocktail->cocktail_method_id = $cocktailDTO->methodId;
4444
$cocktail->bar_id = $cocktailDTO->barId;
45+
$cocktail->parent_cocktail_id = $cocktailDTO->parentCocktailId;
4546
$cocktail->save();
4647

4748
foreach ($cocktailDTO->ingredients as $ingredient) {
@@ -125,6 +126,16 @@ public function updateCocktail(int $id, CocktailDTO $cocktailDTO): Cocktail
125126
$cocktail->updated_user_id = $cocktailDTO->userId;
126127
$cocktail->glass_id = $cocktailDTO->glassId;
127128
$cocktail->cocktail_method_id = $cocktailDTO->methodId;
129+
130+
if ($cocktailDTO->parentCocktailId !== $cocktail->id) {
131+
$cocktail->parent_cocktail_id = $cocktailDTO->parentCocktailId;
132+
} else {
133+
$this->log->warning('[COCKTAIL_SERVICE] Attempted to set parent cocktail to itself', [
134+
'cocktail_id' => $cocktail->id,
135+
'parent_cocktail_id' => $cocktailDTO->parentCocktailId,
136+
]);
137+
}
138+
128139
$cocktail->updated_at = now();
129140
$cocktail->save();
130141

0 commit comments

Comments
 (0)