---
# System prepended metadata

title: Documentazione

---

[link al repository](https://gitlab.com/simonemallei/2021_assignment3_elibrary)
Studenti:
* Simone Mallei 844659
* Fabio Marchesi 844941

# Documentazione

Realizzazione del back-end di un sistema di e-library tramite JPA. Il sistema modella le seguenti entità:
- **Autore**: si è interessati a: nome, cognome, anno di nascita.
- **Libro**: si è interessati a: titolo, anno, edizione.
- **Genere**: si è interessati a: nome, secolo e se è realistico o meno (tramite sottoclassi).
- **Genere Realistico**: si è interessati a: violenza.
- **Genere Irrealistico**: si è interessati a: tipo.
- **Prestito**: si è interessati a: data e durata.
- **Utente**: si è interessati a: nome, cognome, anno di nascita e SSN.

Per ogni libro vengono memorizzati: l'autore del libro, una lista di libri simili ed una lista di generi al quale appartiene.
Per ogni prestito vengono memorizzati: l'utente che l'ha eseguito e l'e-book preso in prestito.
Per ogni utente viene memorizzato: il genere preferito.

![](https://i.imgur.com/HGiEsCJ.png)


Le responsabilità assegnate ad ogni singolo componente dell'applicazione sono le seguenti:
- **ELibraryApplication**: classe che contiene il main eseguito con il run dell'applicazione Spring.

- Package ```com.assignment3.elibrary.model```: contiene le classi che rappresentano le entità (con annotazione $@Entity$) dello schema ER, le classi sono le seguenti: **Author**, **Book**, **Genre**, **RealisticGenre**, **UnrealisticiGenre**, **User**, **Rent**.

- Package ```com.assignment3.elibrary.repository```: contiene le interfacce delle repository (con annotazione $@Repository$), le interfacce con le loro operazioni sono le seguenti:
    - **AuthorRepository**: contiene operazioni CRUD su **Author** e le funzioni di ricerca tramite:
        - attributo *lastName* di **Author**,
        - attributo *firstName* di **Author**.
    - **BookRepository**: contiene operazioni CRUD su **Book** e le funzioni di ricerca tramite:
        - attributo *title* di **Book**,
        - attributo *releaseYear* di **Book**,
        - attributo *name* delle entità **Genre** associate,
        - attributo *name* delle entità **Genre** associate e *lastName* dell'entità **Author** associata.
    - **GenreRepository**: contiene operazioni CRUD su **Genre** e le funzioni di ricerca tramite:
        - attributo *name* di **Genre**.
    - **UserRepository**: contiene operazioni CRUD su **User** e le funzioni di ricerca tramite:
        - attributo *ssn* di **User**,
        - attributo *lastName* di **User**.
    - **RentRepository**: contiene operazioni CRUD su **Rent** e le funzioni di ricerca tramite:
        - attributo *ssn* dell'entità **User** associata,
        - attributo *name* ell'entità **Book** associata.

- Package ```com.assignment3.elibrary.service```: contiene i servizi (con annotazione $@Service$) che richiamano i metodi delle repository, le classi sono le seguenti: **AuthorService**, **BookService**, **GenreService**, **RentService**, **UserService**.

Sono state sviluppate anche delle classi di test sulle funzionalità dei servizi:
- **AuthorCRUDTest**: verifica il funzionamento delle operazioni di CRUD e search su **Author** definite in **AuthorService**.
- **BookCRUDTest**: verifica il funzionamento delle operazioni di CRUD e search su **Book** definite in **BookService**.
- **GenreCRUDTest**: verifica il funzionamento delle operazioni di CRUD e search su **Genre** definite in **GenreService**.
- **RentCRUDTest**: verifica il funzionamento delle operazioni di CRUD e search su **Rent** definite in **RentService**.
- **UserCRUDTest**: verifica il funzionamento delle operazioni di CRUD e search su **User** definite in **UserService**.
