Configurer un service de base de données
Nous allons configurer un service externe de type base de données
Pour ce cas pratique, nous allons utiliser la table agent de l'application (base de données db-externe) qui se trouve sur le serveur localhost.
La table agent est de la forme :
| id | display_name | |
|---|---|---|
| 3067bfca-540a-4568-81ac-5b1cd7393aef | bbain@maarch.com | Barbara BAIN |
| f0c5a642-8906-4907-a5a0-08a7f14c2ed0 | bblier@maarch.com | Bernard BLIER |
Il faut avoir la permission
createsursearchableExternalServiceavec l'utilisateur consommant les api ci-dessous.
Configuration du service
Configuration via API
POST /searchable-external-services
{
"identifier": "database-service",
"type": "database",
"searchableFields": ["display_name"],
"sortableFields": ["display_name"],
"responseFormat": {
"id": "id",
"display_name": "display_name"
},
"parameters": {
"url": "postgresql://maarch:maarch@database:5432/mdf",
"tableName": "agent"
}
}
Configuration via fixtures
Mdm\ExternalService\Domain\SearchableExternalService:
database-service:
identifier: 'database-service'
owner: '@superadmin->id'
searchableFields: ["display_name"]
sortableFields: ["display_name"]
responseFormat: {
"id": "id",
"email": "email",
"display_name": "display_name"
}
parameters: {
"url": "postgresql://maarch:maarch@database:5432/mdf",
"tableName": "agent"
}
Utiliser l'API pour la recherche
On peut maintenant rechercher dans le service CSV en faisant un appel à l'API :
http://172.17.0.1:8080/external-services/database-service/search?display_name[partial]=jan&sort[asc]=display_name&limit=15
GET /external-services/database-service/search?display_name[partial]=bain&sort[asc]=display_name&limit=15 , la route de l'API est de la forme
GET /external-services/{service_identifier}/search?searchableFieldName=value&sort[{sort_direction}]={sort_field_name}&limit={limit}
Avec service_identifier, l'identifier du service externe renseigné dans la base
searchableFieldName, un des champs renseignés dans la propriété searchableFields du service
value, la valeur recherchée
Réponse :
[
{
"id": "3067bfca-540a-4568-81ac-5b1cd7393aef",
"email": "bbain@maarch.com",
"display_name": "BAIN Barbara"
}
]
Utiliser le service dans un modèle d'attributs
Il est possible d'utiliser ce service dans un modèle d'attributs, pour cela suivre la documentation disponible ici
Tri naturel PostgreSQL
Le tri utilisé en utilisant le paramètre sort de l'API utilise la clause SQL ORDER BY ....
Par défaut, PostgreSQL ne tri pas de façon "naturel", c'est-à-dire qu'on obtient des résultats dans cet ordre :
- test10
- test1
- test2
- test3
Pour faire du tri naturel, il faut utiliser une "COLLATION". Il faut d'abord créer une collation :
Puis appliquer cette collation à la colonne avec laquelle on souhaite trier :
Ici, on applique la collation sur la colonne email de la table agent
On obtiendra alors des résultats dans cet ordre :
- test1
- test2
- test3
- test10