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.

162 lines
4.0 KiB

3 years ago
  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. 'description' => 'required',
  34. 'tag' => 'nullable',
  35. 'rows' => 'required|array',
  36. 'rows.*' => 'array',
  37. ]);
  38. try {
  39. $factory = new SearcherFactory(
  40. request()->get('name'),
  41. request()->get('description'),
  42. request()->get('rows'),
  43. request()->get('tag')
  44. );
  45. $searcher = $factory->create();
  46. return response()->json([
  47. 'status' => 'success',
  48. 'searcher' => $searcher,
  49. ], 200);
  50. } catch (\Exception $exception) {
  51. return response()->json([
  52. 'status' => 'fail',
  53. 'trace' => $exception->getTrace(),
  54. 'message' => $exception->getMessage(),
  55. ], 400);
  56. }
  57. }
  58. public function show($id)
  59. {
  60. $searchersCollection = new SearchersCollection();
  61. try {
  62. $searcher = $searchersCollection->get($id);
  63. if ( ! $searcher) {
  64. abort(404);
  65. }
  66. if (request()->wantsJson()) {
  67. return response()->json([
  68. 'searcher' => $searcher,
  69. ], 200);
  70. }
  71. return view('pages.searchers.show', [
  72. 'searcher' => $searcher,
  73. ]);
  74. } catch (\Exception $exception) {
  75. abort(400);
  76. }
  77. }
  78. public function edit($id)
  79. {
  80. $searchersCollection = new SearchersCollection();
  81. try {
  82. $searcher = $searchersCollection->get($id);
  83. if ( ! $searcher) {
  84. abort(404);
  85. }
  86. return view('pages.searchers.edit', [
  87. 'searcher' => $searcher,
  88. ]);
  89. } catch (\Exception $exception) {
  90. abort(400);
  91. }
  92. }
  93. public function update($id)
  94. {
  95. request()->validate([
  96. 'name' => 'required',
  97. 'description' => 'required',
  98. 'tag' => 'nullable',
  99. 'rows' => 'required|array',
  100. 'rows.*' => 'array',
  101. ]);
  102. try {
  103. $factory = new SearcherFactory(
  104. request()->get('name'),
  105. request()->get('description'),
  106. request()->get('rows'),
  107. request()->get('tag')
  108. );
  109. $searcher = $factory->update($id);
  110. return response()->json([
  111. 'status' => 'success',
  112. 'searcher' => $searcher,
  113. ], 200);
  114. } catch (\Exception $exception) {
  115. return response()->json([
  116. 'status' => 'fail',
  117. 'trace' => $exception->getTrace(),
  118. 'message' => $exception->getMessage(),
  119. ], 400);
  120. }
  121. }
  122. public function destroy($id)
  123. {
  124. $searcherStorage = new SearchersStorage();
  125. if ( ! $searcherStorage->has($id)) {
  126. abort(404);
  127. }
  128. $deleted = $searcherStorage->destroy($id);
  129. if ( ! $deleted) {
  130. return response()->json([], 400);
  131. }
  132. return response()->json([], 200);
  133. }
  134. }