{
  "info": {
    "name": "IshedDB — API HTTPS",
    "description": "Toutes les routes de l'API HTTPS d'IshedDB (version 0.1.0), dans un ordre qui se joue du début à la fin sur une base d'essai : la dernière requête supprime la collection créée par la première.\n\nAvant de commencer : choisissez l'environnement « IshedDB », mettez-y l'adresse de votre cluster (baseUrl) et votre clé (ishedKey, une variable secrète ; ou dans le coffre de Postman). Une clé d'administration fait tout ; une clé de lecture, les lectures seulement. Votre adresse doit être autorisée dans la console (Accès réseau).\n\nDocumentation : la page « API HTTPS » du site d'IshedDB (/docs/api).",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{ishedKey}}",
        "type": "string"
      }
    ]
  },
  "event": [
    {
      "listen": "test",
      "script": {
        "type": "text/javascript",
        "exec": [
          "pm.test(`${pm.info.requestName} : réponse réussie`, () => pm.expect(pm.response.code).to.be.within(200, 299));",
          "pm.test(`${pm.info.requestName} : réponse en JSON`, () => pm.response.json());"
        ]
      }
    }
  ],
  "variable": [
    {
      "key": "base",
      "value": "Essais",
      "type": "string",
      "description": "La base où la collection d’essai est créée."
    },
    {
      "key": "collection",
      "value": "rendezvous_postman",
      "type": "string",
      "description": "La collection d’essai, supprimée à la fin."
    },
    {
      "key": "transaction",
      "value": "",
      "type": "string",
      "description": "Remplie par « Ouvrir une transaction »."
    }
  ],
  "item": [
    {
      "name": "Bases et collections",
      "item": [
        {
          "name": "Les bases du cluster",
          "request": {
            "method": "GET",
            "header": [],
            "url": "{{baseUrl}}/v1/bases",
            "description": "Les bases du cluster : nom, taille sur disque, vide ou non, et la taille totale (une clé limitée : ses bases). Clé : lecture."
          }
        },
        {
          "name": "Créer la collection (comme db.createCollection)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:create",
            "description": "Comme db.createCollection : une collection vide (avec validator), ou une vue (viewOn, pipeline). Clé : écriture."
          }
        },
        {
          "name": "Les collections de la base",
          "request": {
            "method": "GET",
            "header": [],
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections",
            "description": "Les collections et les vues d’une base, avec leur nombre de documents. Clé : lecture."
          }
        },
        {
          "name": "Poser la définition (clé d’administration)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"definition\": {\n    \"fields\": {\n      \"patient\": {\n        \"type\": \"string\",\n        \"required\": true,\n        \"trim\": true\n      },\n      \"ville\": {\n        \"type\": \"string\"\n      },\n      \"téléphone\": {\n        \"type\": \"string\",\n        \"hidden\": true\n      }\n    },\n    \"timestamps\": true,\n    \"indexes\": [\n      \"ville\"\n    ]\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}/definition",
            "description": "Pose la définition d’une collection (corps : { definition }). Clé : administration."
          }
        },
        {
          "name": "Lire la définition",
          "request": {
            "method": "GET",
            "header": [],
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}/definition",
            "description": "La définition d’une collection : champs, uniques, index, expiration, validation. Clé : lecture."
          }
        }
      ]
    },
    {
      "name": "Documents (syntaxe IshedDB)",
      "item": [
        {
          "name": "Ajouter un document (identifiant choisi)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"rdv-001\",\n  \"data\": {\n    \"patient\": \"Awa Diop\",\n    \"ville\": \"Dakar\",\n    \"âge\": 34,\n    \"téléphone\": \"+221770000000\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}/documents",
            "description": "Ajoute un document (corps : { data }, et { id } pour le choisir) ; répond le document avec son identifiant. Clé : écriture."
          }
        },
        {
          "name": "Lire un document",
          "request": {
            "method": "GET",
            "header": [],
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}/documents/rdv-001?select=patient,ville",
            "description": "Lit un document ; ?reveal=champ pour un champ caché, ?select=a,b pour certains champs. Clé : lecture."
          }
        },
        {
          "name": "Remplacer un document",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"data\": {\n    \"patient\": \"Awa Diop\",\n    \"ville\": \"Dakar\",\n    \"âge\": 35,\n    \"téléphone\": \"+221770000000\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}/documents/rdv-001",
            "description": "Remplace un document, ou le crée (corps : { data }). Clé : écriture."
          }
        },
        {
          "name": "Modifier des champs",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"changes\": {\n    \"âge\": {\n      \"~increment\": 1\n    },\n    \"motif\": \"suivi\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}/documents/rdv-001",
            "description": "Modifie des champs d’un document (corps : { changes }, avec les valeurs spéciales ~increment, ~remove…). Clé : écriture."
          }
        },
        {
          "name": "Une requête (where, orderBy, limit)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"where\": [\n    [\n      \"ville\",\n      \"==\",\n      \"Dakar\"\n    ],\n    [\n      \"âge\",\n      \">\",\n      30\n    ]\n  ],\n  \"orderBy\": [\n    [\n      \"patient\",\n      \"asc\"\n    ]\n  ],\n  \"limit\": 20\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:query",
            "description": "Les documents d’une requête dans la syntaxe d’IshedDB : where, orderBy, limit, offset, select, pageToken. Clé : lecture."
          }
        },
        {
          "name": "Compter",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"where\": [\n    [\n      \"ville\",\n      \"==\",\n      \"Dakar\"\n    ]\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:count",
            "description": "Le nombre de documents d’une requête (where). Clé : lecture."
          }
        },
        {
          "name": "Le nombre de documents, aussitôt",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:estimate",
            "description": "Le nombre de documents de la collection, aussitôt. Clé : lecture."
          }
        },
        {
          "name": "Au moins un document ?",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"where\": [\n    [\n      \"patient\",\n      \"==\",\n      \"Awa Diop\"\n    ]\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:exists",
            "description": "Si au moins un document répond à la requête. Clé : lecture."
          }
        },
        {
          "name": "Compter par valeur d’un champ",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"path\": \"ville\",\n  \"where\": [],\n  \"order\": \"desc\",\n  \"limit\": 10\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:countBy",
            "description": "Le nombre de documents par valeur d’un champ (corps : { path, where, order, limit }). Clé : lecture."
          }
        },
        {
          "name": "Modifier tous les documents d’une requête",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"where\": [\n    [\n      \"ville\",\n      \"==\",\n      \"Dakar\"\n    ]\n  ],\n  \"changes\": {\n    \"région\": \"Dakar\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:updateAll",
            "description": "Modifie tous les documents d’une requête (corps : { where, changes }). Clé : écriture."
          }
        },
        {
          "name": "Modifier le premier, ou le créer",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"where\": [\n    [\n      \"patient\",\n      \"==\",\n      \"Moussa Ndiaye\"\n    ]\n  ],\n  \"changes\": {\n    \"patient\": \"Moussa Ndiaye\",\n    \"ville\": \"Thiès\"\n  },\n  \"create\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:updateFirst",
            "description": "Modifie le premier document d’une requête, ou le crée ({ create: true }). Clé : écriture."
          }
        },
        {
          "name": "Importer, identifiants gardés (clé d’administration)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"documents\": [\n    {\n      \"id\": \"rdv-002\",\n      \"data\": {\n        \"patient\": \"Fatou Sarr\",\n        \"ville\": \"Dakar\"\n      }\n    },\n    {\n      \"id\": \"rdv-003\",\n      \"data\": {\n        \"patient\": \"Ibrahima Fall\",\n        \"ville\": \"Saint-Louis\"\n      }\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:import",
            "description": "Importe des documents tels qu’ils sont, identifiants gardés (1000 par appel). Clé : administration."
          }
        },
        {
          "name": "Supprimer les documents d’une requête",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"where\": [\n    [\n      \"ville\",\n      \"==\",\n      \"Saint-Louis\"\n    ]\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:deleteWhere",
            "description": "Supprime les documents d’une requête (ou le premier, { first: true }). Clé : écriture."
          }
        },
        {
          "name": "Supprimer un document",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}/documents/rdv-002",
            "description": "Supprime un document. Clé : écriture."
          }
        }
      ]
    },
    {
      "name": "Comme MongoDB (find, insertOne…)",
      "item": [
        {
          "name": "insertOne",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"document\": {\n    \"patient\": \"Aminata Ba\",\n    \"ville\": \"Dakar\",\n    \"âge\": 41\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:insertOne",
            "description": "Comme insertOne (corps : { document }). Clé : écriture."
          }
        },
        {
          "name": "insertMany",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"documents\": [\n    {\n      \"patient\": \"Cheikh Diallo\",\n      \"ville\": \"Thiès\",\n      \"âge\": 52\n    },\n    {\n      \"patient\": \"Mariama Sow\",\n      \"ville\": \"Dakar\",\n      \"âge\": 27\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:insertMany",
            "description": "Comme insertMany (corps : { documents }, 1000 au plus), tout ou rien. Clé : écriture."
          }
        },
        {
          "name": "find",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"filter\": {\n    \"ville\": \"Dakar\"\n  },\n  \"sort\": {\n    \"patient\": 1\n  },\n  \"projection\": {\n    \"patient\": 1,\n    \"âge\": 1\n  },\n  \"limit\": 20\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:find",
            "description": "Comme find : filter, sort, projection, limit, skip ; 1000 documents par page, puis nextPageToken. Clé : lecture."
          }
        },
        {
          "name": "findOne",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"filter\": {\n    \"patient\": \"Aminata Ba\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:findOne",
            "description": "Comme findOne : le premier document du filtre, ou null. Clé : lecture."
          }
        },
        {
          "name": "countDocuments",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"filter\": {\n    \"ville\": \"Dakar\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:countDocuments",
            "description": "Comme countDocuments. Clé : lecture."
          }
        },
        {
          "name": "estimatedDocumentCount",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:estimatedDocumentCount",
            "description": "Comme estimatedDocumentCount. Clé : lecture."
          }
        },
        {
          "name": "distinct",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"key\": \"ville\",\n  \"filter\": {}\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:distinct",
            "description": "Comme distinct : les valeurs d’un champ (key, filter). Clé : lecture."
          }
        },
        {
          "name": "aggregate",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"pipeline\": [\n    {\n      \"$group\": {\n        \"_id\": \"$ville\",\n        \"patients\": {\n          \"$sum\": 1\n        }\n      }\n    },\n    {\n      \"$sort\": {\n        \"patients\": -1\n      }\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:aggregate",
            "description": "Comme aggregate : un pipeline, ses résultats 1000 par 1000 (limit, skip). Clé : lecture."
          }
        },
        {
          "name": "updateOne",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"filter\": {\n    \"patient\": \"Aminata Ba\"\n  },\n  \"update\": {\n    \"$set\": {\n      \"motif\": \"consultation\"\n    },\n    \"$inc\": {\n      \"visites\": 1\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:updateOne",
            "description": "Comme updateOne : filter, update ($set, $inc…), upsert. Clé : écriture."
          }
        },
        {
          "name": "updateMany",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"filter\": {\n    \"ville\": \"Thiès\"\n  },\n  \"update\": {\n    \"$set\": {\n      \"région\": \"Thiès\"\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:updateMany",
            "description": "Comme updateMany. Clé : écriture."
          }
        },
        {
          "name": "replaceOne",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"filter\": {\n    \"patient\": \"Mariama Sow\"\n  },\n  \"replacement\": {\n    \"patient\": \"Mariama Sow\",\n    \"ville\": \"Dakar\",\n    \"âge\": 28\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:replaceOne",
            "description": "Comme replaceOne : filter, replacement, upsert. Clé : écriture."
          }
        },
        {
          "name": "bulkWrite",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"operations\": [\n    {\n      \"insertOne\": {\n        \"document\": {\n          \"patient\": \"Ousmane Faye\",\n          \"ville\": \"Kaolack\"\n        }\n      }\n    },\n    {\n      \"updateOne\": {\n        \"filter\": {\n          \"patient\": \"Ousmane Faye\"\n        },\n        \"update\": {\n          \"$set\": {\n            \"âge\": 60\n          }\n        }\n      }\n    },\n    {\n      \"deleteOne\": {\n        \"filter\": {\n          \"patient\": \"Ousmane Faye\"\n        }\n      }\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:bulkWrite",
            "description": "Comme bulkWrite : des insertOne, updateOne, updateMany, replaceOne, deleteOne, deleteMany dans l’ordre (ordered). Clé : écriture."
          }
        },
        {
          "name": "createIndex",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"key\": {\n    \"ville\": 1,\n    \"âge\": -1\n  },\n  \"name\": \"ville_age\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:createIndex",
            "description": "Comme createIndex : keys et options (unique, name, partialFilterExpression, texte, wildcard). Clé : écriture."
          }
        },
        {
          "name": "createIndexes",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"indexes\": [\n    {\n      \"key\": {\n        \"patient\": 1\n      },\n      \"name\": \"patient_1\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:createIndexes",
            "description": "Comme createIndexes : plusieurs index d’un coup. Clé : écriture."
          }
        },
        {
          "name": "listIndexes",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:listIndexes",
            "description": "Comme listIndexes : les index de la collection. Clé : lecture."
          }
        },
        {
          "name": "explain",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"explain\": {\n    \"find\": \"{{collection}}\",\n    \"filter\": {\n      \"ville\": \"Dakar\"\n    }\n  },\n  \"verbosity\": \"queryPlanner\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:explain",
            "description": "Le plan d’un find, d’un aggregate, d’un count ou d’un distinct (verbosity). Clé : lecture."
          }
        },
        {
          "name": "dropIndex",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"index\": \"ville_age\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:dropIndex",
            "description": "Comme dropIndex : un index, par son nom ou ses clés. Clé : écriture."
          }
        },
        {
          "name": "dropIndexes",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:dropIndexes",
            "description": "Comme dropIndexes : tous les index (sauf _id). Clé : écriture."
          }
        },
        {
          "name": "collMod (règles de validation)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"validator\": {\n    \"$jsonSchema\": {\n      \"required\": [\n        \"patient\"\n      ]\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:collMod",
            "description": "Comme collMod : change une vue ou les règles de validation. Clé : écriture."
          }
        },
        {
          "name": "watch (les changements de la collection)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"maxAwaitTimeMS\": 1000\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:watch",
            "description": "Comme watch : les changements de la collection (pipeline, resumeAfter, fullDocument…). Clé : lecture."
          }
        },
        {
          "name": "deleteOne",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"filter\": {\n    \"patient\": \"Mariama Sow\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:deleteOne",
            "description": "Comme deleteOne. Clé : écriture."
          }
        },
        {
          "name": "deleteMany",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"filter\": {\n    \"ville\": \"Thiès\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:deleteMany",
            "description": "Comme deleteMany. Clé : écriture."
          }
        }
      ]
    },
    {
      "name": "Commandes et temps réel",
      "item": [
        {
          "name": "runCommand (explain)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"explain\": {\n    \"count\": \"{{collection}}\",\n    \"query\": {}\n  },\n  \"verbosity\": \"queryPlanner\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}:runCommand",
            "description": "Une commande de MongoDB sur la base : create, collMod, drop, explain (la clé que demande la commande). Clé : lecture."
          }
        },
        {
          "name": "Les changements de la base",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"maxAwaitTimeMS\": 1000\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}:watch",
            "description": "Les changements de toute la base, comme un change stream (réponse dès qu’il y en a, 20 s d’attente au plus). Clé : lecture."
          }
        },
        {
          "name": "Les changements du cluster",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"maxAwaitTimeMS\": 1000\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1:watch",
            "description": "Les changements de tout le cluster. Clé : lecture."
          }
        }
      ]
    },
    {
      "name": "Transactions",
      "item": [
        {
          "name": "Ouvrir une transaction",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.collectionVariables.set('transaction', pm.response.json().transaction);"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1:beginTransaction",
            "description": "Ouvre une transaction (60 s au plus, 20 s sans requête) ; répond son identifiant, à donner dans l’en-tête X-Ished-Transaction. Clé : lecture."
          }
        },
        {
          "name": "insertOne dans la transaction",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "X-Ished-Transaction",
                "value": "{{transaction}}"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"document\": {\n    \"patient\": \"Khady Mbaye\",\n    \"ville\": \"Ziguinchor\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:insertOne",
            "description": "Comme insertOne (corps : { document }). Clé : écriture."
          }
        },
        {
          "name": "Valider la transaction",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"transaction\": \"{{transaction}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1:commit",
            "description": "Valide une transaction : tout ce qu’elle a écrit, ou rien. Clé : lecture."
          }
        },
        {
          "name": "Ouvrir une autre transaction",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.collectionVariables.set('transaction', pm.response.json().transaction);"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1:beginTransaction",
            "description": "Ouvre une transaction (60 s au plus, 20 s sans requête) ; répond son identifiant, à donner dans l’en-tête X-Ished-Transaction. Clé : lecture."
          }
        },
        {
          "name": "L’abandonner",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"transaction\": \"{{transaction}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1:rollback",
            "description": "Abandonne une transaction. Clé : lecture."
          }
        }
      ]
    },
    {
      "name": "Journal des accès",
      "item": [
        {
          "name": "Le journal des accès (clé d’administration)",
          "request": {
            "method": "GET",
            "header": [],
            "url": "{{baseUrl}}/v1/audit?limit=20",
            "description": "Le journal des accès du cluster (?limit=, 1000 au plus) : qui a lu ou écrit quoi, jamais une valeur. Clé : administration."
          }
        },
        {
          "name": "Vérifier la chaîne du journal (clé d’administration)",
          "request": {
            "method": "GET",
            "header": [],
            "url": "{{baseUrl}}/v1/audit:verify",
            "description": "Vérifie la chaîne du journal : une ligne retirée ou changée se voit. Clé : administration."
          }
        }
      ]
    },
    {
      "name": "Fin",
      "item": [
        {
          "name": "Supprimer la collection d’essai",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": "{{baseUrl}}/v1/bases/{{base}}/collections/{{collection}}:drop",
            "description": "Supprime la collection et ses documents, ou la vue. Clé : écriture."
          }
        }
      ]
    }
  ]
}
