modules/devops/Write-MigrationScript.ps1
|
param( [string]$ProjectName, [string]$OrmMode, [string]$OutputPath ) . (Join-Path (Split-Path $MyInvocation.MyCommand.Path) "..\core\Utils.ps1") # Migration script sadece EFCore veya Hybrid modda üretilir if ($OrmMode -notmatch "EFCore|Hybrid") { return } function Write-File($rel, $con) { Write-CoreFile (Join-Path $OutputPath $rel) $con } $migratePs1Content = @' #Requires -Version 5.1 # EF Core Migration Helper — {P} # Kullanim: .\scripts\migrate.ps1 [-MigrationName <ad>] [-Revert] param( [string]$MigrationName = "Initial", [switch]$Revert ) # Self-healing dotnet-ef tool check $dotnetEfInstalled = dotnet tool list -g | Select-String "dotnet-ef" if (-not $dotnetEfInstalled) { Write-Host "dotnet-ef araci kuruluyor..." -ForegroundColor Yellow dotnet tool install --global dotnet-ef } $userProfile = [System.Environment]::GetFolderPath('UserProfile') $globalToolsPath = Join-Path $userProfile ".dotnet\tools" if ($env:PATH -notlike "*$globalToolsPath*") { $env:PATH = "$env:PATH;$globalToolsPath" } # Resolve relative paths using PSScriptRoot $scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path $solutionDir = Split-Path $scriptDir -Parent $persistenceProj = Join-Path $solutionDir "src\{P}.Persistence" $startupProj = Join-Path $solutionDir "src\{P}.WebApi" if ($Revert) { Write-Host "Son migration geri aliniyor..." -ForegroundColor Yellow dotnet ef database update 0 ` --project $persistenceProj ` --startup-project $startupProj Write-Host "Tum migrasyonlar siliniyor..." -ForegroundColor Yellow dotnet ef migrations remove ` --project $persistenceProj ` --startup-project $startupProj Write-Host "Tamamlandi." -ForegroundColor Green } else { Write-Host "Migration olusturuluyor: $MigrationName" -ForegroundColor Cyan dotnet ef migrations add $MigrationName ` --project $persistenceProj ` --startup-project $startupProj ` --output-dir Migrations Write-Host "Veritabani guncelleniyor..." -ForegroundColor Cyan dotnet ef database update ` --project $persistenceProj ` --startup-project $startupProj Write-Host "Tamamlandi." -ForegroundColor Green } '@.Replace("{P}", $ProjectName) $migrateShContent = @' #!/bin/bash # EF Core Migration Helper — {P} # Kullanim: ./scripts/migrate.sh [MigrationName] [--revert] MIGRATION_NAME=${1:-Initial} # Self-healing dotnet-ef check if ! command -v dotnet-ef &> /dev/null then echo "dotnet-ef araci kuruluyor..." dotnet tool install --global dotnet-ef export PATH="$PATH:$HOME/.dotnet/tools" fi # Resolve paths dynamically using BASH_SOURCE SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" SOLUTION_DIR="$( dirname "$SCRIPT_DIR" )" PERSISTENCE_PROJ="$SOLUTION_DIR/src/{P}.Persistence" STARTUP_PROJ="$SOLUTION_DIR/src/{P}.WebApi" if [ "$2" = "--revert" ]; then echo "Son migration geri aliniyor..." dotnet ef database update 0 \ --project "$PERSISTENCE_PROJ" \ --startup-project "$STARTUP_PROJ" dotnet ef migrations remove \ --project "$PERSISTENCE_PROJ" \ --startup-project "$STARTUP_PROJ" echo "Tamamlandi." else echo "Migration olusturuluyor: $MIGRATION_NAME" dotnet ef migrations add "$MIGRATION_NAME" \ --project "$PERSISTENCE_PROJ" \ --startup-project "$STARTUP_PROJ" \ --output-dir Migrations echo "Veritabani guncelleniyor..." dotnet ef database update \ --project "$PERSISTENCE_PROJ" \ --startup-project "$STARTUP_PROJ" echo "Tamamlandi." fi '@.Replace("{P}", $ProjectName) Write-File "scripts\migrate.ps1" $migratePs1Content Write-File "scripts\migrate.sh" $migrateShContent |