From 0f26dfd8a0842663777988873ee6ce09d4805951 Mon Sep 17 00:00:00 2001 From: Wisp X Date: Sun, 20 Feb 2022 16:45:32 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E7=9B=B8=E5=86=8C=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Api/V1/AlbumController.php | 24 +++ .../Controllers/Api/V1/ImageController.php | 2 - app/Models/Album.php | 23 +++ resources/views/common/api.blade.php | 191 ++++++++++++++++++ routes/api.php | 2 + 5 files changed, 240 insertions(+), 2 deletions(-) create mode 100644 app/Http/Controllers/Api/V1/AlbumController.php diff --git a/app/Http/Controllers/Api/V1/AlbumController.php b/app/Http/Controllers/Api/V1/AlbumController.php new file mode 100644 index 00000000..c661b9eb --- /dev/null +++ b/app/Http/Controllers/Api/V1/AlbumController.php @@ -0,0 +1,24 @@ +albums()->filter($request)->paginate(40); + $albums->getCollection()->each(function (Album $album) { + $album->setVisible(['id', 'name', 'intro', 'image_num']); + }); + return $this->success('success', $albums); + } +} diff --git a/app/Http/Controllers/Api/V1/ImageController.php b/app/Http/Controllers/Api/V1/ImageController.php index e3ef5765..258dcb5f 100644 --- a/app/Http/Controllers/Api/V1/ImageController.php +++ b/app/Http/Controllers/Api/V1/ImageController.php @@ -2,14 +2,12 @@ namespace App\Http\Controllers\Api\V1; -use App\Enums\ImagePermission; use App\Exceptions\UploadException; use App\Http\Controllers\Controller; use App\Models\Image; use App\Models\User; use App\Services\ImageService; use Illuminate\Auth\AuthenticationException; -use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\Auth; diff --git a/app/Models/Album.php b/app/Models/Album.php index 316229fd..b31ea896 100644 --- a/app/Models/Album.php +++ b/app/Models/Album.php @@ -2,11 +2,13 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; +use Illuminate\Http\Request; /** * @property int $id @@ -35,6 +37,27 @@ class Album extends Model 'intro' => '', ]; + public function scopeFilter(Builder $builder, Request $request) + { + return $builder->when($request->query('order') ?: 'newest', function (Builder $builder, $order) { + switch ($order) { + case 'earliest': + $builder->orderBy('created_at'); + break; + case 'most': + $builder->orderByDesc('image_num'); + break; + case 'least': + $builder->orderBy('image_num'); + break; + default: + $builder->latest(); + } + })->when($request->query('keyword'), function (Builder $builder, $keyword) { + $builder->whereRaw("concat(name,intro) like ?", ["%{$keyword}%"]); + }); + } + public function user(): BelongsTo { return $this->belongsTo(User::class, 'user_id', 'id'); diff --git a/resources/views/common/api.blade.php b/resources/views/common/api.blade.php index 48b465c8..14f25485 100644 --- a/resources/views/common/api.blade.php +++ b/resources/views/common/api.blade.php @@ -582,6 +582,197 @@ + +

相册相关

+
+
+

相册列表

+ GET /albums + +
+

请求参数(Query)

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ 字段 + + 类型 + + 说明 +
pageInteger页码
orderString排序方式,newest=最新,earliest=最早,most=图片最多,least=图片最少
keywordString筛选关键字
+
+ +
+

返回参数

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ 字段 + + 类型 + + 说明 +
statusBoolean状态,true 或 false
messageString描述信息
dataObject数据
current_pageInteger当前所在页页码
last_pageInteger最后一页页码
per_pageInteger每页展示数据数量
totalInteger图片总数量
dataObject[]相册列表
idInteger相册自增ID
nameString相册名称
introString相册简介
image_numInteger相册图片数量
+
+
+
+

删除图片

+ DELETE /images/:key + +
+

请求参数(Params)

+ + + + + + + + + + + + + + + +
+ 字段 + + 类型 + + 说明 +
keyString图片密钥
+
+ +
+

返回参数

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ 字段 + + 类型 + + 说明 +
statusBoolean状态,true 或 false
messageString描述信息
dataObject数据
+
+
+
@push('scripts') diff --git a/routes/api.php b/routes/api.php index 58f5962b..a18ebf61 100644 --- a/routes/api.php +++ b/routes/api.php @@ -2,6 +2,7 @@ use Illuminate\Support\Facades\Route; use App\Http\Controllers\Api\V1\ImageController; +use App\Http\Controllers\Api\V1\AlbumController; use App\Http\Controllers\Api\V1\TokenController; /* @@ -24,6 +25,7 @@ Route::group(['prefix' => 'v1'], function () { ], function () { Route::get('images', [ImageController::class, 'images']); Route::delete('images/{key}', [ImageController::class, 'destroy']); + Route::get('albums', [AlbumController::class, 'index']); Route::delete('tokens', [TokenController::class, 'clear']); }); });