Skip to content

Gathering endpoints

Tous les endpoints sont accessibles avec l'URL de base https://api.blueorangegames.eu.

Les endpoints regroupé ici sont lié à la webapp du gathering Blue Orange, app.blueorange.events & admin.blueorange.events.

GET

/gathering/users

AUTH

Cette route nécessite une clé avec le role gathering-admin-database

Cette route permet de récupérer la liste de tous les utilisateurs inscris du gathering

Elle prend un paramètre optionnel :

  • export => boolean qui défini si la réponse doit renvoyer un CSV formaté
axios.get(`https://api.blueorangegames.eu/gathering/users?export=${boolean}`)

GET

/gathering/user

AUTH

Cette route nécessite une clé avec le role gathering-database

Cette route permet de récupérer les données un utilisateur en fonction de son email ou de son ID

Elle prend l'un des deux paramètres d'URL suivant :

  • id => ID de l'utilisateur dans la BDD
  • email => email de l'utilisateur dans la BDD
axios.get(`https://api.blueorangegames.eu/gathering/user?email=${userEmail}`)

// OU

axios.get(`https://api.blueorangegames.eu/gathering/user?id=${userId}`)

POST

/gathering/register

AUTH

Cette route nécessite une clé avec le role gathering-database

Cette route permet de créer un nouvel utilisateur dans la BDD, ou d'en mettre à jour un si l'email est déjà associé à un utilisateur dans la BDD.

Les paramètres du body doivent être :

  • email
  • name
  • surname
  • company
  • service
  • country
  • livestreamPresence (bool)

INFO

Cette route envoie un email de confirmation à l'utilisateur si l'inscription c'est bien déroulé.

axios.post(`https://api.blueorangegames.eu/gathering/register`, {
    email: 'elliot.thiebaut@tribuo.fr',
    name: 'Elliot',
    surname: 'THIEBAUT',
    company: 'tribuo',
    service: 'IT Department',
    country: 'France',
    livestreamPresence: true
})

PUT

/gathering/user/firstvisit/:userId

AUTH

Cette route nécessite une clé avec le role gathering-database

Cette route permet de modifier le statut firstVisit d'un untilisateur.

Elle prend en paramètres d'URL :

  • status => boolean qui indique le nouveau statut à modifier
axios.put(`https://api.blueorangegames.eu/gathering/user/firstvisit/${userID}?status=${bool}`)

PUT

/gathering/user/video/:userId/:gameId

AUTH

Cette route nécessite une clé avec le role gathering-database

Cette route permet d'ajouter une vidéo à l'array viewedVideo de l'utilisateur en base.

Elle prend deux paramètres dans l'URL :

  • userId => l'ID de l'utilisateur à qui il faut rajouter une vidéo
  • gameId => l'ID du jeu à rajouter dans viewedVideo
axios.put(`https://api.blueorangegames.eu/gathering/user/video/${userId}/${gameId}`)

DELETE

/gathering/user/video/:userId/:gameId

AUTH

Cette route nécessite une clé avec le role gathering-database

Cette route permet de supprimer une vidéo à l'array viewedVideo de l'utilisateur en base.

Elle prend deux paramètres dans l'URL :

  • userId => l'ID de l'utilisateur à qui il faut rajouter une vidéo
  • gameId => l'ID du jeu à rajouter dans viewedVideo
axios.delete(`https://api.blueorangegames.eu/gathering/user/video/${userId}/${gameId}`)

DELETE

/gathering/user/:id

AUTH

Cette route nécessite une clé avec le role gathering-admin-database

Cette route permet de supprimer un utilisateur de la BDD.

INFO

La suppression d'un utilisateur est un soft delete, les informations sont toujours en base et l'utilisateur peut être réactivé manuellement en éditant la base.

Elle prend deux paramètres dans l'URL :

  • id => l'ID de l'utilisateur
axios.delete(`https://api.blueorangegames.eu/gathering/user/${userId}`)

GET

/gathering/games

AUTH

Cette route nécessite une clé avec le role gathering-database

Cette route permet de récupérer la liste de tous les jeux enregistrés en base

axios.get(`https://api.blueorangegames.eu/gathering/games`)

GET

/gathering/game/:id

AUTH

Cette route nécessite une clé avec le role gathering-database

Cette route permet de récupérer un jeu en fonction de son id.

Elle prend un paramètre optionnel :

  • export => boolean qui défini si la réponse doit renvoyer un CSV formaté
axios.get(`https://api.blueorangegames.eu/gathering/game/${gameId}`)

POST

/gathering/game

AUTH

Cette route nécessite une clé avec le role gathering-admin-database

Cette route permet de créer un nouveau jeu dans la BDD.

Les paramètres du body doivent être :

  • designer (Array of Strings)
  • illustrator (Array of Strings)
  • videoStops (Array of Objects)
    • timestamp (Int)
    • questions (Array of Objects)
      • question (String)
      • answers (Array of Strings)
  • name
  • category
  • description
  • imgUrl (String qui amène à une image)
  • videoUrl (String qui amène à une playlist HLS)

INFO

L'objet à envoyer est légèrement complexe et doit bien comporter toutes les informations, et au moins un élément dans chaque Array.

INFO

La videoUrl doit amener à une playlist HLS, sinon le player dans le front ne fonctionnera pas.

axios.post(`https://api.blueorangegames.eu/gathering/game`, {
    name: 'Super jeux',
    category: 'Party Games',
    description: 'Lorem Ipsum dolor si emet. Lorem Ipsum dolor si emet. Lorem Ipsum dolor si emet.',
    imgUrl: 'https://cdn.blueorangegame.eu/gathering/superjeux.png',
    videoUrl: 'https://cdn.blueorangegame.eu/video/superjeux/playlist.m3u8',
    country: 'France',
    designer: ['Elliot', 'Hervine'],
    illustrator: ['Hervine'],
    videoStops: [
        {
            timestamp: 256,
            questions: [
                {
                    question: 'Is this a good game ?',
                    answers: ['Yes', 'No', 'Maybe']
                }
            ]
        }
    ]
})

PUT

/gathering/game/:id

AUTH

Cette route nécessite une clé avec le role gathering-admin-database

Cette route permet de modifier un jeu dans la BDD. Elle est très semblable et respecte les mêmes conditions que la route pour créer un jeu.

Les paramètres du body doivent contenir au moins l'un des paramètres suivants :

  • designer (Array of Strings)
  • illustrator (Array of Strings)
  • videoStops (Array of Objects)
    • timestamp (Int)
    • questions (Array of Objects)
      • question (String)
      • answers (Array of Strings)
  • name
  • category
  • description
  • imgUrl (String qui amène à une image)
  • videoUrl (String qui amène à une playlist HLS)

MODIFIER videoStops

Si jamais on veut modifier l'array videoStops, il faut renvoyer tout l'objet videoStops et pas que la question à modifier.

axios.put(`https://api.blueorangegames.eu/gathering/game/${gameId}`, {
    category: 'Party Games',
    videoStops: [
        {
            timestamp: 256,
            questions: [
                {
                    question: 'Is this a good game ?',
                    answers: ['Yes', 'No', 'Maybe']
                }
            ]
        }
    ]
})

POST

/gathering/cover/:gameId

AUTH

Cette route nécessite une clé avec le role gathering-admin-database

Cette route permet d'ajouter une nouvelle image pour le jeu en envoyant directement le fichier image en multipart/form-data. Cela met également à jour le lien dans imgUrl dans la BDD jeux.

DANGER

Cette route upload le fichier envoyé sur le CDN, cela peut engendrer des couts important si mal utilisé.

Le type de formulaire doit être multipart/form-data, et dans le body il faut avoir un paramètre cover avec le fichier.

INFO

La taille maximum d'une image envoyé est de 5MB.

let coverFormData = new FormData();
coverFormData.append('cover', file)

axios.post(`https://api.blueorangegames.eu/gathering/cover/${gameId}`, coverFormData,{
    headers: {
        'Authorization': `KEY ${key}`,
        'Content-Type': 'multipart/form-data'
    }
})

POST

/gathering/video/:gameId

AUTH

Cette route nécessite une clé avec le role gathering-admin-database

Cette route permet d'ajouter une nouvelle vidéo pour le jeu en envoyant directement le fichier vidéo en multipart/form-data. Cela met également à jour le lien dans videoUrl dans la BDD jeux. La vidéo sera ensuite envoyée vers le CDN, puis transcodé en différents formats pour construire la playlist HLS.

DANGER

Cette route upload le fichier envoyé sur le CDN et engendre le transcodage du fichier vidéo, cela peut engendrer des couts important si mal utilisé.

Le type de formulaire doit être multipart/form-data, et dans le body il faut avoir un paramètre video avec le fichier.

INFO

La taille maximum d'une image envoyé est de 1GB.

let videoFormData = new FormData();
videoFormData.append('video', file)

axios.post(`https://api.blueorangegames.eu/gathering/video/${gameId}`, videoFormData,{
    headers: {
        'Authorization': `KEY ${key}`,
        'Content-Type': 'multipart/form-data'
    }
})

DELETE

/gathering/game/:id

AUTH

Cette route nécessite une clé avec le role gathering-admin-database

Cette route permet de supprimer un jeu de la BDD.

INFO

La suppression d'un jeu est un soft delete, les informations sont toujours en base et le jeu peut être réactivé manuellement en éditant la base.

Elle prend deux paramètres dans l'URL :

  • id => l'ID du jeu
axios.delete(`https://api.blueorangegames.eu/gathering/answers`)

GET

/gathering/answers

AUTH

Cette route nécessite une clé avec le role gathering-admin-database

Cette route permet de récupérer la liste de toutes les réponses en base.

Elle prend un paramètre optionnel :

  • export => boolean qui défini si la réponse doit renvoyer un CSV formaté
axios.get(`https://api.blueorangegames.eu/gathering/answers?export=${boolean}`)

POST

/gathering/answer/:userId/:gameId

AUTH

Cette route nécessite une clé avec le role gathering-database

Cette route permet d'ajouter une nouvelle réponse à un jeu en base. Si la combinaison gameId / userId existe déjà et donc qu'il y a déjà eu une réponse de cet utilisateur pour ce jeu, les nouvelles réponses seront ajoutées aux anciennes / écrasé s'il y a deux réponses à la même question.

axios.post(`https://api.blueorangegames.eu/gathering/answer/${userId}/${gameId}`, [
    {
        'question': 'Is this game good ?',
        'answer': 'Yes'
    },
    {
        'question': 'Is this game fun ?',
        'answer': 'Maybe'
    }
])

Docs tribuo.cloud