WebHookController.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Resources\WebHookResource;
  4. use App\Models\WebHook;
  5. use App\Services\AuthService;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Http\Response;
  8. use Illuminate\Support\Str;
  9. class WebHookController extends Controller
  10. {
  11. /**
  12. * Display a listing of the resource.
  13. *
  14. * @return Response
  15. */
  16. public function index(Request $request)
  17. {
  18. switch ($request->input('view')) {
  19. case 'channel':
  20. $table = WebHook::where('res_type', 'channel')->where('res_id', $request->input('id'));
  21. break;
  22. default:
  23. return $this->error('no view');
  24. break;
  25. }
  26. if (! empty($search)) {
  27. $table->where('url', 'like', $search.'%');
  28. }
  29. $table->orderBy($request->input('order', 'updated_at'), $request->input('dir', 'desc'));
  30. $count = $table->count();
  31. $table->skip($request->input('offset', 0))
  32. ->take($request->input('limit', 1000));
  33. $result = $table->get();
  34. return $this->ok(['rows' => WebHookResource::collection($result), 'count' => $count]);
  35. }
  36. /**
  37. * Store a newly created resource in storage.
  38. *
  39. * @return Response
  40. */
  41. public function store(Request $request)
  42. {
  43. //
  44. $user = AuthService::current($request);
  45. if (! $user) {
  46. return $this->error(__('auth.failed'), [], 401);
  47. }
  48. $validated = $request->validate([
  49. 'res_type' => 'required',
  50. 'res_id' => 'required',
  51. 'url' => 'required',
  52. 'receiver' => 'required',
  53. ]);
  54. // TODO 判断权限
  55. $new = new WebHook;
  56. $new->id = Str::uuid();
  57. $new->res_type = $validated['res_type'];
  58. $new->res_id = $validated['res_id'];
  59. $new->url = $validated['url'];
  60. $new->receiver = $validated['receiver'];
  61. if ($request->has('event')) {
  62. $new->event = json_encode($request->input('event'), JSON_UNESCAPED_UNICODE);
  63. } else {
  64. $new->event = null;
  65. }
  66. $new->status = $request->input('status', 'active');
  67. $new->editor_uid = $user['user_uid'];
  68. $new->save();
  69. return $this->ok(new WebHookResource($new));
  70. }
  71. /**
  72. * Display the specified resource.
  73. *
  74. * @param WebHook $webHook
  75. * @return Response
  76. */
  77. public function show(string $id)
  78. {
  79. //
  80. $webHook = WebHook::find($id);
  81. if (! $webHook) {
  82. return $this->error('no id');
  83. }
  84. return $this->ok(new WebHookResource($webHook));
  85. }
  86. /**
  87. * Update the specified resource in storage.
  88. *
  89. * @param WebHook $webHook
  90. * @return Response
  91. */
  92. public function update(Request $request, string $id)
  93. {
  94. //
  95. $user = AuthService::current($request);
  96. if (! $user) {
  97. return $this->error(__('auth.failed'), [], 401);
  98. }
  99. $validated = $request->validate([
  100. 'res_type' => 'required',
  101. 'res_id' => 'required',
  102. 'url' => 'required',
  103. 'receiver' => 'required',
  104. ]);
  105. // TODO 判断权限
  106. $webHook = WebHook::find($id);
  107. if (! $webHook) {
  108. return $this->error('no id');
  109. }
  110. $webHook->res_type = $validated['res_type'];
  111. $webHook->res_id = $validated['res_id'];
  112. $webHook->url = $validated['url'];
  113. $webHook->receiver = $validated['receiver'];
  114. if ($request->has('event')) {
  115. $webHook->event = json_encode($request->input('event'), JSON_UNESCAPED_UNICODE);
  116. } else {
  117. $webHook->event = null;
  118. }
  119. $webHook->status = $request->input('status');
  120. $webHook->editor_uid = $user['user_uid'];
  121. $webHook->save();
  122. return $this->ok(new WebHookResource($webHook));
  123. }
  124. /**
  125. * Remove the specified resource from storage.
  126. *
  127. * @param WebHook $webHook
  128. * @return Response
  129. */
  130. public function destroy(Request $request, string $id)
  131. {
  132. //
  133. $user = AuthService::current($request);
  134. if (! $user) {
  135. return $this->error(__('auth.failed'));
  136. }
  137. $webHook = WebHook::find($id);
  138. if (! $webHook) {
  139. return $this->error('no id');
  140. }
  141. // TODO 判断当前用户是否有权限
  142. $delete = 0;
  143. $delete = $webHook->delete();
  144. return $this->ok($delete);
  145. }
  146. }