\section{Logo}

\begin{figure}[H]
  \centering
  \begin{subfigure}[b]{0.680\linewidth}
  \includegraphics[width=\linewidth]{img/logo.png}
    \caption{Logo dell'applicazione}
  \end{subfigure}
  \label{fig:coffee}
\end{figure}

\section{Autori}

Salanti Michele - 793091
\newline
Ivan Donati - 781022

\section{Repository}

Come da consegna per l'assignment è stato fatto uso dello strumento di file versioning \code{git} gestito da \textit{GitLab}. Tutto il materiale finale del progetto è presente nel branch master del repository raggiungibile al seguente collegamento:

\begin{center}
\url{https://gitlab.com/meliurwen/2019_assignment3_MiVan}
\end{center}

La radice del branch raffigurata in basso presenta un'organizzazione semplice e minimale:

\begin{itemize}
  \item \textbf{mivan:} È la cartella che contiene il sorgente dell'applicazione.
  \item \textbf{doc:} È la cartella che contiene il sorgente della documentazione scritta in \latex .
  \item \textbf{assignment3\_mivan.pdf:} È la versione compilata in pdf della documentazione.
  \item \textbf{Dockerfile} e \textbf{docker-compose.yml:} Sono i file necessari per eseguire la versione containerizzata dell'applicazione.
  \item \textbf{LICENSE} e \textbf{README.md:} Sono rispettivamente la licenza (MIT) assegnata per il progeto ed una sua breve introduzione.
\end{itemize}

\dirtree{%
 .1 <repository>.
 .2 mivan/.
 .2 doc/.
 .2 .gitignore.
 .2 Dockerfile.
 .2 docker-compose.yml.
 .2 LICENSE.
 .2 README.md.
 .2 assignment3\_mivan.pdf.
}


\section{Applicazione}

L'applicazione oggetto di questo assigment è \textbf{MiVan}.
\newline

Si tratta di un'applicazione \textbf{back-end only} che \textit{gestisce prestiti di libri di un sistema bibliotecario} con \textit{una o più sedi}. Essa, oltre ad essere in grado di gestire i prestiti, possiede la capacità di gestire i libri, la loro \textit{posizione}, lo \textit{staff} che ne amministra i \textit{prestiti} e gli \textit{utenti} che ne fanno richiesta.

Grazie a questa applicazione è possibile \textit{creare, visualizzzare, modificare e rimuovere} in tempo reale lo stato di cessione dei libri. I prestiti sono descritti da una \textit{data di inizio}, \textit{di fine}, uno \textit{stato}, un \textit{libro}, un \textit{utente} ed un \textit{operatore}. Si ritiene che sia importante sottolineare che durante la progettazione si è presa la decisione che un prestito debba consistere in esattamente una unità di libro, in maniera tale che questo livello di granularità permetta all'utente, in caso di prestito "contemporaneo" (in realtà avviene in rapida sequenza dal punto di vista del backend) di più libri, di non doverli restituire tutti in blocco.

Altra caratteristica è la \textit{separazione} tra \textit{"concetto di libro"} ed \textit{"unità di libro"}, questo per gestire in maniera efficiente il caso molto frequente in cui il sistema bibliotecario possieda più copie dello stesso libro; nella nostra implementazione ogni singola unità (descritta come \textit{"Item"}) corrisponderebbe in maniera univoca all'unità fisica corrispondente. In altre parole, se il sistema bibliotecario è in possesso di \textit{n} libri identici (stesso ISBN) ognuno di essi è identificabile univocamente.

Una feature degna di nota (che andrebbe a soddisfare il requisito del \textit{self-loop}) è la possibilità di sapere se nel sistema bibliotecario è presente il \textit{prequel} (ammesso che esista) di un determinato libro assieme al suos tato di disponibilità.

Allo stato attuale l'applicazione è stata pensata per essere utilizzata nell'area metropolitana di \underline{\textit{Brescia}} e \underline{\textit{Novara}}, con un \textit{\textbf{target iniziale}} ristretto agli utenti delle \textit{\textbf{sedi del sistema blibliotecario comunale}} delle rispettive città.

A seconda della trazione che potrebbe ricevere una volta lanciata, si potrà valutare un'eventuale \textit{espansione} del territorio coperto e degli enti (sia pubblici che privati) interessati.
