Skip to content

Commit 86ed572

Browse files
committed
feat(migration) : amélioration des fonctionnalités de la commande migration et amélioration de la gestion des erreurs
- Mise à jour du générateur de migration afin de mieux analyser les noms de migration et déterminer les actions (créer/modifier/supprimer). - Amélioration de la gestion des erreurs pour les actions de migration ambiguës et les noms de table manquants. - Ajout de nouvelles méthodes pour analyser les noms de migration, nettoyer les noms de table et extraire les informations pertinentes. - Amélioration du modèle de migration pour prendre en charge les classes anonymes et amélioration de la structure des méthodes de migration. - Introduction de nouvelles commandes : `Reset` et `Refresh` pour gérer plus efficacement les migrations. - Mise à jour des commandes `Migrate` et `Rollback` pour fournir un meilleur retour d'information et de meilleures statistiques pendant l'exécution. - Suppression de la classe Helper et intégration directe de ses fonctionnalités dans les commandes de migration. - Amélioration des rapports d'état pour les migrations, y compris des résultats détaillés pour les migrations exécutées et en attente.
1 parent 864c36d commit 86ed572

10 files changed

Lines changed: 748 additions & 341 deletions

File tree

src/Commands/DatabaseCommand.php

Lines changed: 37 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -11,58 +11,65 @@
1111

1212
namespace BlitzPHP\Database\Commands;
1313

14+
use BlitzPHP\Autoloader\Autoloader;
1415
use BlitzPHP\Cli\Console\Command;
15-
use BlitzPHP\Cli\Console\Console;
16+
use BlitzPHP\Contracts\Autoloader\LocatorInterface;
17+
use BlitzPHP\Contracts\Container\ContainerInterface;
1618
use BlitzPHP\Contracts\Database\ConnectionResolverInterface;
1719
use BlitzPHP\Database\Connection\BaseConnection;
18-
use Psr\Log\LoggerInterface;
19-
use RuntimeException;
20+
use BlitzPHP\Database\DatabaseManager;
21+
use BlitzPHP\Database\Migration\Runner;
2022

21-
/**
22-
* @property BaseConnection $db
23-
*/
2423
abstract class DatabaseCommand extends Command
2524
{
2625
/**
2726
* {@inheritDoc}
2827
*/
2928
protected string $group = 'Base de données';
3029

31-
/**
32-
* {@inheritDoc}
33-
*/
34-
protected string $service = 'Service de gestion de base de données';
35-
36-
private ?BaseConnection $_db = null;
30+
protected ConnectionResolverInterface $resolver;
3731

38-
public function __construct(protected ConnectionResolverInterface $resolver)
32+
public function __construct(protected ContainerInterface $container)
3933
{
34+
$this->resolver = $container->get(ConnectionResolverInterface::class);
4035
}
4136

42-
public function __get($name)
37+
protected function db(array|string|null $group = null, bool $shared = true): BaseConnection
4338
{
44-
if (method_exists($this, $name)) {
45-
return call_user_func([$this, $name]);
46-
}
47-
48-
return parent::__get($name);
39+
return $this->resolver->connect($group, $shared);
4940
}
5041

51-
public function __set($name, $value)
42+
/**
43+
* Recupere les informations a utiliser pour la connexion a la base de données
44+
*
45+
* @return array [group, configuration]
46+
*/
47+
public function connectionInfo(array|string|null $group = null): array
5248
{
53-
if (property_exists($this, $name = '_' . $name)) {
54-
$this->{$name} = $value;
55-
} else {
56-
throw new RuntimeException();
57-
}
49+
return $this->resolver->connectionInfo($group);
5850
}
5951

60-
protected function db(): BaseConnection
52+
/**
53+
* Recupere une instance de l'executeur de migration
54+
*/
55+
public function runner(string $namespace, ?string $group = null): Runner
6156
{
62-
if (null === $this->_db) {
63-
$this->_db = $this->resolver->connection();
64-
}
57+
$namespaces = match($namespace) {
58+
'ALL' => array_keys($this->container->get(Autoloader::class)->getNamespace()),
59+
default => [$namespace],
60+
};
61+
62+
$locator = $this->container->get(LocatorInterface::class);
63+
$files = [];
6564

66-
return $this->_db;
65+
foreach ($namespaces as $namespace) {
66+
$files[$namespace] = $locator->listNamespaceFiles($namespace, '/Database/Migrations/');
67+
}
68+
69+
return new Runner(
70+
$this->container->get(DatabaseManager::class),
71+
$group,
72+
$files,
73+
);
6774
}
6875
}

0 commit comments

Comments
 (0)