| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- <?php
- namespace App\Http\Controllers\admin;
- use App\Constants\HttpStatus;
- use App\Http\Controllers\Controller;
- use App\Services\Sharing\ShareAdminService;
- use App\Services\Sharing\ShareClaimAuditService;
- use Illuminate\Validation\Rule;
- use Illuminate\Validation\ValidationException;
- use Illuminate\Database\QueryException;
- use Illuminate\Support\Facades\Log;
- use Throwable;
- class SharingManagement extends Controller
- {
- public function levels(ShareAdminService $service) { return $this->run(fn () => $service->levels()); }
- public function saveLevel(ShareAdminService $service) { return $this->run(fn () => $service->saveLevel(request()->all())); }
- public function deleteLevel(ShareAdminService $service)
- {
- return $this->run(function () use ($service) {
- $params = request()->validate(['id' => ['required', 'integer', 'min:1']]);
- $service->deleteLevel((int)$params['id']);
- return [];
- });
- }
- public function rateRules(ShareAdminService $service)
- {
- return $this->run(function () use ($service) {
- $params = request()->validate(['category' => ['nullable', 'string']]);
- return $service->rateRules($params['category'] ?? null);
- });
- }
- public function saveRateRules(ShareAdminService $service)
- {
- return $this->run(function () use ($service) {
- $params = request()->validate(['category' => ['required', 'string'], 'rules' => ['required', 'array']]);
- return $service->saveRateRules($params['category'], $params['rules']);
- });
- }
- public function claims(ShareClaimAuditService $service) { return $this->run(fn () => $service->list(request()->all())); }
- public function claimDetail(ShareClaimAuditService $service)
- {
- return $this->run(function () use ($service) {
- $params = request()->validate(['id' => ['required', 'integer', 'min:1']]);
- return $service->detail((int)$params['id']);
- });
- }
- public function auditClaim(ShareClaimAuditService $service)
- {
- return $this->run(function () use ($service) {
- $params = request()->validate(['id' => ['required', 'integer', 'min:1'],
- 'action' => ['required', Rule::in(['approve', 'reject'])], 'remark' => ['nullable', 'string', 'max:2000']]);
- return $service->audit((int)$params['id'], $params['action'], (int)(request()->user->id ?? 0), (string)($params['remark'] ?? ''));
- });
- }
- private function run(callable $callback)
- {
- try { return $this->success($callback()); }
- catch (ValidationException $e) { return $this->error(HttpStatus::CUSTOM_ERROR, $e->validator->errors()->first()); }
- catch (QueryException $e) {
- Log::error('sharing_admin_database_error', ['exception' => $e]);
- return $this->error(HttpStatus::CUSTOM_ERROR, '分享管理服务暂不可用,请稍后重试');
- }
- catch (\RuntimeException | \InvalidArgumentException $e) { return $this->error(HttpStatus::CUSTOM_ERROR, $e->getMessage()); }
- catch (Throwable $e) {
- Log::error('sharing_admin_error', ['exception' => $e]);
- return $this->error(HttpStatus::CUSTOM_ERROR, '分享管理服务暂不可用,请稍后重试');
- }
- }
- }
|