user()?->isAdmin(), 403); return view('admin.cities.index', [ 'cities' => City::query()->orderBy('id')->get(), ]); } /** * Create a new city territory. */ public function store(Request $request): RedirectResponse { abort_unless($request->user()?->isAdmin(), 403); $data = $request->validate([ 'name' => ['required', 'string', 'max:120'], ]); City::create([ 'name' => $data['name'], 'slug' => Str::slug($data['name']).'-'.uniqid(), 'bounds_min_x' => -80, 'bounds_max_x' => 80, 'bounds_min_z' => -80, 'bounds_max_z' => 80, 'is_active' => false, 'expansions' => 0, ]); return redirect()->route('admin.cities.index') ->with('status', __('admin.cities.created')); } /** * Expand a city's territory by one grid step. */ public function expand(Request $request, City $city): RedirectResponse { abort_unless($request->user()?->isAdmin(), 403); if (! $city->expand()) { return redirect()->route('admin.cities.index') ->withErrors(['city' => __('admin.cities.max_expansions')]); } return redirect()->route('admin.cities.index') ->with('status', __('admin.cities.expanded')); } }