# 04 - Schema da Base de Dados (Firebase Realtime Database) Este projeto utiliza o Firebase Realtime Database. Como se trata de uma base de dados NoSQL estruturada em árvore JSON, a integridade é mantida pela concordância entre o que o **Scraper Java escreve** e aquilo que a **App Android espera ler**. A raiz da base de dados encontra-se geralmente dividida por categoria de campeonato. Assumindo como base o desenvolvimento, a organização atual reflete a estrutura de Escalões (ex. "Senior", "Junior", etc). ## Estrutura Árvore JSON (Schema Esperado) ```json { "Senior": { "standings": { "Vila Chã": { "clubName": "Vila Chã", "clubLogo": "https://url...", "points": "45", "gamesPlayed": "15", "wins": "15", "draws": "0", "losses": "0", "goalsFor": "50", "goalsAgainst": "10", "position": 1 }, "Outro Clube": { ... } }, "journeys": { "Jornada 1": { "games": [ { "homeTeam": "Clube A", "homeLogo": "https://url...", "awayTeam": "Clube B", "awayLogo": "https://url...", "homeScore": "2", "awayScore": "1", "date": "10-10-2023", "field": "Campo do Clube A", "matchReportUrl": "https://url..." } ] } }, "players": { "Vila Chã": [ { "name": "João Silva", "number": "10", "position": "Avançado", "photoUrl": "https://url..." } ] } }, "Users": { "UID_12345": { "email": "user@email.com", "favoriteClub": "Vila Chã" } } } ``` ## Regras e Convenções - **As chaves principais** (`standings`, `journeys`, `players`) devem ser escritas com letra minúscula, facilitando as queries. - **Formatação Numérica**: Ocasionalmente no processo de Web Scraping, os valores numéricos são guardados e transmitidos como `String`. Na App Android, ao efetuar lógicas matemáticas é importante fazer parse para `Integer`. As classes `models/` ditam o tipo final. - **Campos Opcionais**: Determinados campos como `matchReportUrl` podem vir vazios (`""`) da AFAVCD. Os adaptadores Android deverão estar preparados para ocultar botões se essa string for nula ou vazia. ## Segurança As regras da Realtime Database (`rules.json` na consola da Firebase) deverão espelhar a permissão "Leitura de qualquer utilizador, Escrita apenas por Admin". Isto previne que um utilizador malicioso com App Adulterada envie resultados falsos.