162 lines
8.9 KiB
PowerShell
162 lines
8.9 KiB
PowerShell
# restructure_models.ps1 - Final working script using temp files
|
|
|
|
Write-Host "📄 Starting models restructure..." -ForegroundColor Cyan
|
|
|
|
# Create new directory structure for models
|
|
Write-Host "📁 Creating models directory structure..." -ForegroundColor Yellow
|
|
$modelDirectories = @(
|
|
"models\database",
|
|
"models\api"
|
|
)
|
|
|
|
foreach ($dir in $modelDirectories) {
|
|
if (!(Test-Path $dir)) {
|
|
New-Item -Path $dir -ItemType Directory -Force | Out-Null
|
|
Write-Host " Created: $dir" -ForegroundColor Green
|
|
} else {
|
|
Write-Host " Exists: $dir" -ForegroundColor Gray
|
|
}
|
|
}
|
|
|
|
# Backup original model files
|
|
Write-Host "💾 Backing up original model files..." -ForegroundColor Yellow
|
|
if (!(Test-Path "models\backup")) {
|
|
New-Item -Path "models\backup" -ItemType Directory -Force | Out-Null
|
|
}
|
|
|
|
$originalFiles = @("models\database_models.py", "models\api_models.py")
|
|
foreach ($file in $originalFiles) {
|
|
if (Test-Path $file) {
|
|
Copy-Item $file "models\backup\" -Force
|
|
Write-Host " Backed up: $(Split-Path $file -Leaf)" -ForegroundColor Gray
|
|
}
|
|
}
|
|
|
|
Write-Host "📄 Creating database model files..." -ForegroundColor Yellow
|
|
|
|
# Function to create files using temp file approach
|
|
function New-PythonFile {
|
|
param(
|
|
[string]$Path,
|
|
[string]$TempContent
|
|
)
|
|
|
|
$tempFile = [System.IO.Path]::GetTempFileName()
|
|
$TempContent | Out-File $tempFile -Encoding UTF8
|
|
Move-Item $tempFile $Path -Force
|
|
}
|
|
|
|
# Create models/database/__init__.py
|
|
Write-Host " Creating models\database\__init__.py..." -ForegroundColor Gray
|
|
$initContent = @"
|
|
# models/database/__init__.py
|
|
from .user import User
|
|
from .product import Product
|
|
from .shop import Shop, ShopProduct
|
|
from .stock import Stock
|
|
from .marketplace import MarketplaceImportJob
|
|
|
|
__all__ = [
|
|
"User",
|
|
"Product",
|
|
"Shop", "ShopProduct",
|
|
"Stock",
|
|
"MarketplaceImportJob",
|
|
]
|
|
"@
|
|
New-PythonFile -Path "models\database\__init__.py" -TempContent $initContent
|
|
|
|
# Create models/database/base.py
|
|
Write-Host " Creating models\database\base.py..." -ForegroundColor Gray
|
|
$baseContent = 'LS0gLS0tQkVHSU4gUFlUSE9OIENPREUtLS0tLQojIG1vZGVscy9kYXRhYmFzZS9iYXNlLnB5CmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCmZyb20gc3FsYWxjaGVteSBpbXBvcnQgQ29sdW1uLCBEYXRlVGltZQpmcm9tIGFwcC5jb3JlLmRhdGFiYXNlIGltcG9ydCBCYXNlCgoKY2xhc3MgVGltZXN0YW1wTWl4aW46CiAgICAiIiJNaXhpbiB0byBhZGQgY3JlYXRlZF9hdCBhbmQgdXBkYXRlZF9hdCB0aW1lc3RhbXBzIHRvIG1vZGVscyIiIgogICAgY3JlYXRlZF9hdCA9IENvbHVtbihEYXRlVGltZSwgZGVmYXVsdD1kYXRldGltZS51dGNub3csIG51bGxhYmxlPUZhbHNlKQogICAgdXBkYXRlZF9hdCA9IENvbHVtbigKICAgICAgICBEYXRlVGltZSwgZGVmYXVsdD1kYXRldGltZS51dGNub3csIG9udXBkYXRlPWRhdGV0aW1lLnV0Y25vdywgbnVsbGFibGU9RmFsc2UKICAgICkKLS0tLS1FTkQgUFlUSE9OIENPREUtLS0tLQo='
|
|
$decodedBase = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($baseContent))
|
|
$decodedBase = $decodedBase.Replace('-----BEGIN PYTHON CODE-----', '').Replace('-----END PYTHON CODE-----', '').Trim()
|
|
$decodedBase | Out-File "models\database\base.py" -Encoding UTF8
|
|
|
|
# Create models/database/user.py
|
|
Write-Host " Creating models\database\user.py..." -ForegroundColor Gray
|
|
$userContent = 'LS0tLS1CRUdJTiBQWVRIT04gQ09ERS0tLS0tCiMgbW9kZWxzL2RhdGFiYXNlL3VzZXIucHkKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKZnJvbSBzcWxhbGNoZW15IGltcG9ydCBCb29sZWFuLCBDb2x1bW4sIERhdGVUaW1lLCBJbnRlZ2VyLCBTdHJpbmcKZnJvbSBzcWxhbGNoZW15Lm9ybSBpbXBvcnQgcmVsYXRpb25zaGlwCmZyb20gYXBwLmNvcmUuZGF0YWJhc2UgaW1wb3J0IEJhc2UKCgpjbGFzcyBVc2VyKEJhc2UpOgogICAgX190YWJsZW5hbWVfXyA9ICJ1c2VycyIKCiAgICBpZCA9IENvbHVtbihJbnRlZ2VyLCBwcmltYXJ5X2tleT1UcnVlLCBpbmRleD1UcnVlKQogICAgZW1haWwgPSBDb2x1bW4oU3RyaW5nLCB1bmlxdWU9VHJ1ZSwgaW5kZXg9VHJ1ZSwgbnVsbGFibGU9RmFsc2UpCiAgICB1c2VybmFtZSA9IENvbHVtbihTdHJpbmcsIHVuaXF1ZT1UcnVlLCBpbmRleD1UcnVlLCBudWxsYWJsZT1GYWxzZSkKICAgIGhhc2hlZF9wYXNzd29yZCA9IENvbHVtbihTdHJpbmcsIG51bGxhYmxlPUZhbHNlKQogICAgcm9sZSA9IENvbHVtbihTdHJpbmcsIG51bGxhYmxlPUZhbHNlLCBkZWZhdWx0PSJ1c2VyIikgICMgdXNlciwgYWRtaW4sIHNob3Bfb3duZXIKICAgIGlzX2FjdGl2ZSA9IENvbHVtbihCb29sZWFuLCBkZWZhdWx0PVRydWUsIG51bGxhYmxlPUZhbHNlKQogICAgbGFzdF9sb2dpbiA9IENvbHVtbihEYXRlVGltZSwgbnVsbGFibGU9VHJ1ZSkKICAgIGNyZWF0ZWRfYXQgPSBDb2x1bW4oRGF0ZVRpbWUsIGRlZmF1bHQ9ZGF0ZXRpbWUudXRjbm93LCBudWxsYWJsZT1GYWxzZSkKICAgIHVwZGF0ZWRfYXQgPSBDb2x1bW4oCiAgICAgICAgRGF0ZVRpbWUsIGRlZmF1bHQ9ZGF0ZXRpbWUudXRjbm93LCBvbnVwZGF0ZT1kYXRldGltZS51dGNub3csIG51bGxhYmxlPUZhbHNlCiAgICApCgogICAgIyBSZWxhdGlvbnNoaXBzCiAgICBtYXJrZXRwbGFjZV9pbXBvcnRfam9icyA9IHJlbGF0aW9uc2hpcCgKICAgICAgICAiTWFya2V0cGxhY2VJbXBvcnRKb2IiLCBiYWNrX3BvcHVsYXRlcz0idXNlciIKICAgICkKICAgIG93bmVkX3Nob3BzID0gcmVsYXRpb25zaGlwKCJTaG9wIiwgYmFja19wb3B1bGF0ZXM9Im93bmVyIikKCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgcmV0dXJuIGYiPFVzZXIodXNlcm5hbWU9J3tzZWxmLnVzZXJuYW1lfScsIGVtYWlsPSd7c2VsZi5lbWFpbH0nLCByb2xlPSd7c2VsZi5yb2xlfScpPiIKLS0tLS1FTkQgUFlUSE9OIENPREUtLS0tLQo='
|
|
$decodedUser = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($userContent))
|
|
$decodedUser = $decodedUser.Replace('-----BEGIN PYTHON CODE-----', '').Replace('-----END PYTHON CODE-----', '').Trim()
|
|
$decodedUser | Out-File "models\database\user.py" -Encoding UTF8
|
|
|
|
# Create models/api/__init__.py
|
|
Write-Host " Creating models\api\__init__.py..." -ForegroundColor Gray
|
|
$apiInitContent = @"
|
|
# models/api/__init__.py
|
|
# Import statements will be added as you create the individual API model files
|
|
# Example:
|
|
# from .auth import UserRegister, UserLogin, UserResponse, LoginResponse
|
|
|
|
__all__ = [
|
|
# Add your API model imports here as you create them
|
|
]
|
|
"@
|
|
New-PythonFile -Path "models\api\__init__.py" -TempContent $apiInitContent
|
|
|
|
# Create models/api/base.py
|
|
Write-Host " Creating models\api\base.py..." -ForegroundColor Gray
|
|
$apiBaseContent = 'LS0tLS1CRUdJTiBQWVRIT04gQ09ERS0tLS0tCiMgbW9kZWxzL2FwaS9iYXNlLnB5CmZyb20gdHlwaW5nIGltcG9ydCBMaXN0LCBUeXBlVmFyLCBHZW5lcmljCmZyb20gcHlkYW50aWMgaW1wb3J0IEJhc2VNb2RlbAoKVCA9IFR5cGVWYXIoJ1QnKQoKY2xhc3MgTGlzdFJlc3BvbnNlKEJhc2VNb2RlbCwgR2VuZXJpY1tUXSk6CiAgICAiIiJHZW5lcmljIGxpc3QgcmVzcG9uc2UgbW9kZWwiIiIKICAgIGl0ZW1zOiBMaXN0W1RdCiAgICB0b3RhbDogaW50CiAgICBza2lwOiBpbnQKICAgIGxpbWl0OiBpbnQKCmNsYXNzIFN0YXR1c1Jlc3BvbnNlKEJhc2VNb2RlbCk6CiAgICAiIiJHZW5lcmljIHN0YXR1cyByZXNwb25zZSIiIgogICAgc3VjY2VzczogYm9vbAogICAgbWVzc2FnZTogc3RyCi0tLS0tRU5EIFBZVEhPTiBDT0RFLS0tLS0K'
|
|
$decodedApi = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($apiBaseContent))
|
|
$decodedApi = $decodedApi.Replace('-----BEGIN PYTHON CODE-----', '').Replace('-----END PYTHON CODE-----', '').Trim()
|
|
$decodedApi | Out-File "models\api\base.py" -Encoding UTF8
|
|
|
|
Write-Host "✅ Basic model structure created!" -ForegroundColor Green
|
|
Write-Host ""
|
|
Write-Host "🔍 Testing file creation..." -ForegroundColor Yellow
|
|
|
|
# Check if files were created
|
|
$createdFiles = @(
|
|
"models\database\__init__.py",
|
|
"models\database\base.py",
|
|
"models\database\user.py",
|
|
"models\api\__init__.py",
|
|
"models\api\base.py"
|
|
)
|
|
|
|
foreach ($file in $createdFiles) {
|
|
if (Test-Path $file) {
|
|
$size = (Get-Item $file).Length
|
|
Write-Host "✅ $file ($size bytes)" -ForegroundColor Green
|
|
} else {
|
|
Write-Host "❌ $file (missing)" -ForegroundColor Red
|
|
}
|
|
}
|
|
|
|
Write-Host ""
|
|
Write-Host "🧪 Testing Python imports..." -ForegroundColor Yellow
|
|
try {
|
|
$pythonTest = 'import sys; sys.path.append("."); from models.database.user import User; print("SUCCESS: Database models import working")'
|
|
$testResult = python -c $pythonTest 2>&1
|
|
if ($LASTEXITCODE -eq 0) {
|
|
Write-Host "✅ Python import test passed!" -ForegroundColor Green
|
|
} else {
|
|
Write-Host "⚠️ Python import test failed (may need dependencies)" -ForegroundColor Yellow
|
|
}
|
|
} catch {
|
|
Write-Host "⚠️ Python not available for testing" -ForegroundColor Yellow
|
|
}
|
|
|
|
Write-Host ""
|
|
Write-Host "📋 Next steps:" -ForegroundColor Cyan
|
|
Write-Host "1. Complete the remaining database models by copying from your original files:" -ForegroundColor White
|
|
Write-Host " - models\database\product.py" -ForegroundColor Gray
|
|
Write-Host " - models\database\shop.py" -ForegroundColor Gray
|
|
Write-Host " - models\database\stock.py" -ForegroundColor Gray
|
|
Write-Host " - models\database\marketplace.py" -ForegroundColor Gray
|
|
Write-Host ""
|
|
Write-Host "2. Extract API model classes from your api_models.py to separate files:" -ForegroundColor White
|
|
Write-Host " - models\api\auth.py" -ForegroundColor Gray
|
|
Write-Host " - models\api\product.py" -ForegroundColor Gray
|
|
Write-Host " - models\api\shop.py" -ForegroundColor Gray
|
|
Write-Host " - models\api\stock.py" -ForegroundColor Gray
|
|
Write-Host " - models\api\marketplace.py" -ForegroundColor Gray
|
|
Write-Host " - models\api\stats.py" -ForegroundColor Gray
|
|
Write-Host ""
|
|
Write-Host "3. Update imports throughout your application:" -ForegroundColor White
|
|
Write-Host " Old: from models.database.user import User" -ForegroundColor Gray
|
|
Write-Host " New: from models.database.user import User" -ForegroundColor Gray
|
|
Write-Host ""
|
|
Write-Host "✨ Foundation completed successfully!" -ForegroundColor Green
|
|
Write-Host "📚 Original files backed up in models\backup\" -ForegroundColor Green
|