Diretrizes do Projeto
Histórico de versões
Versão | Alteração | Responsável | Data Alteração |
---|---|---|---|
1.0 | Criação do documento de política de commits | Diógenes Dantas Lélis Júnior | 08/06/2025 |
1.1 | Criação da Diretrizes de padronização de código | Pedro Amaral e João Marcelo Naves | 27/05/2025 |
1.2 | Adiciona o restante da documentação da Diretrizes do Projeto | Diógenes Dantas Lélis Júnior | 10/06/2025 |
1.3 | Correções padronização e nas tecnologias do mobile | Bruno Seiji Kishibe | 11/06/2025 |
Diretrizes do Projeto
Esse documento abrange as diretrizes que devem ser seguidas no projeto, abordando temas como estrutura do código, estrutura de diretórios, organização e importação de código
Diretrizes de Padronização de Código
Estas diretrizes estabelecem os padrões de codificação a serem adotados em todo o Projeto MDS para garantir consistência, legibilidade e manutenibilidade da base de código.
1. Regras Gerais
- Todos os comentários e nomes de variáveis devem ser escritos em inglês.
- Comentários devem ser úteis e explicativos, elucidando o porquê do segmento de código, e não meramente reafirmando sua função.
2. Python
- Variáveis: Empregue nomes descritivos utilizando snake_case (letras minúsculas com palavras separadas por sublinhado). Exemplo: test_file
- Funções: Nomeie funções utilizando snake_case. Exemplo: calculate_total
- Classes: Utilize PascalCase (cada palavra começa com letra maiúscula, sem separadores). Exemplo: UserProfile
- Nomes de Arquivos: Use snake_case.py. Exemplo: data_parser.py
2.1 Estrutura do Módulo Back-end FastAPI
Para a organização de projetos backend em Python utilizando FastAPI, recomenda-se a seguinte estrutura de diretórios para modularização e separação de responsabilidades:
Models
- Função: Define os modelos de dados da aplicação, representando a estrutura das tabelas do banco de dados e suas relações. Geralmente, contém classes que mapeiam para o banco de dados através de um ORM(Object-Relational Mapper), como SQLAlchemy, e são usadas pelos services para interagir com o banco.
- Conteúdo Típico: Arquivos Python definindo classes que representam entidades do sistema (ex: user_model.py, product_model.py).
Routes
- Função: Define os endpoints (URLs) da API. Responsável por receber as requisições HTTP (GET, POST, PUT, DELETE, etc.) utilizando os decoradores do FastAPI (ex: @router.get). Realiza a validação dos dados de entrada e formatação dos dados de saída com a ajuda de schemas (Pydantic) e direciona a requisição para a lógica de negócio apropriada nos services.
- Conteúdo Típico: Arquivos Python que implementam os endpoints para cada recurso da aplicação (ex: user_routes.py, auth_routes.py), utilizando APIRouter do FastAPI para agrupar rotas relacionadas.
Schemas
- Função: Define a estrutura, tipos de dados e regras de validação para os dados que entram e saem da API, utilizando classes Pydantic. São cruciais para a validação automática de requests e responses do FastAPI, além de serem utilizados para gerar a documentação interativa da API (Swagger UI / OpenAPI).
- Conteúdo Típico: Arquivos Python com classes Pydantic que definem a forma dos dados para criação, atualização e visualização de recursos (ex: user_schemas.py contendo UserCreate, UserUpdate, UserResponse).
Services
- Função: Contém a lógica de negócio principal da aplicação. Os serviços orquestram as operações, interagem com os models para acessar e manipular dados do banco de dados, e executam as regras de negócio. São chamados pelas routes para processar as requisições de forma desacoplada do framework HTTP.
- Conteúdo Típico: Arquivos Python com funções ou classes que implementam as operações específicas para cada recurso (ex: user_service.py com funções como create_user_service, get_user_by_id_service).
Arquivo Principal
O arquivo principal da aplicação (comumente main.py ou app.py na raiz do diretório da aplicação) é o ponto de entrada e é responsável por:
-
Inicialização da Aplicação:
- Criar a instância principal do FastAPI: app = FastAPI().
-
Configuração Global:
- Carregar configurações da aplicação (ex: variáveis de ambiente, segredos).
- Configurar middlewares (ex: CORS, autenticação, tratamento de erros).
- Estabelecer e gerenciar conexões com bancos de dados (ex: definir engine e SessionLocal do SQLAlchemy) e outros serviços externos.
- Opcionalmente, pode incluir lógica para criar tabelas no banco de dados durante a inicialização (ex: Base.metadata.create_all(bind=engine)), embora em produção migrações (com Alembic, por exemplo) sejam preferíveis.
-
Registro de Rotas:
- Importar os objetos APIRouter definidos nos módulos de routes e registrá-los na instância principal da aplicação usando app.include_router(router_object).
-
Ponto de Paretida do Servidor (em Contexto Docker):
- Ao usar Docker, o comando para iniciar o servidor ASGI (como Uvicorn) é geralmente especificado no Dockerfile (ex: CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]). O arquivo main.py em si não precisa conter a lógica explícita uvicorn.run() para este cenário, pois o Docker gerencia o ciclo de vida do processo.
3. TypeScript
Funções
- Use camelCase (a primeira palavra em minúscula, as demais com inicial maiúscula).
- Exemplo: loadUserData
Classes
- Nomeie classes utilizando PascalCase.
- Exemplo: MainComponent
Nome de Arquivos
- Componentes React: PascalCase.tsx
- Exemplo: UserCard.tsx
- Utilitários ou Funções Auxiliares: camelCase.ts
- Exemplo: formatDate.ts
4. React + StyleSheet
React
O React adere às convenções de nomenclatura do TypeScript previamente delineadas: - Funções são nomeadas utilizando camelCase. - Componentes e classes são nomeados utilizando PascalCase
StyleSheet
- Os estilos devem ser definidos em arquivos .ts separados.
- Empregue nomes de classes descritivos utilizando kebab-case (palavras em minúsculo separadas por hífens).
- Exemplo: .main-container
Organização e importação
- O StyleSheet deve ser importado no topo do arquivo do componente correspondente.
- Exemplo: import './UserCard.ts';
- Evite estilos inline sempre que possível, priorizando o uso de classes.
- Agrupe estilos relacionados no mesmo arquivo para facilitar a manutenção.