| Componente | Versão | Local |
|---|---|---|
| macOS | 26.2 (darwin-arm64) | dev |
| Flutter | 3.x stable | ~/ondaka-dev/ondaka_app |
| Laravel Herd | PHP 8.4.19 · Composer 2.9.5 | dev backend (opcional) |
| Node.js | v20.20.2 | local |
| Android Emulator | API 34 (Android 14) | Pixel 6 |
| Produção | cPanel LiteSpeed · Redis · MariaDB | ondaka@ondaka.ao:public_html |
Workflow actual: patchar directo no servidor via SSH + tinker
# Editar
nano app/...
# Validar sintaxe
php -l app/...
# Aplicar migration
php artisan migrate --force
# Limpar cache
php artisan cache:clear && php artisan route:clear
Atalho Python para patches complexos (mais robusto que sed):
python3 << 'PYEOF'
content = open('FILE').read()
old = "..."
new = "..."
print(f"Ocorrências: {content.count(old)}")
if content.count(old) == 1:
open('FILE', 'w').write(content.replace(old, new))
print("✅")
PYEOF
Compilar no Mac, deploy ZIP via cPanel
# Mac
cd ~/ondaka-web
npm run build
zip -r dist.zip public/build
# Subir ao cPanel File Manager
# → extrair em public_html/public/
Workflow dev: emulador local com hot reload
cd ~/ondaka-dev/ondaka_app
flutter run # debug com hot reload
# Atalhos:
# r = hot reload
# R = hot restart
# q = quit
Build APK debug (testar em telefone real):
flutter build apk --debug
# Output: build/app/outputs/flutter-apk/app-debug.apk
# Se houver $var dentro, bash interpreta
cat > FILE << 'EOF'
... 100 linhas
EOF
python3 << 'PYEOF'
content = '''...
... 100 linhas
'''
open('FILE', 'w').write(content)
PYEOF
Sintoma: cd: no such file or directory: /Users/.../public_html ou bash: artisan: command not found
Solução: sempre confirmar prompt antes de colar:
brauliogoncalves@Braulios-MacBook-Pro-2 ondaka_app %[ondaka@us168-cp public_html]$Sintoma: prompt fica cmdand cmdand heredoc>
Solução: Ctrl+C para sair, e usar Python em vez
# SSH
TOKEN=$(php artisan tinker --execute="\$u = \App\Models\User::find(11); \$u->tokens()->where('name','test')->delete(); echo \$u->createToken('test')->plainTextToken;" 2>/dev/null | tail -1)
curl -s "https://ondaka.ao/api/guarda/sos/alertas" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json" \
| python3 -m json.tool
# SSH
php artisan tinker --execute="
\$u = \App\Models\User::find(5);
\$fcm = app(\App\Domains\Notifications\Services\FcmSenderService::class);
echo 'Enviados: ' . \$fcm->enviarParaUser(\$u, 'Título', 'Corpo', ['key' => 'val']) . PHP_EOL;
"
# SSH
php artisan tinker --execute="
\$u = \App\Models\User::where('email','EMAIL')->first();
\$u->password = bcrypt('Teste1234!');
\$u->email_verified_at = now();
\$u->forcar_troca_password = false;
\$u->save();
"
/home/ondaka/public_html/~/ondaka-dev/ondaka_app/lib/Teste1234!| User # | Role | Empresa / Condomínio | |
|---|---|---|---|
1 |
admin@ondaka.ao |
super-admin | 1 |
5 |
mobile-dev@ondaka.ao |
condomino | 1 (cond 2) |
6 |
guarda-dev@ondaka.ao |
funcionario | 1 |
7 |
gestor.teste@ondaka.ao |
gestor | 1 |
11 |
braulioclean@hotmail.com |
guarda | 1 (cond [1,2]) |
https://ondaka.aohttps://ondaka.ao/sos/alertashttps://ondaka.ao/api/*noreply@ondaka.aomail.ondaka.ao:465 SSL/home/ondaka/firebase-service-account.jsonondaka-prod