Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • Wiki Wiki
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Lucky Draw
  • WikiWiki
  • Wiki
  • Frontend

Frontend · Changes

Page history
Update Frontend authored May 31, 2025 by Leticia's avatar Leticia
Hide whitespace changes
Inline Side-by-side
Frontend.md
View page @ ed2b5ffb
<table>
<tr>
<th> [Home](home) </th>
<th> [Escopo e Cronograma](Escopo e Cronograma) </th>
<th> [Processo](Processo) </th>
<th> [Design/Mockups](Design & Mockups) </th>
<th> [Configuração](Configuracao) </th>
<th> [Arquitetura](Arquitetura) </th>
<th> [Infra](Infraestrutura) </th>
<th> [Código](Codigo) </th>
<th> [BD](Banco de dados) </th>
<th> [Backend](Backend) </th>
<th> [Frontend](Frontend) </th>
<th> [Qualidade](Qualidade) </th>
</tr>
</table>
# Frontend # Frontend
## Definições de Tecnologias Esta página centraliza informações sobre o [repositório Frontend do projeto Lucky Draw](https://tools.ages.pucrs.br/lucky-draw/front-end).
- Linguagem: Typescript
- Framework: React Native ## Sumário
### 1. Estrutura Raiz do Projeto: * [Escolha de tecnologias](#escolha-de-tecnologias)
- App.tsx: O componente raiz da aplicação * [Organização do projeto](#organizacao-do-projeto)
- index.js: Ponto de entrada da aplicação * [Padrões de código](#padroes-de-codigo)
- package.json: Gerenciamento de dependências e scripts * [Nomenclatura de componentes](#nomenclatura-de-componentes)
- tsconfig.json: Configurações do TypeScript * [Nomenclatura de variáveis e funções](#nomenclatura-de-variaveis-e-funcoes)
- metro.config.js: Configuração do bundler do React Native * [Estilo e tema (fontes e cores)](#estilo-e-tema-fontes-e-cores)
- babel.config.js: Configuração do Babel para transpilação * [Tratamento de autenticação](#tratamento-de-autenticacao)
- .eslintrc.js e .prettierrc.js: Configurações de linting e formatação de código * [Boas práticas de organização de serviços e rotas](#boas-praticas-de-organizacao-de-servicos-e-rotas)
* [Integração com backend via Axios](#integracao-com-backend-via-axios)
### 2. Módulos do sistema estão presentes no diretório src/, com a organização seguinte:
- components/: Componentes reutilizáveis da interface ## Escolha de tecnologias
- pages/: Telas da aplicação
- routes/: Configurações de navegação O frontend do projeto foi desenvolvido utilizando **React Native**, permitindo criar aplicativos nativos com JavaScript. As principais bibliotecas e ferramentas utilizadas incluem:
- services/: Serviços e integrações com APIs
- assets/: Recursos estáticos (imagens, fontes, etc.) - React Navigation: para gerenciamento de navegação entre as telas.
- styles/: Estilos globais e temas - React Native Paper: biblioteca de componentes visuais baseada no Material Design.
- mocks/: Dados simulados para desenvolvimento/testes - Axios: para requisições HTTP à API backend.
- react-native-encrypted-storage: para armazenamento seguro de dados.
### 3. Plataformas Nativas: - TypeScript: para desenvolvimento.
- android/: Configurações específicas para Android
- ios/: Configurações específicas para iOS ## Organização do projeto
### 4. Ferramentas de Desenvolvimento: O projeto está estruturado em pastas principais para separar responsabilidades:
- Jest para testes
- ESLint para linting - `components/`: Componentes reutilizáveis como botões, inputs, app bars, etc.
- Prettier para formatação de código - `screens/`: Telas completas como Login, Home, RevealCards, etc.
- Babel para transpilação - `services/`: Funções que lidam com chamadas HTTP para o backend.
- TypeScript para tipagem estática - `routes/`: Configuração de navegação e contexto de autenticação.
- Metro para bundling - `assets/`: Imagens e outros arquivos estáticos.
- `styles/`: Arquivos de estilo compartilhado.
### Estruturação:
![Imagem1](uploads/a3e09113187bb91e33bf9fcb55646127/Imagem1.png) ## Padrões de código
\ No newline at end of file
### Nomenclatura de componentes
Componentes devem ser nomeados em **PascalCase**:
- `CustomButton.tsx`
- `CustomAppBar.tsx`
### Nomenclatura de variáveis e funções
Utiliza-se o padrão **camelCase** para variáveis e funções:
- `isAdmin`, `handleLogout`, `getDailyChallengeStatus`
Evite abreviações excessivas. Nomeie com clareza.
## Estilo e tema (fontes e cores)
As fontes e cores padrão do projeto estão definidas no repositório dentro da pasta `styles`. Recomenda-se que todo componente reutilizável utilize os estilos definidos nessa pasta, para manter padronização visual entre telas.
Exemplo de uso de cor padrão:
```tsx
import { colors } from '../../styles/colors';
<Text style={{ color: colors.primary }}>Texto</Text>
```
Exemplo de uso de fonte padrão:
```tsx
import { fonts } from '../../styles/fonts';
<Text style={{ fontFamily: fonts.medium }}>Título</Text>
```
**Não é recomendado** definir fontes ou cores diretamente em `style={{ }}` nos componentes sem reutilizar os arquivos da pasta `styles`.
## Tratamento de autenticação
A autenticação JWT é gerenciada via `AuthContext` com tokens armazenados de forma segura em `EncryptedStorage`. A função `signIn` salva o token e `signOut` limpa os dados. O token é lido automaticamente e injetado nos headers via interceptor do Axios.
## Boas práticas de organização de serviços e rotas
Os serviços devem estar organizados em arquivos separados dentro da pasta `services`, agrupados por domínio (ex: `userService.ts`, `gameService.ts`). Cada serviço deve conter apenas a lógica de requisição (sem lógicas de estado ou interface).
As rotas devem ser tipadas utilizando `@react-navigation/native-stack` com o arquivo `types.ts`.
## Integração com backend via Axios
A integração é feita com a instância configurada do Axios no arquivo `api.ts`:
```ts
const api = axios.create({
baseURL: 'http://<ip>:8080/api',
headers: {
'Content-Type': 'application/json',
},
});
api.interceptors.request.use(async (config) => {
const token = await getItem('authToken');
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});
```
Todas as funções que comunicam com o backend usam essa instância.
Exemplo de serviço com `axios`:
```ts
export async function getDailyChallengeStatus() {
const response = await api.get('/users/game-status', {
params: { gameType: 'DAILY_CHALLENGE' },
});
return response.data;
}
```
O `AuthContext` é responsável por salvar o token JWT e garantir que o usuário está logado. As requisições protegidas devem aguardar que o token esteja disponível antes de executar chamadas:
```tsx
useEffect(() => {
if (!token) return;
fetchStatus();
}, [token]);
```
Clone repository

imagem_2025-03-26_201248038

Lucky Draw

Home

Escopo e Cronograma

Processo

Design & Mockups

Configuração

Arquitetura

Infraestrutura

Código

Banco de dados

Backend

Frontend

Qualidade