Projet suivi : préparation du terrain
19 Feb 2019 - Norore
Dans mon billet précédent, j’ai évoqué avec vous une idée de projet pour apprendre et découvrir Symfony 4. Dans ce billet je vais tâcher de réunir les éléments clés dont je (nous ?) vais avoir besoin.
Petit rappel pour les personnes qui n’ont pas lu de quoi je parle et qui n’ont pas envie d’aller lire : il s’agit d’un projet me permettant de savoir quels sont les livres que je possède et/ou que j’ai lu, mais également ceux que j’ai lu avec un renseignement sur où je me les étais procuré.
Cette suite de billets n’a pas vocation à être un cours magistral et il n’est pas garanti que je poste régulièrement, si vous cherchez un tutoriel pour un projet là, maintenant, tout de suite, attendez au moins quelques billets. Sinon, des sites dédiés font ça merveilleusement bien, si si !
Mon besoin actuel
Actuellement dans ma bibliothèque j’ai différents types de livres :
- livres de biologie ou d’informatique ;
- livres informatifs ;
- livres de vulgarisations ;
- fictions ;
- bande dessinées ;
- artwork ;
- …
Dans un premier temps, j’aimerais pouvoir inscrire dans une base de données la liste de tous mes livres. Parmi ces livres, j’aimerais pouvoir savoir combien de fois je les ai lu, si je les ai lu en entier, éventuellement mettre un commentaire sur ce que j’ai aimé y trouver ou non.
À terme, j’aimerai aussi garder une trace des livres que j’ai lu mais qui ne m’appartiennent pas (prêts d’amis, emprunt en médiathèque ou bibliothèque…).
J’aimerais aussi pouvoir offrir la possibilité, à terme, que cette application soit réutilisable par plus d’une personne, il faudra donc que je prévois un système d’authentification.
Base de données
La base de données sera, idéalement, en PostGreSQL. C’est un système de gestion de données robuste, éprouvé, fiable et respectueux des normes SQL. Et il a le bon goût d’être libre.
Compte utilisateur
Dans un premier temps, je ne vais pas partir sur un système complexe, je prévois, pour l’instant, les champs suivants :
Champ | Type de champ | Description |
---|---|---|
id | nombre unique, obligatoire | L’identifiant de l’utilisateur |
username | texte court, unique, obligatoire | Le nom de l’utilisateur |
password | hash, obligatoire | Le mot de passe associé au compte utilisateur, il doit être hashé ! |
texte court, unique, obligatoire | L’adresse email de l’utilisateur, pour pouvoir réinitialiser le mot de passe si nécessaire |
:Table user
Contenu de la bibliothèque
Un livre, ce n’est pas juste du carton et du papier, ça renseigne beaucoup de choses ! Essayons de voir ensemble ce que l’on peut décortiquer.
Champ | Type de champ | Description |
---|---|---|
id | nombre unique, obligatoire | L’identifiant du document |
title | texte court, obligatoire | Le titre du document |
editor | texte court, facultatif | La maison d’édition du document, si je la connais |
author | liste d’identifiants | Le nom de l’auteur·ice, si je le connais |
genre | texte court, facultatif | Le genre littéraire, si je le connais |
summary | texte court, facultatif | Un résumé sur le livre |
owner | liste d’identifiants | Le compte utilisateur possédant le document |
comment | liste d’identifiants | Le ou les commentaires sur le document |
Table document
Minute, c’est quoi cette histoire de « liste d’identifiants » ?
Oups, oui, comme je pars du principe qu’un document peut avoir un ou plusieurs auteurs (author), que les utilisateurs peuvent avoir des livres en commun chez eux (owner), et que plusieurs personnes peuvent avoir lu et commenté le document, je vais partir sur un premier niveau de complexité qui fait pourtant la puissance des SGBD : la possibilité d’avoir plusieurs clés (id) qui pointent sur la même information !
Les tables annexes
Nous allons donc devoir prévoir deux tables de plus :
- une table pour les auteurs
- une table pour les commentaires
Champ | Type de champ | Description |
---|---|---|
id | nombre unique, obligatoire | L’identifiant de l’auteur |
firstname | texte court, obligatoire | Le prénom de l’auteur |
lastname | texte court, obligatoire | Le nom de l’auteur |
Table author
Champ | Type de champ | Description |
---|---|---|
id | nombre unique, obligatoire | L’identifiant du commentaire |
user | numéro | L’identifiant de l’utilisateur ayant laissé un commentaire |
message | texte long, obligatoire | Le commentaire |
date | timestamp, obligatoire | La date du commentaire |
Table comment
Apparence
J’ai un faible pour le framework KNACSS, j’avoue. Mais je ne suis pas designer et je ne vais pas faire un cours sur le CSS, aussi je vais plutôt partir sur le framework Bootstrap, qui a une plus grosse communauté plus à même de répondre à vos questions si vous êtes bloqués. En plus de ça, je peux potentiellement partir sur une mise en page (ou layout) qui pourra convenir pour un tel projet.
Je vais avoir besoin de différents types de vues :
- une page d’administration ;
- un tableau contenant la liste des documents ;
- une page de profil utilisateur ;
- une fiche de document ;
- une page de connexion.
J’aime beaucoup les images de flaticon, alors comme c’est mon « prooooooooooojet » (comme dirait l’autre…), je pense que je vais en utiliser dans les endroits qui vont bien !
Et comme j’ai déjà vu, dans le cadre professionnel, qu’il peut être long et difficile de mettre en place de l’internationalisation à un stade avancé du projet, je vais y penser dès le départ !
Bon ben, yapukà!
Source de l’image d’accroche : Une main avec un stylo qui prépare une écriture de plan sur un carnet de notes à petits carreaux. Photographié par pexels, sous licence Pixabay sur Pixabay