refactor: use the Config DTO to output the project

...name
This commit is contained in:
Oliver Davies 2023-04-25 14:56:45 +01:00
parent 3e1ced3aff
commit 33103417de
4 changed files with 20 additions and 9 deletions

View file

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace App\Action;
use App\DataTransferObject\Config;
use App\DataTransferObject\TemplateFile;
use App\Enum\Language;
use App\Enum\WebServer;
@ -11,7 +12,14 @@ use Illuminate\Support\Arr;
final class CreateListOfFilesToGenerate
{
public function handle(array $configurationData, \Closure $next) {
public function handle(array $configurationDataAndDto, \Closure $next) {
/**
* @var Config $configurationDataDto,
* @var array<string,mixed> $configurationData
*/
[$configurationData, $configurationDataDto] = $configurationDataAndDto;
/** @var Collection<int, TemplateFile> */
$filesToGenerate = collect([
new TemplateFile(data: 'common/.dockerignore', name: '.dockerignore'),
@ -93,7 +101,7 @@ final class CreateListOfFilesToGenerate
);
}
return $next([$configurationData, $filesToGenerate]);
return $next([$configurationData, $configurationDataDto, $filesToGenerate]);
}
private static function isCaddy(?string $webServer): bool

View file

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace App\Action;
use App\DataTransferObject\Config;
use App\DataTransferObject\TemplateFile;
use Illuminate\Support\Collection;
use Symfony\Component\Filesystem\Filesystem;
@ -22,9 +23,10 @@ final class GenerateConfigurationFiles
{
/**
* @var Collection<int,TemplateFile> $filesToGenerate
* @var Config $configurationDataDto,
* @var array<string,mixed> $configurationData
*/
[$configurationData, $filesToGenerate] = $filesToGenerateAndConfigurationData;
[$configurationData, $configurationDataDto, $filesToGenerate] = $filesToGenerateAndConfigurationData;
$filesToGenerate->each(function(TemplateFile $templateFile) use ($configurationData): void {
if ($templateFile->path !== null) {
@ -53,6 +55,6 @@ final class GenerateConfigurationFiles
$this->filesystem->chmod("{$outputDir}/.githooks/pre-push", 0755);
}
return $next([$configurationData, $filesToGenerate]);
return $next([$configurationDataDto, $filesToGenerate]);
}
}

View file

@ -17,15 +17,16 @@ final class ValidateConfigurationData
// Convert the input to a configuration data object.
$normalizer = new ObjectNormalizer(null, new CamelCaseToSnakeCaseNameConverter());
$serializer = new Serializer([$normalizer], [new JsonEncoder()]);
$configurationDataObject = $serializer->deserialize(json_encode($configurationData), Config::class, 'json');
$configurationDataDto = $serializer->deserialize(json_encode($configurationData), Config::class, 'json');
$validator = Validation::createValidatorBuilder()->enableAnnotationMapping()->getValidator();
$violations = $validator->validate($configurationDataObject);
$violations = $validator->validate($configurationDataDto);
if (0 < $violations->count()) {
throw new \RuntimeException('Configuration is invalid.');
}
return $next($configurationData);
return $next([$configurationData, $configurationDataDto]);
}
}

View file

@ -76,14 +76,14 @@ class GenerateCommand extends Command
/**
* @var Collection<int,TemplateFile> $generatedFiles
* @var array<string,mixed> $configurationData
* @var Config $configurationData
*/
[$configurationData, $generatedFiles] = (new Pipeline())
->send($configFile)
->through($pipelines)
->thenReturn();
$io->info("Building configuration for {$configurationData['name']}.");
$io->info("Building configuration for {$configurationData->name}.");
$io->write('Generated files:');
$io->listing(static::getListOfFiles(filesToGenerate: $generatedFiles)->toArray());