22
33namespace App \Http \Controllers ;
44
5+ use App \Actions \OptimizeWebpImageAction ;
56use App \Http \Resources \PuppyResource ;
67use App \Models \Puppy ;
78use Illuminate \Http \Request ;
89use Illuminate \Support \Facades \Storage ;
910use Inertia \Inertia ;
10- use Intervention \Image \Laravel \Facades \Image ;
11- use Illuminate \Support \Str ;
1211
1312class PuppyController extends Controller
1413{
@@ -45,7 +44,6 @@ public function index(Request $request)
4544 // ------------------------------
4645 public function like (Request $ request , Puppy $ puppy )
4746 {
48- usleep (200000 );
4947 $ puppy ->likedBy ()->toggle ($ request ->user ()->id );
5048 return back ();
5149 }
@@ -55,7 +53,6 @@ public function like(Request $request, Puppy $puppy)
5553 // ------------------------------
5654 public function store (Request $ request )
5755 {
58- usleep (200000 );
5956 // Validate the data
6057 $ request ->validate ([
6158 'name ' => 'required|string|max:255 ' ,
@@ -67,20 +64,10 @@ public function store(Request $request)
6764 $ image_url = null ;
6865 if ($ request ->hasFile ('image ' )) {
6966
70- // Image optimization
71- $ image = Image:: read ( $ request -> file ( ' image ' )) ;
67+ $ optimized = ( new OptimizeWebpImageAction ())-> handle ( $ request -> file ( ' image ' ));
68+ $ path = ' puppies/ ' . $ optimized [ ' fileName ' ] ;
7269
73- // Scale down only
74- if ($ image ->width () > 1000 ) {
75- $ image ->scale (width: 1000 );
76- }
77-
78- $ webpEncoded = $ image ->toWebp (quality: 95 )->toString ();
79-
80- $ fileName = Str::random () . '.webp ' ;
81- $ path = 'puppies/ ' . $ fileName ;
82-
83- $ stored = Storage::disk ('public ' )->put ($ path , $ webpEncoded );
70+ $ stored = Storage::disk ('public ' )->put ($ path , $ optimized ['webpString ' ]);
8471
8572 if (!$ stored ) {
8673 return back ()->withErrors (['image ' => 'Failed to upload image. ' ]);
@@ -104,8 +91,6 @@ public function store(Request $request)
10491 // ------------------------------
10592 public function destroy (Request $ request , Puppy $ puppy )
10693 {
107- sleep (2 );
108-
10994 $ imagePath = str_replace ('/storage/ ' , '' , $ puppy ->image_url );
11095
11196 if ($ request ->user ()->cannot ('delete ' , $ puppy )) {
@@ -129,6 +114,47 @@ public function destroy(Request $request, Puppy $puppy)
129114 // ------------------------------
130115 public function update (Request $ request , Puppy $ puppy )
131116 {
132- dd ('Hello from the update method! ' );
117+ // Validate the data
118+ $ request ->validate ([
119+ 'name ' => 'required|string|max:255 ' ,
120+ 'trait ' => 'required|string|max:255 ' ,
121+ 'image ' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:5120 ' ,
122+ ]);
123+
124+ // If there is a new image
125+ if ($ request ->hasFile ('image ' )) {
126+
127+ $ oldImagePath = str_replace ('/storage/ ' , '' , $ puppy ->image_url );
128+
129+ // Optimize and store the new image
130+ $ optimized = (new OptimizeWebpImageAction ())->handle ($ request ->file ('image ' ));
131+ $ path = 'puppies/ ' . $ optimized ['fileName ' ];
132+
133+ $ stored = Storage::disk ('public ' )->put ($ path , $ optimized ['webpString ' ]);
134+
135+ if (!$ stored ) {
136+ return back ()->withErrors (['image ' => 'Failed to upload image. ' ]);
137+ }
138+ $ puppy ->image_url = Storage::url ($ path );
139+
140+ // Delete the old image
141+ if ($ oldImagePath && Storage::disk ('public ' )->exists ($ oldImagePath )) {
142+ Storage::disk ('public ' )->delete ($ oldImagePath );
143+ }
144+ }
145+
146+ // Update the puppy values
147+ $ puppy ->name = $ request ->name ;
148+ $ puppy ->trait = $ request ->trait ;
149+
150+
151+ $ puppy ->save ();
152+
153+ return back ()
154+ ->with ('success ' , 'Puppy updated successfully! ' );
155+
156+ // Save the updated puppy
157+
158+ // Redirect back with success message
133159 }
134160}
0 commit comments