Projet fil rouge : BiblioTech
Contexte
Section intitulée « Contexte »La médiathèque d’une école d’ingénieurs gère son catalogue avec des fichiers XML échangés avec un réseau de bibliothèques partenaires. Elle veut une application web moderne pour :
- consulter le catalogue et rechercher des ouvrages ;
- gérer les emprunts des adhérents ;
- recueillir des avis et proposer des recommandations.
Le projet se fait en binôme et avance en trois jalons, un par module. Tout est rendu dans le dépôt git du binôme, chaque jalon étant marqué par un tag (voir Remise des travaux).
Modèle de données de référence
Section intitulée « Modèle de données de référence »erDiagram
AUTHOR ||--o{ BOOK_AUTHOR : ecrit
BOOK ||--o{ BOOK_AUTHOR : "a pour auteur"
BOOK ||--o{ LOAN : "est emprunté"
MEMBER ||--o{ LOAN : emprunte
BOOK ||--o{ REVIEW : "reçoit"
MEMBER ||--o{ REVIEW : "rédige"
BOOK { string isbn PK
string title
int year
string genre
int copies
string summary }
AUTHOR { string id PK
string firstName
string lastName
string country }
MEMBER { string id PK
string name
string email }
LOAN { string id PK
date loanDate
date dueDate
date returnDate }
REVIEW { int rating
string comment
date createdAt }
Genres autorisés : roman, science, informatique, histoire, jeunesse, bd.
Jalon 1 : XML (fin de S05, 10 %)
Section intitulée « Jalon 1 : XML (fin de S05, 10 %) »Livrables dans projet/ (tag jalon-1-xml) :
catalogue.xml: au moins 15 livres, 8 auteurs et 5 adhérents, dans l’espace de nomsurn:bibliotech:catalogue.catalogue.dtd: le document valide est accepté et un document erroné est refusé.catalogue.xsd: ISBN-13 contrôlé par un pattern, genre par une énumération, année entre 1450 et l’année courante,xs:key/xs:keyrefentre livres et auteurs.requetes-xpath.md: 15 requêtes, chacune avec sa question, son expression et son résultat attendu.catalogue.xsl: page HTML du catalogue triée par genre puis par titre, avec le nombre d’exemplaires et un badge « indisponible » quandexemplaires = 0.
Commandes de vérification :
xmllint --noout --valid catalogue.xmlxmllint --noout --schema catalogue.xsd catalogue.xmlnpx xslt3 -s:catalogue.xml -xsl:catalogue.xsl -o:catalogue.htmlJalon 2 : Full-stack (fin de S13, 15 %)
Section intitulée « Jalon 2 : Full-stack (fin de S13, 15 %) »Livrables dans projet/ (tag jalon-2-fullstack) :
api/: Node.js + Express 5 + Zod + Prisma (SQLite).- Script
npm run import: litcatalogue.xmlet remplit la base. - Endpoints :
GET/POST /books,GET/PATCH/DELETE /books/:isbn,GET /authors,POST /loans,PATCH /loans/:id/return. - Pagination (
?page=&limit=), filtre?genre=, recherche?q=. - Toutes les entrées validées par Zod ; les erreurs sont renvoyées au format
{ error: { code, message, details? } }. - Règle métier : un emprunt est refusé si aucun exemplaire n’est disponible (code 409).
- Script
web/: React + Vite.- Pages : catalogue (liste, filtre, recherche), détail d’un livre, formulaire d’ajout, emprunts d’un adhérent.
- États chargement, erreur et vide gérés sur chaque page.
README.md: installation, variables d’environnement, déclaration de l’usage de l’IA.
Jalon 3 : NoSQL (fin de S21, 15 %)
Section intitulée « Jalon 3 : NoSQL (fin de S21, 15 %) »Livrables dans projet/ (tag jalon-3-nosql) :
- MongoDB : collection
reviews(ou avis imbriqués dansbooks, choix justifié dans le README), validation$jsonSchema, index adaptés, endpointGET /statsen pipeline d’agrégation (note moyenne par genre, top 5 des livres). - Redis : cache-aside sur
GET /booksavec invalidation à l’écriture, limite de 100 requêtes par minute par IP, classement des livres les plus empruntés en sorted set. - Une fonctionnalité au choix :
- Graphe (Neo4j) : « les lecteurs qui ont emprunté ce livre ont aussi emprunté… » ;
- Séries temporelles : nombre d’emprunts par semaine dans une collection time series MongoDB ;
- Vectoriel : recherche sémantique sur les résumés (embeddings et k-NN).
ARCHITECTURE.md: quelles données dans quel SGBD, et pourquoi (une page maximum).
Critères transverses
Section intitulée « Critères transverses »- Code lisible, nommage cohérent, pas de secrets dans le dépôt (
.env.examplefourni). - Historique git régulier et partagé entre les deux membres (au moins un commit par séance de TP).
- Démonstration de 5 min et une question individuelle par étudiant.