Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

V2 additional generation commands #214

Open
wants to merge 41 commits into
base: v2.x
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
8a94dd3
Added DataAttribute generation
AdamLenda Apr 19, 2021
8637f8a
update to re-use data attributes
AdamLenda Apr 19, 2021
c267ce3
Added command to generate empty data access objects. will add method …
AdamLenda Apr 19, 2021
50b0036
fixes for configuration and made all dto class members nullable so th…
AdamLenda Apr 19, 2021
a43e2ef
.gitignore changes
AdamLenda May 9, 2021
3e9feb5
merged in the data access, data attribute and data transprot collecti…
AdamLenda May 10, 2021
3bdd271
Merge branch 'v2.x' into v2-additional-generation-commands
AdamLenda May 10, 2021
662c2b0
Merge branch 'v2.x' into v2-additional-generation-commands
AdamLenda May 11, 2021
dd9802a
resolved merge issue
AdamLenda May 11, 2021
9ad42f8
Added DTO Property generation to allow DTOs to reference other DTOs
AdamLenda May 11, 2021
4154319
removed DTO debug comments
AdamLenda May 11, 2021
c8f45f1
Merge branch 'v2.x' into v2-additional-generation-commands
AdamLenda May 11, 2021
ae59d0e
Made DTO properties default to a nullable
AdamLenda May 11, 2021
4bae836
restored composer.json extra section
AdamLenda May 11, 2021
568dbe2
Merge branch 'v2.x' into v2-additional-generation-commands
AdamLenda May 11, 2021
ab863db
data map accessor generation
AdamLenda May 13, 2021
5e6e984
fixed issue with implement statements missing the leading '\' chareacter
AdamLenda May 13, 2021
842ffc4
added dependency for php-libs/value-states
AdamLenda May 13, 2021
f915a7a
Added constructor generation for data transport objects
AdamLenda May 13, 2021
03672ef
Added configuration value for including value tracking
AdamLenda May 13, 2021
7a9b334
made value tracking checks in mappings conditional
AdamLenda May 13, 2021
75e63b1
updated value tracking generation
AdamLenda May 13, 2021
91e1d2d
comment update
AdamLenda May 13, 2021
df90b37
fixed bug
AdamLenda May 13, 2021
bfb062a
updated blueprint processing to respect filters for tables and columns
AdamLenda May 18, 2021
4540dda
updates to dto generator
AdamLenda May 18, 2021
6215a65
removed dead test code
AdamLenda May 18, 2021
a050245
replaced usages of DataTransportGenerator with DataTransportObjectGen…
AdamLenda May 18, 2021
57cd44b
Fixed bug that caused duplicate assignments in data maps
AdamLenda May 18, 2021
5fe3ae1
updated dependencies on php-libs
AdamLenda May 19, 2021
7c2c128
updated index is-unique tracking
AdamLenda May 20, 2021
8469281
updated generator constructors to only require the root configuration…
AdamLenda May 20, 2021
1a4ff8e
updated formatter to format abstract methods
AdamLenda May 20, 2021
1e1ae85
added method to ensure the prefix of '\' is on a fully qualified name
AdamLenda May 20, 2021
3269a27
modified Statement Block and Statement Definition Collection and add…
AdamLenda May 20, 2021
388afe1
Added TryBlock Definition
AdamLenda May 20, 2021
eda16c6
Added Comment Block Statement Definition
AdamLenda May 20, 2021
64beb5f
updated Abstract Enum
AdamLenda May 20, 2021
bcfcd83
Added ModelGenerate::getClassAsVariableName()
AdamLenda May 20, 2021
b016a77
Updates to ModelDataMapGenerator to always generate accessor traits
AdamLenda May 20, 2021
a202671
DataAccess layer code generation for Fetch By <Unique Column>, Create…
AdamLenda May 20, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .idea/php-test-framework.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@
"illuminate/contracts": ">=5.1",
"illuminate/filesystem": ">=5.1",
"illuminate/console": ">=5.1",
"php-libs/observable": "^1.0"
"php-libs/observable": "^1.3",
"php-libs/value-states": "^1.3"
},
"require-dev": {
"fzaninotto/faker": "~1.4",
Expand Down
364 changes: 219 additions & 145 deletions composer.lock

Large diffs are not rendered by default.

47 changes: 42 additions & 5 deletions config/reliese.php
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
<?php

use Reliese\Analyser\Doctrine\MySqlDoctrineDatabaseAssistant;
use Reliese\Configuration\DatabaseAnalyserConfiguration;
use Reliese\Configuration\DatabaseBlueprintConfiguration;
use Reliese\Configuration\DataTransportGeneratorConfiguration;
use Reliese\Configuration\DataTransportObjectGeneratorConfiguration;
use Reliese\Configuration\ModelDataMapGeneratorConfiguration;
use Reliese\Configuration\DataAccessGeneratorConfiguration;
use Reliese\Configuration\DataAttributeGeneratorConfiguration;
use Reliese\Configuration\DataTransportCollectionGeneratorConfiguration;
use Reliese\Configuration\ModelGeneratorConfiguration;

/*
Expand Down Expand Up @@ -87,11 +89,11 @@
// except everything in schema
['schemas' => ['information_schema', 'performance_schema', 'mysql', 'sys']],
// except audit.log_.* tables
['schemas' => ['audit'], 'tables' => ['/^log_.*$/']],
//['schemas' => ['audit'], 'tables' => ['/^log_.*$/']],
// except any table that ends in migrations or matches 'phinx' on all schemas
['schemas' => [$all], 'tables' => ['/^.*migrations$/', 'phinx']],
// except soft delete columns on all tables for all schemas
['schemas' => [$all], 'tables' => [$all], 'columns' => ['deleted_on']]
//['schemas' => [$all], 'tables' => [$all], 'columns' => ['deleted_on']]
],
],
/*
Expand Down Expand Up @@ -527,24 +529,59 @@
],
],
// endregion Model Generator Config

// region Data Access Generator Config
DataAccessGeneratorConfiguration::class => [
'Path' => app_path().'/DataAccess/PrimaryDatabase',
'Namespace' => 'app\DataAccess\PrimaryDatabase',
//'ClassPrefix' => '',
'ClassSuffix' => 'DataAccess',
'ParentClassPrefix' => 'Abstract',
],
// endregion Data Access Generator Config

// region Data Attribute Generator Config
DataAttributeGeneratorConfiguration::class => [
'Path' => app_path().'/DataAttribute/PrimaryDatabase',
'Namespace' => 'App\DataAttribute\Objects',
'ClassPrefix' => 'With',
'ClassSuffix' => 'Trait',
'ParentClassPrefix' => 'Abstract',
],
// endregion Data Attribute Generator Config

// region Data Transport Generator Config
DataTransportGeneratorConfiguration::class => [

DataTransportObjectGeneratorConfiguration::class => [
'Path' => app_path().'/DataTransportObjects',
'Namespace' => 'App\DataTransportObjects',
'ClassSuffix' => 'Dto',
'ParentClassPrefix' => 'Abstract',
'UseValueStateTracking' => true,
'ObservableProperties' => [
'BeforeChange' => false,
'AfterChange' => false,
],
],
// endregion Data Transport Generator Config

// region Data Transport Collection Generator Config
DataTransportCollectionGeneratorConfiguration::class => [
'Path' => app_path().'/DataTransport/Collections',
'Namespace' => 'App\DataTransport\Collections',
'ClassSuffix' => 'Dto',
'ParentClassPrefix' => 'Abstract',
],
// endregion Data Transport Collection Generator Config

// region Data Map Generator Config
ModelDataMapGeneratorConfiguration::class => [
'Path' => app_path().'/DataMaps/PrimaryDatabase',
'Namespace' => 'App\DataMaps\PrimaryDatabase',
'ClassSuffix' => 'Map',
'ParentClassPrefix' => 'Abstract',
'AccessorTraitNamespace' => 'app\DataMapAccessors\PrimaryDatabase',
'AccessorTraitPath' => app_path().'/DataMapAccessors/PrimaryDatabase',
],
// endregion Data Map Generator Config
]
Expand Down
13 changes: 9 additions & 4 deletions src/Analyser/Doctrine/DoctrineDatabaseAnalyser.php
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public function analyseDatabase(DatabaseBlueprintConfiguration $databaseBlueprin
continue;
}

$schemaAnalyser = $this->getSchemaAnalyser($databaseBlueprint, $schemaName);
$schemaAnalyser = $this->getSchemaAnalyser($databaseBlueprint, $schemaName, $databaseBlueprintConfiguration);
$databaseBlueprint->addSchemaBlueprint(
// TODO: Add support for Views
$schemaAnalyser->analyseSchemaObjectStructures()
Expand All @@ -71,7 +71,7 @@ public function analyseDatabase(DatabaseBlueprintConfiguration $databaseBlueprin
* Analyse foreign key constraint relationships which could potentially span schemas
*/
foreach ($schemaNames as $schemaName) {
$schemaAnalyser = $this->getSchemaAnalyser($databaseBlueprint, $schemaName);
$schemaAnalyser = $this->getSchemaAnalyser($databaseBlueprint, $schemaName, $databaseBlueprintConfiguration);

foreach ($schemaAnalyser->getTableDefinitions() as $tableName => $doctrineTableDefinition) {

Expand Down Expand Up @@ -164,7 +164,11 @@ protected function getSchemaNames(): array
*
* @return DoctrineSchemaAnalyser
*/
protected function getSchemaAnalyser(DatabaseBlueprint $databaseBlueprint, string $schemaName): DoctrineSchemaAnalyser
protected function getSchemaAnalyser(
DatabaseBlueprint $databaseBlueprint,
string $schemaName,
DatabaseBlueprintConfiguration $databaseBlueprintConfiguration
): DoctrineSchemaAnalyser
{
if (array_key_exists($schemaName, $this->schemaAnalysers)) {
return $this->schemaAnalysers[$schemaName];
Expand All @@ -178,7 +182,8 @@ protected function getSchemaAnalyser(DatabaseBlueprint $databaseBlueprint, strin
$databaseBlueprint,
$this,
$schemaSpecificConnection,
$schemaSpecificDoctrineSchemaManager
$schemaSpecificDoctrineSchemaManager,
$databaseBlueprintConfiguration
);
}
}
28 changes: 26 additions & 2 deletions src/Analyser/Doctrine/DoctrineSchemaAnalyser.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
use Reliese\Blueprint\IndexBlueprint;
use Reliese\Blueprint\SchemaBlueprint;
use Reliese\Blueprint\TableBlueprint;
use Reliese\Configuration\DatabaseBlueprintConfiguration;

/**
* Class DoctrineSchemaAnalyser
Expand All @@ -27,6 +28,11 @@ class DoctrineSchemaAnalyser
*/
private DatabaseBlueprint $databaseBlueprint;

/**
* @var DatabaseBlueprintConfiguration
*/
private DatabaseBlueprintConfiguration $databaseBlueprintConfiguration;

/**
* @var DoctrineDatabaseAnalyser
*/
Expand Down Expand Up @@ -66,14 +72,16 @@ public function __construct(
DatabaseBlueprint $databaseBlueprint,
DoctrineDatabaseAnalyser $doctrineDatabaseAnalyser,
ConnectionInterface $connection,
AbstractSchemaManager $doctrineSchemaManager
AbstractSchemaManager $doctrineSchemaManager,
DatabaseBlueprintConfiguration $databaseBlueprintConfiguration
)
{
$this->schemaName = $schemaName;
$this->databaseBlueprint = $databaseBlueprint;
$this->doctrineDatabaseAnalyser = $doctrineDatabaseAnalyser;
$this->schemaSpecificConnection = $connection;
$this->doctrineSchemaManager = $doctrineSchemaManager;
$this->databaseBlueprintConfiguration = $databaseBlueprintConfiguration;
}

/**
Expand Down Expand Up @@ -110,6 +118,13 @@ public function analyseSchemaObjectStructures(): SchemaBlueprint
$tableDefinitions = $this->getDoctrineSchemaManager()->listTables();
if (!empty($tableDefinitions)) {
foreach ($tableDefinitions as $tableDefinition) {
$isExcluded = $this->databaseBlueprintConfiguration
->getSchemaFilter()
->isExcludedTable($this->getSchemaName(), $tableDefinition->getName())
;
if ($isExcluded) {
continue;
}
/*
* Keep for future use
*/
Expand Down Expand Up @@ -189,6 +204,15 @@ private function analyseTableColumns(Table $tableDefinition, TableBlueprint $tab
}

foreach ($columnDefinitions as $columnDefinition) {
$isExcluded = $this->databaseBlueprintConfiguration->getSchemaFilter()->isExcludedColumn(
$this->getSchemaName(),
$tableDefinition->getName(),
$columnDefinition->getName()
);
if ($isExcluded) {
continue;
}

$columnBlueprint = $this->analyseColumn($tableBlueprint, $columnDefinition);
$tableBlueprint->addColumnBlueprint($columnBlueprint);
}
Expand Down Expand Up @@ -258,7 +282,7 @@ private function analyseIndex(TableBlueprint $tableBlueprint, Index $indexDefini
$indexDefinition->getName(),
$columnBlueprints,
$indexDefinition->isPrimary(),
false
$indexDefinition->isUnique()
);
}

Expand Down
9 changes: 1 addition & 8 deletions src/Blueprint/ColumnOwnerInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
*
* @package Reliese\Blueprint
*/
interface ColumnOwnerInterface
interface ColumnOwnerInterface extends SchemaMemberInterface
{
/**
* @param ColumnBlueprint $columnBlueprint
Expand All @@ -30,11 +30,4 @@ public function getColumnBlueprints(): array;
* @return string[]
*/
public function getColumnNames(): array;

/**
* returns "Schema.[TableName |View Name]"
*
* @return string
*/
public function getUniqueName(): string;
}
24 changes: 24 additions & 0 deletions src/Blueprint/ForeignKeyBlueprint.php
Original file line number Diff line number Diff line change
Expand Up @@ -101,4 +101,28 @@ public function getReferencedTableBlueprint() : ColumnOwnerInterface
{
return $this->referencedTable;
}

/**
* @return ColumnBlueprint[]
*/
public function getReferencedColumns() : array
{
return $this->referencedColumns;
}

public function getFkColumnPairs():array
{
$columns = [];
$i = -1;
foreach ($this->referencingColumns as $referencingColumn) {
$i++;
$columns[$i][0] = $referencingColumn;
}
$i = -1;
foreach ($this->referencedColumns as $referencedColumn) {
$i++;
$columns[$i][1] = $referencedColumn;
}
return $columns;
}
}
11 changes: 11 additions & 0 deletions src/Blueprint/IndexBlueprint.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
class IndexBlueprint implements ColumnOwnerInterface
{
use ColumnOwnerTrait;
use SchemaMemberTrait;

/**
* @var string
Expand Down Expand Up @@ -79,4 +80,14 @@ public function isUnique(): bool
{
return $this->isUnique || $this->isPrimaryKey();
}

public function getSchemaMemberType(): SchemaMemberType
{
return SchemaMemberType::Index();
}

public function getName(): string
{
return $this->indexName;
}
}
5 changes: 5 additions & 0 deletions src/Blueprint/SchemaMemberInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@ interface SchemaMemberInterface
*/
public function getName(): string;

/**
* @return string
*/
public function getUniqueName(): string;

/**
* Returns an instance of SchemaMemberType
*
Expand Down
14 changes: 14 additions & 0 deletions src/Blueprint/SchemaMemberTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,18 @@ public function setName(string $name)
{
$this->name = $name;
}

/**
* @return string
*/
public function getUniqueName(): string
{
if (empty($this->getSchemaBlueprint()->getSchemaName())) {
return $this->getName();
}

return sprintf('%s.%s',
$this->getSchemaBlueprint()->getSchemaName(),
$this->getName());
}
}
Loading