Workflow & Patterns

Guia de desenvolvimento ONDAKA
Stack completo macOS dev → cPanel prod Actualizado 15 Mai 2026
🖥️
Setup
Stack actual
ComponenteVersãoLocal
macOS26.2 (darwin-arm64)dev
Flutter3.x stable~/ondaka-dev/ondaka_app
Laravel HerdPHP 8.4.19 · Composer 2.9.5dev backend (opcional)
Node.jsv20.20.2local
Android EmulatorAPI 34 (Android 14)Pixel 6
ProduçãocPanel LiteSpeed · Redis · MariaDBondaka@ondaka.ao:public_html
🚀
Deploy Workflow
Backend · Frontend · Mobile

Backend (PHP/Laravel)

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

Frontend (React/Inertia)

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/

Mobile (Flutter)

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
⚠️
Anti-padrões a Evitar
Lições aprendidas

❌ Heredoc bash longo

❌ Frágil

# Se houver $var dentro, bash interpreta
cat > FILE << 'EOF'
... 100 linhas
EOF

✅ Python é mais robusto

python3 << 'PYEOF'
content = '''...
... 100 linhas
'''
open('FILE', 'w').write(content)
PYEOF

❌ Confundir janela Mac vs SSH

Sintoma: cd: no such file or directory: /Users/.../public_html ou bash: artisan: command not found

Solução: sempre confirmar prompt antes de colar:

  • Mac: brauliogoncalves@Braulios-MacBook-Pro-2 ondaka_app %
  • SSH: [ondaka@us168-cp public_html]$

❌ Heredoc bloqueado

Sintoma: prompt fica cmdand cmdand heredoc>

Solução: Ctrl+C para sair, e usar Python em vez

🧪
Smoke Testing Patterns
Comandos úteis

Testar endpoint API com Sanctum token

# 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

Forçar push FCM directamente

# 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;
"

Reset password user

# 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();
"
📁
Estrutura de Pastas
Backend & Mobile

Backend /home/ondaka/public_html/

app/
└── Domains/
    ├── Sos/
    │   ├── Catalog/TiposSos.php
    │   ├── Models/SosAlerta.php
    │   ├── Models/SosAlertaFoto.php
    │   ├── Services/
    │   │   ├── CriarAlertaSosService.php
    │   │   ├── SosNotificationService.php
    │   │   └── SosEstadoChangeNotificationService.php
    │   └── Http/Controllers/
    │       ├── Api/SosAlertaApiController.php   # Condómino
    │       ├── Api/SosGuardaApiController.php   # Guarda
    │       ├── Api/SosGestorApiController.php   # Gestor
    │       └── Web/SosController.php            # Admin web
    └── Notifications/
        ├── Models/DeviceToken.php
        └── Services/FcmSenderService.php

Mobile ~/ondaka-dev/ondaka_app/lib/

features/
├── sos/                   # Condómino (envio)
├── sos_guarda/        # Guarda (lista + acções)
├── sos_gestor/        # Gestor (HomeGestorView + lista + acções)
└── portaria/
    └── views/home_guarda_view.dart   # Tem _SosGuardaCard

core/services/
├── push_notification_service.dart  # FCM client
└── api_service.dart
🔐
Credenciais & Test Users
Todos password: Teste1234!
User # Email 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])

URLs

  • Produção: https://ondaka.ao
  • Web admin SOS: https://ondaka.ao/sos/alertas
  • API mobile: https://ondaka.ao/api/*

Suporte

  • WhatsApp: +244 929 167 474
  • Email FROM: noreply@ondaka.ao
  • SMTP: mail.ondaka.ao:465 SSL
  • Firebase service account: /home/ondaka/firebase-service-account.json
  • FCM project: ondaka-prod