Arquitetura de Sistema & Plataforma de RH
Plataforma web de recrutamento especializada no setor da hotelaria e restauração (HORECA), desenvolvida em Symfony. Integra um modelo de segurança RBAC com dupla validação por consultores, motor de busca assíncrono em AJAX com KnpPaginator e endpoints de API REST documentados.
┌─────────────────────────────────────────────────────────────────────────────┐
│ TRT Conseil — Architecture RH & Recrutement │
└──────────────────────────────────────┬──────────────────────────────────────┘
│
┌───────────────────────────┼───────────────────────────┐
▼ ▼ ▼
🛡️ Sécurité & Modération RBAC 🔍 Moteur de Recherche AJAX 📡 API REST Headless
• Double validation (TOVALID)• Filter.js sans rechargement• JMS Serializer Groups
• 4 Rôles isolés (Admin/RH) • KnpPaginator (6/page) • Endpoints paginés (/api)
• Upload sécurisé de CV PDF • Synchronisation URL HTML5 • Support mobile & tiers
• Envoi CV par Symfony Mailer• Requête optimisée Doctrine • Documentation JSON
Recrutamento HORECA com Valor Humano
Cada perfil, oferta de emprego e candidatura é avaliada e validada por um consultor de RH experiente antes do contacto entre as partes.
Segurança & Hierarquia de Perfis
Esquema rigoroso de 4 perfis com estado transitório TOVALID para impedir publicações não autorizadas.
Envio Automatizado de Currículos
Envio automático por e-mail via Symfony Mailer do processo de candidatura com o ficheiro PDF anexado após validação.
1. Modelo de Segurança & Gestão de Acessos (RBAC)
Hierarquia de acessos gerida através do componente Security do Symfony com validação humana obrigatória:
| Perfil de Sistema |
Estado |
Permissões & Atribuições |
ROLE_ADMIN |
Administrador |
Criação, edição, bloqueio e eliminação de contas de administradores e consultores. |
ROLE_CONSULTANT |
Consultor de RH |
Validação de candidatos e empresas, publicação de ofertas e encaminhamento de CVs para empregadores. |
ROLE_RECRUTEUR |
Empregador |
Perfil da empresa, publicação de vagas e receção de candidaturas pré-qualificadas. |
ROLE_CANDIDAT |
Candidato |
Envio seguro de CV em PDF, pesquisa avançada e candidatura a vagas aprovadas. |
2. Workflows Operacionais & Gestão de Candidaturas
Processos estruturados para assegurar a verificação criteriosa de cada etapa de recrutamento:
Workflow do Candidato & Gestão de CV em PDF
Carregamento seguro de ficheiros PDF tratados com transliterator_transliterate() com acompanhamento em tempo real.
PDF Uploadtransliteratortovalid
Workflow do Consultor & Notificações Automáticas
Revisão de candidaturas pendentes e envio automático de e-mail com o CV anexado para o empregador após aprovação.
Symfony MailerDataPartPièce jointe CV
3. Motor de Busca Assíncrono (AJAX)
Módulo em JavaScript Filter.js associado ao KnpPaginator e Doctrine QueryBuilder para pesquisas sem recarregamento:
// Requête QueryBuilder optimisée dans AnnonceRepository.php
private function getSearchQuery(SearchData $search): QueryBuilder
{
$query = $this->createQueryBuilder('p')
->select('c', 'p')
->join('p.poste', 'c')
->orderBy('p.id', 'DESC');
if (!empty($search->q)) {
$query->andWhere('p.titre LIKE :q')
->setParameter('q', "%{$search->q}%");
}
if (!empty($search->poste)) {
$query->andWhere('c.id IN (:poste)')
->setParameter('poste', $search->poste);
}
return $query;
}
- Detetores de Eventos em Tempo Real: Deteção imediata de texto digitado e filtros de cargos com atualização seletiva do DOM.
- Paginação Otimizada com KnpPaginator: Limite de 6 ofertas por página para otimizar o consumo de memória do servidor.
- Histórico HTML5 (replaceState): Sincronização dinâmica do URL do navegador para partilhar pesquisas filtradas diretamente.
4. Especificações da API REST Headless
Endpoints JSON documentados e serializados com JMS Serializer:
| Method |
Endpoint URL |
Grupo JMS |
Descrição do Endpoint |
| GET |
/api/annonces |
getAnnonces |
Lista completa de ofertas de emprego aprovadas em formato JSON |
| GET |
/api/annoncesby?page={n} |
getAnnonces |
Coleção paginada de anúncios com metadados de paginação |
| GET |
/api/annonce/{id} |
getAnnonces |
Detalhes completos de uma vaga de emprego específica por ID |
| GET |
/api/annoncesby/{poste} |
getAnnonces |
Filtragem e paginação de ofertas de acordo com o cargo pretendido |
5. Modelo de Dados & Relações ORM
Esquema relacional normalizado em MySQL com integridade referencial do Doctrine:
Entidades de Utilizadores & Perfis
User com e-mail único, Candidat com caminho do ficheiro PDF e Recruteur com dados da empresa.
Entidades de Vagas & Taxonomia
Poste com 28 profissões da hotelaria e restauração e Annonce com tipo de contrato, vencimento e descrição.
Entidade Candidature
Tabela relacional que associa Annonce, Candidat e o Consultant validador com estado da candidatura.