diff --git a/app/Http/Controllers/Api/AdController.php b/app/Http/Controllers/Api/AdController.php new file mode 100644 index 0000000..e12195a --- /dev/null +++ b/app/Http/Controllers/Api/AdController.php @@ -0,0 +1,22 @@ +all(), AdFilter::class)->sort(); + $list = $query->paginate($this->resolvePerPage('per_page', 20)); + + return $this->json(AdResource::collection($list)); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 77ec359..fc54e1a 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -2,11 +2,13 @@ namespace App\Http\Controllers; +use App\Traits\JsonResponse; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; +use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Routing\Controller as BaseController; class Controller extends BaseController { - use AuthorizesRequests, ValidatesRequests; -} + use AuthorizesRequests, DispatchesJobs, ValidatesRequests, JsonResponse; +} \ No newline at end of file diff --git a/app/Http/Resources/AdResource.php b/app/Http/Resources/AdResource.php new file mode 100644 index 0000000..b684268 --- /dev/null +++ b/app/Http/Resources/AdResource.php @@ -0,0 +1,22 @@ + $this->resource_url, + 'jump_type' => $this->jump_type, + 'jump_config' => $this->jump_config, + ]; + } +} diff --git a/app/Models/Ad.php b/app/Models/Ad.php index 978e9b9..f7031fb 100644 --- a/app/Models/Ad.php +++ b/app/Models/Ad.php @@ -49,8 +49,8 @@ class Ad extends Model { return [ self::TYPE_WEB => '网页跳转', - self::TYPE_APP => '应用跳转', - self::TYPE_MINI => '小程序跳转', + // self::TYPE_APP => '应用跳转', + // self::TYPE_MINI => '小程序跳转', self::TYPE_OFF => '无跳转', ]; } diff --git a/app/Traits/JsonResponse.php b/app/Traits/JsonResponse.php new file mode 100644 index 0000000..916539b --- /dev/null +++ b/app/Traits/JsonResponse.php @@ -0,0 +1,57 @@ +resource; + if ($resource instanceof LengthAwarePaginator) { + $meta = [ + 'current_page' => $resource->currentPage(), + 'last_page' => $resource->lastPage(), + 'per_page' => $resource->perPage(), + 'total' => $resource->total(), + ]; + } + } + $result = ['data' => $data, 'code' => $code, 'message' => $message]; + if ($meta) { + $result['meta'] = $meta; + } + return response()->json($result); + } + + public function success($message = '', $data = null) + { + return $this->json($data, 200, $message); + } + + public function error($message = '', $code = 400, $data = null) + { + return $this->json($data, $code, $message); + } + + public function include($include = [], $key = 'include') + { + $request = request(); + if ($request->filled($key)) { + $include1 = $request->input($key); + $include1 = is_array($include1) ? $include1 : explode(',', $include1); + $include = array_merge($include, $include1); + } + return $include; + } + + protected function user($guard = null) + { + return Auth::guard($guard)->user(); + } +} \ No newline at end of file diff --git a/app/Traits/PaginatorTrait.php b/app/Traits/PaginatorTrait.php new file mode 100644 index 0000000..6faf503 --- /dev/null +++ b/app/Traits/PaginatorTrait.php @@ -0,0 +1,29 @@ +input($perPageName); + + if ($perPage >= 1) { + if ($max !== null && $max >= 1 && $perPage >= $max) { + return $max; + } + + return $perPage; + } + + return $default; + } +} diff --git a/routes/api.php b/routes/api.php index 889937e..e8357ae 100644 --- a/routes/api.php +++ b/routes/api.php @@ -17,3 +17,7 @@ use Illuminate\Support\Facades\Route; Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); }); + +Route::middleware('api')->group(function () { + Route::get('/ads', [App\Http\Controllers\Api\AdController::class, 'index']); +}); \ No newline at end of file