WebHookController.php 4.5 KB

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