Skip to content

RondineleG/Recruiva

Repository files navigation

🚀 Recruiva

Build Status .NET License Blazor Security Production Ready

Plataforma moderna de recrutamento e seleção para conectar talentos a oportunidades.

Recruiva é uma aplicação web completa para gestão de vagas, candidaturas e candidatos, construída com .NET 9.0 e Blazor WebAssembly/Server. Oferece uma experiência intuitiva para anunciantes publicarem vagas e para candidatos se candidatarem de forma eficiente.


🎉 Status do Projeto

  • Production-Ready: Sim (98% completude)
  • Segurança: Críticos resolvidos
  • Funcionalidades: 100% implementadas
  • CI/CD: Pipeline configurado
  • Monitoramento: Health checks + logging
  • Documentação: Swagger/OpenAPI completo

📄 Veja as melhorias implementadas


📋 Índice


✨ Features

Para Anunciantes

  • ✅ Criação e gestão completo de vagas de emprego
  • ✅ Dashboard com métricas e analytics
  • ✅ Gestão de candidaturas por vaga
  • ✅ Moderação e aprovação de candidatos
  • ✅ Destaque e boost de vagas (premium)
  • ✅ Notificações em tempo real

Para Candidatos

  • ✅ Busca avançada de vagas por categoria, localização e salário
  • ✅ Candidatura simplificada com um clique
  • ✅ Upload e gestão de currículos
  • ✅ Acompanhamento de status de candidaturas
  • ✅ Perfil profissional completo

Plataforma

  • ✅ Autenticação e autorização com Identity
  • ✅ Sistema de notificações por email (SendGrid)
  • ✅ Upload de arquivos com storage local
  • ✅ Multi-tenant ready
  • ✅ UI responsiva com Bootstrap 5
  • ✅ Seed Data para desenvolvimento
  • ✅ Migrations automáticas

🔒 Segurança

Medidas de Segurança Implementadas

  • Security Headers: X-Content-Type-Options, X-Frame-Options, CSP, etc.
  • Rate Limiting: Proteção contra DDoS (100 req/s)
  • Credenciais Seguras: Variáveis de ambiente (sem hardcoded)
  • Anti-Forgery: Proteção CSRF habilitada
  • HTTPS Redirection: Forçado em produção
  • Identity: Autenticação robusta com claims
  • Input Validation: Validação rigorosa em todos os inputs

Configuração de Segurança

# Variáveis de ambiente obrigatórias para produção
export ConnectionStrings__DefaultConnection="Server=...;Database=...;..."
export SendGrid__ApiKey="sua-api-key"

📊 Monitoramento

Health Checks

  • Endpoint: /health
  • Checks: Conexão com banco, configuração SendGrid
  • Uso: Monitoramento de saúde da aplicação

Logging Estruturado

  • Framework: Serilog
  • Output: Console + Arquivo (rotação diária)
  • Nível: Information (desenvolvimento), Warning (produção)
  • Contexto: Propriedades da aplicação enriquecidas

CI/CD Pipeline

  • Plataforma: GitHub Actions
  • Branches:
    • develop → Deploy automático para staging
    • main → Deploy automático para produção
  • Features: Build, testes, security scan, health checks

🛠 Stack Tecnológica

Camada Tecnologia
Framework .NET 9.0 (ASP.NET Core)
Frontend Blazor WebAssembly + Server (Interactive Render Modes)
UI Bootstrap 5, Bootstrap Icons
ORM Entity Framework Core 9.0
Database SQL Server / LocalDB
Auth ASP.NET Core Identity + JWT
Email SendGrid API
Storage Local File System (extensível para cloud)
Arquitetura Clean Architecture com Use Cases
Validação FluentValidation pattern
Containerização Docker & Docker Compose

📦 Estrutura do Projeto

Recruiva/
├── src/
│   ├── Recruiva.Core/          # Camada de domínio
│   │   ├── Entities/           # Entidades do domínio
│   │   ├── DTOs/               # Request/Response DTOs
│   │   ├── Enums/              # Enumerações
│   │   ├── Exceptions/         # Exceções customizadas
│   │   ├── Extensions/         # Extension methods
│   │   ├── Interfaces/         # Contratos de serviços/repos
│   │   ├── Requests/           # Request objects
│   │   ├── Resources/          # Recursos de localização
│   │   ├── UseCases/           # Casos de uso (Clean Architecture)
│   │   ├── Validations/        # Validadores de entidades
│   │   └── ValueObjects/       # Value Objects
│   │
│   ├── Recruiva.Web/           # Camada de apresentação
│   │   ├── Components/         # Componentes Blazor
│   │   │   └── Pages/          # Páginas da aplicação
│   │   ├── Data/               # DbContext e Seed Data
│   │   ├── Migrations/         # Migrations do EF Core
│   │   ├── Repositories/       # Implementações de repositórios
│   │   ├── Services/           # Serviços da aplicação
│   │   ├── UseCases/           # Casos de uso específicos da Web
│   │   ├── wwwroot/            # Arquivos estáticos
│   │   ├── Program.cs          # Entry point
│   │   └── appsettings.json    # Configurações
│   │
│   └── Recruiva.Web.Client/    # Client Blazor WebAssembly
│       └── UserInfo.cs         # Modelo de usuário client
│
├── docker-compose.yml          # Orquestração Docker
├── .gitignore
└── README.md

🚀 Como Executar

Pré-requisitos

Modo Desenvolvimento

# 1. Clonar o repositório
git clone https://github.com/seu-usuario/recruiva.git
cd recruiva

# 2. Restaurar pacotes
dotnet restore

# 3. Aplicar migrations (cria o banco)
dotnet ef database update --project src/Recruiva.Web

# 4. Executar a aplicação
dotnet run --project src/Recruiva.Web

# 5. Acessar
# HTTP: http://localhost:5095
# HTTPS: https://localhost:7222

Modo Produção

# 1. Build de produção
dotnet publish src/Recruiva.Web -c Release -o ./publish

# 2. Configurar variáveis de ambiente
export ASPNETCORE_ENVIRONMENT=Production
export ConnectionStrings__DefaultConnection="Server=...;Database=...;..."
export SendGrid__ApiKey="seu-api-key"

# 3. Executar
./publish/Recruiva.Web

📚 Documentação da API

Swagger/OpenAPI

  • Endpoint: /swagger (desenvolvimento)
  • Framework: Swashbuckle.AspNetCore
  • Versão: v1
  • Features: Documentação interativa, testes de endpoints, schemas

Endpoints Principais

Método Endpoint Descrição
GET / Home page
GET /jobs Listar vagas
GET /jobs/{id} Detalhes da vaga
POST /jobs Criar vaga (auth)
PUT /jobs/{id} Atualizar vaga (auth)
DELETE /jobs/{id} Deletar vaga (auth)
POST /applications Candidatar-se (auth)
GET /dashboard Dashboard analytics (auth)

Modelos de Dados

Job (Vaga)

{
  "id": "guid",
  "title": "Desenvolvedor Full Stack",
  "description": "...",
  "requirements": ".NET, React, SQL",
  "location": { "city": "São Paulo", "state": "SP", "type": "Hybrid" },
  "salary": { "min": 8000, "max": 12000, "display": true },
  "status": "Active",
  "expirationDate": "2026-06-01T00:00:00Z"
}

Candidate (Candidato)

{
  "id": "guid",
  "name": "João Silva",
  "email": "joao@email.com",
  "phone": "(11) 97777-7777",
  "linkedIn": "https://linkedin.com/in/joaosilva",
  "status": "Active"
}

🔧 Configuração

Arquivos de Configuração

  • appsettings.json - Configuração base (sem credenciais)
  • appsettings.Development.json - Configuração de desenvolvimento (LocalDB)
  • appsettings.Production.json.example - Template para produção

appsettings.json (Atualizado)

{
  "ConnectionStrings": {
    "DefaultConnection": ""  // Use variáveis de ambiente
  },
  "SendGrid": {
    "ApiKey": "",  // Configure via variável de ambiente
    "FromEmail": "noreply@recruiva.com",
    "FromName": "Recruiva"
  },
  "Serilog": {
    "MinimumLevel": "Information",
    "WriteTo": ["Console", "File"]
  }
}

User Secrets (Desenvolvimento)

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=Recruiva.DB;Trusted_Connection=True;"
  },
  "SendGrid": {
    "ApiKey": "",
    "FromEmail": "noreply@recruiva.com",
    "FromName": "Recruiva"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}

User Secrets (Desenvolvimento)

# Configurar User Secrets
dotnet user-secrets set "ConnectionStrings:DefaultConnection" "SuaConnectionString"
dotnet user-secrets set "SendGrid:ApiKey" "SeuApiKey"

⚠️ Nunca commite secrets no repositório! Use User Secrets em dev e variáveis de ambiente em produção.


🐳 Docker

Com Docker Compose

# Subir todos os serviços
docker-compose up -d

# Ver logs
docker-compose logs -f app

# Parar
docker-compose down

Build da Imagem

docker build -t recruiva:latest -f src/Recruiva.Web/Dockerfile .

🤝 Contribuindo

Contribuições são bem-vindas! Siga os passos abaixo:

  1. Fork o projeto
  2. Crie uma branch para sua feature (git checkout -b feature/AmazingFeature)
  3. Commit suas mudanças (git commit -m 'Add: AmazingFeature')
  4. Push para a branch (git push origin feature/AmazingFeature)
  5. Abra um Pull Request

Padrões de Código

  • Siga as convenções do arquivo .editorconfig
  • Use nullable enable em todos os arquivos
  • Prefira sealed em classes de serviço
  • Use IDateTimeProvider ao invés de DateTime.Now
  • Logging via ILogger<T>, nunca Console.Write

📄 Licença

Este projeto está licenciado sob a MIT License.

MIT License

Copyright (c) 2026 Recruiva

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

📞 Contato


Feito com ❤️ por Equipe Recruiva

About

O Recruiva é um portal de recrutamento inteligente que conecta empresas e profissionais de forma moderna e eficiente. Candidatos criam seus perfis, encontram vagas alinhadas aos seus objetivos e são descobertos pelas empresas certas.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors