Files
douyin-card-message/serve/app/Http/Controllers/Api/UploadController.php
T
2025-01-08 16:24:36 +08:00

125 lines
3.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 UploadController 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);
});
});
},
function ($query) {
$query->where('user_id', auth('api')->user()->id);
}
)
->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)
{
if ($request->isNotFilled('cate_id') && $request->hasFile('image')) {
$image = $request->file('image');
$name = $image->getClientOriginalName();
$path = $image->store(date('Y/m/d'));
return $this->success([
'path' => $path,
'name' => $name,
]);
}
$request->validate([
'image' => 'required',
'name' => 'required',
'cate_id' => 'required',
]);
$cate_id = $request->input('cate_id');
$user = auth('api')->user();
if (
$user->type != UserType::Admin &&
MaterialCategory::query()->where('id', $cate_id)->where('type', MaterialCategoryType::System)->exists()
) {
return $this->failed('没有权限');
}
$material = Material::query()->create([
'user_id' => $user->id,
'name' => $request->input('name'),
'path' => $request->input('image'),
'cate_id' => $cate_id,
]);
return $this->success($material->only(['id', 'name', 'path']));
}
public function upload(Request $request): JsonResponse
{
if ($request->hasFile('image')) {
$image = $request->file('image');
$path = $image->store(date('Y/m/d'));
return $this->success(['path' => $path]);
}
return $this->failed('上传失败!');
}
// 批量删除素材
public function destroy(Request $request): JsonResponse
{
$ids = $request->all();
if (count($ids) < 1) {
return $this->failed('请选择要删除的素材');
}
Material::query()
->whereIn('id', $ids)
->when(
auth('api')->user()->type !== UserType::Admin,
fn ($query) => $query->where('user_id', auth('api')->user()->id),
)
->delete();
return $this->success();
}
public function upload_file(Request $request): JsonResponse
{
$request->validate([
'file' => 'required|file|extensions:zip',
]);
$file = $request->file('file');
$path = $file->store('zip');
return $this->success([
'path' => $path,
]);
}
}