Aplicativo para gerenciamento de reservas de quadras esportivas, desenvolvido em Flutter.
.
├── android/ # Código nativo Android
├── ios/ # Código nativo iOS
├── linux/ # Suporte a Linux
├── macos/ # Suporte a macOS
├── web/ # Suporte a Web
├── windows/ # Suporte a Windows
├── lib/ # Código principal do app
│ ├── main.dart # Ponto de entrada do app
│ ├── core/ # Configurações (tema, rotas)
│ ├── models/ # Classes como Usuario, Quadra
│ ├── pages/ # Telas (login, home, etc.)
│ ├── widgets/ # Componentes reutilizáveis
│ └── services/ # Regras de negócio
└── test/ # Testes automatizados
UsuarioProprietario → Quadra (1:N)
UsuarioComum → Reserva (1:N)
Quadra → Reserva (1:N)
Reserva → Pagamento (1:1)
jogajunto-db/
│
├── usuarios/ # Coleção de usuários (comuns e proprietários)
│ └── {usuarioId}/
│ ├── # muda de acordo com o usuario isso aqui é só um exemplo
│ ├── nome: string
│ ├── email: string
│ ├── telefone: string
│ ├── cpf: string
│ ├── cnpj: string (apenas se proprietario)
│ ├── historicoReservas: [reservaId, reservaId...] (apenas se comum)
│ └── listaQuadras: [quadraId, quadraId...] (apenas se proprietario)
│
quadras/
│ └── {quadraId}/
│ ├── nome: string // Ex: "Quadra Miotto"
│ ├── endereco: string // Ex: "Rua do Comércio, 123"
│ ├── tipo: string // Ex: "Futebol", "Vôlei"
│ ├── precoPorHora: number // Ex: 120.0
│ ├── localizacao: geopoint // Ex: { latitude: -24.95, longitude: -53.45 }
│ ├── disponibilidade: [ // Lista de horários
│ │ { inicio: timestamp, fim: timestamp },
│ │ { inicio: timestamp, fim: timestamp },
│ │ ...]
│ └── proprietarioId: usuarioId // Ex: "uid_123456789"
│
├── reservas/
│ └── {reservaId}/
│ ├── usuarioId: string
│ ├── quadraId: string
│ ├── dataHoraInicio: timestamp
│ ├── dataHoraFim: timestamp
│ ├── valorTotal: number
│ └── status: string ("Pendente", "Confirmada", "Cancelada")
│
├── avaliacoes/
│ └── {avaliacaoId}/
│ ├── usuarioId: string
│ ├── quadraId: string
│ ├── nota: number (1-5)
│ └── comentario: string
│
└── pagamentos/
└── {pagamentoId}/
├── reservaId: string
├── valor: number
├── metodoPagamento: string ("Cartão", "Pix")
└── statusPagamento: string ("Pago", "Pendente")