Add app command/search (#622)

This commit is contained in:
Saeed Vaziry
2025-06-22 22:58:05 +02:00
committed by GitHub
parent 5689e751af
commit dc7fa6b55c
12 changed files with 287 additions and 87 deletions

View File

@ -2,8 +2,10 @@
namespace App\Http\Controllers;
use Illuminate\Database\Query\Builder;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Spatie\RouteAttributes\Attributes\Get;
use Spatie\RouteAttributes\Attributes\Middleware;
use Spatie\RouteAttributes\Attributes\Prefix;
@ -21,8 +23,65 @@ public function search(Request $request): JsonResponse
$query = $request->input('query');
$projects = DB::table('projects')
->select(
DB::raw('projects.id as id'),
DB::raw('null as parent_id'),
DB::raw('projects.name as label'),
DB::raw('"project" as type')
)
->where(function (Builder $query) {
if (! user()->isAdmin()) {
$query
->join('user_project', 'projects.id', '=', 'user_project.project_id')
->where('user_project.user_id', user()->id);
}
})
->where('projects.name', 'like', "%{$query}%");
$servers = DB::table('servers')
->select(
DB::raw('servers.id as id'),
DB::raw('null as parent_id'),
DB::raw('servers.name as label'),
DB::raw('"server" as type')
)
->join('projects', 'servers.project_id', '=', 'projects.id')
->where(function (Builder $query) {
if (! user()->isAdmin()) {
$query
->join('user_project', 'projects.id', '=', 'user_project.project_id')
->where('user_project.user_id', user()->id);
}
})
->where('servers.name', 'like', "%{$query}%");
$sites = DB::table('sites')
->select(
DB::raw('sites.id as id'),
DB::raw('sites.server_id as parent_id'),
DB::raw('sites.domain as label'),
DB::raw('"site" as type')
)
->join('servers', 'sites.server_id', '=', 'servers.id')
->join('projects', 'servers.project_id', '=', 'projects.id')
->where(function (Builder $query) {
if (! user()->isAdmin()) {
$query
->join('user_project', 'projects.id', '=', 'user_project.project_id')
->where('user_project.user_id', user()->id);
}
})
->where('sites.domain', 'like', "%{$query}%");
// Combine with unionAll
$results = $projects
->unionAll($servers)
->unionAll($sites)
->get();
$results = [
'data' => [], // Replace with actual search results
'data' => $results, // Replace with actual search results
];
return response()->json($results);