Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • bah-wiki bah-wiki
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • 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
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Create a new issue
  • Jobs
  • Issue Boards
Collapse sidebar
  • Bah – Plataforma de Inovação de Caxias do Sul
  • bah-wikibah-wiki
  • Wiki
  • Arquitetura

Arquitetura · Changes

Page history
Update Arquitetura authored Sep 24, 2025 by Maurício Gaspary's avatar Maurício Gaspary
Show whitespace changes
Inline Side-by-side
Arquitetura.md 0 → 100644
View page @ 6bc23608
| [Home](home) | [Escopo](escopo) | [Gerência](Gerência) | [Processo](processo) | [Design](design) | [Configuração](configuração) | [Arquitetura](arquitetura) | [Banco de Dados](Banco de Dados)
|-|-|-|-|-|-|-|-|
## Descrição
Esta seção aborda os detalhes sobre a arquitetura selecionada para o backend e frontend da Plataforma de Inovação de Caxias do Sul (BAH), além das informações relacionadas ao deploy.
## Sumário
- [Arquitetura Geral da Aplicação](#arquitetura-geral-da-aplicação)
- [Deploy](#deploy)
- [Diagrama de Deploy](#diagrama-de-deploy)
- [Containerização](#containerização)
- [Diagrama do Sistema](#diagrama-do-sistema)
- [Diagrama de Componentes](#diagrama-de-componentes)
- [Backend](#backend)
- [Frontend](#frontend)
## Arquitetura geral da aplicação
Baseando-se no que foi planejado para o nosso banco de dados, levantamento dos requisitos e o entendimento geral do time sobre o projeto a ser desenvolvido, optamos por uma arquitetura de Cliente-Servidor, onde há uma separação clara entre o frontend e backend.
O **frontend** é responsável por apresentar a interface ao usuário e interagir com o backend via chamadas de API REST. Já o **backend** por sua vez, gerencia a lógica de negócios, processamento de dados e interações com o banco de dados PostgreSQL.
A arquitetura utiliza uma abordagem modular que facilita a reutilização de código e melhor organização do projeto. Ao construirmos a arquitetura desta maneira permitimos uma escalabilidade maior, fácil manutenção e um desenvolvimento mais ágil para cada parte do sistema.
### Principais características arquiteturais:
- **Separação de responsabilidades**: Frontend (React) e Backend (FastAPI) independentes
- **API RESTful**: Comunicação padronizada via HTTP/JSON
- **Containerização**: Uso do Docker para facilitar deploy e desenvolvimento
- **Banco de dados relacional**: PostgreSQL para persistência de dados
- **Migrações automatizadas**: Alembic para controle de versão do banco de dados
## Deploy
Deploy consiste no processo de colocar no ar uma aplicação já concluída. Ele pode ocorrer durante várias fases do projeto, bem como após a sua conclusão. A aplicação BAH utiliza containerização Docker para facilitar o processo de deploy e garantir consistência entre ambientes de desenvolvimento, teste e produção.
### Estratégia de Deploy
- **Containerização**: Aplicação empacotada em containers Docker
- **Orquestração**: Docker Compose para gerenciar múltiplos serviços
- **Banco de dados**: PostgreSQL em container separado
- **Migrações**: Processo automatizado via Alembic
- **Dados iniciais**: Script de seed para popular dados básicos
### Diagrama de Deploy
## Containerização
A aplicação utiliza Docker para containerização, proporcionando:
### Benefícios
- **Consistência de ambiente**: Mesmas dependências em dev/test/prod
- **Isolamento**: Cada serviço em seu próprio container
- **Escalabilidade**: Fácil replicação de serviços
- **Portabilidade**: Execução em qualquer ambiente que suporte Docker
### Serviços Docker
- **db**: PostgreSQL 15 Alpine
- **migrate**: Execução das migrações do banco
- **seed**: Inserção de dados iniciais
- **app**: Aplicação FastAPI principal
## Diagrama do Sistema
O diagrama apresenta a maneira que as camadas do sistema se comunicam. O sistema BAH funciona da seguinte maneira:
**Fluxo de funcionamento:**
1. O usuário interage com o frontend React
2. O frontend envia uma requisição HTTP através de uma chamada para a API REST do backend
3. O backend (FastAPI) processa a requisição e executa a lógica apropriada (validação de dados, autenticação, autorização)
4. O backend interage com o banco de dados PostgreSQL via SQLAlchemy para armazenar e/ou recuperar dados
5. O backend retorna uma resposta HTTP/JSON para a requisição
6. O frontend processa a resposta e atualiza a interface do usuário conforme esperado
## Diagrama de Componentes
O diagrama de componentes da aplicação apresenta a maneira que as classes e módulos do sistema estão organizados, levando em consideração as interfaces e componentes criados.
## Backend
https://tools.ages.pucrs.br/bah-plataforma-de-inova-o-de-caxias-do-sul/bah-backend
### Definições de Tecnologias
<table align="center">
<tr><td align="center">
**FastAPI** é um framework web moderno e de alta performance para construção de APIs com Python 3.7+ baseado em type hints padrão do Python. Oferece validação automática de dados, documentação interativa automática e alta performance comparável ao NodeJS.
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/fastapi/fastapi-original.svg" alt="FastAPI" width="64" height="64">
**SQLAlchemy** é o toolkit SQL mais popular do Python e Object Relational Mapper que oferece aos desenvolvedores de aplicações toda a potência e flexibilidade do SQL. Fornece um conjunto completo de padrões de persistência empresarial bem conhecidos.
<img src="https://raw.githubusercontent.com/devicons/devicon/master/icons/sqlalchemy/sqlalchemy-original-wordmark.svg" alt="SQLAlchemy" width="128" height="64">
**Alembic** é uma ferramenta de migração de banco de dados para SQLAlchemy. Permite criar, gerenciar e aplicar migrações de esquema de banco de dados de forma controlada e versionada.
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/python/python-original.svg" alt="Alembic (Python)" width="64" height="64">
**Pydantic** é uma biblioteca de validação de dados que usa type hints do Python. Garante que os dados de entrada estejam no formato correto e facilita a serialização/deserialização de dados.
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/python/python-original.svg" alt="Pydantic (Python)" width="64" height="64">
**PostgreSQL** é um sistema de banco de dados objeto-relacional (ORDBMS) baseado no POSTGRES, desenvolvido na Universidade da Califórnia em Berkeley. É conhecido por sua confiabilidade, robustez de recursos e performance.
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/postgresql/postgresql-original.svg" alt="PostgreSQL" width="64" height="64">
**Uvicorn** é um servidor ASGI lightning-fast, construído em uvloop e httptools. É ideal para executar aplicações FastAPI com alta performance.
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/python/python-original.svg" alt="Uvicorn (Python)" width="64" height="64">
**Docker** é uma plataforma de containerização que permite empacotar aplicações e suas dependências em containers leves e portáteis.
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/docker/docker-original.svg" alt="Docker" width="64" height="64">
</td></tr>
</table>
### Módulos do Sistema
A estrutura do backend foi organizada seguindo os princípios de Clean Architecture e separação de responsabilidades:
```
bah-backend/
├── app/
│ ├── config/ # Configurações da aplicação
│ │ ├── database.py # Configuração do banco de dados
│ │ ├── integration_settings.py # Configurações de integrações
│ │ └── settings.py # Configurações gerais
│ ├── controllers/ # Controladores/Endpoints
│ │ ├── admin_controller_example.py
│ │ ├── admin_iniciativa_controller.py
│ │ └── iniciativa_controller.py
│ ├── models/ # Modelos de dados (SQLAlchemy)
│ │ ├── base.py # Modelo base
│ │ ├── contato_model.py
│ │ ├── iniciativa_model.py
│ │ ├── organizador_model.py
│ │ ├── tag_model.py
│ │ └── usuario_model.py
│ ├── repositories/ # Camada de acesso a dados
│ │ ├── admin_iniciativa_repository.py
│ │ └── iniciativa_repository.py
│ ├── routes/ # Definição de rotas da API
│ │ ├── admin_iniciativa_route.py
│ │ └── iniciativa_route.py
│ ├── schemas/ # Schemas Pydantic para validação
│ │ ├── admin_iniciativa_schemas.py
│ │ └── iniciativa_schema.py
│ ├── services/ # Lógica de negócio
│ │ ├── admin_iniciativa_service.py
│ │ └── iniciativa_service.py
│ ├── scripts/ # Scripts utilitários
│ │ └── seed.py # Script para popular dados iniciais
│ └── utils/ # Utilitários
│ └── helpers.py
├── migrations/ # Migrações do banco de dados (Alembic)
├── tests/ # Testes automatizados
└── ai-search/ # Módulo de busca inteligente
```
## Frontend
https://tools.ages.pucrs.br/bah-plataforma-de-inova-o-de-caxias-do-sul/bah-frontend
### Definições de Tecnologias
<table align="center">
<tr><td align="center">
**React 19** é uma biblioteca front-end de JavaScript, utilizada para definir a parte lógica e criar componentes reutilizáveis para aplicações web de página única. A versão 19 inclui melhorias significativas em performance e novas funcionalidades.
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/react/react-original.svg" alt="React" width="64" height="64">
**TypeScript** é uma linguagem de programação de código aberto desenvolvida pela Microsoft. É um superconjunto sintático estrito de JavaScript e adiciona tipagem estática opcional à linguagem, proporcionando melhor experiência de desenvolvimento e menos erros.
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/typescript/typescript-original.svg" alt="TypeScript" width="64" height="64">
**Vite** é uma ferramenta de construção front-end moderna que melhora significativamente a experiência de desenvolvimento. Ele serve código via módulos ES nativos, permitindo um início rápido do servidor e substituição de módulos a quente (HMR).
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/vite/vite-original.svg" alt="Vite" width="64" height="64">
**Tailwind CSS v4** é uma estrutura CSS de código aberto utility-first. A principal característica desta biblioteca é que, ao contrário de outros frameworks CSS como Bootstrap, ela fornece classes utilitárias de baixo nível para construir designs personalizados.
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/tailwindcss/tailwindcss-original.svg" alt="Tailwind CSS" width="64" height="64">
**shadcn/ui** é uma coleção de componentes reutilizáveis construídos usando Radix UI e Tailwind CSS. Oferece componentes acessíveis e totalmente customizáveis que podem ser copiados e colados diretamente no projeto.
<img src="https://ui.shadcn.com/favicon.ico" alt="shadcn/ui" width="64" height="64">
**Lucide React** é uma biblioteca de ícones que fornece ícones SVG simples e consistentes para React. É uma alternativa moderna ao Feather Icons.
<img src="https://raw.githubusercontent.com/lucide-icons/lucide/main/docs/public/logo.light.svg" alt="Lucide React" width="64" height="64">
**React Hook Form** é uma biblioteca para gerenciamento de formulários em React com mínimo re-renders, validação fácil e melhor performance.
<img src="https://react-hook-form.com/images/logo/react-hook-form-logo-only.svg" alt="React Hook Form" width="64" height="64">
**Zod** é uma biblioteca de declaração e validação de dados TypeScript-first. Permite criar schemas com os requisitos de dados que você deseja validar, garantindo type safety em tempo de compilação e runtime.
<img src="https://github.com/colinhacks/zod/raw/main/logo.svg" alt="Zod" width="64" height="64">
**React Router DOM** é a biblioteca padrão para roteamento em aplicações React, permitindo navegação entre diferentes páginas/componentes.
<img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/react/react-original.svg" alt="React Router" width="64" height="64">
</td></tr>
</table>
### Diagrama de Fluxo
### Módulos do Sistema
A estrutura do frontend foi organizada seguindo boas práticas do React e separação de responsabilidades:
```
bah-frontend/
├── src/
│ ├── components/ # Componentes reutilizáveis
│ │ └── ui/ # Componentes UI (shadcn/ui)
│ ├── contexts/ # Contextos React (estado global)
│ ├── lib/ # Utilitários e configurações
│ ├── pages/ # Páginas/Telas da aplicação
│ ├── assets/ # Recursos estáticos (imagens, ícones)
│ ├── App.tsx # Componente principal
│ ├── main.tsx # Ponto de entrada da aplicação
│ └── index.css # Estilos globais
├── public/ # Arquivos públicos
├── package.json # Dependências e scripts
├── vite.config.ts # Configuração do Vite
├── tailwind.config.js # Configuração do Tailwind CSS
└── tsconfig.json # Configuração do TypeScript
```
### Principais funcionalidades:
- **Componentização**: Componentes reutilizáveis e modulares
- **Gerenciamento de Estado**: React Context e useState/useEffect
- **Roteamento**: React Router para navegação SPA
- **Validação**: React Hook Form + Zod para formulários
- **Estilização**: Tailwind CSS para design responsivo
- **Type Safety**: TypeScript para segurança de tipos
- **Build Otimizado**: Vite para desenvolvimento e build de produção
Clone repository
  • Arquitetura
  • Banco de Dados
  • Design
  • Escopo
  • Gerência
  • Processo
  • Home