Skip to content

Commit 7e8bfc6

Browse files
authored
refactor(database)!: remove ModelDefinition in favor or ModelInspector (#1372)
1 parent 95b660b commit 7e8bfc6

25 files changed

+69
-180
lines changed

packages/database/src/Builder/FieldDefinition.php

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
use function Tempest\get;
1313

14-
// TODO: remove
1514
final class FieldDefinition implements Stringable
1615
{
1716
public function __construct(
@@ -20,42 +19,6 @@ public function __construct(
2019
public ?string $as = null,
2120
) {}
2221

23-
/** @return ImmutableArray<\Tempest\Database\Builder\FieldDefinition> */
24-
public static function all(ClassReflector $class, ?TableDefinition $tableDefinition = null): ImmutableArray
25-
{
26-
$casterFactory = get(CasterFactory::class);
27-
$fieldDefinitions = [];
28-
$tableDefinition ??= new ModelDefinition($class->getName())->getTableDefinition();
29-
30-
foreach ($class->getPublicProperties() as $property) {
31-
// Don't include the field if it's a 1:1 or n:1 relation
32-
if ($property->getType()->isRelation()) {
33-
continue;
34-
}
35-
36-
// Don't include the field if it's a 1:n relation
37-
if ($property->getIterableType()?->isRelation()) {
38-
continue;
39-
}
40-
41-
$caster = $casterFactory->forProperty($property);
42-
43-
if ($caster !== null) {
44-
$fieldDefinitions[] = new FieldDefinition($tableDefinition, $property->getName());
45-
46-
continue;
47-
}
48-
49-
if (! $property->getType()->isBuiltIn()) {
50-
continue;
51-
}
52-
53-
$fieldDefinitions[] = new FieldDefinition($tableDefinition, $property->getName());
54-
}
55-
56-
return new ImmutableArray($fieldDefinitions);
57-
}
58-
5922
public function as(string $as): self
6023
{
6124
$this->as = $as;

packages/database/src/Builder/ModelDefinition.php

Lines changed: 0 additions & 64 deletions
This file was deleted.

packages/database/src/Builder/QueryBuilders/InsertQueryBuilder.php

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
namespace Tempest\Database\Builder\QueryBuilders;
44

55
use Closure;
6-
use Tempest\Database\Builder\ModelDefinition;
7-
use Tempest\Database\Builder\TableDefinition;
6+
use Tempest\Database\Builder\ModelInspector;
87
use Tempest\Database\Exceptions\HasManyRelationCouldNotBeInsterted;
98
use Tempest\Database\Exceptions\HasOneRelationCouldNotBeInserted;
109
use Tempest\Database\Id;
@@ -28,13 +27,16 @@ final class InsertQueryBuilder implements BuildsQuery
2827

2928
private array $bindings = [];
3029

30+
private ModelInspector $model;
31+
3132
public function __construct(
3233
/** @var class-string|string $model */
33-
private readonly string|object $model,
34+
string|object $model,
3435
private readonly array $rows,
3536
private readonly SerializerFactory $serializerFactory,
3637
) {
37-
$this->insert = new InsertStatement($this->resolveTableDefinition());
38+
$this->model = model($model);
39+
$this->insert = new InsertStatement($this->model->getTableDefinition());
3840
}
3941

4042
public function execute(mixed ...$bindings): Id
@@ -59,16 +61,14 @@ public function toSql(): string
5961

6062
public function build(mixed ...$bindings): Query
6163
{
62-
$definition = model($this->model);
63-
6464
foreach ($this->resolveData() as $data) {
6565
foreach ($data as $key => $value) {
66-
if ($definition->getHasMany($key)) {
67-
throw new HasManyRelationCouldNotBeInsterted($definition->getName(), $key);
66+
if ($this->model->getHasMany($key)) {
67+
throw new HasManyRelationCouldNotBeInsterted($this->model->getName(), $key);
6868
}
6969

70-
if ($definition->getHasOne($key)) {
71-
throw new HasOneRelationCouldNotBeInserted($definition->getName(), $key);
70+
if ($this->model->getHasOne($key)) {
71+
throw new HasOneRelationCouldNotBeInserted($this->model->getName(), $key);
7272
}
7373

7474
$bindings[] = $value;
@@ -158,15 +158,4 @@ private function resolveData(): array
158158

159159
return $entries;
160160
}
161-
162-
private function resolveTableDefinition(): TableDefinition
163-
{
164-
$modelDefinition = ModelDefinition::tryFrom($this->model);
165-
166-
if ($modelDefinition === null) {
167-
return new TableDefinition($this->model);
168-
}
169-
170-
return $modelDefinition->getTableDefinition();
171-
}
172161
}

packages/database/src/Builder/TableDefinition.php

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,13 @@
77
use Stringable;
88
use Tempest\Reflection\ClassReflector;
99

10-
// TODO: remove
1110
final readonly class TableDefinition implements Stringable
1211
{
1312
public function __construct(
1413
public string $name,
1514
public ?string $as = null,
1615
) {}
1716

18-
public static function for(ClassReflector $reflector, ?string $as = null): self
19-
{
20-
return new ModelDefinition($reflector->getName())
21-
->getTableDefinition()
22-
->as($as);
23-
}
24-
2517
public function as(?string $as = null): self
2618
{
2719
if ($as === null) {

packages/database/src/Migrations/MigrationManager.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
namespace Tempest\Database\Migrations;
66

77
use Tempest\Container\Container;
8-
use Tempest\Database\Builder\ModelDefinition;
98
use Tempest\Database\Config\DatabaseDialect;
109
use Tempest\Database\Database;
1110
use Tempest\Database\DatabaseMigration as MigrationInterface;
@@ -23,6 +22,7 @@
2322
use Tempest\Database\ShouldMigrate;
2423
use Throwable;
2524

25+
use function Tempest\Database\model;
2626
use function Tempest\Database\query;
2727
use function Tempest\event;
2828

@@ -80,7 +80,7 @@ public function down(): void
8080
}
8181

8282
event(new MigrationFailed(
83-
name: new ModelDefinition(Migration::class)->getTableDefinition()->name,
83+
name: model(Migration::class)->getTableDefinition()->name,
8484
exception: new TableWasNotFound(),
8585
));
8686

packages/database/src/QueryStatements/AlterTableStatement.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44

55
namespace Tempest\Database\QueryStatements;
66

7-
use Tempest\Database\Builder\ModelDefinition;
87
use Tempest\Database\Builder\TableDefinition;
98
use Tempest\Database\Config\DatabaseDialect;
109
use Tempest\Database\HasTrailingStatements;
1110
use Tempest\Database\QueryStatement;
1211
use Tempest\Support\Str\ImmutableString;
1312

13+
use function Tempest\Database\model;
1414
use function Tempest\Support\arr;
1515
use function Tempest\Support\str;
1616

@@ -26,7 +26,7 @@ public function __construct(
2626
/** @param class-string $modelClass */
2727
public static function forModel(string $modelClass): self
2828
{
29-
return new self(new ModelDefinition($modelClass)->getTableDefinition()->name);
29+
return new self(model($modelClass)->getTableDefinition()->name);
3030
}
3131

3232
public function add(QueryStatement $statement): self

packages/database/src/QueryStatements/CreateTableStatement.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
namespace Tempest\Database\QueryStatements;
66

77
use BackedEnum;
8-
use Tempest\Database\Builder\ModelDefinition;
98
use Tempest\Database\Builder\TableDefinition;
109
use Tempest\Database\Config\DatabaseDialect;
1110
use Tempest\Database\HasTrailingStatements;
@@ -14,6 +13,7 @@
1413
use Tempest\Support\Str\ImmutableString;
1514
use UnitEnum;
1615

16+
use function Tempest\Database\model;
1717
use function Tempest\Support\arr;
1818
use function Tempest\Support\str;
1919

@@ -29,7 +29,7 @@ public function __construct(
2929
/** @param class-string $modelClass */
3030
public static function forModel(string $modelClass): self
3131
{
32-
return new self(new ModelDefinition($modelClass)->getTableDefinition()->name);
32+
return new self(model($modelClass)->getTableDefinition()->name);
3333
}
3434

3535
public function primary(string $name = 'id'): self

packages/database/src/QueryStatements/DropTableStatement.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@
44

55
namespace Tempest\Database\QueryStatements;
66

7-
use Tempest\Database\Builder\ModelDefinition;
87
use Tempest\Database\Config\DatabaseDialect;
98
use Tempest\Database\HasLeadingStatements;
109
use Tempest\Database\QueryStatement;
1110

11+
use function Tempest\Database\model;
12+
1213
final class DropTableStatement implements QueryStatement, HasLeadingStatements
1314
{
1415
use CanExecuteStatement;
@@ -29,7 +30,7 @@ public function dropReference(string $foreign): self
2930
/** @param class-string $modelClass */
3031
public static function forModel(string $modelClass): self
3132
{
32-
return new self(new ModelDefinition($modelClass)->getTableDefinition()->name);
33+
return new self(model($modelClass)->getTableDefinition()->name);
3334
}
3435

3536
public function compile(DatabaseDialect $dialect): string

packages/generation/tests/Fixtures/CreateMigrationsTable.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44

55
namespace Tempest\Generation\Tests\Fixtures;
66

7-
use Tempest\Database\Builder\ModelDefinition;
87
use Tempest\Generation\Tests\Fixtures\Database\FakeCreateTableStatement;
98
use Tempest\Generation\Tests\Fixtures\Database\FakeMigration;
109
use Tempest\Generation\Tests\Fixtures\Database\FakeQueryStatement;
1110
use Tempest\Generation\Tests\Fixtures\Database\MigrationModel as Model;
1211

12+
use function Tempest\Database\model;
13+
1314
#[TestAttribute]
1415
final readonly class CreateMigrationsTable implements FakeMigration
1516
{
@@ -20,7 +21,7 @@ public function getName(): string
2021

2122
public function up(): FakeQueryStatement
2223
{
23-
return new FakeCreateTableStatement(new ModelDefinition(Model::class)->getTableDefinition()->name)
24+
return new FakeCreateTableStatement(model(Model::class)->getTableDefinition()->name)
2425
->primary()
2526
->text('name');
2627
}

packages/generation/tests/__snapshots__/ClassManipulatorTest__does_not_simplify_class_names_by_default__1.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ final readonly class CreateMigrationsTable implements FakeMigration
1515

1616
public function up(): FakeQueryStatement
1717
{
18-
return new Database\FakeCreateTableStatement(new \Tempest\Database\Builder\ModelDefinition(Database\MigrationModel::class)->getTableDefinition()->name)
18+
return new Database\FakeCreateTableStatement(\Tempest\Database\model(Database\MigrationModel::class)->getTableDefinition()->name)
1919
->primary()
2020
->text('name');
2121
}

0 commit comments

Comments
 (0)