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; namespace App\Action;
use App\DataTransferObject\Config;
use App\DataTransferObject\TemplateFile; use App\DataTransferObject\TemplateFile;
use App\Enum\Language; use App\Enum\Language;
use App\Enum\WebServer; use App\Enum\WebServer;
@ -11,7 +12,14 @@ use Illuminate\Support\Arr;
final class CreateListOfFilesToGenerate 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> */ /** @var Collection<int, TemplateFile> */
$filesToGenerate = collect([ $filesToGenerate = collect([
new TemplateFile(data: 'common/.dockerignore', name: '.dockerignore'), 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 private static function isCaddy(?string $webServer): bool

View file

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace App\Action; namespace App\Action;
use App\DataTransferObject\Config;
use App\DataTransferObject\TemplateFile; use App\DataTransferObject\TemplateFile;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Symfony\Component\Filesystem\Filesystem; use Symfony\Component\Filesystem\Filesystem;
@ -22,9 +23,10 @@ final class GenerateConfigurationFiles
{ {
/** /**
* @var Collection<int,TemplateFile> $filesToGenerate * @var Collection<int,TemplateFile> $filesToGenerate
* @var Config $configurationDataDto,
* @var array<string,mixed> $configurationData * @var array<string,mixed> $configurationData
*/ */
[$configurationData, $filesToGenerate] = $filesToGenerateAndConfigurationData; [$configurationData, $configurationDataDto, $filesToGenerate] = $filesToGenerateAndConfigurationData;
$filesToGenerate->each(function(TemplateFile $templateFile) use ($configurationData): void { $filesToGenerate->each(function(TemplateFile $templateFile) use ($configurationData): void {
if ($templateFile->path !== null) { if ($templateFile->path !== null) {
@ -53,6 +55,6 @@ final class GenerateConfigurationFiles
$this->filesystem->chmod("{$outputDir}/.githooks/pre-push", 0755); $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. // Convert the input to a configuration data object.
$normalizer = new ObjectNormalizer(null, new CamelCaseToSnakeCaseNameConverter()); $normalizer = new ObjectNormalizer(null, new CamelCaseToSnakeCaseNameConverter());
$serializer = new Serializer([$normalizer], [new JsonEncoder()]); $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(); $validator = Validation::createValidatorBuilder()->enableAnnotationMapping()->getValidator();
$violations = $validator->validate($configurationDataObject); $violations = $validator->validate($configurationDataDto);
if (0 < $violations->count()) { if (0 < $violations->count()) {
throw new \RuntimeException('Configuration is invalid.'); 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 Collection<int,TemplateFile> $generatedFiles
* @var array<string,mixed> $configurationData * @var Config $configurationData
*/ */
[$configurationData, $generatedFiles] = (new Pipeline()) [$configurationData, $generatedFiles] = (new Pipeline())
->send($configFile) ->send($configFile)
->through($pipelines) ->through($pipelines)
->thenReturn(); ->thenReturn();
$io->info("Building configuration for {$configurationData['name']}."); $io->info("Building configuration for {$configurationData->name}.");
$io->write('Generated files:'); $io->write('Generated files:');
$io->listing(static::getListOfFiles(filesToGenerate: $generatedFiles)->toArray()); $io->listing(static::getListOfFiles(filesToGenerate: $generatedFiles)->toArray());