\section{Desenho e Arquitetura}
Neste capitulo é apresentado o modelo IMFL e de base de dados. Ambos foram desenhados com o objetivo de fornecer uma visão mais geral do problema. Os componentes e entidades que eram necessários e as relações entre eles.
\subsection{Modelo IMFL}
No desenvolvimento da interface da aplicação foi feito um modelo usando a ferramenta IFML. Esta ferramenta permite ter uma visão geral dos componentes usados para desenhar a interface assim como as relações entre eles. Embora tenha sido útil fazer este modelo inicialmente para servir de ponto de partida para o desenvolvimento dos componentes em React, ao desenvolver a aplicação algumas alterações foram surgindo.
\begin{figure}[H]
	\centering
	\includegraphics[width=1\textwidth]{images/ifml}
	\caption{Modelo IFML}
\end{figure}
\newpage

\subsection{Modelo de Base de Dados}
O modelo de base de dados inicialmente foi desenhado pela ferramenta MYSQLWorkbrench, para termos uma noção de que entidades seriam necessárias e as relações entre elas. Uma vez que o modelo estava de acordo com o contexto do projeto, começamos por usar as anotações disponíveis em JPA para conseguir ter como resultado um modelo de base de dados igual ao que tínhamos pensado. Durante o desenvolvimento do projeto foram surgindo algumas alterações, que se mostraram simples de resolver com o uso das anotações disponíveis em JPA.

\begin{figure}[H]
	\centering
	\includegraphics[width=0.9\textwidth]{images/bd}
	\caption{Modelo Base de dados}
\end{figure}
\newpage


\section{Arquitetura}
Neste capitulo apresentamos uma descrição detalhada da arquitetura do nosso sistema. Na implementação do servidor, decidimos separar o máximo possível por componentes. Não só para facilitar na própria organização e estrutura, mas também para o reutilização do código. 
\vspace{0.5cm}
\begin{figure}[H]
	\centering
	\includegraphics[width=1\textwidth]{images/arq}
	\caption{Arquitetura geral do sistema}
\end{figure}

O servidor está dividido nos seguintes componentes:

\begin{itemize}
	\item \textbf{Serviços} - Os serviços são componentes internos ao servidor. São encarregues por disponibilzar as operações necessárias pelos controladores. No projeto temos vários componentes do tipo serviço. O \textit{AppService} é o componente principal, que serve de ponte entre os controladores e os outros componentes que são necessários. Ou seja sempre que qualquer um dos controladores necessita de alguma operação interna, este chama uma operação previamente definida no \textit{AppService}. Ficando ao cargo deste componente saber que outros serviços executar para dar a resposta pretendida.
	\item \textbf{Controladores} - Os controladores são as classes que se encarregam de fazer a ligação entre o cliente e  servidor. Existem vários tipos de controladores disponíveis, cada um encarregue de um contexto em especifico. Os controladores recebem pedidos pelo cliente e tratam de chamar métodos que estão defendidos no componente (\textit{AppService}).
	\item \textbf{Repositórios} - Os repositórios são interfaces com a definição de alguns métodos. Estes componentes são usados pelos serviços sempre que é necessário manipular informação existente nos modelos.
	\item \textbf{Modelos} - Os modelos são as entidades do sistema. É onde estão definidos as propriedades de cada entidade e as relações entre cada uma delas. São nestes componentes que são usadas as anotações de JPA para fazer o mapeamento para o MYSQL.
	\item \textbf{Segurança} - Os componentes de segurança são serviços mas com a responsabilidade de garantir que os recursos não são acedidos por entidades que não têm permissão.
\end{itemize}
