← Back to projects Web application · Recruitment

TRT Conseil

A recruitment platform for the hospitality and restaurant sector with search and filtering.

TRT Conseil
PROJECT

The project

TRT Conseil is a web application built around recruitment listings, candidate discovery and filtering, with a functional interface designed for recurring use.

System Architecture & HR Platform

A specialized recruitment web platform for the hospitality and restaurant sector (CHR), built with Symfony. It features a role-based security model with consultant moderation, an asynchronous AJAX search engine with KnpPaginator, and documented REST API endpoints.

┌─────────────────────────────────────────────────────────────────────────────┐
│                 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
            

Human-Centric CHR Recruitment

Every account, job listing, and job application is audited and approved by an expert HR consultant prior to connection.

Security & Role Hierarchy

Strict 4-role permission scheme with transitional TOVALID states preventing unauthorized publications.

Automated Resume Transmission

Automated candidate file generation and dispatch via Symfony Mailer with PDF resumes attached upon validation.

1. Security Model & Role Management (RBAC)

Access hierarchy managed by the Symfony Security component with mandatory human validation:

System Role Status Capabilities & Permissions
ROLE_ADMIN Supervisor Create, modify, block, and delete administrator and consultant accounts.
ROLE_CONSULTANT HR Moderator Approve candidates and recruiters, publish job listings, and forward resumes to employers.
ROLE_RECRUTEUR Employer Company profile setup, job publishing (permanent, temporary, extras), and reception of qualified applications.
ROLE_CANDIDAT Candidate Secure PDF resume upload, advanced search, and application to approved job listings.

2. Operational Workflows & Application Processing

Structured user journeys ensuring end-to-end verification of every recruitment step:

Candidate Workflow & PDF Resume Management

Secure upload of PDF resumes sanitized via transliterator_transliterate() with real-time status tracking.

PDF Uploadtransliteratortovalid

Consultant Workflow & Automated Emailing

Pending application review and automated email transmission with attached PDF resume upon approval.

Symfony MailerDataPartPièce jointe CV

3. Asynchronous AJAX Search Engine

JavaScript Filter.js module coupled with KnpPaginator and Doctrine QueryBuilder for instant search without page reload:

// 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;
}
            
  • Real-Time Event Listeners: Instant detection of keyword input and category toggles with partial DOM injection.
  • Optimized KnpPaginator Pagination: Restricting datasets to 6 items per page to reduce memory consumption and payload weight.
  • HTML5 History (replaceState): Dynamic browser URL synchronization allowing direct sharing of filtered search links.

4. Headless REST API Specifications

Documented JSON endpoints serialized using JMS Serializer:

Method Endpoint URL JMS Group Endpoint Description
GET /api/annonces getAnnonces Full list of approved job listings in JSON format
GET /api/annoncesby?page={n} getAnnonces Paginated collection of listings with pagination metadata
GET /api/annonce/{id} getAnnonces Complete details of a specific job offer by ID
GET /api/annoncesby/{poste} getAnnonces Filter and paginate listings based on job title

5. Data Model & ORM Relations

Normalized MySQL relational database schema with Doctrine referential integrity:

User & Profile Entities

User with unique email, Candidat with PDF resume path, and Recruteur with company details.

Job Listing & Taxonomy Entities

Poste encompassing 28 CHR job roles and Annonce storing contract type, salary, and description.

Candidature Application Entity

Join entity connecting Annonce, Candidat, and approving Consultant with validation status.

Explore the TRT Conseil Platform

Browse hospitality job listings and test the real-time asynchronous search.

Visit TRT Conseil Application ↗