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

Last edited by Denilson Kersting Araujo Jun 25, 2025
Page history

Frontend

Home

Escopo e Cronograma

Processo

Design/Mockups

Configuração

Arquitetura

BD

Backend

Frontend

Qualidade

Frontend

Esta página centraliza informações sobre o repositório Frontend do projeto Lucky Draw.

Sumário

  • Escolha de tecnologias
  • Organização do projeto
  • Padrões de código
    • Nomenclatura de componentes
    • Nomenclatura de variáveis e funções
  • Estilo e tema (fontes e cores)
  • Tratamento de autenticação
  • Boas práticas de organização de serviços e rotas
  • Integração com backend via Axios

Escolha de tecnologias

O frontend do projeto foi desenvolvido utilizando React Native, permitindo criar aplicativos nativos com JavaScript. As principais bibliotecas e ferramentas utilizadas incluem:

  • React Navigation: para gerenciamento de navegação entre as telas.
  • React Native Paper: biblioteca de componentes visuais baseada no Material Design.
  • Axios: para requisições HTTP à API backend.
  • react-native-encrypted-storage: para armazenamento seguro de dados.
  • TypeScript: para desenvolvimento.

Organização do projeto

O projeto está estruturado em pastas principais para separar responsabilidades.

Estrutura Principal:

  • android/: Configurações Android nativas.

  • ios/: Configurações iOS nativas.

  • __tests__/: Testes automatizados.

  • src/: Código fonte principal:

    • components/: Componentes reutilizáveis como botões, inputs, app bars, etc.

    • screens/: Telas completas como Login, Home, RevealCards, etc.

    • services/: Funções que lidam com chamadas HTTP para o backend.

    • routes/: Configuração de navegação e contexto de autenticação.

    • assets/: Imagens e outros arquivos estáticos.

    • styles/: Arquivos de estilo compartilhado.

Padrões de código

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:

import { colors } from '../../styles/colors';
<Text style={{ color: colors.primary }}>Texto</Text>

Exemplo de uso de fonte padrão:

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:

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:

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:

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

Banco de dados

Backend

Frontend

Qualidade