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 champ | Exemple | Filtrable |
|---|---|---|
| Champs directs | name, email, createdAt | ✅ Oui |
| ObjectId références | category, user, activity | ✅ Par ID uniquement |
| Propriétés d'objets liés | category.name, user.email | ❌ Non |
| Champs personnalisés | customFields.field1 | ✅ Oui |
🚀 Endpoints supportés
Tous les endpoints LIST supportent le filtrage.
Projets
GET /projects- ProjetsGET /projects/public- Projets publics
Par projet
GET /projects/:projectId/activities- ActivitésGET /projects/:projectId/categories- CatégoriesGET /projects/:projectId/places- EspacesGET /projects/:projectId/sessions- SessionsGET /projects/:projectId/stewards- ResponsablesGET /projects/:projectId/teams- ÉquipesGET /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érateur | Description | Exemple |
|---|---|---|
$eq | Égal à | filter={"name":{"$eq":"Atelier"}} |
$ne | Différent de | filter={"status":{"$ne":"cancelled"}} |
$gt | Supérieur à | filter={"age":{"$gt":18}} |
$gte | Supérieur ou égal | filter={"age":{"$gte":18}} |
$lt | Inférieur à | filter={"price":{"$lt":100}} |
$lte | Inférieur ou égal | filter={"price":{"$lte":100}} |
$in | Contenu dans le tableau | filter={"status":{"$in":["active","pending"]}} |
$nin | Non contenu dans le tableau | filter={"status":{"$nin":["cancelled","archived"]}} |
$regex | Expression régulière | filter={"name":{"$regex":"^ate"}} |
$options | Options regex | filter={"name":{"$regex":"workshop","$options":"i"}} |
$exists | Champ existe | filter={"description":{"$exists":true}} |
$all | Contient toutes les valeurs | filter={"tags":{"$all":["music","art"]}} |
$size | Taille du tableau | filter={"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