Files
douyin-card-message/serve/app/Http/Controllers/Api/MaterialController.php
T
2024-09-30 14:08:38 +08:00

91 lines
2.6 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\Enums\MaterialCategoryType;
use App\Enums\UserType;
use App\Http\Controllers\Controller;
use App\Models\Material;
use App\Models\MaterialCategory;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Ugly\Base\Traits\ApiResource;
class MaterialController extends Controller
{
use ApiResource;
// 列表
public function index(): JsonResponse
{
$query = Material::search(['name' => 'like', 'cate_id' => '='])
->when(
auth('api')->user()->type !== UserType::Admin,
function ($query) {
$query->where(function ($query) {
$query->where('user_id', auth('api')->user()->id)
->orWhereHas('cate', function ($query) {
$query->where('type', MaterialCategoryType::System->value);
});
});
}
)
->orderBy('user_id')
->orderByDesc('id');
return $this->paginate($query, fn ($item) => [
'id' => $item->id,
'name' => $item->name,
'path' => $item->path,
]);
}
// 新增
public function store(Request $request): JsonResponse
{
$request->validate([
'image' => 'required|image|max:3072',
]);
$image = $request->file('image');
$cate_id = MaterialCategory::query()
->where('type', MaterialCategoryType::Other)
->value('id');
$material = Material::query()->create([
'user_id' => $request->user('api')->id,
'name' => $image->getClientOriginalName(),
'path' => $image->store(date('Y/m/d')),
'cate_id' => $cate_id,
]);
return $this->success($material->only(['id', 'name', 'path']));
}
// 修改名称
public function update(Request $request, Material $material): JsonResponse
{
if ($material->user_id != $request->user('api')->id) {
return $this->failed('无权限');
}
$request->validate([
'name' => ['required', 'string', 'max:255'],
]);
$material->name = $request->input('name');
$material->save();
return $this->success($material->only(['id', 'name', 'path']));
}
// 删除
public function destroy(Material $material): JsonResponse
{
if ($material->user_id != auth('api')->user()->id) {
return $this->failed('无权限');
}
$material->delete();
return $this->success();
}
}