Transformese é uma solução enterprise de gestão de candidatos desenvolvida para a organização social Gerando Falcões, que transforma realidades através da educação, tecnologia e desenvolvimento social.
Centralizar e otimizar o processo de inscrição, triagem e gestão de candidatos para programas sociais e cursos de capacitação profissional, garantindo escalabilidade, rastreabilidade e transparência no processo seletivo.
- Centralização: Unifica múltiplos canais de inscrição em uma única plataforma
- Automação: Reduz processos manuais de triagem e validação
- Rastreabilidade: Acompanha status de candidatos em tempo real
- Escalabilidade: Arquitetura preparada para crescimento orgânico
- Governança: Controles de acesso e auditoria integrados
- Multi-Interface: API REST, Web (MVC) e Desktop (WinForms)
O projeto implementa Clean Architecture com separação clara de responsabilidades em camadas:
┌─────────────────────────────────────────────────────────┐
│ UI Layer (MVC/Desktop) │
├─────────────────────────────────────────────────────────┤
│ API Layer (Controllers) │
├─────────────────────────────────────────────────────────┤
│ Application Layer (Services/Repositories) │
├─────────────────────────────────────────────────────────┤
│ Domain Layer (Entities/Enums) │
├─────────────────────────────────────────────────────────┤
│ Infrastructure Layer (EF Core/DbContext) │
└─────────────────────────────────────────────────────────┘
Padrões Arquiteturais:
- ✅ Domain-Driven Design (DDD) - Entidades isoladas na camada de domínio
- ✅ Repository Pattern - Abstração da camada de persistência
- ✅ Dependency Injection - Inversão de controle via DI nativo do .NET
- ✅ RESTful API - Endpoints padronizados com versionamento implícito
| Tecnologia | Versão | Finalidade |
|---|---|---|
| .NET SDK | 8.0 | Framework principal para desenvolvimento web e desktop |
| Entity Framework Core | 8.0.11 | ORM para mapeamento objeto-relacional e migrations |
| SQL Server / LocalDB | Latest | Banco de dados relacional para persistência |
| JWT Bearer Authentication | 8.0.0 | Autenticação e autorização baseada em tokens |
| AutoMapper | 12.0.0 | Mapeamento automático entre entidades e DTOs |
| Swagger/OpenAPI | 6.5.0 | Documentação interativa de API |
| System.IdentityModel.Tokens.Jwt | 8.15.0 | Geração e validação de tokens JWT |
| Tecnologia | Versão | Finalidade |
|---|---|---|
| ASP.NET MVC | .NET 8 | Framework web MVC para renderização server-side |
| Bootstrap | 5.3 | Framework CSS para UI responsiva |
| jQuery | 3.x | Biblioteca JavaScript para manipulação DOM |
| jQuery Validation | Latest | Validação client-side de formulários |
| Tecnologia | Versão | Finalidade |
|---|---|---|
| Windows Forms | .NET 8 | Interface desktop nativa para Windows |
| HttpClient | Built-in | Comunicação HTTP com API REST |
Transformese.Api:
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.11" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.0" />Transformese.Data:
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.11" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.11" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.11" />A solução segue uma organização modular em 5 projetos independentes:
📁 GerandoFalcoes/
│
├── 📄 TransformeseSolution.sln # Solução Visual Studio
├── 📄 .gitignore # Exclusões de versionamento
├── 📄 LEIA-ME.txt # Instruções originais (legacy)
│
├── 📁 Transformese.Domain/ # 🎯 Camada de Domínio
│ ├── 📁 Entities/
│ │ ├── BaseEntity.cs # Entidade base com ID comum
│ │ └── Candidato.cs # Entidade principal (candidatos)
│ ├── 📁 Enums/
│ │ └── StatusCandidato.cs # Enum de status (Inscrito, Aprovado, etc.)
│ └── Transformese.Domain.csproj
│
├── 📁 Transformese.Data/ # 💾 Camada de Dados
│ ├── ApplicationDbContext.cs # DbContext do Entity Framework
│ ├── ApplicationDbContextFactory.cs # Factory para design-time migrations
│ ├── 📁 Repositories/
│ │ └── CandidatoRepository.cs # Repositório de candidatos
│ ├── 📁 Migrations/ # Migrations do EF Core
│ └── Transformese.Data.csproj
│
├── 📁 Transformese.Api/ # 🌐 API REST
│ ├── 📁 Controllers/
│ │ └── CandidatosController.cs # Endpoints de candidatos (/api/candidatos)
│ ├── 📁 DTOs/ # Data Transfer Objects (planejado)
│ ├── Program.cs # Configuração da API (DI, JWT, CORS)
│ ├── appsettings.json # Configurações (ConnectionString, JWT)
│ └── Transformese.Api.csproj
│
├── 📁 Transformese.MVC/ # 🌍 Frontend Web (ASP.NET MVC)
│ ├── 📁 Controllers/
│ │ ├── HomeController.cs # Controller da home
│ │ └── InscricaoController.cs # Controller de inscrições
│ ├── 📁 Views/ # Razor Views (.cshtml)
│ │ ├── Home/
│ │ ├── Inscricao/
│ │ └── Shared/
│ ├── 📁 Services/ # Serviços HTTP (ApiService)
│ ├── 📁 ViewModels/ # ViewModels para Views
│ ├── 📁 wwwroot/ # Assets estáticos (CSS, JS, images)
│ │ ├── css/
│ │ ├── js/
│ │ └── lib/ # Bibliotecas (Bootstrap, jQuery)
│ ├── Program.cs
│ ├── appsettings.json
│ └── Transformese.MVC.csproj
│
├── 📁 Transformese.Desktop/ # 🖥️ Aplicação Desktop (WinForms)
│ ├── Login.cs # Formulário de Login
│ ├── Login.Designer.cs # Designer do formulário
│ ├── Dashboard.cs # Dashboard principal
│ ├── Dashboard.Designer.cs
│ ├── Program.cs # Entry point
│ ├── 📁 Resources/ # Recursos (imagens, ícones)
│ └── Transformese.Desktop.csproj
│
└── 📁 Transformese.Web/ # 🌐 MVC Alternativo (cursos/unidades)
├── 📁 Controllers/ # Controllers de Cursos, Unidades, etc.
└── Transformese.Web.csproj
- Separação por camadas: Domain (regras de negócio) → Data (persistência) → API (exposição) → UI (apresentação)
- Independência de frameworks: Domain não possui dependências externas
- Testabilidade: Cada camada pode ser testada isoladamente
- Reutilização: Domain e Data são compartilhados entre API, MVC e Desktop
| Feature | Endpoint | Descrição |
|---|---|---|
| Inscrição de Candidatos | POST /api/candidatos/inscrever |
Registra novo candidato com validação de CPF único |
| Autenticação JWT | (planejado) POST /api/auth/login |
Gera token de acesso para autenticação |
| Documentação Swagger | GET /swagger |
Interface interativa para testar endpoints |
| CORS Configurado | Global | Permite consumo por frontends externos |
Validações Implementadas:
- ✅ CPF obrigatório e único (verifica duplicidade no banco)
- ✅ Normalização de CPF (remove pontos e hífens)
- ✅ Reference Cycle Handling (evita loops em JSON)
- ✅ Retorno padronizado de erros (BadRequest, Conflict)
- ✅ Formulário de Inscrição: Interface responsiva com campos completos (dados pessoais, contato, socioeconômicos)
- ✅ Validação Client-Side: jQuery Validation para feedback imediato
- ✅ Integração com API: HttpClient service para comunicação com backend
- ✅ Design Responsivo: Bootstrap 5 para mobile-first
- ✅ Interface de Login: Autenticação visual (Windows Forms)
- ✅ Dashboard de Gestão: Painel para visualização e gestão de candidatos
- ✅ Consumo de API REST: Comunicação via HttpClient
Entidade Candidato:
public class Candidato : BaseEntity
{
// Dados Pessoais
public string NomeCompleto { get; set; }
public string CPF { get; set; }
public DateTime DataNascimento { get; set; }
// Contato
public string Email { get; set; }
public string Telefone { get; set; }
// Dados Socioeconômicos (Requisito Gerando Falcões)
public string Cidade { get; set; }
public string Estado { get; set; }
public bool PossuiComputador { get; set; }
public bool PossuiInternet { get; set; }
public string? PerfilLinkedin { get; set; }
// Controle de Processo
public DateTime DataCadastro { get; set; }
public StatusCandidato Status { get; set; }
public int? UnidadeId { get; set; }
}Enum StatusCandidato:
Inscrito→ Candidato recém-inscritoEmAnalise→ Em processo de triagemAprovado→ Aceito no programaReprovado→ Não aceito
Antes de começar, certifique-se de ter instalado:
- ✅ .NET 8 SDK - Verifique com
dotnet --version - ✅ SQL Server LocalDB ou SQL Server Developer Edition (Download aqui)
- ✅ Visual Studio 2022+ (recomendado) ou VS Code com C# Extension
- ✅ Git para clonar o repositório
git clone https://github.com/seu-usuario/GerandoFalcoes.git
cd GerandoFalcoesdotnet restoreEdite o arquivo Transformese.Api/appsettings.json:
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=TransformeseDB-Api;Trusted_Connection=True;TrustServerCertificate=True;"
}
}Nota: Ajuste o servidor caso não esteja usando LocalDB. Para SQL Server padrão, use:
"Server=localhost;Database=TransformeseDB;User Id=seu_usuario;Password=sua_senha;TrustServerCertificate=True;"
dotnet tool install --global dotnet-efVerifique a instalação:
dotnet ef --versionExecute as migrations para criar o banco automaticamente:
cd Transformese.Api
dotnet ef database update --project ../Transformese.Data/Transformese.Data.csprojAlternativa: Se já existem migrations, apenas rode
dotnet ef database update.
dotnet run --project Transformese.ApiA API estará disponível em:
- 🌐 HTTPS:
https://localhost:5001 - 🌐 HTTP:
http://localhost:5000 - 📘 Swagger:
https://localhost:5001/swagger
dotnet run --project Transformese.MVCAcesse no navegador: https://localhost:7xxx (porta exibida no terminal)
- Abra
TransformeseSolution.slnno Visual Studio - Clique com botão direito em
Transformese.Desktop→ Set as Startup Project - Pressione
F5para executar
JWT (appsettings.json):
"Jwt": {
"Key": "minha-chave-secreta-aqui-123456789",
"Issuer": "Transformese.Api",
"Audience": "Transformese.Api",
"ExpiresMinutes": "120"
}
⚠️ IMPORTANTE: Altere a chave JWT em produção! Use Azure Key Vault ou variáveis de ambiente seguras.
Erro: "Trust certificate HTTPS"
dotnet dev-certs https --trustErro: "The ConnectionString property has not been initialized"
- Verifique se
appsettings.jsonestá configurado corretamente - Confirme que o SQL Server está rodando
Erro: "A network-related or instance-specific error"
- Verifique se o SQL Server LocalDB está instalado
- Execute:
sqllocaldb start MSSQLLocalDB
Contribuições são bem-vindas! Siga o processo abaixo para colaborar:
| Branch | Finalidade | Proteção |
|---|---|---|
main |
Código em produção | ✅ Protegida (requer PR aprovado) |
develop |
Código em desenvolvimento | ✅ Protegida |
feature/<nome> |
Novas funcionalidades | - |
fix/<nome> |
Correções de bugs | - |
hotfix/<nome> |
Correções urgentes em produção | - |
- Fork este repositório
- Clone seu fork:
git clone https://github.com/seu-usuario/GerandoFalcoes.git - Crie uma branch para sua feature/fix:
git checkout -b feature/minha-nova-feature
- Faça suas alterações seguindo os padrões de código
- Commit com mensagens descritivas (veja padrões abaixo)
- Push para seu fork:
git push origin feature/minha-nova-feature
- Abra um Pull Request para
develop(nãomain) no repositório original
Convenções C#:
- ✅
PascalCasepara classes, métodos, propriedades - ✅
camelCasepara variáveis locais e parâmetros - ✅
_camelCasepara campos privados - ✅ Usar
varquando o tipo é óbvio - ✅ Comentar lógica complexa
- ✅ Evitar métodos com mais de 50 linhas (refatorar em helpers)
Controllers:
- Manter controllers enxutos (lógica em services/repositories)
- Retornar
IActionResultcom status HTTP corretos - Validar inputs com
ModelState
Migrations:
- Nomes descritivos:
dotnet ef migrations add AdicionaCampoLinkedinCandidato - Sempre revisar migrations antes de aplicar em produção
Use mensagens padronizadas para facilitar geração de changelogs:
| Prefixo | Uso | Exemplo |
|---|---|---|
feat: |
Nova funcionalidade | feat: adiciona endpoint de listagem de candidatos |
fix: |
Correção de bug | fix: corrige validação de CPF duplicado |
docs: |
Documentação | docs: atualiza README com instruções de deploy |
refactor: |
Refatoração sem mudança funcional | refactor: extrai lógica de validação para service |
test: |
Adição/alteração de testes | test: adiciona testes unitários para CandidatoRepository |
chore: |
Tarefas de manutenção | chore: atualiza dependências NuGet |
perf: |
Melhorias de performance | perf: adiciona índice no campo CPF |
Exemplo de boa mensagem:
feat: adiciona filtro de status na listagem de candidatos
- Adiciona query parameter 'status' em GET /api/candidatos
- Implementa filtro no repository com LINQ
- Atualiza documentação Swagger
📝 Roadmap ✅ Sistema Base (Concluído)
-[x] Cadastro completo de candidatos via web
-[x] Sistema de autenticação e autorização (RBAC)
-[x] Gestão de ONGs parceiras (CRUD completo)
-[x] Distribuição automática de candidatos para ONGs
-[x] Controle de status da candidatura
-[x] Validação anti-duplicidade por CPF
-[x] Dashboard com KPIs principais
-[x] Integração com Asana
🎯 Próximas Funcionalidades
Hub do Candidato/Aluno -[ ] Área exclusiva para o candidato gerenciar seu perfil e acompanhar sua jornada em tempo real:
-[ ] Visualização do perfil completo
-[ ] Acompanhamento de status da candidatura
-[ ] Notificações sobre mudanças de status
-[ ] Histórico de interações (entrevistas, feedbacks)
-[ ] Calendário de benefícios e eventos
-[ ] Integração com Power BI
-[ ] Conexão direta do banco SQL Server com Power BI para análises avançadas:
-[ ] Relatórios demográficos sobre candidatos
-[ ] Análise de áreas geográficas atendidas
-[ ] Funil de conversão (Inscritos → Aprovados)
-[ ] Dashboard de performance das ONGs parceiras
-[ ] Métricas de impacto social
App Mobile Aplicativo focado na jornada diária e engajamento dos alunos:
-[ ] Acompanhamento do hub de alunos em dispositivo móvel
-[ ] Sistema de gamificação para incentivar participação
-[ ] Calendário integrado de benefícios e eventos
-[ ] Notificações push em tempo real
-[ ] Sistema de pontos e recompensas
-[ ] Ranking de engajamento
Warning
Chave JWT em Produção: A chave JWT atual (minha-chave-secreta-aqui-123456789) é apenas para desenvolvimento local. Nunca faça deploy para produção com essa chave!
Recomendações:
- Use Azure Key Vault, AWS Secrets Manager ou variáveis de ambiente seguras
- Gere chaves com no mínimo 256 bits (32 caracteres)
- Rotacione chaves periodicamente
Caution
CORS em Produção: A configuração atual usa AllowAnyOrigin(), o que aceita requisições de qualquer domínio. Isso é um risco de segurança em produção!
Correção obrigatória antes de deploy:
builder.Services.AddCors(opt =>
{
opt.AddPolicy("AllowFrontend", builder =>
{
builder.WithOrigins("https://seu-dominio.com", "https://app.seu-dominio.com")
.AllowAnyHeader()
.AllowAnyMethod();
});
});Important
Migrations em Produção:
- Sempre revise migrations antes de aplicar (
dotnet ef migrations script) - Teste migrations em ambiente de staging primeiro
- Faça backup do banco antes de aplicar migrations em produção
- Use transações para rollback em caso de erro
Connection Strings:
- ❌ Nunca comitar connection strings com senhas reais no Git
- ✅ Use User Secrets em desenvolvimento:
dotnet user-secrets set "ConnectionStrings:DefaultConnection" "..." - ✅ Use variáveis de ambiente em produção
Índices Recomendados:
CREATE INDEX IX_Candidatos_CPF ON Candidatos(CPF);
CREATE INDEX IX_Candidatos_Status ON Candidatos(Status);
CREATE INDEX IX_Candidatos_DataCadastro ON Candidatos(DataCadastro);Governança de Qualidade:
- Manter coverage de código acima de 70%
- Testes unitários para repositories e services
- Testes de integração para controllers
- Testes de carga antes de releases (usando k6 ou Artillery)
Tip
Logging Estruturado: Substitua logs padrão por Serilog para structured logging:
dotnet add package Serilog.AspNetCore
dotnet add package Serilog.Sinks.FileBenefícios: análise de logs mais eficiente, integração com ELK Stack, troubleshooting facilitado.
Métricas a monitorar:
- Response time de endpoints
- Taxa de erro (4xx, 5xx)
- Uso de CPU/Memória
- Conexões de banco de dados ativas
Boas Práticas:
- ✅ Usar
AsNoTracking()em queries read-only - ✅ Implementar paginação em listagens (
Skip+Take) - ✅ Evitar lazy loading (preferir eager loading com
Include()) - ✅ Cachear dados estáticos (Redis ou In-Memory Cache)
Checklist Pré-Deploy:
- Atualizar chaves JWT
- Configurar CORS restritivo
- Habilitar HTTPS obrigatório
- Configurar connection string via variáveis de ambiente
- Aplicar migrations em staging
- Executar suite de testes
- Configurar logs centralizados
- Configurar monitoramento (Application Insights / New Relic)
Este projeto atualmente não possui licença formal definida. Para uso e distribuição, recomenda-se:
Para Open Source:
- MIT License - Licença permissiva que permite uso comercial, modificação e distribuição
Para Uso Proprietário:
- Licença Proprietária - Uso exclusivo pela organização Gerando Falcões com restrições de distribuição
Note
Ação necessária: Adicione um arquivo LICENSE na raiz do repositório após definir a licença apropriada.
Este projeto é desenvolvido com o apoio da organização Gerando Falcões, que transforma vidas através de educação, tecnologia e oportunidades.
Desenvolvido com ❤️ para impacto social