# 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.
