# 🔧 Solução Final para Problemas de Permissão no dist/

## Problema Identificado

O Vite estava tentando copiar arquivos de `public/Icones/` para `dist/Icones/`, mas os arquivos existentes em `dist/Icones/` pertencem a outro usuário e não podem ser sobrescritos, causando:

```
EACCES: permission denied, copyfile '/var/www/gestorstream/frontend/public/Icones/...' -> '/var/www/gestorstream/frontend/dist/Icones/...'
```

## Soluções Aplicadas

### 1. Vite Config (`vite.config.ts`)
**Mudança:** `emptyOutDir: false` → `emptyOutDir: true`

**Antes:**
```typescript
emptyOutDir: false, // Prevent vite from cleaning dist
```

**Depois:**
```typescript
emptyOutDir: true, // Clean dist before build to avoid permission issues
```

**Efeito:** O Vite agora limpa o diretório `dist/` completamente antes de cada build, evitando conflitos de permissão.

### 2. Script de Build (`build_frontend.sh`)
**Mudança:** Remover `dist/` completamente antes do build

**Antes:**
- Tentava manter `dist/` e apenas limpar arquivos graváveis
- Não removia `dist/Icones/` que causava problemas

**Depois:**
- Remove `dist/` completamente se tiver permissão
- Remove especificamente `dist/Icones/` (causa principal do problema)
- Remove arquivos graváveis antes de tentar remover diretórios
- Cria `dist/` vazio para o Vite (que limpará antes do build)

**Código:**
```bash
# Remover dist/ completamente antes do build (Vite recriará com emptyOutDir: true)
echo "Removendo dist/ para evitar conflitos de permissão..." | tee -a "$LOG_FILE"

# Remover arquivos graváveis primeiro
find "$FRONTEND_DIR/dist" -type f -writable -delete 2>/dev/null || true
find "$FRONTEND_DIR/dist" -type d -empty -delete 2>/dev/null || true

# Tentar remover diretório Icones/ especificamente
if [ -d "$FRONTEND_DIR/dist/Icones" ]; then
    find "$FRONTEND_DIR/dist/Icones" -type f -writable -delete 2>/dev/null || true
    if [ -z "$(ls -A "$FRONTEND_DIR/dist/Icones" 2>/dev/null)" ]; then
        rmdir "$FRONTEND_DIR/dist/Icones" 2>/dev/null || true
    fi
fi

# Se tivermos permissão, remover tudo
if [ -w "$FRONTEND_DIR/dist" ]; then
    rm -rf "$FRONTEND_DIR/dist" 2>/dev/null || true
fi

# Criar dist/ vazio
mkdir -p "$FRONTEND_DIR/dist" 2>/dev/null || true
chmod 755 "$FRONTEND_DIR/dist" 2>/dev/null || true
```

## Como Funciona Agora

1. **Script remove `dist/`** (ou pelo menos arquivos graváveis)
2. **Vite limpa `dist/`** completamente (`emptyOutDir: true`)
3. **Vite recria `dist/`** com arquivos novos
4. **Sem conflitos de permissão** ✅

## Benefícios

1. **Sem erros de permissão**: Vite cria arquivos novos, não tenta sobrescrever
2. **Build limpo**: Cada build começa do zero
3. **Resiliente**: Se não conseguir remover tudo, Vite limpa o resto
4. **Simples**: Não precisa gerenciar permissões complexas

## Teste

Na próxima atualização:
1. Script tentará remover `dist/`
2. Vite limpará `dist/` completamente
3. Vite recriará `dist/` com arquivos novos
4. Build deve completar sem erros de permissão ✅

## Observação

Se ainda houver arquivos protegidos que não podem ser removidos:
- O Vite tentará limpar antes do build
- Se falhar, o erro será mais claro
- Solução manual: `chown -R www-data:www-data /var/www/gestorstream/frontend/dist`

