Skip to content
Snippets Groups Projects
Commit b3f40019 authored by Daniel Kurowski's avatar Daniel Kurowski
Browse files

Scaffolding: added buildersForPgTable() as well

parent 1123c386
No related branches found
No related tags found
1 merge request!11Allow customizations on scaffolded objects
<?php declare(strict_types = 1);
namespace Grifart\Tables\Scaffolding;
use Grifart\ClassScaffolder\Definition\ClassDefinition;
use Grifart\ClassScaffolder\Definition\ClassDefinitionBuilder;
final class Builders
{
private function __construct(
private ClassDefinitionBuilder $rowClass,
private ClassDefinitionBuilder $modificationsClass,
private ClassDefinitionBuilder $tableClass,
) {}
public static function from(
ClassDefinitionBuilder $rowClass,
ClassDefinitionBuilder $modificationsClass,
ClassDefinitionBuilder $tableClass,
): self
{
return new self(
$rowClass,
$modificationsClass,
$tableClass,
);
}
public function row(): ClassDefinitionBuilder
{
return $this->rowClass;
}
public function modifications(): ClassDefinitionBuilder
{
return $this->modificationsClass;
}
public function table(): ClassDefinitionBuilder
{
return $this->tableClass;
}
/**
* @return ClassDefinition[]
*/
public function buildAll(): array
{
return [
$this->rowClass->build(),
$this->modificationsClass->build(),
$this->tableClass->build(),
];
}
}
...@@ -16,10 +16,12 @@ use function Grifart\ClassScaffolder\Definition\Types\resolve; ...@@ -16,10 +16,12 @@ use function Grifart\ClassScaffolder\Definition\Types\resolve;
final class Scaffolding final class Scaffolding
{ {
private static function location(string $schema, string $table, string $column): string { private static function location(string $schema, string $table, string $column): string
{
return "$schema.$table.$column"; return "$schema.$table.$column";
} }
/** /**
* @return ClassDefinition[] * @return ClassDefinition[]
*/ */
...@@ -32,8 +34,32 @@ final class Scaffolding ...@@ -32,8 +34,32 @@ final class Scaffolding
string $modificationClass, string $modificationClass,
string $tableClass, string $tableClass,
string $primaryKeyClass string $primaryKeyClass
): array { ): array
{
return self::buildersForPgTable(
$pgReflector,
$mapper,
$schema,
$table,
$rowClass,
$modificationClass,
$tableClass,
$primaryKeyClass,
)->buildAll();
}
public static function buildersForPgTable(
PostgresReflector $pgReflector,
TypeMapper $mapper,
string $schema,
string $table,
string $rowClass,
string $modificationClass,
string $tableClass,
string $primaryKeyClass
): Builders
{
$columnsNativeTypes = $pgReflector->retrieveColumnInfo($schema, $table); $columnsNativeTypes = $pgReflector->retrieveColumnInfo($schema, $table);
if (\count($columnsNativeTypes) === 0) { if (\count($columnsNativeTypes) === 0) {
throw new \LogicException('No columns found for given configuration. Does referenced table exist?'); throw new \LogicException('No columns found for given configuration. Does referenced table exist?');
...@@ -56,36 +82,33 @@ final class Scaffolding ...@@ -56,36 +82,33 @@ final class Scaffolding
return $builder; return $builder;
}; };
return [
// row class // row class
$addTableFields(new ClassDefinitionBuilder($rowClass)) $row = $addTableFields(new ClassDefinitionBuilder($rowClass))
->implement(Row::class) ->implement(Row::class)
->decorate(new PropertiesDecorator()) ->decorate(new PropertiesDecorator())
->decorate(new InitializingConstructorDecorator()) ->decorate(new InitializingConstructorDecorator())
->decorate(new GettersDecorator()) ->decorate(new GettersDecorator())
->decorate(new PrivateConstructorDecorator()) ->decorate(new PrivateConstructorDecorator())
->decorate(new ReconstituteConstructorDecorator()) ->decorate(new ReconstituteConstructorDecorator());
->build(),
// row modification class
// row modification class $modifications = $addTableFields(new ClassDefinitionBuilder($modificationClass))
$addTableFields(new ClassDefinitionBuilder($modificationClass)) ->decorate(new ModificationsDecorator($tableClass, $primaryKeyClass));
->decorate(new ModificationsDecorator($tableClass, $primaryKeyClass))
->build(), // table class
$table = (new ClassDefinitionBuilder($tableClass))
// table class ->decorate(new TableDecorator(
(new ClassDefinitionBuilder($tableClass)) $schema,
->decorate(new TableDecorator( $table,
$schema, $primaryKeyClass,
$table, $rowClass,
$primaryKeyClass, $modificationClass,
$rowClass, $columnsNativeTypes,
$modificationClass, $columnsPhpTypes,
$columnsNativeTypes, ));
$columnsPhpTypes,
)) return Builders::from($row, $modifications, $table);
->build(),
];
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment