# API node RESTful API based on Expressjs. Build status WARNING: This is for demo purposes. You should not run this in production (no cors, unit tests ...). ## Features - Sign up/sign in (JWT, bcrypt) - Create, update, delete, read your notes - Manage your account: update, delete ## Call the API As best practice, use these headers to make requests to the API: ``` Content-Type:application/x-www-form-urlencoded Accept:application/json ``` When signed in, you must provide the access token: ``` Authorization: Bearer ``` ## API response The response code will never be in the response. **Make operations** (create, update, delete ...) Validation error example: ```json { "success": false, "message": "Form is invalid.", "errors": [ { "message": "\"password\" is required", "path": [ "password" ], "type": "any.required", "context": { "key": "password", "label": "password" } } ] } ``` **Getting objects** (read) ```json { "_id": "5bec2fed257ab94172cd3874", "firstname": "Raphael", "lastname": "NA", "username": "sundown", "createdAt": "2018-11-14T14:23:41.581Z", "updatedAt": "2018-11-14T14:23:41.581Z", "__v": 0 } ``` ## Specs **Pourvoir s'inscrire, se connecter, réinitialiser mot de passe (non connecté) :** - POST /auth/register (firstname, lastname, email, password) (201 created) - POST /auth/login (email, password) (200 ok avec en body le user et en header le token d'authentification) - POST /auth/rester-password (email) (optionnel si tu te sens pas chaud) (200 ok) **Pouvoir voir / modifier / supprimer son profil (connecté):** - PUT /user/me (tous les champs sauf password) (200 ok avec en body le user après édition) - PUT /user/me (si tu vois password et new password, ou mets une autre route si tu veux) (200 ok avec le user après édition mais sans mot de passe bien sûr) - DELETE /users/me (supprimer le profil) (204 no content, car le user est supprimé et tu ne me renvoi rien) - GET /users/me (renvoi le user) (200 ok avec en body le user) pouvoir gérer les notes (connecté) **Notes:** - POST /notes (title optionnel, text optionnel, lié a user connecté) (201 creatred) - PUT /notes/id (title optionnel, text optionnel) (200 ok avec en body la noté modifiée) - DELETE /notes/id (supprimer la note) (204 no content) - GET /user/me/ notes (toutes notes du user connecté) - GET /notes/id (get la note de cet id si elle appartient au user connecté) **Finito ! C'est un crud avec un minimum de vérif qui sont :** - Est-ce que le user est connecté ou non - Est-ce que le user est propriétaire de la ressource qu'il modifie ou supprime C'est tout ce qu'il y a besoin de vérifier. **Pour tout ce qui est erreur il n'y a que 4 règles à respecter :** - Pas le droit car pas connecté : 401 - Pas le droit car connecté mais ne t'appartient pas : 403 - Ressource n'existe pas : 404 - Erreur de validation (si tu veux en faire) : 400 bad request