medialab / toflit18

TOFLIT18 datascape's sources.
http://toflit18.medialab.sciences-po.fr
14 stars 2 forks source link

integrate new API classification #130

Closed paulgirard closed 6 years ago

paulgirard commented 6 years ago

Voici la doc de l'API pour le browser de classification après mise à jour.

classification/:id/search

List/search groups of one classification with teh details of the list of items chich are aggregated by each group. The aggregation level can be set with queryItemFrom (default to the first parent classification).

params

outputs

List of groups containing metadata + list of items. matched info in both items and groups object are only present if queryItem exists ni query.

{
    "status": "ok",
    "code": 200,
    "result": [
        {
            "name": "Metal products",
            "items": [
                {
                    "name": "potin à plomber pots",
                    "matched": true
                },
                {
                    "name": "Fer-blanc en quart",
                    "matched": false
                },
                {
                    "name": "acier",
                    "matched": false
                },
                {
                    "name": "acier brun",
                    "matched": false
                }
            ],
            "nbItems": 1601,
            "id": 615192,
            "nbMatchedItems": 1
        },
        {
            "name": "Linen threads and fabrics",
            "items": [
                {
                    "name": "toile de lin de Bernay",
                    "matched": true
                },
                {
                    "name": "batiste",
                    "matched": false
                },
                {
                    "name": "batiste blanche",
                    "matched": false
                },
                {
                    "name": "batiste et linon",
                    "matched": false
                }
            ],
            "nbItems": 430,
            "id": 615186,
            "nbMatchedItems": 1
        }
    ]
}

classification/group/:id

List items of one classification group. API used to paginate over items in one group

params

outputs

One group object containing metadata + list of items. matched info in both items and group object are only present if queryItem exists in query.

{
    "status": "ok",
    "code": 200,
    "result": {
        "name": "Metal products",
        "items": [
            {
                "name": "soufflets à tirer le vin",
                "matched": true
            },
            {
                "name": "soufflets à tirer le vin au clair",
                "matched": true
            },
            {
                "name": "soufflets à tirer le vin au clair avec sa garniture",
                "matched": true
            },
            {
                "name": "Fer-blanc en quart",
                "matched": false
            },
            {
                "name": "acier",
                "matched": false
            },
            {
                "name": "acier brun",
                "matched": false
            },
            {
                "name": "acier brut",
                "matched": false
            },
            {
                "name": "acier commun",
                "matched": false
            },
            {
                "name": "acier en barres",
                "matched": false
            },
            {
                "name": "acier en bottes pour la Compagnie des Indes",
                "matched": false
            }
        ],
        "nbItems": 1601,
        "id": 615192,
        "nbMatchedItems": 8
    }
}
jacomyal commented 6 years ago

Je push d'ici peu quelques petits correctifs pour l'API, mais j'ai toujours un peti soucis: Je n'ai pas les mêmes items ni le même nombre d'items via les routes GET:/classification/:id/search et GET:/classification/group/:id.

Exemples chez moi en local:

http://localhost:4000/classification/4/search?source=false

{
  "status": "ok",
  "code": 200,
  "result": [
    {
      "name": "narrow medical product",
      "items": [
        {
          "name": "acide succinique"
        },
        {
          "name": "acorus"
        },
        {
          "name": "agaric"
        },
        {
          "name": "agaric amadouvier"
        },
        {
          "name": "agaric amadouvier brut"
        }
      ],
      "nbItems": 534,
      "id": 614575
    },
    {
      "name": "not a medical product",
      "items": [
        {
          "name": "???"
        },
        {
          "name": "??? blanc"
        },
        {
          "name": "??? brun"
        },
        {
          "name": "??? d'Anjou et de Touraine"
        },
        {
          "name": "??? d'une valeur moindre de deux mille francs chacun"
        }
      ],
      "nbItems": 19507,
      "id": 614574
    }
  ]
}

http://localhost:4000/classification/group/614575?limitItem=5&offsetItem=0

{
  "status": "ok",
  "code": 200,
  "result": {
    "name": "narrow medical product",
    "items": [
      {
        "name": "///Drogues Médicinales///Drogues médicinales réunies",
        "matched": true
      },
      {
        "name": "///Drogues Médicinales///Drogues réunies",
        "matched": true
      },
      {
        "name": "///Drogues Médicinales///Ipécacuanha",
        "matched": true
      },
      {
        "name": "///Drogues Médicinales///Manne",
        "matched": true
      },
      {
        "name": "///Drogues Médicinales///Quinquina",
        "matched": true
      }
    ],
    "nbItems": 4044,
    "id": 614575
  }
}
paulgirard commented 6 years ago

en effet c'est un bug. Les items du group sont déclarées comme matched alors qu'il n'y a pas de query ! Je regarde

paulgirard commented 6 years ago
paulgirard commented 6 years ago

pour le nbResult, Jusqu'ici on n'en avait pas besoin car on avait un système de scroll infini qui n'a pas besoin de savoir le nombre de pages total. Est ce vraiment indispensable puisque qu'on ne permet pas à l'utilisateur de changer de pages de résultats ? Il ne peut faire que next non ? @jacomyal ton avis.

paulgirard commented 6 years ago

Pour le matched: true ce n'est pas trivial à virer. Faut que je refacto. J'essaie de faire ça.

jacomyal commented 6 years ago

Pour le nbResult, je vais me débrouiller autrement : Quand l'utilisateur scroll et qu'un appelle renvoie 0 éléments, je vais set un flag. Ça va le faire.

Pour le matched: true, c'est pas trop grave : je peux simplement ne l'utiliser que si l'utilisateur a entré une requête. Mon principal soucis était que les items ne sont pas du tout les mêmes dans les 2 appels.

paulgirard commented 6 years ago

Ça devrait être fixé. Je te laisse clore une fois vérifier de ton côté.