Arhitectură de Sistem & Platformă HR
Platformă web de recrutare specializată în sectorul hotelier și alimentație publică (HoReCa / CHR), dezvoltată în Symfony. Asociază un model de securitate RBAC cu dublă validare prin consultanți, un motor de căutare AJAX asincron cu KnpPaginator și endpoint-uri API REST documentate.
┌─────────────────────────────────────────────────────────────────────────────┐
│ 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
Recrutare HoReCa cu Valoare Umană
Fiecare cont, ofertă de muncă și candidatură este auditată și validată de un consultant HR expert înainte de orice punere în legătură.
Securitate & Ierarhie a Rolurilor
Sistem strict de permisiuni cu 4 roluri izolate și stare tranzitorie TOVALID ce împiedică publicările neautorizate.
Transmitere Automatizată a CV-urilor
Generare și trimitere automată prin Symfony Mailer a dosarului de candidatură cu CV PDF atașat în momentul validării.
1. Model de Securitate & Gestiunea Rolurilor (RBAC)
Ierarhia accesului gestionată prin componenta Security din Symfony cu validare umană prealabilă obligatorie:
| Rol de Sistem |
Statut |
Capacități & Permisiuni |
ROLE_ADMIN |
Supervizor |
Crearea, modificarea, blocarea și ștergerea conturilor de administratori și consultanți. |
ROLE_CONSULTANT |
Moderator HR |
Validarea candidaților și a angajatorilor, publicarea anunțurilor și transmiterea CV-urilor către companii. |
ROLE_RECRUTEUR |
Angajator |
Fișă de companie, publicare de oferte (perioadă nedeterminată, determinată, extra) și primirea candidaturilor precalificate. |
ROLE_CANDIDAT |
Candidat |
Încărcare securizată a CV-ului PDF, căutare avansată și aplicare la ofertele de muncă validate. |
2. Fluxuri Operaționale & Procesarea Candidaturilor
Procese structurate ce garantează verificarea fiecărei etape din procesul de recrutare:
Flux Candidat & Gestionare CV PDF
Încărcare securizată a fișierelor PDF curățate prin transliterator_transliterate() și urmărire în timp real a stării de validare.
PDF Uploadtransliteratortovalid
Flux Consultant & Notificare Automată
Revizuirea candidaturilor în așteptare și transmiterea automată a e-mailului cu CV-ul atașat către angajator la aprobare.
Symfony MailerDataPartPièce jointe CV
3. Motor de Căutare Asincron (AJAX)
Modul JavaScript Filter.js conectat la KnpPaginator și Doctrine QueryBuilder pentru căutare fără reîncărcarea paginii:
// 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;
}
- Ascultători de Evenimente în Timp Real: Detectare instantanee a textului introdus și a filtrelor de posturi cu actualizare parțială în DOM.
- Paginare Optimizată KnpPaginator: Limitarea la 6 anunțuri pe pagină pentru a reduce consumul de memorie al serverului.
- Istoric HTML5 (replaceState): Sincronizare dinamică a URL-ului din browser pentru a permite partajarea directă a căutărilor filtrate.
4. Specificații API REST Headless
Endpoint-uri JSON documentate serializate cu JMS Serializer:
| Method |
Endpoint URL |
Grup JMS |
Descriere Endpoint |
| GET |
/api/annonces |
getAnnonces |
Lista completă a ofertelor de muncă aprobate în format JSON |
| GET |
/api/annoncesby?page={n} |
getAnnonces |
Colecție paginată de anunțuri cu metadate de paginare |
| GET |
/api/annonce/{id} |
getAnnonces |
Detaliile complete ale unei oferte specifice pe baza ID-ului |
| GET |
/api/annoncesby/{poste} |
getAnnonces |
Filtrarea și paginarea ofertelor după denumirea postului |
5. Model de Date & Relații ORM
Schemă relațională normalizată în MySQL cu integritate referențială Doctrine:
Entități Utilizatori & Profiluri
User cu e-mail unic, Candidat cu cale către CV-ul PDF și Recruteur cu date despre companie.
Entități Anunțuri & Clasificare Posturi
Poste ce include 28 de meserii HoReCa și Annonce ce stochează tipul de contract, salariul și descrierea.
Entitatea Candidatură
Tabel de legătură ce asociază Annonce, Candidat și Consultant-ul moderator cu starea de validare.