fix: DockerSecretsResolver - don't normalize absolute paths like /var/www/html/...
Some checks failed
Deploy Application / deploy (push) Has been cancelled
Some checks failed
Deploy Application / deploy (push) Has been cancelled
This commit is contained in:
74
src/Framework/Database/Seed/SeedRunner.php
Normal file
74
src/Framework/Database/Seed/SeedRunner.php
Normal file
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Framework\Database\Seed;
|
||||
|
||||
use App\Framework\Logging\Logger;
|
||||
|
||||
final readonly class SeedRunner
|
||||
{
|
||||
public function __construct(
|
||||
private SeedRepository $seedRepository,
|
||||
private ?Logger $logger = null
|
||||
) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Run a seeder if it hasn't been executed yet
|
||||
*
|
||||
* @param Seeder $seeder The seeder to run
|
||||
* @throws \Throwable If the seeder fails
|
||||
*/
|
||||
public function run(Seeder $seeder): void
|
||||
{
|
||||
$name = $seeder->getName();
|
||||
|
||||
// Check if already executed
|
||||
if ($this->seedRepository->hasRun($name)) {
|
||||
$this->log("Skipping seeder '{$name}' - already executed", 'info');
|
||||
return;
|
||||
}
|
||||
|
||||
$this->log("Running seeder '{$name}'...", 'info');
|
||||
|
||||
try {
|
||||
$seeder->seed();
|
||||
$this->seedRepository->markAsRun($name, $seeder->getDescription());
|
||||
$this->log("Seeder '{$name}' completed successfully", 'info');
|
||||
} catch (\Throwable $e) {
|
||||
$this->log("Seeder '{$name}' failed: {$e->getMessage()}", 'error');
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Run multiple seeders
|
||||
*
|
||||
* @param Seeder[] $seeders Array of seeders to run
|
||||
*/
|
||||
public function runAll(array $seeders): void
|
||||
{
|
||||
foreach ($seeders as $seeder) {
|
||||
$this->run($seeder);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Log a message if logger is available
|
||||
*/
|
||||
private function log(string $message, string $level = 'info'): void
|
||||
{
|
||||
if ($this->logger !== null) {
|
||||
match ($level) {
|
||||
'error' => $this->logger->error($message),
|
||||
'warning' => $this->logger->warning($message),
|
||||
default => $this->logger->info($message),
|
||||
};
|
||||
} else {
|
||||
// Fallback to echo if no logger available
|
||||
echo "[{$level}] {$message}\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user