[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**.