191 lines
7.1 KiB
PHP
191 lines
7.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Database\ArcadiaReplicate;
|
|
|
|
use Database\ArcadiaReplicate\Tables\Metap\MetaUtilTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\AdditifTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\ArticleAssoProduitsTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\ArticleRefTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\ArtRayonTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\AssoCommunesCpTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\AssoIncoZoneVersioCcialTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\AssoIncoZoneVersioMktTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\AssoIncoZoneVersioQualTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\CalibreOeufsTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\FamRgptTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\FamVenteTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\GroupementQualTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\IncoAllegationsTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\IncoAllergeneTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\IncoAssoAllergeneTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\IncoAssoTraceTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\IncoBriqueGpcTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\IncoCompoTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\IncoDoaTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\IncoInterprofessionTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\IncoNeaTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\IncoOrigininfoTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\IncoSitProdTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\IncoSuiviEnvoiTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\IncoTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\IncoVersionTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\InseeCommunesTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\MarqueTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\MediaAssoArticleTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\MutTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\NdpTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\OrgCertifTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\PaletteIncoTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\RuPersonneSirhTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\ServiceConsoIncoTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\SiteProdGrpTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\SocieteInvTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\SousFamTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\TypeConditTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\TypeConservationTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\TypEmbTable;
|
|
use Database\ArcadiaReplicate\Tables\Refp\UtilisableTable;
|
|
use Database\ArcadiaReplicate\Views\Gcp\DunIncoInfView;
|
|
use Database\ArcadiaReplicate\Views\Gcp\IncoLangView;
|
|
use Database\ArcadiaReplicate\Views\Gcp\VIncoArtSiteView;
|
|
use Database\ArcadiaReplicate\Views\Refp\ArticleRefGencodView;
|
|
use Database\ArcadiaReplicate\Views\Refp\DunIncoNosocView;
|
|
use Database\ArcadiaReplicate\Views\Refp\DunIncoView;
|
|
use Database\ArcadiaReplicate\Views\Refp\EpurerFamVenteView;
|
|
use Database\ArcadiaReplicate\Views\Refp\IncoArticleView;
|
|
use Database\ArcadiaReplicate\Views\Refp\IncoCompoNutriscoreView;
|
|
use Database\ArcadiaReplicate\Views\Refp\IncoSocRefIncoView;
|
|
use Database\ArcadiaReplicate\Views\Refp\SitProdIncoView;
|
|
use Database\ArcadiaReplicate\Views\Refp\SocDlcIncoView;
|
|
use Database\ArcadiaReplicate\Views\Refp\VisuelExportGenfiView;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Schema;
|
|
|
|
final class Migrator
|
|
{
|
|
/** @var list<class-string<TableOrView>> */
|
|
public const DEFINITIONS = [
|
|
DunIncoInfView::class,
|
|
IncoLangView::class,
|
|
VIncoArtSiteView::class,
|
|
MetaUtilTable::class,
|
|
ArticleRefTable::class,
|
|
AssoIncoZoneVersioCcialTable::class,
|
|
AssoIncoZoneVersioMktTable::class,
|
|
AssoIncoZoneVersioQualTable::class,
|
|
IncoTable::class,
|
|
IncoCompoTable::class,
|
|
IncoOrigininfoTable::class,
|
|
IncoVersionTable::class,
|
|
RuPersonneSirhTable::class,
|
|
AdditifTable::class,
|
|
ArticleAssoProduitsTable::class,
|
|
ArticleRefGencodView::class,
|
|
ArtRayonTable::class,
|
|
AssoCommunesCpTable::class,
|
|
CalibreOeufsTable::class,
|
|
DunIncoView::class,
|
|
DunIncoNosocView::class,
|
|
EpurerFamVenteView::class,
|
|
FamRgptTable::class,
|
|
FamVenteTable::class,
|
|
GroupementQualTable::class,
|
|
IncoAllegationsTable::class,
|
|
IncoAllergeneTable::class,
|
|
IncoArticleView::class,
|
|
IncoAssoAllergeneTable::class,
|
|
IncoAssoTraceTable::class,
|
|
IncoBriqueGpcTable::class,
|
|
IncoCompoNutriscoreView::class,
|
|
IncoDoaTable::class,
|
|
IncoInterprofessionTable::class,
|
|
IncoNeaTable::class,
|
|
IncoSitProdTable::class,
|
|
IncoSocRefIncoView::class,
|
|
IncoSuiviEnvoiTable::class,
|
|
InseeCommunesTable::class,
|
|
MarqueTable::class,
|
|
MediaAssoArticleTable::class,
|
|
MutTable::class,
|
|
NdpTable::class,
|
|
OrgCertifTable::class,
|
|
PaletteIncoTable::class,
|
|
ServiceConsoIncoTable::class,
|
|
SiteProdGrpTable::class,
|
|
SitProdIncoView::class,
|
|
SocDlcIncoView::class,
|
|
SocieteInvTable::class,
|
|
SousFamTable::class,
|
|
TypeConditTable::class,
|
|
TypeConservationTable::class,
|
|
TypEmbTable::class,
|
|
UtilisableTable::class,
|
|
VisuelExportGenfiView::class,
|
|
];
|
|
|
|
public function __construct(private readonly string $connection)
|
|
{
|
|
}
|
|
|
|
public function up(): void
|
|
{
|
|
$conn = DB::connection($this->connection);
|
|
|
|
/** @var list<string> */
|
|
$schemas = [];
|
|
|
|
foreach (self::DEFINITIONS as $definition) {
|
|
$schemas[$definition::schemaName()] = $definition::schemaName();
|
|
}
|
|
|
|
if ($conn->getDriverName() === 'oracle') {
|
|
foreach ($schemas as $schemaUser) {
|
|
try {
|
|
$conn->statement("CREATE USER {$schemaUser} IDENTIFIED BY {$schemaUser} DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS");
|
|
} catch (\Throwable $e) {
|
|
unset($e);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (app()->environment('local', 'testing')) {
|
|
$this->down();
|
|
}
|
|
|
|
$schema = Schema::connection($this->connection);
|
|
|
|
foreach (self::DEFINITIONS as $definition) {
|
|
$definition::up($schema);
|
|
}
|
|
}
|
|
|
|
public function down(): void
|
|
{
|
|
$schema = Schema::connection($this->connection);
|
|
|
|
foreach (array_reverse(self::DEFINITIONS) as $definition) {
|
|
$definition::down($schema);
|
|
}
|
|
|
|
$conn = DB::connection($this->connection);
|
|
if ($conn->getDriverName() === 'oracle') {
|
|
try {
|
|
$conn->statement('PURGE RECYCLEBIN');
|
|
} catch (\Throwable $e) {
|
|
unset($e);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static function runUp(string $connection): void
|
|
{
|
|
(new self($connection))->up();
|
|
}
|
|
|
|
public static function runDown(string $connection): void
|
|
{
|
|
(new self($connection))->down();
|
|
}
|
|
}
|