Files
project-replica/app/Http/Controllers/TargetDatabaseController.php
2026-03-23 00:51:38 +09:00

98 lines
2.8 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\TargetDatabase;
use App\Services\DatabaseConnectionService;
use Illuminate\Http\Request;
use Inertia\Inertia;
class TargetDatabaseController extends Controller
{
public function __construct(
private DatabaseConnectionService $connectionService
) {}
public function index()
{
$databases = TargetDatabase::withCount('migrationSchedules')->get();
return Inertia::render('Databases/TargetDatabases', [
'databases' => $databases,
]);
}
public function create()
{
return Inertia::render('Databases/TargetDatabaseForm', [
'database' => null,
]);
}
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required|string|max:255',
'host' => 'required|string|max:255',
'port' => 'required|integer|between:1,65535',
'database' => 'required|string|max:255',
'username' => 'required|string|max:255',
'password' => 'required|string',
'driver' => 'nullable|string|max:50',
'description' => 'nullable|string',
]);
$validated['driver'] = $validated['driver'] ?? 'pgsql';
$database = TargetDatabase::create($validated);
return redirect()->route('databases.target.index')
->with('success', 'Target database created successfully.');
}
public function edit(TargetDatabase $database)
{
return Inertia::render('Databases/TargetDatabaseForm', [
'database' => $database,
]);
}
public function update(Request $request, TargetDatabase $database)
{
$validated = $request->validate([
'name' => 'required|string|max:255',
'host' => 'required|string|max:255',
'port' => 'required|integer|between:1,65535',
'database' => 'required|string|max:255',
'username' => 'required|string|max:255',
'password' => 'nullable|string',
'driver' => 'nullable|string|max:50',
'description' => 'nullable|string',
]);
if (empty($validated['password'])) {
unset($validated['password']);
}
$database->update($validated);
return redirect()->route('databases.target.index')
->with('success', 'Target database updated successfully.');
}
public function destroy(TargetDatabase $database)
{
$database->delete();
return redirect()->route('databases.target.index')
->with('success', 'Target database deleted successfully.');
}
public function testConnection(TargetDatabase $database)
{
$result = $this->connectionService->testTargetConnection($database);
return response()->json($result);
}
}