Guia do Desenvolvedor
Como configurar o ambiente, rodar o projeto e contribuir.
Pré-requisitos
- Node.js 20+
- npm 10+ ou yarn
- Expo CLI:
npm install -g @expo/cli - iOS: Xcode 15+ e simulador iOS (macOS only)
- Android: Android Studio com emulador configurado
- Conta Firebase (para configurar o projeto)
- Acesso à API externa (opcional para desenvolvimento local)
Setup inicial
1. Clonar o repositório
git clone https://github.com/amendx/Aurora.git
cd Aurora2. Instalar dependências
npm install3. Configurar Firebase
Crie um projeto no Firebase Console e adicione um app web.
Copie as credenciais e crie src/services/firebase/config.js:
import { initializeApp } from 'firebase/app'
import { getAuth } from 'firebase/auth'
import { getFirestore } from 'firebase/firestore'
const firebaseConfig = {
apiKey: "...",
authDomain: "...",
projectId: "...",
storageBucket: "...",
messagingSenderId: "...",
appId: "..."
}
const app = initializeApp(firebaseConfig)
export const auth = getAuth(app)
export const db = getFirestore(app)4. Configurar regras do Firestore
Deploy das regras de segurança:
npm install -g firebase-tools
firebase login
firebase deploy --only firestore:rules5. Rodar o projeto
# Expo Go (mais rápido para desenvolvimento)
npm start
# iOS Simulator
npm run ios
# Android Emulator
npm run androidVariáveis de ambiente
O Aurora não usa um arquivo .env padrão. As configurações sensíveis ficam em:
| Arquivo | Conteúdo |
|---|---|
src/services/firebase/config.js | Credenciais Firebase (não commitado) |
SecureStore (runtime) | Token de sessão API |
Nunca commit o firebase/config.js com credenciais reais.
Populando dados de teste
O script scripts/seed-firestore.mjs popula o Firestore com dados de exemplo:
node scripts/seed-firestore.mjsIsso cria um usuário de teste com plantões dos últimos 3 meses.
Arquitetura de telas
Cada tela segue este padrão:
export default function ExampleScreenPremium({ navigation }) {
const C = useColors() // design system
const s = makeStyles(C) // estilos baseados no tema
const { user } = useContext(AuthContext)
const { daysWithShifts } = useShifts()
// ... lógica
return (
<View style={s.container}>
{/* ... */}
</View>
)
}
const makeStyles = (C) => StyleSheet.create({
container: {
flex: 1,
backgroundColor: C.background,
},
// ...
})O padrão makeStyles(C) permite que os estilos respondam ao tema (dark/light) sem re-renderizações desnecessárias.
Adicionando uma nova tela
- Crie
src/screens/NovaTelaScreenPremium.jsseguindo o padrão acima - Registre em
src/navigation/AppNavigator.jsouTabNavigator.js - Use
navigation.navigate('NovaTela')para navegar
Adicionando um novo campo ao modelo de plantão
- Atualize
src/models/index.jscom o novo campo e tipo - Atualize o serviço de API se o campo vem da API
- Atualize
FirebaseAdapter.jsse o campo é persistido localmente - Atualize
StorageMigration.jsse dados antigos precisam ser migrados
Logger
Use o Logger em vez de console.log:
import Logger from '../utils/Logger'
Logger.debug('Carregando plantões', { month, userId })
Logger.info('Plantões carregados', { count })
Logger.warn('Sem plantões no mês', { month })
Logger.error('Erro ao carregar', error)Em produção, logs abaixo de warn são suprimidos.
Testes
O projeto ainda não tem testes automatizados configurados. Área de contribuição bem-vinda.
Para adicionar:
- Configure Jest com
@testing-library/react-native - Adicione testes para
ShiftValueCalculator.js(lógica pura, fácil de testar) - Adicione testes para
MonthSummaryComputer.js
Deploy
O app é distribuído via Expo. Para build de produção:
# EAS Build (recomendado)
npm install -g eas-cli
eas build --platform ios
eas build --platform androidConfigure eas.json com os profiles de build adequados.
Contribuindo
- Fork o repositório
- Crie uma branch:
git checkout -b feature/minha-feature - Commit com mensagem descritiva:
git commit -m "feat: adiciona X" - Abra um Pull Request com descrição do que foi feito e por quê