53 خطوط
2.0 KiB
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);
|
|
}
|
|
}
|
|
}
|