Blog de Norore
Geek en perdition dans un monde qui va trop vite

Projet suivi : préparation du terrain

19 Feb 2019 - Norore
Une main avec un stylo qui prépare une écriture de plan sur un carnet de notes à petits carreaux.

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é !
email 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