Decisão de Stack Tecnológica - ifpebj-ti/controle-acesso-veiculos GitHub Wiki
Decisão de Stack Tecnológica
Projeto: Controle de Acesso de Veículos
Instituição: Instituto Federal de Pernambuco — Campus Belo Jardim
Disciplina: Projeto Integrador — Práticas Reais de Software e Segurança
Equipe: José Ernandes Gonçalves Costa; Raíssa Beatriz Marinho dos Santos
Cliente inicial: Eurico Lopes — Setor de Transporte
Versão: 0.5
Status: Stack, persistência, segurança e fluxos técnicos do MVP implementados; implantação institucional pendente
Data de referência: 29 de agosto de 2026
Issue relacionada: #14 — Documentar decisão de stack tecnológica
Issues relacionadas à implementação: #16 — Estruturar monorepo inicial
1. Objetivo
Este documento registra as decisões de stack tecnológica, arquitetura e infraestrutura do projeto Controle de Acesso de Veículos.
As decisões orientam:
- Desenvolvimento do frontend.
- Desenvolvimento do backend.
- Persistência dos dados.
- Organização arquitetural.
- Testes.
- Containerização.
- Integração contínua.
- Implantação futura na OCI.
- Operação e manutenção do sistema.
O documento separa explicitamente:
- Stack de aplicação.
- Decisões arquiteturais.
- Infraestrutura e entrega.
- Ferramentas implementadas.
- Decisões técnicas ainda pendentes.
2. Contexto do projeto
O sistema será desenvolvido para apoiar ou substituir o processo manual de controle de entrada, saída e movimentação de veículos do IFPE Campus Belo Jardim.
O MVP está concentrado nos Formulários nº 01 e nº 02 e deve contemplar preliminarmente:
- Cadastro de veículos.
- Cadastro de pessoas relacionadas a veículos.
- Associação entre pessoas e veículos.
- Registro de entrada.
- Registro de saída.
- Consulta por placa, veículo, condutor, motorista e período.
- Controle de veículos institucionais.
- Registro de motorista.
- Registro de quilometragem.
- Registro de itinerário.
- Correções controladas.
- Auditoria.
- Perfis e permissões.
A estrutura do monorepo, a persistência PostgreSQL, autenticação e o primeiro caso de uso operacional já foram implementados. Os demais casos de uso e as telas funcionais permanecem pendentes.
O frontend será responsabilidade principal de Raíssa Beatriz Marinho dos Santos.
Backend, banco de dados, DevSecOps, infraestrutura e QA terão responsabilidade principal de José Ernandes Gonçalves Costa.
3. Tecnologias e direcionamentos
3.1. Stack principal
| Categoria | Item | Decisão | Situação |
|---|---|---|---|
| Stack — Frontend | Biblioteca de interface | React | Implementado na estrutura inicial |
| Stack — Frontend | Linguagem | TypeScript | Implementado na estrutura inicial |
| Stack — Frontend | Build | Vite | Implementado e validado |
| Stack — Frontend | Estilização | Tailwind CSS 4 + @tailwindcss/vite |
Implementado e validado |
| Stack — Frontend | Gerenciador de dependências | npm | Implementado |
| Stack — Frontend | Lint | ESLint | Implementado e validado |
| Stack — Backend | Framework | ASP.NET Core Web API | Estrutura inicial criada |
| Stack — Backend | Linguagem | C# | Implementado na estrutura inicial |
| Stack — Backend | Versão | .NET 10 e net10.0 |
Implementado e validado |
| Stack — Backend | Solução | .slnx |
Implementada |
| Stack — Dados | Banco de dados | PostgreSQL 16 | Configurado para desenvolvimento e containers |
| Stack — Dados | ORM | Entity Framework Core 10 com Npgsql | Implementado |
| Stack — Dados | Migrações | Entity Framework Core Migrations | Duas migrations versionadas |
| Arquitetura | Organização interna do backend | Clean Architecture adaptada ao MVP | Estrutura inicial criada |
| Arquitetura | Estilo de aplicação | Monólito modular | Confirmado |
| Infraestrutura | Containerização | Docker e Docker Compose | Estrutura inicial criada |
| Infraestrutura | CI/CD | GitHub Actions | Implementado e validado |
| Infraestrutura | Hospedagem futura | VM Linux na OCI | Confirmado; não implementado |
| Licença | Licença do repositório | Apache License 2.0 | Implementada |
3.2. Resumo
Stack de aplicação
- Frontend: React + TypeScript + Vite + Tailwind CSS 4
- Backend: ASP.NET Core Web API + C# + .NET 10
- Banco de dados: PostgreSQL
- ORM e migrations: Entity Framework Core
Arquitetura
- Clean Architecture adaptada ao MVP no backend
- Monólito modular
- API Web organizada em camadas
Infraestrutura e entrega
- Docker e Docker Compose
- GitHub Actions
- VM Linux futura na OCI
- Proxy reverso, HTTPS, logs, monitoramento e backup: pendentes
4. Decisão sobre .NET 10
4.1. Versão adotada
O backend utiliza:
.NET 10
Target Framework: net10.0
Formato de solução: .slnx
4.2. Situação atual
O SDK .NET 10 está disponível no ambiente principal de desenvolvimento.
A solução backend foi criada e validada com:
dotnet restore src/backend/ControleAcessoVeiculos.slnx
dotnet build src/backend/ControleAcessoVeiculos.slnx --no-restore
dotnet test src/backend/ControleAcessoVeiculos.slnx --no-build --verbosity normal
4.3. Justificativa
A adoção do .NET 10 foi confirmada pela equipe porque:
- O SDK está instalado e disponível no ambiente principal.
- Possui compatibilidade com ASP.NET Core Web API.
- Possui compatibilidade com Docker e Linux.
- É compatível com execução futura em VM Linux na OCI.
- Suporta Entity Framework Core e PostgreSQL.
- Permite desenvolvimento orientado a objetos em C#.
- É adequado para uma API com regras de negócio, auditoria, validações e perfis de acesso.
- O período de suporte cobre o desenvolvimento e a entrega planejada do projeto.
4.4. Regra de implementação
Todos os projetos backend devem manter:
<TargetFramework>net10.0</TargetFramework>
Alterações de versão deverão ser discutidas pela equipe e registradas na Matriz de Ferramentas Técnicas.
5. Justificativa da stack
5.1. Frontend com React, TypeScript, Vite e Tailwind CSS
O frontend utiliza React, TypeScript, Vite e Tailwind CSS 4.
A escolha permite:
- Criar uma interface web para portaria e Setor de Transporte.
- Trabalhar com componentes reutilizáveis.
- Utilizar tipagem estática no frontend.
- Gerar builds rápidos para desenvolvimento e produção.
- Criar formulários e telas administrativas futuramente.
- Aplicar estilos responsivos e customizados com Tailwind CSS.
- Manter flexibilidade visual para a interface definida pela equipe.
A configuração de Tailwind foi realizada com o plugin oficial:
@tailwindcss/vite
O projeto não utiliza mais a configuração legada baseada em tailwind.config.js e postcss.config.js.
5.2. Backend com ASP.NET Core e C#
A escolha de ASP.NET Core Web API com C# considera:
- Experiência da pessoa responsável pelo backend.
- Adequação a orientação a objetos.
- Suporte à organização em camadas.
- Compatibilidade com Clean Architecture.
- Recursos para autenticação e autorização.
- Compatibilidade com Entity Framework Core.
- Facilidade de evolução para testes automatizados.
- Compatibilidade com Docker, Linux e OCI.
- Adequação a regras de negócio, auditoria e validações.
5.3. PostgreSQL
PostgreSQL foi escolhido como banco de dados relacional porque o projeto possui relações estruturadas entre:
- Pessoas.
- Veículos.
- Relações entre pessoas e veículos.
- Registros de acesso.
- Viagens institucionais.
- Usuários.
- Perfis.
- Auditoria.
O banco relacional oferece:
- Chaves estrangeiras.
- Integridade referencial.
- Transações.
- Consultas por período.
- Consultas por placa.
- Consultas por motorista.
- Relacionamentos muitos-para-muitos.
- Suporte adequado à auditoria.
5.4. Entity Framework Core
Entity Framework Core será utilizado como ORM e camada de acesso a dados.
Ele permitirá:
- Mapear entidades C# para tabelas.
- Configurar relacionamentos.
- Aplicar consultas tipadas.
- Criar migrations.
- Evoluir o esquema do banco de forma versionada.
- Organizar persistência na camada Infrastructure.
O uso do ORM não elimina a necessidade de compreender SQL, modelagem relacional, índices, transações e desempenho.
5.5. Clean Architecture adaptada
Clean Architecture é uma decisão arquitetural, não uma tecnologia da stack.
Ela será aplicada de forma adaptada ao tamanho do MVP, evitando complexidade artificial e mantendo separação entre:
- Domain.
- Application.
- Infrastructure.
- API.
A estrutura inicial foi criada como:
src/backend/
├── ControleAcessoVeiculos.slnx
├── ControleAcessoVeiculos.API/
├── ControleAcessoVeiculos.Application/
├── ControleAcessoVeiculos.Domain/
└── ControleAcessoVeiculos.Infrastructure/
5.6. Docker e Docker Compose
Docker e Docker Compose são decisões de infraestrutura e entrega.
A estrutura inicial foi criada com:
- Dockerfile do backend.
- Dockerfile do frontend.
- Configuração Nginx inicial do frontend.
docker-compose.ymlcom frontend, backend e PostgreSQL.
A execução integrada com Docker Compose ainda precisa ser validada antes de ser considerada pronta para uso.
5.7. GitHub Actions
GitHub Actions foi configurado para automação inicial de qualidade.
Foram criados workflows para:
- Restore e build do backend.
- Execução de testes existentes no backend.
- Instalação de dependências do frontend.
- Lint do frontend.
- Build do frontend.
Os checks foram executados com sucesso no Pull Request da estrutura inicial do monorepo.
A pipeline deverá evoluir gradualmente para contemplar:
lint
↓
build
↓
testes unitários
↓
testes de integração
↓
cobertura
↓
análise de dependências
↓
build de imagens
↓
análise de imagens
↓
publicação ou deploy futuro
5.8. Apache License 2.0
O repositório utiliza Apache License 2.0.
A licença foi mantida porque já fazia parte do repositório e estabelece permissões e condições claras para uso, reprodução, modificação e distribuição do código.
6. Arquitetura da solução
6.1. Camadas do backend
┌─────────────────────────────────────────┐
│ API │
│ Endpoints HTTP, DI, middlewares │
└──────────────────────┬──────────────────┘
│
┌──────────────────────▼──────────────────┐
│ Application │
│ Casos de uso, DTOs, interfaces │
└──────────────────────┬──────────────────┘
│
┌──────────────────────▼──────────────────┐
│ Domain │
│ Entidades, regras e contratos │
└──────────────────────▲──────────────────┘
│
┌──────────────────────┴──────────────────┐
│ Infrastructure │
│ EF Core, PostgreSQL e integrações │
└─────────────────────────────────────────┘
6.2. Responsabilidades das camadas
| Camada | Responsabilidades previstas |
|---|---|
| Domain | Entidades, regras de negócio, contratos, enums e objetos de valor |
| Application | Casos de uso, DTOs, interfaces e orquestração das regras |
| Infrastructure | Persistência, DbContext, EF Core, PostgreSQL, repositórios e integrações |
| API | Endpoints, injeção de dependência, middlewares, autenticação e tratamento de erros |
6.3. Estrutura do frontend
A arquitetura interna detalhada do frontend ainda será estruturada em issue específica.
A organização prevista inclui:
src/frontend/src/
├── components/
├── pages/
├── routes/
├── services/
├── hooks/
├── types/
├── utils/
├── App.tsx
├── main.tsx
└── index.css
7. Banco de dados e persistência
7.1. Entidades preliminares
O modelo relacional deverá considerar:
- Pessoa.
- Veículo.
- PessoaVeiculo.
- CategoriaAcesso.
- RegistroAcesso.
- UsoVeiculoInstitucional.
- Usuário.
- Perfil.
- Auditoria.
7.2. Relações principais
Pessoa 1 ─── N PessoaVeiculo N ─── 1 Veiculo
Pessoa 1 ─── N RegistroAcesso N ─── 1 Veiculo
CategoriaAcesso 1 ─── N RegistroAcesso
Veiculo 1 ─── N UsoVeiculoInstitucional
Pessoa 1 ─── N UsoVeiculoInstitucional
Pessoa 1 ─── 0..1 Usuario
Perfil 1 ─── N Usuario
Usuario 1 ─── N Auditoria
7.3. Migrations
Migrations serão utilizadas para versionar mudanças no esquema do banco.
Fluxo previsto:
Alteração no modelo
↓
Criação da migration
↓
Revisão do código gerado
↓
Execução em desenvolvimento
↓
Execução controlada em homologação
↓
Execução controlada em produção
Comandos previstos:
dotnet ef migrations add <NomeDaMigration>
dotnet ef database update
Esses comandos só serão utilizados após instalação do Entity Framework Core, configuração do provider PostgreSQL e validação do modelo de dados.
8. Testes e qualidade
8.1. Estado atual
Foram validados:
Backend
- dotnet restore
- dotnet build
- dotnet test
Frontend
- npm run lint
- npm run build
Ainda não existem projetos de testes automatizados de domínio, integração ou ponta a ponta.
8.2. Estratégia prevista
A estratégia preliminar considera:
- xUnit para testes unitários de backend.
- FluentAssertions, se aprovado.
- Vitest e Testing Library para frontend.
- Testes de integração com PostgreSQL.
- Testes de API.
- Testes de autorização.
- Testes de auditoria.
- Testes de migrations.
- Playwright como evolução futura para testes ponta a ponta.
8.3. Fluxos críticos
Testes devem priorizar:
- Registro de entrada.
- Registro de saída.
- Veículo institucional.
- Quilometragem.
- Itinerário.
- Consulta histórica.
- Veículos sem saída.
- Correções.
- Auditoria.
- Autenticação.
- Autorização.
9. Segurança e DevSecOps
A stack deverá seguir o documento Segurança e Privacidade.
9.1. Requisitos técnicos de segurança
- Autenticação.
- Autorização por perfil.
- Senhas armazenadas somente como hash.
- Validação de entrada.
- Proteção contra exposição de dados pessoais.
- Auditoria.
- Controle de correções.
- Proteção de segredos.
- Dependências atualizadas.
- HTTPS na implantação.
- Backup protegido.
9.2. Segredos
Nunca versionar:
- Senhas.
- Tokens.
- Chaves privadas.
- Strings de conexão reais.
- Segredos JWT.
- Credenciais OCI.
- Chaves SSH privadas.
- Dados pessoais reais usados em testes.
O .gitignore inicial já inclui arquivos .env e arquivos locais de ambiente.
9.3. Evoluções previstas
- Dependabot.
- Secret Scanning.
- Análise estática.
- Scanner de imagens Docker.
- Verificação de dependências.
- Análise de cobertura.
- SAST e DAST, quando aplicável.
10. Containerização
10.1. Containers previstos
Frontend React
Backend ASP.NET Core
PostgreSQL
Proxy reverso futuro
10.2. Estrutura criada
infrastructure/
└── docker/
├── frontend/
│ ├── Dockerfile
│ └── nginx.conf
├── backend/
│ └── Dockerfile
└── docker-compose.yml
10.3. Estado atual
- Dockerfile de frontend criado.
- Dockerfile de backend criado.
- Nginx inicial criado para servir o frontend.
- Docker Compose inicial criado.
- Serviços previstos: frontend, backend e PostgreSQL.
- Execução integrada ainda precisa de validação.
11. CI/CD
11.1. Estrutura criada
.github/
└── workflows/
├── ci-backend.yml
└── ci-frontend.yml
11.2. Workflow do backend
O workflow backend executa:
Checkout
↓
Configuração do .NET 10
↓
Restore da solução .slnx
↓
Build
↓
Testes existentes
11.3. Workflow do frontend
O workflow frontend executa:
Checkout
↓
Configuração do Node.js
↓
Instalação de dependências
↓
Lint
↓
Build
11.4. Estado atual
- Checks de backend aprovados.
- Checks de frontend aprovados.
- Cobertura coletada na CI, sem meta percentual aprovada.
- 262 testes de Domain, Application, API e PostgreSQL integrados à
main. - Build, scan e publicação multi-arquitetura das imagens versionadas automatizados na CI para tags de release revisadas.
- Compose para consumo das imagens publicadas implementado; implantação institucional na OCI ainda não realizada.
12. OCI e implantação futura
12.1. Direcionamento
A OCI será utilizada futuramente para hospedar a aplicação em VM Linux.
A equipe deverá estudar:
- IAM.
- MFA.
- Compartments.
- Compute.
- VCN.
- Subnets.
- Security Lists ou NSGs.
- IP público.
- SSH.
- Armazenamento.
- Firewall.
- Backup.
- Monitoramento.
- Custos e limites.
12.2. Cenário futuro
Usuário
↓
Domínio
↓
HTTPS
↓
Proxy reverso
↓
Container frontend
↓
Container backend
↓
PostgreSQL
↓
Backup e monitoramento
12.3. Estado atual
- OCI é um direcionamento de implantação futuro.
- VM ainda não criada.
- VCN ainda não criada.
- Rede ainda não configurada.
- Deploy ainda não realizado.
13. Pendências técnicas
13.1. Frontend
- Implementar telas e fluxos funcionais do MVP na estrutura existente.
- Integrar serviços HTTP aos endpoints quando seus contratos forem definidos.
- Prettier.
- Vitest.
- Testing Library.
- Estratégia de autenticação.
- Gerenciamento de estado, se necessário.
- Design system e tema.
13.2. Backend
- Casos de uso da camada Application.
- Endpoints de negócio e seus contratos.
- Evolução contínua dos testes xUnit conforme novos fluxos e riscos.
- FluentAssertions.
- Swagger/OpenAPI.
- Autenticação.
- Autorização.
- Formato de erros.
- Logging.
- Tratamento global de exceções.
- Seed de dados.
13.3. Infraestrutura
- Validar execução do Docker Compose.
- Configurar ambiente de homologação.
- Definir proxy reverso.
- Configurar HTTPS.
- Definir domínio.
- Definir monitoramento.
- Definir backup e recuperação.
- Definir estratégia de deploy.
- Definir infraestrutura detalhada na OCI.
14. Consequências da decisão
14.1. Benefícios
- Aproveitamento da experiência da equipe em C# e .NET.
- Backend orientado a objetos e organizado.
- Separação clara entre camadas.
- Frontend moderno com React, TypeScript, Vite e Tailwind.
- Integração adequada com PostgreSQL.
- Compatibilidade com Docker.
- Compatibilidade com Linux e OCI.
- Base inicial para CI.
- Possibilidade de evolução para segurança, auditoria e testes automatizados.
14.2. Custos e riscos
- Necessidade de dominar Entity Framework Core e migrations.
- Necessidade de configurar autenticação e autorização corretamente.
- Necessidade de aprender Docker para .NET, React e PostgreSQL.
- Necessidade de estudar OCI, redes, VM e segurança.
- Necessidade de manter contratos consistentes entre frontend e backend.
- Necessidade de evitar complexidade excessiva na Clean Architecture.
- Necessidade de validar a execução integrada do Docker Compose.
14.3. Limites da decisão
Esta decisão não define:
- Regras institucionais finais.
- Campos obrigatórios finais.
- Permissões definitivas.
- Necessidade de RG ou CPF.
- Ambiente de produção.
- Serviços específicos da OCI.
- Biblioteca definitiva de autenticação.
- Proxy reverso.
- Ferramenta definitiva de observabilidade.
- Data de implantação.
15. Atualizações documentais
A implementação inicial exige manter sincronizados:
| Documento | Atualização necessária |
|---|---|
| Arquitetura de Software — arc42 | Registrar monorepo, camadas backend, estrutura frontend, CI e Docker Compose |
| Matriz de Ferramentas Técnicas | Registrar ferramentas implementadas, validadas e pendentes |
| Estratégia de Testes | Registrar os 262 testes integrados e a evolução por risco |
| Guia de Execução, Configuração, Deploy e Operação | Registrar comandos reais para .NET 10, Vite e Tailwind CSS 4 |
| Segurança e Privacidade | Registrar .gitignore, Apache 2.0, proteção de segredos e CI inicial |
| README do repositório | Registrar estrutura real e instruções locais atualizadas |
| Status do Projeto | Registrar conclusão da estrutura inicial do monorepo |
16. Status, validação e próximas etapas
Documento: Decisão de Stack Tecnológica
Versão: 0.5
Status: Stack, persistência, segurança e fluxos técnicos do MVP implementados; implantação institucional pendente
Issue relacionada: #14 — Documentar decisão de stack tecnológica
Issue de implementação: #16 — Estruturar monorepo inicial
Estado da implementação
| Item | Situação |
|---|---|
| Monorepo | Criado e integrado à main |
| Backend | Estrutura inicial criada e compilada |
| Frontend | Criado, lintado e compilado |
| Tailwind CSS 4 | Configurado e validado |
| PostgreSQL 16 | Configurado no Compose e integrado ao backend |
| Entity Framework Core 10 | DbContext, Fluent API e migrations implementados |
| Dockerfiles | Frontend e backend criados; endurecimento e scans implementados (#25) |
| Docker Compose | Frontend, backend e PostgreSQL configurados |
| GitHub Actions | Criado e validado |
| Testes de domínio | 60 testes integrados à main |
| Testes ampliados | 254 de backend e 431 de frontend na baseline de 28/09/2026 |
| Deploy | Ainda não realizado |
| OCI | Ainda não configurada |