SharingManagement.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace App\Http\Controllers\admin;
  3. use App\Constants\HttpStatus;
  4. use App\Http\Controllers\Controller;
  5. use App\Services\Sharing\ShareAdminService;
  6. use App\Services\Sharing\ShareClaimAuditService;
  7. use Illuminate\Validation\Rule;
  8. use Illuminate\Validation\ValidationException;
  9. use Illuminate\Database\QueryException;
  10. use Illuminate\Support\Facades\Log;
  11. use Throwable;
  12. class SharingManagement extends Controller
  13. {
  14. public function levels(ShareAdminService $service) { return $this->run(fn () => $service->levels()); }
  15. public function saveLevel(ShareAdminService $service) { return $this->run(fn () => $service->saveLevel(request()->all())); }
  16. public function deleteLevel(ShareAdminService $service)
  17. {
  18. return $this->run(function () use ($service) {
  19. $params = request()->validate(['id' => ['required', 'integer', 'min:1']]);
  20. $service->deleteLevel((int)$params['id']);
  21. return [];
  22. });
  23. }
  24. public function rateRules(ShareAdminService $service)
  25. {
  26. return $this->run(function () use ($service) {
  27. $params = request()->validate(['category' => ['nullable', 'string']]);
  28. return $service->rateRules($params['category'] ?? null);
  29. });
  30. }
  31. public function saveRateRules(ShareAdminService $service)
  32. {
  33. return $this->run(function () use ($service) {
  34. $params = request()->validate(['category' => ['required', 'string'], 'rules' => ['required', 'array']]);
  35. return $service->saveRateRules($params['category'], $params['rules']);
  36. });
  37. }
  38. public function claims(ShareClaimAuditService $service) { return $this->run(fn () => $service->list(request()->all())); }
  39. public function claimOptions(ShareClaimAuditService $service) { return $this->run(fn () => $service->options()); }
  40. public function claimDetail(ShareClaimAuditService $service)
  41. {
  42. return $this->run(function () use ($service) {
  43. $params = request()->validate(['id' => ['required', 'integer', 'min:1']]);
  44. return $service->detail((int)$params['id']);
  45. });
  46. }
  47. public function auditClaim(ShareClaimAuditService $service)
  48. {
  49. return $this->run(function () use ($service) {
  50. $params = request()->validate(['id' => ['required', 'integer', 'min:1'],
  51. 'action' => ['required', Rule::in(['approve', 'reject'])], 'remark' => ['nullable', 'string', 'max:2000']]);
  52. return $service->audit((int)$params['id'], $params['action'], (int)(request()->user->id ?? 0), (string)($params['remark'] ?? ''));
  53. });
  54. }
  55. private function run(callable $callback)
  56. {
  57. try { return $this->success($callback()); }
  58. catch (ValidationException $e) { return $this->error(HttpStatus::CUSTOM_ERROR, $e->validator->errors()->first()); }
  59. catch (QueryException $e) {
  60. Log::error('sharing_admin_database_error', ['exception' => $e]);
  61. return $this->error(HttpStatus::CUSTOM_ERROR, '分享管理服务暂不可用,请稍后重试');
  62. }
  63. catch (\RuntimeException | \InvalidArgumentException $e) { return $this->error(HttpStatus::CUSTOM_ERROR, $e->getMessage()); }
  64. catch (Throwable $e) {
  65. Log::error('sharing_admin_error', ['exception' => $e]);
  66. return $this->error(HttpStatus::CUSTOM_ERROR, '分享管理服务暂不可用,请稍后重试');
  67. }
  68. }
  69. }