167 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			PowerShell
		
	
	
	
	
	
			
		
		
	
	
			167 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			PowerShell
		
	
	
	
	
	
#!/usr/bin/env pwsh
 | 
						|
# Script de démarrage rapide pour ObsiViewer en mode développement
 | 
						|
 | 
						|
param(
 | 
						|
    [string]$VaultPath = "./vault",
 | 
						|
    [switch]$SkipMeili,
 | 
						|
    [switch]$ResetMeili,
 | 
						|
    [switch]$Help
 | 
						|
)
 | 
						|
 | 
						|
if ($Help) {
 | 
						|
    Write-Host @"
 | 
						|
Usage: .\start-dev.ps1 [-VaultPath <path>] [-SkipMeili] [-Help]
 | 
						|
 | 
						|
Options:
 | 
						|
  -VaultPath <path>  Chemin vers votre vault Obsidian (défaut: ./vault)
 | 
						|
  -SkipMeili         Ne pas démarrer Meilisearch
 | 
						|
  -ResetMeili        Supprimer le conteneur et le volume Meilisearch avant de redémarrer
 | 
						|
  -SkipMeili         Ne pas démarrer Meilisearch
 | 
						|
  -Help              Afficher cette aide
 | 
						|
 | 
						|
Exemples:
 | 
						|
  .\start-dev.ps1
 | 
						|
  .\start-dev.ps1 -VaultPath C:\Users\moi\Documents\MonVault
 | 
						|
  .\start-dev.ps1 -SkipMeili
 | 
						|
"@
 | 
						|
    exit 0
 | 
						|
}
 | 
						|
 | 
						|
$ErrorActionPreference = "Stop"
 | 
						|
 | 
						|
Write-Host "🚀 Démarrage d'ObsiViewer en mode développement" -ForegroundColor Cyan
 | 
						|
Write-Host ""
 | 
						|
 | 
						|
# Diagnostic: Vérifier les variables Meilisearch existantes
 | 
						|
$meiliVars = Get-ChildItem Env: | Where-Object { $_.Name -like 'MEILI*' }
 | 
						|
if ($meiliVars) {
 | 
						|
    Write-Host "⚠️  Variables Meilisearch détectées dans l'environnement:" -ForegroundColor Yellow
 | 
						|
    foreach ($var in $meiliVars) {
 | 
						|
        Write-Host "   $($var.Name) = $($var.Value)" -ForegroundColor Gray
 | 
						|
    }
 | 
						|
    Write-Host "   Ces variables seront purgées..." -ForegroundColor Yellow
 | 
						|
    Write-Host ""
 | 
						|
}
 | 
						|
 | 
						|
# Vérifier que le vault existe
 | 
						|
if (-not (Test-Path $VaultPath)) {
 | 
						|
    Write-Host "⚠️  Le vault n'existe pas: $VaultPath" -ForegroundColor Yellow
 | 
						|
    Write-Host "   Création du dossier..." -ForegroundColor Yellow
 | 
						|
    New-Item -ItemType Directory -Path $VaultPath -Force | Out-Null
 | 
						|
}
 | 
						|
 | 
						|
$VaultPathAbsolute = Resolve-Path $VaultPath
 | 
						|
Write-Host "📁 Vault: $VaultPathAbsolute" -ForegroundColor Green
 | 
						|
 | 
						|
# Vérifier si .env existe
 | 
						|
if (-not (Test-Path ".env")) {
 | 
						|
    Write-Host "⚠️  Fichier .env manquant" -ForegroundColor Yellow
 | 
						|
    if (Test-Path ".env.example") {
 | 
						|
        Write-Host "   Copie de .env.example vers .env..." -ForegroundColor Yellow
 | 
						|
        Copy-Item ".env.example" ".env"
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
# Purger TOUTES les variables d'environnement Meilisearch conflictuelles
 | 
						|
$meiliVarsToPurge = Get-ChildItem Env: | Where-Object { $_.Name -like 'MEILI*' }
 | 
						|
if ($meiliVarsToPurge) {
 | 
						|
    Write-Host "🧹 Purge des variables Meilisearch existantes..." -ForegroundColor Cyan
 | 
						|
    foreach ($var in $meiliVarsToPurge) {
 | 
						|
        Remove-Item "Env:\$($var.Name)" -ErrorAction SilentlyContinue
 | 
						|
        Write-Host "   ✓ $($var.Name) supprimée" -ForegroundColor Gray
 | 
						|
    }
 | 
						|
    Write-Host ""
 | 
						|
}
 | 
						|
 | 
						|
# Définir les variables d'environnement pour la session
 | 
						|
$env:VAULT_PATH = $VaultPathAbsolute
 | 
						|
$env:MEILI_MASTER_KEY = "devMeiliKey123"
 | 
						|
$env:MEILI_HOST = "http://127.0.0.1:7700"
 | 
						|
$env:PORT = "4000"
 | 
						|
 | 
						|
Write-Host "✅ Variables d'environnement définies:" -ForegroundColor Green
 | 
						|
Write-Host "   VAULT_PATH=$env:VAULT_PATH" -ForegroundColor Gray
 | 
						|
Write-Host "   MEILI_MASTER_KEY=devMeiliKey123" -ForegroundColor Gray
 | 
						|
Write-Host "   MEILI_HOST=$env:MEILI_HOST" -ForegroundColor Gray
 | 
						|
 | 
						|
# Démarrer Meilisearch si demandé
 | 
						|
if (-not $SkipMeili) {
 | 
						|
    Write-Host ""
 | 
						|
    Write-Host "🔍 Démarrage de Meilisearch..." -ForegroundColor Cyan
 | 
						|
    
 | 
						|
    if ($ResetMeili) {
 | 
						|
        Write-Host "🧹 Réinitialisation de Meilisearch (conteneur + volume)..." -ForegroundColor Yellow
 | 
						|
        try {
 | 
						|
            Push-Location "docker-compose"
 | 
						|
            docker compose down -v meilisearch 2>$null | Out-Null
 | 
						|
            Pop-Location
 | 
						|
        } catch {
 | 
						|
            Pop-Location 2>$null
 | 
						|
        }
 | 
						|
        # Forcer la suppression ciblée si nécessaire
 | 
						|
        docker rm -f obsiviewer-meilisearch 2>$null | Out-Null
 | 
						|
        docker volume rm -f docker-compose_meili_data 2>$null | Out-Null
 | 
						|
    }
 | 
						|
 | 
						|
    # Vérifier si Meilisearch est déjà en cours
 | 
						|
    $meiliRunning = docker ps --filter "name=obsiviewer-meilisearch" --format "{{.Names}}" 2>$null
 | 
						|
    
 | 
						|
    if ($meiliRunning) {
 | 
						|
        Write-Host "   ✓ Meilisearch déjà en cours" -ForegroundColor Green
 | 
						|
    } else {
 | 
						|
        npm run meili:up
 | 
						|
        Write-Host "   ⏳ Attente du démarrage de Meilisearch..." -ForegroundColor Yellow
 | 
						|
    }
 | 
						|
    
 | 
						|
    # Attendre la santé du service /health
 | 
						|
    $healthTimeoutSec = 30
 | 
						|
    $healthUrl = "http://127.0.0.1:7700/health"
 | 
						|
    $startWait = Get-Date
 | 
						|
    while ($true) {
 | 
						|
        try {
 | 
						|
            $resp = Invoke-RestMethod -Uri $healthUrl -Method GET -TimeoutSec 3
 | 
						|
            if ($resp.status -eq "available") {
 | 
						|
                Write-Host "   ✓ Meilisearch est prêt" -ForegroundColor Green
 | 
						|
                break
 | 
						|
            }
 | 
						|
        } catch {
 | 
						|
            # ignore and retry
 | 
						|
        }
 | 
						|
        if (((Get-Date) - $startWait).TotalSeconds -ge $healthTimeoutSec) {
 | 
						|
            Write-Host "   ⚠️  Timeout d'attente de Meilisearch (continuer quand même)" -ForegroundColor Yellow
 | 
						|
            break
 | 
						|
        }
 | 
						|
        Start-Sleep -Milliseconds 500
 | 
						|
    }
 | 
						|
 | 
						|
    Write-Host ""
 | 
						|
    Write-Host "📊 Indexation du vault..." -ForegroundColor Cyan
 | 
						|
    npm run meili:reindex
 | 
						|
}
 | 
						|
 | 
						|
Write-Host ""
 | 
						|
Write-Host "✅ Configuration terminée!" -ForegroundColor Green
 | 
						|
Write-Host ""
 | 
						|
Write-Host "Les variables d'environnement sont définies dans cette session PowerShell." -ForegroundColor Yellow
 | 
						|
Write-Host ""
 | 
						|
Write-Host "Pour démarrer l'application, ouvrez 2 terminaux:" -ForegroundColor Yellow
 | 
						|
Write-Host ""
 | 
						|
Write-Host "Terminal 1 (Backend):" -ForegroundColor Cyan
 | 
						|
Write-Host "  node server/index.mjs" -ForegroundColor White
 | 
						|
Write-Host "  (Les variables VAULT_PATH, MEILI_MASTER_KEY sont déjà définies)" -ForegroundColor Gray
 | 
						|
Write-Host ""
 | 
						|
Write-Host "Terminal 2 (Frontend):" -ForegroundColor Cyan
 | 
						|
Write-Host "  npm run dev" -ForegroundColor White
 | 
						|
Write-Host ""
 | 
						|
Write-Host "⚠️  IMPORTANT: Si vous fermez ce terminal, les variables seront perdues." -ForegroundColor Yellow
 | 
						|
Write-Host "   Relancez ce script ou définissez manuellement:" -ForegroundColor Yellow
 | 
						|
Write-Host "   `$env:VAULT_PATH='$VaultPathAbsolute'" -ForegroundColor Gray
 | 
						|
Write-Host "   `$env:MEILI_MASTER_KEY='devMeiliKey123'" -ForegroundColor Gray
 | 
						|
Write-Host "   Remove-Item Env:\MEILI_API_KEY -ErrorAction SilentlyContinue" -ForegroundColor Gray
 | 
						|
Write-Host ""
 | 
						|
Write-Host "Accès:" -ForegroundColor Yellow
 | 
						|
Write-Host "  Frontend:    http://localhost:3000" -ForegroundColor White
 | 
						|
Write-Host "  Backend API: http://localhost:4000" -ForegroundColor White
 | 
						|
Write-Host "  Meilisearch: http://localhost:7700" -ForegroundColor White
 | 
						|
Write-Host ""
 |