---
# System prepended metadata

title: HiBook

---

# Bibliothèque de livre en ligne

## Liens vers schémas
https://drive.google.com/drive/folders/1dCH9fYbw9vZKhFPLn7ujwzVrnfAYHDnO?usp=sharing

## Explications

Application permettant de suivre les livres lus et les livres à lire. L'application fournira également des infos sur les dernières sorties des ouvrages.

## Fonctionalitées
Listes :
- De souhaits
- Donner une estimation du prix total des livres souhaités (optionnel)
- De livres lus, avec la possibilité de noter/marquer des favoris (peux être très utile pour faire des recommandations pertinentes à l'utilisateur)

Faire des recommandations sur les préférences de l'utilisateur.

Réaliser un panier d'achat qu'on fait sur un site de vente (AMAZON).

Pouvoir suivre des auteurs/Maisons d'édition/genres pour suivre les sorties.

Créer un compte et s'authentifier.

Espace de discussion et de partage.

Personnaliser son profil utilisateur (upload image de pdp).

Parcourir l'application avec des onglets : 
- Une page d'accueil présentant le catalogue
- Une page de recommandation
- Une page de favoris
- Une page pour le panier d'achat

## Détails des fonctionnalités (Utilisateurs)
### 1. Compte Utilisateur
L'utilisateur aura la possibilité de créer un compte afin de pouvoir avoir accès à toutes les fonctionnalités du site (eg. Recommandations, liste de souhaits, suivis, liste de sorties, etc...). Un utilisateur sans compte pourra effectuer des recherches, lire les fiches de livre, parcourir la liste d'ouvrages correspondant à un tag, etc...
### 2. Personnalisation profile utilisateur
L'utilisateur possédant un compte aura un profil privé/publique sur le site web. Il aura la possibilité de rédiger une courte biographie et de mettre une photo de profil personnalisée.
### 3. Liste de souhaits
L'utilisateur authentifié possède une liste de souhaits dans laquelle il pourra ajouter et retirer des ouvrages. Il aura la possibilité d'organiser cette liste pour hiérarchiser les ouvrages en fonctions de ses envies.(Optionel)
Cela permettra d'avoir une meilleure compréhension des goûts de l'utilisateur et ces données seront utilisées pour améliorer les recommandations faites à l'utilisateur.
### 4. Liste d'ouvrages lu
L'utilisateur authentifié possède une liste d'ouvrages lus dans laquelle il pourra référencer les ouvrages qu'il a terminés. Il pourra noter ses lectures entre 0 et 5 étoiles.
Cela permettra d'avoir une meilleure compréhension des goûts de l'utilisateur et ces données seront utilisées pour améliorer les recommandations faites à l'utilisateur.
### 5. Recommandation d'ouvrages
Les utilisateurs authentifiés se verront recommandés des œuvres correspondant à leur goût.
Les préférences des utilisateurs seront calculées à l'aide de plusieurs facteurs :
- Ouvrages dans la liste de souhaits, pondération de leur rang dans la liste (si rang il y a)
- Ouvrages dans la liste d'ouvrages lus ainsi que leur note
- Ouvrages qui sont en commun dans les listes des autres utilisateurs qui ont aussi aimé un ouvrage en commun (optionnel)
### 6. Suivis des sorties
Les utilisateurs authentifiés pourront suivre les sorties de nouveaux ouvrages en "s'abonnant" à des "pages" (tags, pages de maisons de publications, auteurs, série, etc.)
### 7. Navigation
Il sera possible de naviguer dans les parties principales du site avec un menu de navigation déroulant/des onglets situées en haut de l'écran.
### 8. Barre de recherche
Le site dispose une barre de recherche qui permettra de trouver des ouvrages à l'aide de leurs noms, leur auteurs, des tags.
### 9. Fiche de livre
Chaque ouvrage aura une fiche contenant : 
- Image de couverture du livre
- Auteur
- Synopsis
- Tags
- Note (moyenne faite a partir des notes utilisateur ayant lu le livre)
- Suggestions sur d'autres livres qui pourrais plaire

## Technologies utilisées
- Backend : Framework Spring (Java)
- Frontend : JS & HTML
- Scraper : GO
- BDD User : MySQL
- BDD Livres : ElasticSearch
- Cloud :
    - Terraform
    - AWS
- DevOps :
    - GitLab
- Test
    - SonarQube


## Architecture : Microservice

### Front : 
- page d'authentification
- page de collection
    - collection / favoris
    - a compléter
    - liste d'envie
- (page de recherche ? ou juste une barre de recherche ?)
- page de planning (planning de sortie)
- panier
- page de profil
- page de recommendation

### Microservice 1 Authentification : 
Link to JWT resource --> https://drive.google.com/drive/folders/11Q59vJ7aadFbvuMzNGvXg2KmaYy4Zrbr?usp=drive_link
- AuthProvider
- JWTRestController
- AppAuthProvider

### Microservice 2 App:
- AppController
- AppDTO
- AppService
- AppRepository 
- BDD Livres

### Microservice 3 Système de recommandation : 
- RecoController
- RecoDTO
- RecoService

### Microservice 4 User : 
- UserController
- UserDTO
- UserService
- UserRepository 
- BDD user

## Architecture de scrapping
Elastic Search + buffer (Kafka/Rabbit MQ)
TODO

# Ressources API
APIs for books: https://blog.hubspot.com/website/api-books
- GoogleBooks --> https://developers.google.com/books?hl=fr
- penguin publishing --> https://www.penguinrandomhouse.biz/webservices/rest/
- ++openLibrary --> https://openlibrary.org/dev/docs/api/books

APIs for shopping : 
- FakeStoreAPI --> https://fakestoreapi.com/
- Square --> https://developer.squareup.com/reference/square
- ApacheSuperset --> https://superset.apache.org/docs/api/

APIs miscellaneous : 
- file.io --> https://www.file.io/
- imgbb --> https://api.imgbb.com/

## CI/CD

Registry (privé ou publique) sur Docker
https://hub.docker.com/repository/docker/cedriccpe/hibook/general

Une image par service
? Des nouvelles images seront push tous les soirs sur la registry et les anciennes images seront supprimées tous les 15 jours. ?

De manière quotidienne lors de la création des images il y aura une vérification des images au travers d'une pipeline.

Liste des jobs : 
- CleanRegistry
- Build
- Test
- Deploy
- Push
- CodeQuality
- ImageScanning

Cron pour alimenter la BDD en e-book toutes les semaines (a voir avec les scrapers)

## Déploiement de l'application

Déploiement à l'aide de Terraform pour avoir une instance EC2 pour la webapp et une instance EC2 pour l'hébergement des base de données.

Le but étant pour un développeur de pouvoir déployer la dernière version de l'application avec n'importe quelle compte AWS.
Pour cela le développeur doit copier coller le "" et le "" depuis la section AWS details du labs à mettre dans le fichier Terraform.
Exemple : 
`
aws_access_key_id=ASIA4GUXKVOAX5MOAY6X
aws_secret_access_key=gfjMXi+juyVEtHBTkapmcnmNzrUUK2rJcEc4kWAZ
`

Personnalisation des instances EC2 image builder avec des scripts : 
- AMI BDD
    - Elasticsearch
    - MySQL
- AMI WebApp
    - Java
    - Nginx

# Interface Graphique
## Color scheme
![](https://hackmd.io/_uploads/Sybx997fT.png)

## Wireframe
https://app.moqups.com/DdIBfXkIXKlVoxixi0wMegwo9BN4AQUQ/edit/page/ad64222d5

## First objectives
voir scrapper 
elasticsearch
Faire une bonne gestion de la BDD en terme d'approvisionnement mais aussi en recherche d'un élément




# Sprint
## Sprint 1
### Décisions
- Backend : Java
- Front end : HTML & JS & CSS
- BDD livre : Elastic Search
- BDD utilisateurs : MySQL
- API : OpenLibrary
- Cloud : Terraform pour deployer sur AWS
- DevOps : Gitlab pipelines
### BDD Livre
Alimentée par un ou des scrappers qui vont query OpenLibrary.
Pour infra de test, utiliser seulement 1Go de données pour la bdd.

## Sprint 2
- Front

## Sprint 3
-    Système recommandation
-    

