|
4 | 4 |
|
5 | 5 | namespace Kami\Cocktail\Http\Controllers; |
6 | 6 |
|
| 7 | +use Throwable; |
7 | 8 | use Illuminate\Http\Request; |
8 | 9 | use Illuminate\Http\Response; |
9 | 10 | use OpenApi\Attributes as OAT; |
10 | 11 | use Kami\Cocktail\Models\Glass; |
| 12 | +use Kami\Cocktail\Models\Image; |
11 | 13 | use Illuminate\Http\JsonResponse; |
12 | 14 | use Kami\Cocktail\OpenAPI as BAO; |
13 | 15 | use Kami\Cocktail\Http\Requests\GlassRequest; |
@@ -44,7 +46,7 @@ public function index(): JsonResource |
44 | 46 | #[BAO\NotFoundResponse] |
45 | 47 | public function show(Request $request, int $id): JsonResource |
46 | 48 | { |
47 | | - $glass = Glass::withCount('cocktails')->findOrFail($id); |
| 49 | + $glass = Glass::withCount('cocktails')->with('images')->findOrFail($id); |
48 | 50 |
|
49 | 51 | if ($request->user()->cannot('show', $glass)) { |
50 | 52 | abort(403); |
@@ -73,10 +75,21 @@ public function store(GlassRequest $request): JsonResponse |
73 | 75 | abort(403); |
74 | 76 | } |
75 | 77 |
|
76 | | - $glass = BAO\Schemas\GlassRequest::fromLaravelRequest($request)->toLaravelModel(); |
| 78 | + $glassRequest = BAO\Schemas\GlassRequest::fromLaravelRequest($request); |
| 79 | + |
| 80 | + $glass = $glassRequest->toLaravelModel(); |
77 | 81 | $glass->bar_id = bar()->id; |
78 | 82 | $glass->save(); |
79 | 83 |
|
| 84 | + if (count($glassRequest->images) > 0) { |
| 85 | + try { |
| 86 | + $imageModels = Image::findOrFail($glassRequest->images); |
| 87 | + $glass->attachImages($imageModels); |
| 88 | + } catch (Throwable $e) { |
| 89 | + abort(500, $e->getMessage()); |
| 90 | + } |
| 91 | + } |
| 92 | + |
80 | 93 | return (new GlassResource($glass)) |
81 | 94 | ->response() |
82 | 95 | ->setStatusCode(201) |
@@ -104,10 +117,21 @@ public function update(int $id, GlassRequest $request): JsonResource |
104 | 117 | abort(403); |
105 | 118 | } |
106 | 119 |
|
107 | | - $glass = BAO\Schemas\GlassRequest::fromLaravelRequest($request)->toLaravelModel($glass); |
| 120 | + $glassRequest = BAO\Schemas\GlassRequest::fromLaravelRequest($request); |
| 121 | + |
| 122 | + $glass = $glassRequest->toLaravelModel($glass); |
108 | 123 | $glass->updated_at = now(); |
109 | 124 | $glass->save(); |
110 | 125 |
|
| 126 | + if (count($glassRequest->images) > 0) { |
| 127 | + try { |
| 128 | + $imageModels = Image::findOrFail($glassRequest->images); |
| 129 | + $glass->attachImages($imageModels); |
| 130 | + } catch (Throwable $e) { |
| 131 | + abort(500, $e->getMessage()); |
| 132 | + } |
| 133 | + } |
| 134 | + |
111 | 135 | $glass->cocktails->each(fn ($cocktail) => $cocktail->searchable()); |
112 | 136 |
|
113 | 137 | return new GlassResource($glass); |
|
0 commit comments