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 @@ + +
相册相关
+相册列表
+请求参数(Query)
+| + 字段 + | ++ 类型 + | ++ 说明 + | +
|---|---|---|
| page | +Integer | +页码 | +
| order | +String | +排序方式,newest=最新,earliest=最早,most=图片最多,least=图片最少 | +
| keyword | +String | +筛选关键字 | +
返回参数
+| + 字段 + | ++ 类型 + | ++ 说明 + | +
|---|---|---|
| status | +Boolean | +状态,true 或 false | +
| message | +String | +描述信息 | +
| data | +Object | +数据 | +
| current_page | +Integer | +当前所在页页码 | +
| last_page | +Integer | +最后一页页码 | +
| per_page | +Integer | +每页展示数据数量 | +
| total | +Integer | +图片总数量 | +
| data | +Object[] | +相册列表 | +
| id | +Integer | +相册自增ID | +
| name | +String | +相册名称 | +
| intro | +String | +相册简介 | +
| image_num | +Integer | +相册图片数量 | +
删除图片
+请求参数(Params)
+| + 字段 + | ++ 类型 + | ++ 说明 + | +
|---|---|---|
| key | +String | +图片密钥 | +
返回参数
+| + 字段 + | ++ 类型 + | ++ 说明 + | +
|---|---|---|
| status | +Boolean | +状态,true 或 false | +
| message | +String | +描述信息 | +
| data | +Object | +数据 | +