Rename controller namespaces: drop V1 prefix, clarify roles

V1/Admin     -> Company       (company-scoped controllers)
V1/SuperAdmin -> Admin        (platform-wide admin controllers)
V1/Customer  -> CustomerPortal (customer-facing portal)
V1/Installation -> Setup      (installation wizard)
V1/PDF       -> Pdf           (consistent casing)
V1/Modules   -> Modules       (drop V1 prefix)
V1/Webhook   -> Webhook       (drop V1 prefix)

The V1 prefix served no purpose - API versioning is in the route prefix
(/api/v1/), not the controller namespace. "Admin" was misleading for
company-scoped controllers. "SuperAdmin" is now simply "Admin" for
platform administration.
This commit is contained in:
Darko Gjorgjijoski
2026-04-03 19:15:20 +02:00
parent 0aaf0419c3
commit 64c481e963
129 changed files with 236 additions and 236 deletions

View File

@@ -0,0 +1,28 @@
<?php
namespace App\Http\Controllers\Setup;
use App\Http\Controllers\Controller;
use App\Http\Requests\DomainEnvironmentRequest;
use App\Services\Installation\EnvironmentManager;
use Illuminate\Support\Facades\Artisan;
class AppDomainController extends Controller
{
public function __invoke(DomainEnvironmentRequest $request)
{
Artisan::call('optimize:clear');
$environmentManager = new EnvironmentManager;
$results = $environmentManager->saveDomainVariables($request);
if (in_array('error', $results)) {
return response()->json($results);
}
return response()->json([
'success' => true,
]);
}
}

View File

@@ -0,0 +1,87 @@
<?php
namespace App\Http\Controllers\Setup;
use App\Http\Controllers\Controller;
use App\Http\Requests\DatabaseEnvironmentRequest;
use App\Services\Installation\EnvironmentManager;
use App\Services\Installation\InstallUtils;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Artisan;
class DatabaseConfigurationController extends Controller
{
/**
* @var EnvironmentManager
*/
protected $EnvironmentManager;
public function __construct(EnvironmentManager $environmentManager)
{
$this->environmentManager = $environmentManager;
}
public function saveDatabaseEnvironment(DatabaseEnvironmentRequest $request)
{
Artisan::call('config:clear');
Artisan::call('cache:clear');
$results = $this->environmentManager->saveDatabaseVariables($request);
if (array_key_exists('success', $results)) {
// Automatically regenerating the key is disabled to prevent complications in the wizard process.
// This can cause issues with the CSRF token, resulting in "Token Mismatch" or "Invalid CSRF Token" errors.
// It is recommended that the user manually generates the key before running the wizard to ensure application security and stability.
// Artisan::call('key:generate --force');
Artisan::call('optimize:clear');
Artisan::call('config:clear');
Artisan::call('cache:clear');
Artisan::call('storage:link');
Artisan::call('migrate --seed --force');
// Set version.
InstallUtils::setCurrentVersion();
}
return response()->json($results);
}
public function getDatabaseEnvironment(Request $request)
{
$databaseData = [];
$connection = $request->connection ?? config('database.default');
switch ($connection) {
case 'sqlite':
$databaseData = [
'database_connection' => 'sqlite',
'database_name' => config('database.connections.sqlite.database', storage_path('database.sqlite')),
];
break;
case 'pgsql':
$databaseData = [
'database_connection' => 'pgsql',
'database_host' => '127.0.0.1',
'database_port' => 5432,
];
break;
case 'mysql':
$databaseData = [
'database_connection' => 'mysql',
'database_host' => '127.0.0.1',
'database_port' => 3306,
];
break;
}
return response()->json([
'config' => $databaseData,
'success' => true,
]);
}
}

View File

@@ -0,0 +1,39 @@
<?php
namespace App\Http\Controllers\Setup;
use App\Http\Controllers\Controller;
use App\Services\Installation\FilePermissionChecker;
use Illuminate\Http\JsonResponse;
class FilePermissionsController extends Controller
{
/**
* @var PermissionsChecker
*/
protected $permissions;
/**
* @param PermissionsChecker $checker
*/
public function __construct(FilePermissionChecker $checker)
{
$this->permissions = $checker;
}
/**
* Display the permissions check page.
*
* @return JsonResponse
*/
public function permissions()
{
$permissions = $this->permissions->check(
config('installer.permissions')
);
return response()->json([
'permissions' => $permissions,
]);
}
}

View File

@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Setup;
use App\Http\Controllers\Controller;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class FinishController extends Controller
{
/**
* Handle the incoming request.
*
* @return JsonResponse
*/
public function __invoke(Request $request)
{
return response()->json(['success' => true]);
}
}

View File

@@ -0,0 +1,21 @@
<?php
namespace App\Http\Controllers\Setup;
use App\Http\Controllers\Controller;
use Illuminate\Http\JsonResponse;
class LanguagesController extends Controller
{
/**
* Display the languages page.
*
* @return JsonResponse
*/
public function languages()
{
return response()->json([
'languages' => config('invoiceshelf.languages'),
]);
}
}

View File

@@ -0,0 +1,29 @@
<?php
namespace App\Http\Controllers\Setup;
use App\Http\Controllers\Controller;
use App\Models\User;
use Auth;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class LoginController extends Controller
{
/**
* Handle the incoming request.
*
* @return Response
*/
public function __invoke(Request $request)
{
$user = User::where('role', 'super admin')->first();
Auth::login($user);
return response()->json([
'success' => true,
'user' => $user,
'company' => $user->companies()->first(),
]);
}
}

View File

@@ -0,0 +1,58 @@
<?php
namespace App\Http\Controllers\Setup;
use App\Http\Controllers\Controller;
use App\Models\Setting;
use App\Services\Installation\InstallUtils;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class OnboardingWizardController extends Controller
{
/**
* Handle the incoming request.
*
* @return JsonResponse
*/
public function getStep(Request $request)
{
if (! InstallUtils::isDbCreated()) {
return response()->json([
'profile_complete' => 0,
'profile_language' => 'en',
]);
}
return response()->json([
'profile_complete' => Setting::getSetting('profile_complete'),
'profile_language' => Setting::getSetting('profile_language'),
]);
}
public function updateStep(Request $request)
{
$setting = Setting::getSetting('profile_complete');
if ($setting === 'COMPLETED') {
return response()->json([
'profile_complete' => $setting,
]);
}
Setting::setSetting('profile_complete', $request->profile_complete);
return response()->json([
'profile_complete' => Setting::getSetting('profile_complete'),
]);
}
public function saveLanguage(Request $request)
{
Setting::setSetting('profile_language', $request->profile_language);
return response()->json([
'profile_language' => Setting::getSetting('profile_language'),
]);
}
}

View File

@@ -0,0 +1,41 @@
<?php
namespace App\Http\Controllers\Setup;
use App\Http\Controllers\Controller;
use App\Services\Installation\RequirementsChecker;
use Illuminate\Http\JsonResponse;
class RequirementsController extends Controller
{
/**
* @var RequirementsChecker
*/
protected $requirements;
public function __construct(RequirementsChecker $checker)
{
$this->requirements = $checker;
}
/**
* Display the requirements page.
*
* @return JsonResponse
*/
public function requirements()
{
$phpSupportInfo = $this->requirements->checkPHPVersion(
config('installer.core.minPhpVersion')
);
$requirements = $this->requirements->check(
config('installer.requirements')
);
return response()->json([
'phpSupportInfo' => $phpSupportInfo,
'requirements' => $requirements,
]);
}
}