Skip to content

DanielArian/JuniaPocket-API

Repository files navigation

Junia Pocket API

Projet non maintenu.

Documentation

  1. Gestion des utilisateurs
    1. Inscription
    2. Login
    3. Changer ses identifiants Aurion
    4. Changer son mot de passe Junia Pocket
    5. Supprimer son compte Junia Pocket
  2. Notes
    1. Récupération des notes
    2. Vérifier si de nouvelles notes ont été ajoutées
  3. Planning
    1. Récupération des Planning
    2. Vérifier s'il y a des modifications dans un planning
  4. Notifications
  5. Salles disponibles
  6. Groupes
    1. Créer un groupe
    2. Ajouter membre à un groupe
    3. Connaitre les groupes auxquels on appartient
    4. Quitter un groupe
    5. Recherche créneaux commun emploi du temps
  7. Widget

Interroger le serveur : https://juniapocketapi.herokuapp.com

Gestion des utilisateurs

Inscription

Enregistrement de l'utilisateur sur JuniaPocjet.

Requête à effectuer

Methode : POST

Route : /user/signup

Data :

{
  aurionID: <votre_identifiant_sur_Aurion>,
  aurionPassword: <votre_mdp_sur_Aurion>;
  jpocketPassword: <choisir_un_mdp_pour_se_connecter_a_JuniaPocket>
}

Réponses possibles

Status Code : 201 (Created) / Si Inscription réussie, user enregistré dans la collection 'users' dans la database.

Status Code : 401 (Unauthorized) / Si l'identifiant ou le mot de passe Aurion fournis sont incorrects, il est impossible de créer un compte.

Status Code : 500 (Server Error) / Il y a une erreur interne.

Login

Requête à effectuer

Methode : POST

Route : /user/login

Data :

{
  aurionID: <votre_identifiant_sur_Aurion>,
  jpocketPassword: <votre_mdp_JuniaPocket>
}

Réponses possibles

Status Code : 201 (Created) / Connexion réussie. Le serveur renvoie ces infos à récupérer :

{
  user._id: <value>,
  aurionID: <value>;
  token: <value>
}

Ce token JWT vous permettra de vous authenfier pour les réquêtes nécessitant un droit d'accès.

Status Code : 401 (Unauthorized) / Utilisateur non trouvé ou mot de passe JuniaPocket incorrect.

Status Code : 500 (Server Error) / Il y a une erreur interne.

Et d'autres erreur diverses ...

Mettre à jour ses identifiants Aurion

Requête à effectuer

Requête POST à l'url : /user/change-aurion-login-credentials

A ajouter dans le Header : Authorization: Bearer <token_obtenu_au_login>

Le body de la requête doit contenir :

{
  aurionID: <updated__value>
  aurionPassword: <updated_value>
}

Réponses possibles (non exhaustif)

Status code : 200 (OK)

Status code :401 (Unauthorized) et en body {error: 'INVALID_AURION_LOGIN_CRED' }

Status code :401 (Unauthorized) et en body {error: 'NOT_YOUR_AURION_ACCOUNT' }

Bad Request, Server Error, etc...

Changer son mot de passe Junia Pocket

Requête à effectuer

Requête POST à l'url : /user/change-jpocket-password

A ajouter dans le Header : Authorization: Bearer <token_obtenu_au_login>

Le body de la requête doit contenir :

{
  jpocketPassword: <new_value>
}

Réponses possibles (non exhaustif)

Status code : 200 (OK)

Status code :401 (Unauthorized)

Bad Request, Server Error, etc...

Supprimer son compte Junia Pocket

Requête POST à l'url : /user/delete

A ajouter dans le Header : Authorization: Bearer <token_obtenu_au_login>

Body :

{
  jpocketPassword: <value>
}

Notes

Récupération des notes

Pour un utilisateur authentifié (via token), on lit dans la BDD les notes qui sont enregistrées dans son document de la collection 'marks' puis on les renvoie au client.

Si c'est la première fois que l'utilisateur utilise cette requête, le serveur récupère les notes de l'utilisateur sur Aurion et les sauvegarde dans la BDD pour les prochaines fois.

Requête à effectuer

Methode : POST

Route : /marks/get

A ajouter dans le Header : Authorization: Bearer <token_obtenu_au_login>

Data : rien à envoyer

Réponse attendue

Status Code : 200 (OK)

Data : un Array contenant des Objets regroupant toutes les infos des notes disponibles dans la BDD (ou sur le compte aurion de l'utilisateur si c'est la 1ere fois que cette requête est effectuée). Les clés des objects peuvent varier entre les utilisateurs.

Pour récupérer la liste des clés : Object.keys(responseData)

Vérifier si de nouvelles notes ont été ajoutées

Cette requête n'est à effectuer QUE pour un utilisateur ayant déjà utilisée la requête précedente. Elle permet de lancer une nouvelle récupération des notes sur Aurion et mettre à jour les données de notes pour l'utilisateur dans la BDD.

Requête à effectuer

Methode : POST

Route : /marks/update

A ajouter dans le Header : Authorization: Bearer <token_obtenu_au_login>

Data : rien à envoyer

Réponse attendue

Status Code : 200 (OK)

Data : un Array contenant des Objets regroupant toutes les infos des notes disponibles sur le compte aurion de l'utilisateur. Les clés peuvent varier selon les utilisateurs.

Pour récupérer la liste des clés : Object.keys(responseData)

Planning

Récupération Planning

La récupération d'un planning se fait semaine par semaine.

Pour un utilisateur authentifié (via token), on lit dans la BDD les semaines qui sont enregistrées dans son document de la collection 'plannings' puis on renvoie la semaine demandée.

Si c'est la première fois que l'utilisateur utilise cette requête, le serveur récupère la semaine demandée par l'utilisateur sur Aurion et la sauvegarde dans la BDD pour les prochaines fois.

Requête à effectuer

Methode : POST

Route : /planning/get-week

A ajouter dans le Header : Authorization: Bearer <token_obtenu_au_login>

Data :

{
  date: <jj/mm/aaaa>,
}

La valeur de date doit obligatoirement être au format jj/mm/aaaa et le serveur renvoie le planning de toute la semaine incluant cette date.

REMARQUE IMPORTANTE : Si la valeur de date est laissée vide (une chaine vide), c'est la semaine actuelle qui va être récupérée.

Réponse attendue

A noter : La première fois que vous utilisez cette requête, si vous renvoyez la même requête avant que la première ne soit complétée, vous recevrez un status code 425 (Too Early) avec en message d'erreur.

A compteter

Vérifier s'il y a des modifications dans un planning

Requête à effectuer

Methode : POST

Route : /planning/update

A ajouter dans le Header : Authorization: Bearer <token_obtenu_au_login>

Data :

{
  date: <jj/mm/aaaa>,
}

La valeur de date doit obligatoirement être au format jj/mm/aaaa, le serveur renvoie le planning de toute la semaine incluant cette date après avoir mis à jour la Database.

REMARQUE IMPORTANTE : Si la valeur de date est laissée vide (une chaine vide), c'est la semaine actuelle qui va être récupérée.

Réponse attendue

Même type de réponse que la requête précédente.

Notifications

A l'inscription d'un nouvel utilisateur, un document est initialisé dans la collection 'notification preferences'. Il contient les informations suivantes :

{
  _id: <value>
  aurionID: <value>
  messengerPSID: '',
  mail: ''
}

A noter pour la suite que si un champs n'est pas laissé vide alors il sera utilisé. Donc si l'utilisateur renseigne un mail et un psid, alors il recevra une notification à la fois par mail et sur messenger. De la même façon, si ces champs sont laissés vides, aucune notification sera envoyée à l'utilisateur.

Pour renseigner ces informations, utiliser la requête suivante.

Requête à effectuer

Methode : POST

Route : /user/preferences/notifications

A ajouter dans le Header : Authorization: Bearer <token_obtenu_au_login>

Data :

{
  messengerPSID: <value>,
  mail: <value>
}

La valeur de messengerPSID s'obtient en envoyant le message "Je voudrais mon code" au bot Facebook JuniaPocket.

Réponse attendue

Status Code : 200 (OK) et en réponse : {message: 'Preferences mises à jour !'}

Status Code : 400 (Bad Request)

Satus Code : 500 (Server Error)

Salles disponibles

Recherche de salles disponibles en fonction d'une date, horaire, temps d'utilisation...

Requête à effectuer

Requête : POST

Route : /available-rooms

A ajouter dans le Header : Authorization: Bearer <token_obtenu_au_login>

Body de la requête :

{
  date: <string>
  beginTime : <string>
  timeToSpendInRoom: <string>
}

Comment définir ces valeurs :

  • date : si on souhaite choisir la date du jour, envoyer une chaine de caractères vide. Pour choisir un jour particulier, obligatoirement envoyer une date au format jj/mm/yyyy

  • beginTime : envoyer une chaine de caractères vide pour rechercher une salle libre à partir de l'heure de la requête. Pour rechercher une salle à partir d'une heure particulière de la journée, envoyer une chaine au format HH:MM (par exemple '12:01').

  • timeToSpendInRoom : Correspond au temps souhaité pour utiliser la salle. Envoyer une chaine de caractères vide pour ne pas prendre en compte ce paramètre (ie qu'on considèrera une salle comme disponible même si elle sera occupée dans 5 min). Pour définir un temps d'utilisation, envoyer une chaine au format HH:MM (par exemple '02:15' pour une durée d'utilisation de 2h15 de la salle au maximum).

REMARQUES :

  • Plus il y aura d'utilisateurs à Junia Pocket, plus les informations seront fiables.
  • On considère que les salles peuvent être disponibles de 8h à 21h uniquement. Au delà de cet intervalle, aucune salle n'est considérée comme libre.

Format de la réponse

La réponse est une liste vide si aucune salle n'est disponible.

Sinon, c'est une liste contenant des objets à la structure suivante :

{
  label: <room_label>
  timeLimit: <value>
}

Si la valeur de timeLimit est null, cela signifie que la salle est disponible jusque 21h. Sinon, c'est que la salle est réservée prochainement dans la journée et la valeur de timeLimit donne l'heure de la prochaine occupation au format HH:MM.

Groupes

Créer un groupe

POST /group/create

A ajouter dans le Header : Authorization: Bearer <token_obtenu_au_login>

Body :

{
  groupName: <value>
  list: <list_of_AurionID>
}

Ajouter membre à un groupe

POST /group/join

A ajouter dans le Header : Authorization: Bearer <token_obtenu_au_login>

Body :

{
  aurionIDToAdd: <value>
  groupID: <value>
}

Connaitre les groupes auxquels on appartient

GET /group/get

A ajouter dans le Header : Authorization: Bearer <token_obtenu_au_login>

Body : aucun

Quitter un groupe

POST /group/leave

A ajouter dans le Header : Authorization: Bearer <token_obtenu_au_login>

Body :

{
    "groupID": <value>,
}

Recherche créneaux commun emploi du temps

POST /planning/get-common-availability

Header : Bearer token

Body :

{
    "groupID": value,
    "date": <jj/mm/yyyy>
}

La valeur de date doit obligatoirement être au format jj/mm/aaaa. Pour utiliser la date du jour de la requête, laisse le champs vide (une chaine de caractères vide).

Remarque: si certains membres du groupes n'ont pas encore sauvegardé dans la Database le planning de la semaine incluant la date demandée, la requête est augmentée d'un délai d'environ 15 * (nb_de_mb_dans_ce_cas) secondes.

La requête renvoie l'ensemble des créneaux disponibles dans la semaine incluant la date demandée. Elle suit la structure suivante (par exemple) :

{
  "Mon, 08 Mar 2021 00:00:00 GMT":[
    ["10:05","10:20"],
    ["12:25","13:30"],
    ["15:35","15:50"],
    ["17:55","21:00"]
  ],
  "Tue, 09 Mar 2021 00:00:00 GMT":[
    ["10:05","13:30"],
    ["15:35","15:50"],
    ["17:55","21:00"]
  ],
  "Wed, 10 Mar 2021 00:00:00 GMT":[
    ["10:05","10:20"],
    ["12:25","13:30"],
    ["15:35","15:50"],
    ["17:55","21:00"]
  ],
  "Thu, 11 Mar 2021 00:00:00 GMT":[
    ["08:00","21:00"]
  ],
  "Fri, 12 Mar 2021 00:00:00 GMT":[
    ["10:05","10:20"],
    ["12:25","21:00"]
  ],
  "Sat, 13 Mar 2021 00:00:00 GMT":[
    ["08:00","21:00"]
  ]
}