{"id":22794576,"url":"https://github.com/colintr/projets7blog","last_synced_at":"2025-03-30T17:43:34.928Z","repository":{"id":91542535,"uuid":"232333208","full_name":"ColinTr/ProjetS7Blog","owner":"ColinTr","description":"Application Java de blog partagé. Les messages et les utilisateurs sont stockés sur une base de données.","archived":false,"fork":false,"pushed_at":"2020-01-15T10:17:38.000Z","size":745,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-05T19:59:55.907Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/ColinTr.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":"2020-01-07T13:43:28.000Z","updated_at":"2023-06-17T10:14:37.000Z","dependencies_parsed_at":null,"dependency_job_id":"7c8ebf5a-a357-4213-bfc6-7eb3c036b908","html_url":"https://github.com/ColinTr/ProjetS7Blog","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ColinTr%2FProjetS7Blog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ColinTr%2FProjetS7Blog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ColinTr%2FProjetS7Blog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ColinTr%2FProjetS7Blog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ColinTr","download_url":"https://codeload.github.com/ColinTr/ProjetS7Blog/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246357688,"owners_count":20764361,"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","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":[],"created_at":"2024-12-12T04:09:18.001Z","updated_at":"2025-03-30T17:43:34.923Z","avatar_url":"https://github.com/ColinTr.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ProjetS7Blog\n\nColin Troisemaine - Guillaume Bouchard\n10/01/2020\n\n# Liens SGBD-LOO : Blog\n![Screenshot](images_readme/affichage.png)\n_Fenêtre principale de l’application_\n\n**A) Contraintes :**\n1) Connexion à la base de données :\nPour que l’application fonctionne, il suffit d’avoir une table nommée “projet_blog_hibernate” à l’adresse 127.0.0.1 qui soit disponible. L’application pourra marcher même si la table car nous avons choisi la valeur update pour la propriété hbm2ddl.auto. De cette manière si les tables n’existent pas elles seront crées et l’application pourra fonctionner.\nCe choix de valeur va écrire de nombreux WARN dans la console à l’initialisation de l’application si les tables existent déjà, mais cela n’a pas de réelle importance.\n\n2) Envoi d’images :\nPour pouvoir utiliser la fonction de mise en ligne d’images de notre application, il faut précedemment avoir lancé une instance de TCPServeur.main() et avoir sur ce serveur un répertoire à l’adresse “C:\\Images”. Le client TCP va essayer d’envoyer ses fichiers à l’adresse 127.0.0.1 par le port 4444 de base.\n\n3) Adresse Email unique :\nComme chaque utilisateur possédait une adresse Email, nous avons choisi\nde nous en servir comme d’un identifiant. Logiquement, chaque Email doit être unique dans\nla base de données. À l’inscription, il est donc impossible de créer un compte avec une\nadresse Email déjà présente dans la BDD.\n\n4) Bibliothèques :\nPour pouvoir compiler notre projet, il faut les quatre bibliothèques suivantes :\n\n- hibernate_requierd\n- mysql-connector-java-8.\n- javafx\n- jfoenix-9.0.\n\n\n**B) Architecture du logiciel :**\n\n![Screenshot](images_readme/diagramme_de_classes.jpg)\n\n\n**C) Spécifications techniques :**\n\n***Gestion de la connection à la base de données :***\n\nNous avons choisi d’utiliser une classe Connexion pour gérer toutes les connections à notre base de données. Cette classe possède un EntityManagerFactory et un EntityManager statiques qui sont ouvert à la première connection de l’application et qui seront fermé à sa fermeture. Ainsi, tous les objets que nous manipulons sont persistants.\n\n\n***Suivi du modèle MVC :***\n\nPour que notre application soit attrayante, nous avons choisi d’utiliser JavaFX. Pour suivre le paterne MVC, nous avons donc ajouté aux ressources les classes .fxml qui ne sont pas du code Java et représentent la disposition des fenêtres. Et les classes qui permettent de définir les actions des boutons, champs de texte, tableaux, etc ... ont logiquement été placées dans la vue (vue.javafxobservers).\n\n\n***Connexion à l’application :***\n\n![Screenshot](images_readme/connexion.png)\n\nPour se connecter à l’application, nous avons choisi d’utiliser le mail et le mot de passe qui sont 2 attributs imposés par le sujet.\n\n\n***Manipulation des mots-clés :***\n\nQuand l’utilisateur renseigne les mots-clés associés à son message, le programme va regarder pour chaque mot-clé s’il n’existe pas déjà dans la table des mots-clés. S'ils n’existent pas ils sont créés, et dans tous les cas ils sont associés au nouveau message.\n\n\n***ManipulationUtilisateur :***\n\nCette classe contient les méthodes qui font le lien entre les actions que la vue détecte les données. Les données qu’elle manipule sont donc celles de la BDD en appelant les méthodes des classes DAO et les données “locales” de la classe ModeleDonnees. Exemple de la méthode d’inscription : Cette méthode n’est pas dans la classe UtilisateurDAO car elle n’est pas une simple fonction de gestion de la base de donnée mais une méthode plus complexe qui vérifie si le mail du compte que l’on souhaite créer n’est pas déjà utilisé puis on l’ajoute à la bdd.\n\n\n***Modification/Suppression d’un message :***\n\nPour les fonctions de modification et de suppression d’un message, nous avons choisi de faire en sorte de rajouter des boutons sur tous les message que l’utilisateur actuellement connecté a posté (voir photo page 1). De cette manière, l’utilisateur connecté ne peut pas modifier ou supprimer les messages qu’il n’a pas posté et peut le faire pour ses propres messages.\n\n\n***Création d’un nouveau message :***\n\n![Screenshot](images_readme/fenetreCreerMessage.png)\n\nPour créer un message, nous n’avons pas choisi de mettre de contraintes sur les différents champs de la fenêtre permettant de modifier un message. Ainsi, il est possible de poster un message vide. Il ne possédera donc que la date et l’utilisateur qui l’a posté. Il est donc possible de rajouter des nouvelles images et des nouveaux liens à son message. Lorsque le message est créé à l’aide la méthode ManipulationUtilisateur.posterMessage, on regarde si les mots-clés existent déjà ou non dans la base de données. S'ils n’existent pas ils sont créés, et si ils existent ils sont simplement associés au message. Pour ***modifier un message***, la même fenêtre s’affiche mais avec les champs pré-remplis.\n\n\n***Fonction de recherche de messages :***\n\n![Screenshot](images_readme/recherche.png)\n\nPour implémenter les fonctions de recherche par date et par mots-clés, nous avons choisi de placer deux champs différents en haut de notre fenêtre :\n- Un champ texte où il est possible de rentrer des mot-clés (séparés par un espace).\n- Un champ pour sélectionner une date dans un calendrier ou entrer la date à la main.\nAinsi, si les deux champs sont remplis, l’application cherchera les messages postés à la date entrée et contenant les mots-clés entrés (il est bien sûr possible de se servir de l’un OU de l’autre indépendamment). Pour afficher l’ensemble des messages, il suffit de cliquer sur “Supprimer filtres”.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcolintr%2Fprojets7blog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcolintr%2Fprojets7blog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcolintr%2Fprojets7blog/lists"}