Repo for the search and displace core module including the interface to select files and search and displace operations to run on them. https://searchanddisplace.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

148 lines
3.6 KiB

  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\SearchDisplace\Searchers\SearcherFactory;
  4. use App\SearchDisplace\Searchers\SearchersCollection;
  5. use App\SearchDisplace\Searchers\SearchersStorage;
  6. class SearcherController extends Controller
  7. {
  8. public function index()
  9. {
  10. // @TODO Add filters
  11. if (request()->has('q')) {
  12. $searchers = [];
  13. } else {
  14. $searchers = (new SearchersCollection())->all();
  15. }
  16. if (request()->wantsJson()) {
  17. return response()->json([
  18. 'searchers' => $searchers,
  19. ], 200);
  20. }
  21. return view('pages.searchers.index', [
  22. 'searchers' => $searchers,
  23. ]);
  24. }
  25. public function create()
  26. {
  27. return view('pages.searchers.create');
  28. }
  29. public function store()
  30. {
  31. request()->validate([
  32. 'name' => 'required',
  33. 'rows' => 'required|array',
  34. 'rows.*' => 'array',
  35. ]);
  36. try {
  37. $factory = new SearcherFactory(request()->get('name'), request()->get('rows'));
  38. $searcher = $factory->create();
  39. return response()->json([
  40. 'status' => 'success',
  41. 'searcher' => $searcher,
  42. ], 200);
  43. } catch (\Exception $exception) {
  44. return response()->json([
  45. 'status' => 'fail',
  46. 'trace' => $exception->getTrace(),
  47. 'message' => $exception->getMessage(),
  48. ], 400);
  49. }
  50. }
  51. public function show($id)
  52. {
  53. $searchersCollection = new SearchersCollection();
  54. try {
  55. $searcher = $searchersCollection->get($id);
  56. if ( ! $searcher) {
  57. abort(404);
  58. }
  59. if (request()->wantsJson()) {
  60. return response()->json([
  61. 'searcher' => $searcher,
  62. ], 200);
  63. }
  64. return view('pages.searchers.show', [
  65. 'searcher' => $searcher,
  66. ]);
  67. } catch (\Exception $exception) {
  68. abort(400);
  69. }
  70. }
  71. public function edit($id)
  72. {
  73. $searchersCollection = new SearchersCollection();
  74. try {
  75. $searcher = $searchersCollection->get($id);
  76. if ( ! $searcher) {
  77. abort(404);
  78. }
  79. return view('pages.searchers.edit', [
  80. 'searcher' => $searcher,
  81. ]);
  82. } catch (\Exception $exception) {
  83. abort(400);
  84. }
  85. }
  86. public function update($id)
  87. {
  88. request()->validate([
  89. 'name' => 'required',
  90. 'rows' => 'required|array',
  91. 'rows.*' => 'array',
  92. ]);
  93. try {
  94. $factory = new SearcherFactory(request()->get('name'), request()->get('rows'));
  95. $searcher = $factory->save($id);
  96. return response()->json([
  97. 'status' => 'success',
  98. 'searcher' => $searcher,
  99. ], 200);
  100. } catch (\Exception $exception) {
  101. return response()->json([
  102. 'status' => 'fail',
  103. 'trace' => $exception->getTrace(),
  104. 'message' => $exception->getMessage(),
  105. ], 400);
  106. }
  107. }
  108. public function destroy($id)
  109. {
  110. $searcherStorage = new SearchersStorage();
  111. if ( ! $searcherStorage->has($id)) {
  112. abort(404);
  113. }
  114. $deleted = $searcherStorage->destroy($id);
  115. if ( ! $deleted) {
  116. return response()->json([], 400);
  117. }
  118. return response()->json([], 200);
  119. }
  120. }