{"id":22136561,"url":"https://github.com/theprincelle/lp1-project-api","last_synced_at":"2026-05-02T23:37:17.948Z","repository":{"id":115941239,"uuid":"229008400","full_name":"ThePrincelle/lp1-project-api","owner":"ThePrincelle","description":"Yep, you're read that correctly. A simple API, in Java.","archived":false,"fork":false,"pushed_at":"2020-01-23T08:12:17.000Z","size":392,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-11T14:30:19.114Z","etag":null,"topics":["api-server","hibernate","java","jee","jwt","maven","school-project","spring"],"latest_commit_sha":null,"homepage":"https://lp1.princelle.org/api/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ThePrincelle.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-12-19T08:22:31.000Z","updated_at":"2020-01-23T08:11:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"c346de07-34d4-4161-ba74-24f7f638693f","html_url":"https://github.com/ThePrincelle/lp1-project-api","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/ThePrincelle/lp1-project-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThePrincelle%2Flp1-project-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThePrincelle%2Flp1-project-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThePrincelle%2Flp1-project-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThePrincelle%2Flp1-project-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ThePrincelle","download_url":"https://codeload.github.com/ThePrincelle/lp1-project-api/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThePrincelle%2Flp1-project-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279001431,"owners_count":26083078,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-09T02:00:07.460Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-server","hibernate","java","jee","jwt","maven","school-project","spring"],"created_at":"2024-12-01T19:23:33.156Z","updated_at":"2025-10-09T12:36:46.494Z","avatar_url":"https://github.com/ThePrincelle.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LP1 Project - API\n\nOui, vous avez bien lu. Une simple API, en Java.\n\nCréé par : [Maxime Princelle](https://princelle.org)\n\n[Lien vers le sujet](https://docs.google.com/document/d/1O9Cfxe6QZ-yc6G4GovpEqzZk6cyP_nfo3nQCdmnhhQA/edit)\n\n__Sommaire__\n- \u003ca href=\"#comment-y-acc%C3%A9der-\"\u003eComment y accéder ?\u003c/a\u003e\n- \u003ca href=\"#configuration\"\u003eConfiguration\u003c/a\u003e\n- \u003ca href=\"#lancement\"\u003eLancement\u003c/a\u003e\n  - \u003ca href=\"#docker\"\u003eDocker\u003c/a\u003e\n- \u003ca href=\"#routes\"\u003eRoutes\u003c/a\u003e\n- \u003ca href=\"#technologies-utilis%C3%A9es\"\u003eTechnologies utilisées\u003c/a\u003e\n\n## Comment y accéder ?\n\nL'API est accessible via ce lien : \n\n[https://lp1.princelle.org/api/](https://lp1.princelle.org/api/)\n\nPour plus d'informations sur les routes, je vous invite à vous rendre \u003ca href=\"#routes\"\u003eici\u003c/a\u003e.\n\n## Configuration\n\nUne fois la base de données renseignée et l'application lancée, cette dernière, via Hibernate, va générer tout ce qui est nécessaire à son fonctionnement.\n\nPour la configuration, deux options s'offrent à vous. \n\n1) Vous souhaitez tout faire sur Docker (recommandé) :\n\nDans ce cas, veuillez suivre la partie sur [Docker](#docker).\n\n2) Vous possédez déjà une base de données :\n\nDans ce cas, veuillez commencer par copier le fichier `.env.example` et le renommer en `.env`.\n\nUne fois ouvert, vous obtiendrez le fichier suivant :\n\n```sh\n# Application\nDATABASE_URL=mysql://${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME}\nDATABASE_NAME=lp1Project\nDATABASE_USER=#__db_user__#\nDATABASE_PASS=#__db_pass__#\nDATABASE_HOST=db\nDATABASE_PORT=3306\n\n# MySQL\nMYSQL_DATABASE=${DATABASE_NAME}\nMYSQL_RANDOM_ROOT_PASSWORD=yes\nMYSQL_USER=${DATABASE_USER}\nMYSQL_PASSWORD=${DATABASE_PASS}\n\n# S3\nS3_ENDPOINT=https://s3.princelle.org\nACCESS_KEY=AKIAIOSXXXXX7XXAXPAX\nSECRET_KEY=wJalrXUtnFEMI/K7MDEXXXXXxRfiCYXXAXLPXKEX\n\n# JWT\nJWT_SECRET=QhEEDgVhHpnehgVcypQNCyJYTTeTkPoncwHPBcJJFPWnJ3Pt76M49vZQioit\n```\n\nPour changer les identifiants de connexion à la base de données, vous pouvez changer les champs suivants : \n\n- DATABASE_USER : `#__db_user__#`\n- DATABASE_PASS : `#__db_pass__#`\n- DATABASE_NAME : `lp1Project` (le nom de votre base, __créée au préalable (si locale)__ !)\n- DATABASE_HOST : `db` (si votre base est locale, mettez `localhost`)\n- DATABASE_PORT : `3306`\n\nPour finir la configuration, enregistrez votre fichier `.env` à la racine du projet.\n\n## Lancement\n\nPassons maintenant au lancement de l'application. \n\nDeux options s'offrent à vous : \n\n- Depuis la racine du projet, lancer cette commande : \n\n```bash\nmvn spring-boot:run\n```\n\n- Depuis votre environnement de développement, lancer la méthode suivante :\n\n```java\nLp1ProjectApplication.main()\n```\n\nEn tant que méthode lancée en \"Standalone\", qui va lancer le serveur intégré Tomcat sur le port 8080.\n\n--\n\nAprès cela, il suffira de vous rendre à l'aide de votre client Web sur l'url suivante : \n\n[http://localhost:8080/api/](http://localhost:8080/api/)\n\n```/api``` correspond à la route sur laquelle l'API est publiée.\n\nPour voir toutes les routes de l'application, \u003ca href=\"#routes\"\u003ecliquez-ici\u003c/a\u003e.\n\n### Docker\n\n#### Configuration de l'environnement\n\nSi vous souhaitez démarrer cette application, ainsi que la base de données nécessaire à son fonctionnement, en une seule fois, un fichier docker-compose est mis à disposition. \n\nAvec cette base de données vous est également fourni un environnement phpMyAdmin afin de faciliter la gestion de cette dernière.\n\nPour commencer, veuillez copier le fichier `.env.example` et le renommer en `.env`.\n\nUne fois ouvert, vous obtiendrez le fichier suivant :\n\n```sh\n# Application\nDATABASE_URL=mysql://${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME}\nDATABASE_NAME=lp1Project\nDATABASE_USER=#__db_user__#\nDATABASE_PASS=#__db_pass__#\nDATABASE_HOST=db\nDATABASE_PORT=3306\n\n# MySQL\nMYSQL_DATABASE=${DATABASE_NAME}\nMYSQL_RANDOM_ROOT_PASSWORD=yes\nMYSQL_USER=${DATABASE_USER}\nMYSQL_PASSWORD=${DATABASE_PASS}\n\n# S3\nS3_ENDPOINT=https://s3.princelle.org\nACCESS_KEY=AKIAIOSXXXXX7XXAXPAX\nSECRET_KEY=wJalrXUtnFEMI/K7MDEXXXXXxRfiCYXXAXLPXKEX\n\n# JWT\nJWT_SECRET=QhEEDgVhHpnehgVcypQNCyJYTTeTkPonxxxxxcJJFPWnJ3Pt76M49vZQioit\n```\n\nPour changer les identifiants de connexion à la base de données, vous pouvez changer les deux champs \"DATABASE_USER\" et \"DATABASE_PASS\" : \n\n- `#__db_user__#`\n- `#__db_pass__#`\n\nPour finir, enregistrez votre fichier `.env` à la racine du projet.\n\n#### Lancement de l'environnement\n\nAfin de lancer l'environnement, exécutez la commande suivante : \n\n```docker-compose up -d```\n\n##### API\n\nUne fois fait, l'API sera déployée à l'adresse : \n\n[http://localhost:8080/api/](http://localhost:8080/api/)\n\n```/api``` correspond à la route sur laquelle l'API est publiée.\n\nPour voir toutes les routes de l'application, \u003ca href=\"#routes\"\u003ecliquez-ici\u003c/a\u003e.\n\n##### phpMyAdmin\n\nPour accéder à phpMyAdmin, ce dernier se trouve sur le port 8084, vous pouvez y accédez via le lien suivant : \n\n[http://localhost:8084/](http://localhost:8084/)\n\n## Routes\n\nComme dit précédemment, ```/api``` correspond à la route sur laquelle l'API est publiée.\n\nVoici l'arborescence de l'application : \n\n- GET ```/``` : Hello World !\n\n- Users\n  - GET ```/users``` : Liste tous les utilisateurs et leurs informations.\n\n  - GET ```/users/{id}``` : Affiche les informations d'un utilisateur en fonction de son ID.\n\n  - GET ```/users/pseudo/{pseudo}``` : Affiche les informations d'un utilisateur en fonction de son Pseudo.\n\n  - GET ```/users/nocoloc``` : Affiche les utilisateurs qui n'ont pas de Colocation.\n\n  - POST ```/signup``` : Ajoute un utilisateur. \n  \t\u003cbr/\u003e__Réponse__ (JSON) : Renvoie l'utilisateur ajouté.\n  \t\u003cbr/\u003e__Requête__ (JSON) : Attends les paramètres suivants (non optionnels) :\n\t```json\n\t{\n\t\t\"firstName\": \"Maxime\", //Obligatoire\n\t\t\"lastName\": \"Princelle\", //Obligatoire\n\t\t\"emailId\": \"contact@princelle.org\", //Obligatoire et unique\n\t\t\"password\": \"test1\", //Obligatoire\n\t\t\"pseudo\": \"ThePrince\" //Obligatoire et unique.\n\t}\n\t```\n\n  - PUT ```/users/{id}``` : Modifie les informations d'un utilisateur en fonction de son ID.\n\t\u003cbr/\u003e__Réponse__ (JSON) : Renvoie l'utilisateur modifié.\n  \t\u003cbr/\u003e__Requête__ (JSON) : Attends un ou plusieurs des paramètres suivants :\n\t```json\n\t{\n\t\t\"firstName\": \"Maxime\", //Optionnel\n\t\t\"lastName\": \"Princelle\", //Optionnel\n\t\t\"emailId\": \"contact-maxime@princelle.org\", //Optionnel\n\t\t\"password\": \"test2\", //Optionnel\n\t\t\"pseudo\": \"TheKing\" //Optionnel\n\t}\n\t```\n\n  - DELETE ```/users/{id}``` : Supprime un utilisateur en fonction de son ID. \n  \t\u003cbr/\u003e__Réponse__ (JSON) : Renvoie un boolean confirmant sa suppression.\n\t```json\n\t{\n    \t\"deleted\": true\n\t}\n\t```\n\n- Colocations\n  - GET ```/colocs``` : Liste toutes les colocations et leurs informations.\n\n  - GET ```/colocs/{id}``` : Affiche les informations d'une colocation en fonction de son ID.\n\n  - GET ```/colocs/{id}/members``` : Affiche les membres d'une colocation en fonction de son ID.\n\n  - POST ```/colocs``` : Ajoute une colocation. \n  \t\u003cbr/\u003e__Réponse__ (JSON) : Renvoie la colocation ajoutée.\n  \t\u003cbr/\u003e__Requête__ (JSON) : Attends les paramètres suivants (non optionnels) :\n\t```json\n\t{\n\t\t\"name\": \"L'équipeDe@W.\", //Obligatoire\n\t}\n\t```\n\n  - POST ```/colocs/{id}/members/{userID}``` : \n  \t\tAjoute l'utilisateur avec son ID (```userID```) (si il existe) \n\t\tà la Colocation déterminée elle aussi par son ID.\n\t\u003cbr/\u003e__Réponse__ (JSON) : Renvoie la liste des membres de la Colocation.\n\n  - PUT ```/colocs/{id}``` : Modifie les informations d'une colocation en fonction de son ID.\n\t\u003cbr/\u003e__Réponse__ (JSON) : Renvoie la colocation modifiée.\n  \t\u003cbr/\u003e__Requête__ (JSON) : Attends un ou plusieurs des paramètres suivants :\n\t```json\n\t{\n\t\t\"name\": \"L'équipeDe@H.\", //Optionnel\n\t}\n\t```\n\n  - DELETE ```/colocs/{id}/members/{userID}``` : \n  \t\tRetire l'utilisateur de la Colocation déterminé par son ID\n\t\tavec l'ID de l'Utilisateur (```userID```) (si il existe et s'il est bien membre).\n\t\u003cbr/\u003e__Réponse__ (JSON) : Renvoie la liste des membres de la Colocation.\n\n  - DELETE ```/colocs/{id}``` : Supprime une colocation en fonction de son ID. \n  \t\u003cbr/\u003e__Réponse__ (JSON) : Renvoie un boolean confirmant sa suppression.\n\t```json\n\t{\n    \t\"deleted\": true\n\t}\n\t```\n\n- Tasks\n  - GET ```/tasks``` : Liste toutes les taches et leurs informations.\n\n  - GET ```/tasks/{id}``` : Affiche les informations d'une tache en fonction de son ID.\n\n  - GET ```/tasks/coloc/{colocId}``` : \n  \t\t\u003cbr/\u003eAffiche les taches liées à une Colocation (déterminée par son ID).\n\n  - GET ```/tasks/not_attributed``` : Affiche les taches non attribuées.\n\n  - GET ```/tasks/coloc/{colocId}/not_attributed``` : \n  \t\t\u003cbr/\u003eAffiche les taches non attribuées liées à une Colocation (déterminée par ```colocId```). \n\n  - GET ```/tasks/pending``` : Affiche les taches en attente.\n\n  - GET ```/tasks/coloc/{colocId}/pending``` : \n  \t\t\u003cbr/\u003eAffiche les taches en attente liées à une Colocation (déterminée par ```colocId```). \n\n  - GET ```/tasks/users/to/{userId}/pending``` : \n  \t\t\u003cbr/\u003eAffiche les taches en attente, liées à un 'User' (déterminé par ```userId```). \n\n  - GET ```/tasks/users/from/{userId}/pending``` : \n  \t\t\u003cbr/\u003eAffiche les taches en attente, déposées par un 'User' (déterminé par ```userId```). \n\n  - GET ```/tasks/proposed``` : Affiche les taches proposées.\n\n  - GET ```/tasks/coloc/{colocId}/proposed``` : \n  \t\t\u003cbr/\u003eAffiche les taches proposées liées à une Colocation (déterminée par ```colocId```). \n\n  - GET ```/tasks/users/to/{userId}/proposed``` : \n  \t\t\u003cbr/\u003eAffiche les taches proposées à un 'User' (déterminé par ```userId```). \n\n  - GET ```/tasks/users/from/{userId}/proposed``` : \n  \t\t\u003cbr/\u003eAffiche les taches proposées par un 'User' (déterminé par ```userId```). \n\n  - GET ```/tasks/users/to/{userId}``` : \n  \t\t\u003cbr/\u003eAffiche les taches liées à un 'User' (déterminé par ```userId```). \n\n  - GET ```/tasks/users/from/{userId}``` : \n  \t\t\u003cbr/\u003eAffiche les taches créées par un 'User' (déterminé par ```userId```). \n\n  - POST ```/tasks``` : Ajoute une tache. \n  \t\u003cbr/\u003e__Réponse__ (JSON) : Renvoie la tache ajoutée.\n  \t\u003cbr/\u003e__Requête__ (JSON) : Attends les paramètres suivants :\n\t```json\n\t{\n\t\t\"title\": \"Faire des pâtes\", //Obligatoire\n\t\t\"description\": \"Ne pas oublier l'eau...\", //Obligatoire\n\t\t\"cost\": 5, //Type: Entier //Obligatoire \n\t\t\"proposed\": false, //Type: Booléen //Obligatoire\n\t\t\"coloc\": {\n\t\t\t\"id\": 1\n\t\t}, //Obligatoire\n\t\t\"fromPerson\": {\n\t\t\t\"id\": 1\n\t\t},\n\t\t\"toPerson\": {\n\t\t\t\"id\": 2\n\t\t}\n\t}\n\t```\n\n  - PUT ```/tasks/{id}``` : Modifie une tache, en fonction de son ID et de son état. \n  \t\u003cbr/\u003e__Réponse__ (JSON) : Renvoie la tache modifiée.\n  \t\u003cbr/\u003e__Requête__ (JSON) : Attends les paramètres suivants (optionnels) :\n\t```json\n\t{\n\t\t\"title\": \"Faire du riz\",\n\t\t\"description\": \"Parce que c'est la vie...\",\n\t\t\"cost\": 5, //Type: Entier \n\t\t\"proposed\": false, //Type: Booléen\n\t\t\"coloc\": {\n\t\t\t\"id\": 1\n\t\t},\n\t\t\"fromPerson\": {\n\t\t\t\"id\": 1\n\t\t},\n\t\t\"toPerson\": {\n\t\t\t\"id\": 2\n\t\t},\n\t\t\"picture\": \"https://tenor.com/SXcQ.gif\" //Type: URL directe vers Image\n\t}\n\t```\n\n\tNB : Si la tache a déjà été effectué (présence d'une \"finishDate\"), seule l'image est modifiable. \n\n  - PUT ```/tasks/{id}/valid/to``` : \n  \t\t\u003cbr/\u003eMarque la tache comme validée du côté de la personne \n\t\tà qui elle l'a été attribuée.\n\t\t\u003cbr/\u003eAttribue également à la tache la date et l'heure du jour.\n  \t\u003cbr/\u003e__Réponse__ (JSON) : Renvoie la tache modifiée.\n\n  - PUT ```/tasks/{id}/valid/from``` : \n  \t\t\u003cbr/\u003eMarque la tache comme validée du côté de la personne \n\t\tqui l'a attribuée.\n\t\t\u003cbr/\u003eAttribue également à l'utilisateur à qui la tache été dédié (s'il y en a un, et qu'il l'a validée avant de son côté), les points eux sont ajoutés automatiquement.\n  \t\u003cbr/\u003e__Réponse__ (JSON) : Renvoie la tache modifiée.\n\n  - PUT ```/tasks/{id}/valid/to/rev``` : \n  \t\t\u003cbr/\u003eAnnule le marquage de la tache comme validée du côté de la personne \n\t\tà qui elle l'a été attribuée.\n\t\t\u003cbr/\u003eSi la tâche a été validée par la personne qui l'a créée, il ne sera plus possible de faire cette requête\n  \t\u003cbr/\u003e__Réponse__ (JSON) : Renvoie la tache modifiée.\n\n  - PUT ```/tasks/{id}/valid/from/rev``` : \n  \t\t\u003cbr/\u003eAnnule le marquage de la tache comme validée du côté de la personne \n\t\tqui l'a attribuée.\n\t\t\u003cbr/\u003eLes points sont retirés automatiquement s'ils ont été attribués à un utilisateur. La date et le statut de la tache du côté de la personne a qui elle est attribuée, sont supprimés.\n  \t\u003cbr/\u003e__Réponse__ (JSON) : Renvoie la tache modifiée.\n\n  - DELETE ```/tasks/{id}``` : Supprime la tache en fonction de son ID. \n\t\u003cbr/\u003e__Réponse__ (JSON) : Renvoie un boolean confirmant sa suppression.\n\t```json\n\t{\n    \t\"deleted\": true\n\t}\n\t```\n\n\tNB : Les points sont retirés automatiquement du score de l'utilisateur s'ils ont été attribués auparavant.\n\n\n## Technologies utilisées\n\nCe projet Maven est basé sur : \n- Apache Tomcat\n- Spring\n- JPA / Hibernate avec MySQL Connector\n- Jersey\n\n----\n\n[Remonter en haut](#lp1-project---api)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftheprincelle%2Flp1-project-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftheprincelle%2Flp1-project-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftheprincelle%2Flp1-project-api/lists"}