53 lines
1.5 KiB
PHP
53 lines
1.5 KiB
PHP
|
|
<?php
|
|||
|
|
|
|||
|
|
declare(strict_types=1);
|
|||
|
|
|
|||
|
|
namespace App\Http\Controllers\Api;
|
|||
|
|
|
|||
|
|
use App\Http\Controllers\Controller;
|
|||
|
|
use App\Models\Project;
|
|||
|
|
use App\Models\Tenant;
|
|||
|
|
use Illuminate\Http\JsonResponse;
|
|||
|
|
use Illuminate\Http\Request;
|
|||
|
|
use Illuminate\Support\Facades\DB;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Проекты tenant'а — для NewDealDialog dropdown'а и DealsView/Smart-filters.
|
|||
|
|
*
|
|||
|
|
* На MVP: tenant_id параметром. На prod: middleware('auth:sanctum')+'tenant'.
|
|||
|
|
*/
|
|||
|
|
class ProjectController extends Controller
|
|||
|
|
{
|
|||
|
|
/** GET /api/projects?tenant_id={id} */
|
|||
|
|
public function index(Request $request): JsonResponse
|
|||
|
|
{
|
|||
|
|
$tenantId = (int) $request->query('tenant_id', '0');
|
|||
|
|
if ($tenantId < 1) {
|
|||
|
|
return response()->json(['message' => 'Параметр tenant_id обязателен.'], 422);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$tenant = Tenant::find($tenantId);
|
|||
|
|
if ($tenant === null) {
|
|||
|
|
return response()->json(['message' => 'Тенант не найден.'], 404);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$projects = DB::transaction(function () use ($tenantId) {
|
|||
|
|
DB::statement('SET LOCAL app.current_tenant_id = '.$tenantId);
|
|||
|
|
|
|||
|
|
return Project::query()
|
|||
|
|
->where('is_active', true)
|
|||
|
|
->orderBy('name')
|
|||
|
|
->get(['id', 'name', 'tag', 'type']);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
return response()->json([
|
|||
|
|
'projects' => $projects->map(fn (Project $p) => [
|
|||
|
|
'id' => $p->id,
|
|||
|
|
'name' => $p->name,
|
|||
|
|
'tag' => $p->tag,
|
|||
|
|
'type' => $p->type,
|
|||
|
|
]),
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
}
|