PM_Console/backend/app/Http/Controllers/Api/SearchController.php

53 خطوط
2.0 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Http\Resources\ProjectResource;
use App\Http\Resources\TaskResource;
use App\Http\Resources\UserResource;
use App\Http\Resources\MeetingResource;
use App\Http\Resources\BacklogItemResource;
use App\Models\Project;
use App\Models\Task;
use App\Models\User;
use App\Models\Meeting;
use App\Models\BacklogItem;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class SearchController extends Controller
{
public function search(Request $request): JsonResponse
{
try {
$request->validate(['q' => 'required|string|min:2']);
$keyword = $request->q;
$limit = $request->input('limit', 5);
$projects = Project::where('title', 'like', "%{$keyword}%")->limit($limit)->get();
$tasks = Task::where('title', 'like', "%{$keyword}%")->limit($limit)->get();
$users = User::where('name', 'like', "%{$keyword}%")->orWhere('email', 'like', "%{$keyword}%")->limit($limit)->get();
$meetings = Meeting::where('title', 'like', "%{$keyword}%")->limit($limit)->get();
$backlogItems = BacklogItem::where('title', 'like', "%{$keyword}%")->limit($limit)->get();
return response()->json([
'success' => true,
'data' => [
'projects' => ProjectResource::collection($projects),
'tasks' => TaskResource::collection($tasks),
'users' => UserResource::collection($users),
'meetings' => MeetingResource::collection($meetings),
'backlog_items' => BacklogItemResource::collection($backlogItems),
],
'message' => 'نتایج جستجو',
]);
} catch (\Exception $e) {
return response()->json([
'success' => false,
'message' => 'خطا در جستجو',
], 500);
}
}
}