NOÉ cherche un·e développeur·euse bénévole ! Intéressé·e ? Envoyez un email à hello@noe-app.io.
Aller au contenu principal

Filtrage

Le système de filtrage de l'API NOÉ permet d'appliquer des filtres avancés sur les endpoints LIST en utilisant une syntaxe inspirée de MongoDB.

📋 Vue d'ensemble

Le filtrage fonctionne sur tous les endpoints LIST de l'API en utilisant le paramètre filter dans l'URL.

⚠️ Limitations

Objets liés (ObjectId)

Seuls les ObjectId peuvent être filtrés pour les références. Les propriétés d’objets liés ne sont pas accessibles.

  • ✅ Valide : filter={"category":"507f1f77bcf86cd799439011"}
  • ❌ Invalide : filter={"category.name":"Accueil"}
  • ❌ Invalide : filter={"user.email":"@gmail.com"}

Types de champs filtrables

Type de champExempleFiltrable
Champs directsname, email, createdAt✅ Oui
ObjectId référencescategory, user, activity✅ Par ID uniquement
Propriétés d'objets liéscategory.name, user.email❌ Non
Champs personnaliséscustomFields.field1✅ Oui

🚀 Endpoints supportés

Tous les endpoints LIST supportent le filtrage.

Projets

  • GET /projects - Projets
  • GET /projects/public - Projets publics

Par projet

  • GET /projects/:projectId/activities - Activités
  • GET /projects/:projectId/categories - Catégories
  • GET /projects/:projectId/places - Espaces
  • GET /projects/:projectId/sessions - Sessions
  • GET /projects/:projectId/stewards - Responsables
  • GET /projects/:projectId/teams - Équipes
  • GET /projects/:projectId/registrations - Inscriptions

📖 Syntaxe et exemples

Vous devez utiliser un format JSON directement dans l'URL :

GET /projects/:projectId/activities?filter={"name":{"$regex":"atelier","$options":"i"},"tags":{"$in":["musique","art"]}}

🔧 Opérateurs supportés

OpérateurDescriptionExemple
$eqÉgal àfilter={"name":{"$eq":"Atelier"}}
$neDifférent defilter={"status":{"$ne":"cancelled"}}
$gtSupérieur àfilter={"age":{"$gt":18}}
$gteSupérieur ou égalfilter={"age":{"$gte":18}}
$ltInférieur àfilter={"price":{"$lt":100}}
$lteInférieur ou égalfilter={"price":{"$lte":100}}
$inContenu dans le tableaufilter={"status":{"$in":["active","pending"]}}
$ninNon contenu dans le tableaufilter={"status":{"$nin":["cancelled","archived"]}}
$regexExpression régulièrefilter={"name":{"$regex":"^ate"}}
$optionsOptions regexfilter={"name":{"$regex":"workshop","$options":"i"}}
$existsChamp existefilter={"description":{"$exists":true}}
$allContient toutes les valeursfilter={"tags":{"$all":["music","art"]}}
$sizeTaille du tableaufilter={"slots":{"$size":3}}

🔄 Combinaison de filtres

Plusieurs filtres peuvent être combinés dans une même requête :

# Combinaison simple
GET /projects/:projectId/activities?filter={"active":true,"name":{"$regex":"atelier"}}

# Combinaison complexe
GET /projects/:projectId/sessions?filter={"start":{"$gte":"2024-01-01"},"end":{"$lt":"2024-12-31"}}

📅 Format des dates

Les dates doivent être au format ISO 8601 :

# Format complet
GET /projects/:projectId/sessions?filter={"start":{"$gte":"2024-01-01T00:00:00.000Z"}}

# Format date simple
GET /projects/:projectId/sessions?filter={"start":{"$gte":"2024-01-01"}}
GET /projects/:projectId/sessions?filter={"start":{"$gte":"2024"}}

🎯 Exemples par type d'entité

Activités

# Activités par nom
GET /projects/:projectId/activities?filter={"name":{"$regex":"atelier","$options":"i"}}

# Activités par catégorie (ID)
GET /projects/:projectId/activities?filter={"category":"507f1f77bcf86cd799439011"}

# Activités avec tags spécifiques
GET /projects/:projectId/activities?filter={"tags":{"$in":["musique","art"]}}

Sessions

# Sessions par nom
GET /projects/:projectId/sessions?filter={"name":{"$regex":"matin"}}

# Sessions par activité (ID)
GET /projects/:projectId/sessions?filter={"activity":"507f1f77bcf86cd799439011"}

# Sessions après une date
GET /projects/:projectId/sessions?filter={"start":{"$gte":"2024-01-01"}}

Inscriptions

# Inscriptions par rôle
GET /projects/:projectId/registrations?filter={"role":"admin"}

# Inscriptions par utilisateur (ID)
GET /projects/:projectId/registrations?filter={"user":"507f1f77bcf86cd799439011"}

# Inscriptions inscrites à une certaine session (ID)
GET /projects/:projectId/registrations?filter={"sessionsSubscriptions.session": "68dacf51c55364e0b89d45ce"

# Inscriptions créées après une date
GET /projects/:projectId/registrations?filter={"createdAt":{"$gte":"2024-01-01"}}

# Inscriptions par responsable (ID)
GET /projects/:projectId/registrations?filter={"steward":"507f1f77bcf86cd799439011"}

Espaces

# Espaces par capacité
GET /projects/:projectId/places?filter={"maxNumberOfParticipants":{"$gte":50}}

# Espaces par nom
GET /projects/:projectId/places?filter={"name":{"$regex":"bar"}}

🛡️ Sécurité et limitations

Opérateurs bloqués

Les opérateurs dangereux suivants sont bloqués pour des raisons de sécurité :

  • $where
  • $near
  • $geoWithin
  • $geoIntersects

Limitations

  • Longueur maximale des patterns regex : 500 caractères
  • Taille maximale des tableaux : 100 éléments
  • Validation stricte des paramètres avant exécution