|
12 | 12 | namespace BlitzPHP\Database\Config; |
13 | 13 |
|
14 | 14 | use BlitzPHP\Container\Services as BaseServices; |
15 | | -use BlitzPHP\Contracts\Database\ConnectionResolverInterface; |
16 | 15 | use BlitzPHP\Database\Builder\BaseBuilder; |
17 | 16 | use BlitzPHP\Database\Connection\BaseConnection; |
18 | | -use BlitzPHP\Database\Database; |
19 | | -use Dimtrovich\DbDumper\Exceptions\Exception as DumperException; |
| 17 | +use BlitzPHP\Database\DatabaseManager; |
20 | 18 | use Dimtrovich\DbDumper\Exporter; |
21 | 19 | use Dimtrovich\DbDumper\Importer; |
| 20 | +use InvalidArgumentException; |
22 | 21 |
|
| 22 | +/** |
| 23 | + * Services de base de données |
| 24 | + */ |
23 | 25 | class Services extends BaseServices |
24 | 26 | { |
25 | 27 | /** |
26 | | - * Query Builder |
| 28 | + * Instance du gestionnaire de base de données |
27 | 29 | */ |
28 | | - public static function builder(?string $group = null, bool $shared = true): BaseBuilder |
| 30 | + protected static ?DatabaseManager $manager = null; |
| 31 | + |
| 32 | + /** |
| 33 | + * Récupère le gestionnaire de base de données |
| 34 | + */ |
| 35 | + protected static function manager(): DatabaseManager |
29 | 36 | { |
30 | | - if (true === $shared && isset(static::$instances[BaseBuilder::class])) { |
31 | | - return static::$instances[BaseBuilder::class]; |
| 37 | + if (static::$manager === null) { |
| 38 | + static::$manager = new DatabaseManager(static::logger(), static::event()); |
32 | 39 | } |
33 | 40 |
|
34 | | - return static::$instances[BaseBuilder::class] = Database::builder(static::database($group)); |
| 41 | + return static::$manager; |
35 | 42 | } |
36 | 43 |
|
37 | 44 | /** |
38 | | - * Connexion a la base de données |
| 45 | + * Récupère une connexion à la base de données |
39 | 46 | */ |
40 | 47 | public static function database(?string $group = null, bool $shared = true): BaseConnection |
41 | 48 | { |
42 | | - /** @var ConnectionResolverInterface */ |
43 | | - $connectionResolver = static::container()->get(ConnectionResolverInterface::class); |
44 | | - [$group] = $connectionResolver->connectionInfo($group); |
| 49 | + $connection = static::manager()->connect($group, $shared); |
45 | 50 |
|
46 | | - if (true === $shared && isset(static::$instances[Database::class]) && static::$instances[Database::class]->group === $group) { |
47 | | - return static::$instances[Database::class]; |
| 51 | + if (!$connection instanceof BaseConnection) { |
| 52 | + throw new InvalidArgumentException('La connexion retournée n\'est pas une instance de BaseConnection'); |
48 | 53 | } |
49 | 54 |
|
50 | | - return static::$instances[Database::class] = $connectionResolver->connect($group); |
| 55 | + return $connection; |
51 | 56 | } |
52 | 57 |
|
53 | 58 | /** |
54 | | - * Systeme d'exportation de la base de donnees |
| 59 | + * Récupère un query builder |
55 | 60 | */ |
56 | | - public static function dbExporter(?BaseConnection $db = null, array $config = [], bool $shared = true): Exporter |
| 61 | + public static function builder(?string $group = null, bool $shared = true): BaseBuilder |
57 | 62 | { |
58 | | - if (true === $shared && isset(static::$instances[Exporter::class])) { |
59 | | - return static::$instances[Exporter::class]; |
| 63 | + $key = 'builder_' . ($group ?? 'default'); |
| 64 | + |
| 65 | + if ($shared && isset(static::$instances[$key])) { |
| 66 | + return static::$instances[$key]; |
| 67 | + } |
| 68 | + |
| 69 | + $builder = static::manager()->builder(static::database($group, $shared)); |
| 70 | + |
| 71 | + if ($shared) { |
| 72 | + static::$instances[$key] = $builder; |
60 | 73 | } |
61 | 74 |
|
62 | | - $db ??= self::database(); |
63 | | - $config ??= config('dump', []); |
| 75 | + return $builder; |
| 76 | + } |
64 | 77 |
|
65 | | - if (! $db->conn) { |
66 | | - $db->initialize(); |
| 78 | + /** |
| 79 | + * Récupère un exportateur de base de données |
| 80 | + */ |
| 81 | + public static function dbExporter(?BaseConnection $db = null, array $config = [], bool $shared = true): Exporter |
| 82 | + { |
| 83 | + if ($shared) { |
| 84 | + return static::sharedInstance('dbExporter', $db, $config); |
67 | 85 | } |
68 | 86 |
|
69 | | - if (! $db->isPdo()) { |
70 | | - throw new DumperException('Impossible de sauvegarder la base de données. Vous devez utiliser un pilote PDO', DumperException::PDO_EXCEPTION); |
| 87 | + $db ??= static::database(); |
| 88 | + $config = $config ?: (array) config('dump', []); |
| 89 | + |
| 90 | + // Initialiser la connexion si nécessaire |
| 91 | + $db->initialize(); |
| 92 | + |
| 93 | + $exporter = new Exporter($db->getDatabase(), $db->getConnection(), $config); |
| 94 | + |
| 95 | + if ($shared) { |
| 96 | + static::$instances[Exporter::class] = $exporter; |
71 | 97 | } |
72 | 98 |
|
73 | | - return static::$instances[Exporter::class] = new Exporter($db->database, $db->conn, $config); |
| 99 | + return $exporter; |
74 | 100 | } |
75 | 101 |
|
76 | 102 | /** |
77 | | - * Systeme d'importation de la base de donnees |
| 103 | + * Récupère un importateur de base de données |
78 | 104 | */ |
79 | 105 | public static function dbImporter(?BaseConnection $db = null, array $config = [], bool $shared = true): Importer |
80 | 106 | { |
81 | | - if (true === $shared && isset(static::$instances[Importer::class])) { |
82 | | - return static::$instances[Importer::class]; |
| 107 | + if ($shared) { |
| 108 | + return static::sharedInstance('dbImporter', $db, $config); |
83 | 109 | } |
84 | 110 |
|
85 | | - $db ??= self::database(); |
86 | | - $config ??= config('dump', []); |
| 111 | + $db ??= static::database(); |
| 112 | + $config = $config ?: (array) config('dump', []); |
87 | 113 |
|
88 | | - if (! $db->conn) { |
89 | | - $db->initialize(); |
90 | | - } |
| 114 | + // Initialiser la connexion si nécessaire |
| 115 | + $db->initialize(); |
| 116 | + |
| 117 | + $importer = new Importer($db->getDatabase(), $db->getConnection(), $config); |
91 | 118 |
|
92 | | - if (! $db->isPdo()) { |
93 | | - throw new DumperException('Impossible de restaurer la base de données. Vous devez utiliser un pilote PDO', DumperException::PDO_EXCEPTION); |
| 119 | + if ($shared) { |
| 120 | + static::$instances[Importer::class] = $importer; |
94 | 121 | } |
95 | 122 |
|
96 | | - return static::$instances[Importer::class] = new Importer($db->database, $db->conn, $config); |
| 123 | + return $importer; |
97 | 124 | } |
98 | 125 | } |
0 commit comments