From 3c8e479a593ba68db20995fd4f2d71b6ba3ba6a8 Mon Sep 17 00:00:00 2001 From: Hasban-Fardani Date: Thu, 11 Jul 2024 20:28:17 +0700 Subject: [PATCH 1/2] feat: add CRD pack stickers, and download sticker --- app/Http/Controllers/StickerController.php | 65 ++++++++++++---------- routes/api.php | 4 ++ 2 files changed, 41 insertions(+), 28 deletions(-) diff --git a/app/Http/Controllers/StickerController.php b/app/Http/Controllers/StickerController.php index fb232e9..032b3ea 100644 --- a/app/Http/Controllers/StickerController.php +++ b/app/Http/Controllers/StickerController.php @@ -2,64 +2,73 @@ namespace App\Http\Controllers; +use App\Models\Pack; use App\Models\Sticker; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Storage; +use Illuminate\Support\Facades\Validator; +use Illuminate\Validation\Rules\File; class StickerController extends Controller { /** * Display a listing of the resource. */ - public function index() - { - // - } - - /** - * Show the form for creating a new resource. - */ - public function create() + public function index(Pack $pack) { // + return $pack->stickers; } /** * Store a newly created resource in storage. */ - public function store(Request $request) + public function store(Request $request, Pack $pack) { // - } + $validator = Validator::make($request->all(), [ + 'name' => 'required|max:32', + 'image' => File::image()->max('10MB'), + ]); + + if ($validator->fails()) { + return response()->json([ + 'message' => 'The given data was invalid.', + 'errors' => $validator->errors(), + ], 422); + } - /** - * Display the specified resource. - */ - public function show(Sticker $sticker) - { - // - } + // store image + $path = $request->file('image')->store('stickers'); + $request->merge(['image' => $path]); + + $sticker = $pack->stickers()->create($validator->validated()); - /** - * Show the form for editing the specified resource. - */ - public function edit(Sticker $sticker) - { - // + return response()->json([ + 'message' => 'Sticker created successfully', + 'sticker' => $sticker + ]); } /** - * Update the specified resource in storage. + * Display the specified resource. */ - public function update(Request $request, Sticker $sticker) + public function show(Request $request, Pack $pack, Sticker $sticker) { - // + if ($request->has('download')) { + return response()->download(Storage::path($sticker->image)); + } + + return $sticker; } /** * Remove the specified resource from storage. */ - public function destroy(Sticker $sticker) + public function destroy(Pack $pack, Sticker $sticker) { // + $sticker->delete(); + return response()->json(['message' => 'Sticker deleted successfully.']); } } diff --git a/routes/api.php b/routes/api.php index 1dd2ac5..1f54196 100644 --- a/routes/api.php +++ b/routes/api.php @@ -4,7 +4,9 @@ use App\Http\Controllers\auth\LogoutController; use App\Http\Controllers\auth\RegisterController; use App\Http\Controllers\CategoryController; +use App\Http\Controllers\PackCategoryController; use App\Http\Controllers\PackController; +use App\Http\Controllers\StickerController; use Illuminate\Support\Facades\Route; @@ -20,4 +22,6 @@ Route::apiResource('category', CategoryController::class); Route::apiResource('pack', PackController::class); + Route::apiResource('pack.sticker', StickerController::class) + ->except('update'); }); \ No newline at end of file From 0b64292d327c1ec233c945fb4a177660a41284fe Mon Sep 17 00:00:00 2001 From: Hasban-Fardani Date: Thu, 11 Jul 2024 20:35:17 +0700 Subject: [PATCH 2/2] fix: download stickers from external resource --- app/Http/Controllers/StickerController.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/Http/Controllers/StickerController.php b/app/Http/Controllers/StickerController.php index 032b3ea..323cf0b 100644 --- a/app/Http/Controllers/StickerController.php +++ b/app/Http/Controllers/StickerController.php @@ -9,6 +9,8 @@ use Illuminate\Support\Facades\Validator; use Illuminate\Validation\Rules\File; +use function PHPUnit\Framework\stringStartsWith; + class StickerController extends Controller { /** @@ -56,6 +58,15 @@ public function store(Request $request, Pack $pack) public function show(Request $request, Pack $pack, Sticker $sticker) { if ($request->has('download')) { + if (stringStartsWith($sticker->image, 'http')) { + $stickerExtension = explode('.', $sticker->image); + $stickerExtension = $stickerExtension[1]; + $filename = 'sticker' . '.' . $stickerExtension; + $tempImage = tempnam(sys_get_temp_dir(), $filename); + copy($sticker->image, $tempImage); + + return response()->download($tempImage, $filename); + } return response()->download(Storage::path($sticker->image)); }