IconController.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace App\Api\v1\Controllers;
  3. use App\Http\Controllers\Controller;
  4. use App\Services\LogoService;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\Storage;
  7. class IconController extends Controller
  8. {
  9. /**
  10. * Handle uploaded icon image
  11. *
  12. * @param \Illuminate\Http\Request $request
  13. * @return \Illuminate\Http\JsonResponse
  14. */
  15. public function upload(Request $request)
  16. {
  17. $this->validate($request, [
  18. 'icon' => 'required|image',
  19. ]);
  20. $icon = $request->file('icon');
  21. $path = $icon instanceof \Illuminate\Http\UploadedFile ? $icon->store('', 'icons') : false;
  22. return $path
  23. ? response()->json(['filename' => pathinfo($path)['basename']], 201)
  24. : response()->json(['message' => __('errors.file_upload_failed')], 500);
  25. }
  26. /**
  27. * Fetch a logo
  28. *
  29. * @param \Illuminate\Http\Request $request
  30. * @param \App\Services\LogoService $logoService
  31. * @return \Illuminate\Http\JsonResponse
  32. */
  33. public function fetch(Request $request, LogoService $logoService)
  34. {
  35. $this->validate($request, [
  36. 'service' => 'string|regex:/^[^:]+$/i',
  37. ]);
  38. $icon = $logoService->getIcon($request->service);
  39. return $icon
  40. ? response()->json(['filename' => $icon], 201)
  41. : response()->json(null, 204);
  42. }
  43. /**
  44. * delete an icon
  45. *
  46. * @param string $icon
  47. * @return \Illuminate\Http\JsonResponse
  48. */
  49. public function delete(string $icon)
  50. {
  51. Storage::disk('icons')->delete($icon);
  52. return response()->json(null, 204);
  53. }
  54. }