oportunidades 5
tests / ci (push) Canceled after 0s

This commit is contained in:
2026-10-10 14:15:28 +02:00
parent 6ddafc95ba
commit 01405cbf8a
144 changed files with 28903 additions and 1103 deletions
@@ -2,11 +2,14 @@
namespace App\Http\Controllers;
use App\Models\Opportunity;
use App\Services\InvestmentZones;
use App\Services\PortalProfileAccess;
use App\Services\TerritoryGeometry;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
use Illuminate\Validation\ValidationException;
class InvestmentTerritoryController extends Controller
@@ -14,9 +17,11 @@ class InvestmentTerritoryController extends Controller
public function geometries(Request $request): JsonResponse
{
$data = $request->validate(['territory_id' => ['required', 'uuid']]);
$management = $request->is('management/*');
$profile = $request->is('minhas-oportunidades/*');
$management = $request->is('management/*') || $profile;
if ($management) {
abort_unless($request->user()?->can('manage-portal'), 403);
$access = app(PortalProfileAccess::class);
abort_unless($profile ? ($access->grants($request->user()) !== [] || $access->superuser($request->user())) : $request->user()?->can('manage-portal'), 403);
}
return response()->json(app(TerritoryGeometry::class)->context($data['territory_id'], $management));
@@ -29,6 +34,9 @@ class InvestmentTerritoryController extends Controller
$data = $request->validate(['kind' => ['required', 'in:'.implode(',', array_keys(self::TABLES))], 'q' => ['nullable', 'string', 'max:100'], 'page' => ['nullable', 'integer', 'min:1']]);
$column = $data['kind'] === 'opportunities' ? 'title' : 'name';
$query = DB::table(self::TABLES[$data['kind']])->whereNull('deleted_at');
if ($data['kind'] === 'opportunities' && Schema::hasColumn('opportunities', 'owner_user_id')) {
$query->whereIn('id', app(PortalProfileAccess::class)->scope(Opportunity::query(), $request->user())->select('id'));
}
if (! empty($data['q'])) {
$query->whereRaw($column.' ILIKE ?', ['%'.addcslashes($data['q'], '%_\\').'%']);
}
@@ -38,6 +46,10 @@ class InvestmentTerritoryController extends Controller
public function options(Request $request): JsonResponse
{
if ($request->is('minhas-oportunidades/*')) {
$access = app(PortalProfileAccess::class);
abort_unless($access->grants($request->user()) !== [] || $access->superuser($request->user()), 403);
}
$data = $request->validate(['type' => ['required', 'in:province,district,admin_post,locality'], 'parent_id' => ['nullable', 'uuid'], 'q' => ['nullable', 'string', 'max:100'], 'page' => ['nullable', 'integer', 'min:1']]);
$query = DB::table('geo_locations')->whereNull('deleted_at')->where('location_type', $data['type'])
->whereIn('data_classification', ['public', 'internal']);