Escolar Documentos
Profissional Documentos
Cultura Documentos
Projeto e Seminário
Relatório de Projeto
Junho, 2023
Índice
1 Introdução ........................................................................................................................ 4
1.1 Apresentação do Problema e Estado da Arte .............................................................. 6
1.2 Enquadramento do Sistema Informático LockerHive .................................................. 7
1.3 Glossário ................................................................................................................... 3
2 Conhecimentos de Base .................................................................................................... 8
2.1 Modelo de Dados ...................................................................................................... 9
2.1.1 Modelo Conceptual .......................................................................................... 10
2.1.2 Modelo lógico .................................................................................................. 12
2.1.3 Modelo físico ................................................................................................... 13
2.2 Modelação Conceptual de Sistemas Informáticos..................................................... 13
2.2.1 Diagrama de requisitos funcionais .................................................................... 14
2.2.2 Diagrama de casos de uso ................................................................................ 14
2.2.3 Diagrama de atividades .................................................................................... 15
2.2.4 Diagrama de blocos.......................................................................................... 16
2.2.5 Diagrama Interno de Blocos ............................................................................. 16
2.3 Interface para interação entre elementos de sistema ............................................... 17
2.3.1 JSON Siren ............................................................ Error! Bookmark not defined.
2.4 Tecnologias .............................................................................................................. 19
2.4.1 PostgreSQL............................................................ Error! Bookmark not defined.
2.4.2 Spring Boot ........................................................... Error! Bookmark not defined.
2.4.3 Jetpack Compose .................................................. Error! Bookmark not defined.
2.4.4 Google Maps API ................................................... Error! Bookmark not defined.
2.4.5 React .................................................................... Error! Bookmark not defined.
3 Análise do Problema e Conceção do Sistema Informático LockerHive .............................. 23
3.1 Requisitos Funcionais............................................................................................... 23
3.2 Requisitos Não Funcionais ....................................................................................... 24
3.3 Diagrama de requisitos ............................................................................................ 25
3.4 Casos de uso ............................................................................................................ 28
3.5 Arquitetura do Sistema Informático LockerHive ....................................................... 29
3.6 Modelo de dados ..................................................................................................... 30
3.6.1 Modelo Entidade-Associação LockerHive.......................................................... 31
3.7 Modelo Relacional ................................................................................................... 31
3.7.1 Passagem de modelo EA para modelo relacional ... Error! Bookmark not defined.
3.8 Implementação dos Casos de uso do Sistema Informático LockerHive ...................... 33
1
3.9 Medidas de Segurança e Proteção de Dados no Sistema LockerHive ........................ 38
4 Aspetos do Desenvolvimento do Sistema Informático LockerHive .................................... 39
4.1 Base de dados.......................................................................................................... 40
4.2 Segurança e proteção de dados .................................... Error! Bookmark not defined.
4.3 Servidor ................................................................................................................... 40
4.4 Aplicação móvel....................................................................................................... 46
4.4.1 Aspetos gerais da aplicação móvel ................................................................... 46
4.4.2 Detalhes de implementação ............................................................................. 49
4.5 Loja online com parceria .......................................................................................... 50
5 Conclusões, Experiência e Trabalho Futuro ...................................................................... 52
Referências ............................................................................................................................. 55
2
Glossário
Este sistema informático utiliza analogias com colmeias de abelhas, além de outros
termos que possam não ser muito claros ao leitor. Torna-se importante, portanto, a
apresentação de um glossário que define os principais termos e conceitos utilizados,
procurando, desta forma, facilitar a sua compreensão e esclarecer eventuais dúvidas que
possam ocorrer.
Assim, no contexto do sistema informático LockerHive deve ter-se em consideração o
seguinte:
3
1 Introdução
O comércio eletrónico revolucionou a forma como adquirimos todo o tipo de bens.
Desde produtos de mercearia, até às mais recentes tecnologias, a crescente
conectividade global e consequente divulgação desta forma de serviço torna-o uma
realidade cada vez mais presente, tendo a seu favor a comodidade e praticidade que
oferece ao consumidor.
Na última década tem sido observado em Portugal, tal como no resto do mundo, um
crescimento significativo de compras online por parte das pessoas. Segundo um artigo
do Eurostat [2], que apresenta os resultados do “e-commerce” em 2022, desde 2010,
na união europeia, houve um crescimento de cerca de 20% de utilizadores da internet
que efetuaram compras ou serviços online para uso próprio (figura 1)
Este crescimento, observável ao longo dos anos, pode ser justificado por fatores como
o crescimento substancial de utilizadores da internet (figura 2), o aumento de confiança
dos utilizadores nas transações online, a ampla variedade de produtos disponíveis, os
avanços na tecnologia móvel e, mais recentemente, à pandemia COVID 19.
4
Figura 2: Previsão de crescimento de utilizadores da internet em Portugal e União
Europeia (pré e pós COVID-19)
A pandemia COVID19 que afligiu fortemente o planeta nos últimos anos, foi responsável
por grandes restrições de deslocamento das pessoas, tendo também levado a um
aumento da insegurança e ao fecho de várias lojas físicas. Esta situação proporcionou, a
nível global, um crescimento maior do que o previsível neste tipo de compra online. Em
Portugal, de acordo com o artigo do “O jornal económico”, baseado num estudo da “In-
Store Meida”, em 2022, que analisou os hábitos dos portugueses que realizam compras
online, ocorreram aumentos de cerca de 30%, em algumas categorias, durante o
período do confinamento.
Diante deste cenário, muitas empresas têm vindo a apostar na melhoria da qualidade
dos serviços de entrega das compras online, procurando soluções para as adversidades
associadas a este tipo de serviço. Uma das soluções encontradas consistiu no
aproveitamento do conceito de as compras online serem entregues num cacifo
escolhido por quem faz a compra.
Embora o conceito acima referido seja antigo, não era muito conhecido ou usado. Com
o aumento das compras online, a utilização destes cacifos está a ter um enorme
crescimento. Estes cacifos permitem ao comprador não ter de estar presente no
momento da entrega para recolher a encomenda e evita a necessidade de ter de ir
buscá-la mais tarde a alguma loja ou esperar por uma nova entrega, havendo a
possibilidade de não estar novamente em casa.
5
Contudo, apesar deste mercado estar em crescimento em Portugal, ainda existe um
grande número de pessoas que não experimentou este serviço. Isto deve-se, em certa
parte, a algumas limitações que ainda subsistem na sua utilização. Deste modo, para
aumentar a visibilidade e utilização deste tipo de serviço em Portugal, é preciso
implementar melhorias e torná-lo mais atrativo. Em alguns países é possível observar
soluções muito interessantes que já se encontram implementas. A Polónia, por
exemplo, com o serviço InPost[9], já possui uma vasta rede de cacifos com resultados
bastante positivos.
Este serviço utiliza um identificador único para associar um cliente ao cacifo respetivo,
que fica inserido depois do último nome do cliente na etiqueta da encomenda, para que
quando esta chegar ao centro de distribuição, seja possível identificar a quem pertence
e qual o cacifo em que deverá ficar armazenada.
Atualmente, o serviço Locky oferece dois modelos para os clientes das lojas online e do
próprio serviço:
1. No primeiro modelo, caso as lojas online tenham parceria com este serviço, é
oferecido aos clientes, na plataforma da loja, a opção de selecionarem o cacifo Locky
que pretendem para a entrega da encomenda. Sendo, em seguida, gerada
automaticamente a morada correspondente para a etiqueta da encomenda;
2. No segundo modelo, para o caso das lojas online que não têm parceria com este
serviço, os clientes têm a opção de utilizar o serviço ao introduzir manualmente a
morada do cacifo Locky, que é disponibilizada na aplicação Locky.
6
No entanto, este serviço possui algumas adversidades para o cliente. Uma delas é a falta
de flexibilidade em relação ao número de cacifos que cada cliente pode associar à sua
conta, pois só pode ter no máximo um, não permitindo ao cliente utilizar outro cacifo
para outra encomenda enquanto o cacifo que está associado tenha uma encomenda a
caminho.
7
Figura 3: Contexto de enquadramento do sistema informático LockerHive.
De notar que, caso seja ultrapassado o número de dias permitido para que a encomenda
possa estar depositada no cacifo, esta será recolhida e devolvida ao centro de
distribuição.
O sistema informático LockerHive não considera a gestão do transporte das
encomendas, focando-se na organização e gestão da colocação das encomendas nos
cacifos respetivos.
2 Conhecimentos de Base
Para a realização de um sistema informático é necessário um estudo prévio, com o
auxílio de vários modelos para potencializar as suas funcionalidades, mantendo a
consistência e integridade dos dados, como das tecnologias para as implementar.
Como tal, para o desenvolvimento do sistema informático LockerHive, utilizou-se vários
modelos e ferramentas para tornar este sistema funcional.
Os modelos e ferramentas utilizados encontram-se descritos neste capítulo, de forma a
facilitar a leitura do relatório por pessoas que não estão enquadradas nos conceitos de
modelo e tecnologias que foram utilizados no desenvolvimento do sistema informático
LockerHive.
8
O restante capítulo está organizado por quatro subsecções:
9
No modelo conceptual realiza-se um esquema para a base de dados com uma descrição
concisa dos requisitos de dados do sistema em causa, que inclui descrições detalhadas
de entidades, relações e restrições. Nesta abordagem não existe preocupações com
detalhes de implementação da base de dados num SGBD.
Já no modelo lógico, e com base no modelo conceptual, é feita a implementação das
entidades, atributos e relações em estruturas de dados especificas de um SGBD,
originando um esquema de base de dados.
Por fim, no modelo físico, é especificado as estruturas internas de armazenamento
físico, a organização de ficheiros, os índices, os caminhos de acesso e otimizações de
desempenho. Este modelo define como os dados são armazenados num SGBD.
Em suma, cada modelo pertence a fases diferentes do processo de modelação de uma
base de dados, cada um possuindo um propósito diferente, garantindo uma correta
implementação, caso seja seguido esta abordagem hierárquica
Após alguma análise e aconselhamento por parte dos orientadores deste projeto, foi
decidido seguir a modelação de dados relacional e as respetivas regras de cada modelo
indicadas por Navathe e Ramez Elmasri, no livro “Fundamentals Of Database Systems”
[2].
10
Entidade fraca
Atributo Simples
Atributo Composto
Atributo Chave
Atributo Multivalor
Atributo Derivado
Figura 4: Representação dos tipos de atributos existentes no modelo ER
11
A participação especifica se a existência de uma entidade depende de outra
entidade através da relação entre as duas, indicando, assim o número minimo de
instâncias desta relação que cada entidade deve ter. Esta caracteristica de uma
relação pode ter dois valores, participação total ou parcial. A participação total
poderá ser exemplificada seguindo o exemplo de uma empresa que dita que cada
trabalhador terá de operar em pelo menos um departamento desta empresa,
ditando assim que numa relação TRABALHA_PARA a participação de cada
trabalhador é total. No mesmo exemplo, ao existir a relação GERE a participação
de cada trabalhador é parcial, já que apenas alguns farão parte da gestão de cada
departamento.
Relação
Relação “Identificadora”
Participação total de E2 em R
12
atributos multivalor ou repetidos. Além disso, cada tabela deve ter uma chave
primária que identifique unicamente instância dessa entidade.
2. Segunda Forma Normal (2NF): a segunda forma normal exige que uma tabela
esteja na 1NF e que todos os atributos não-chave sejam totalmente dependentes
da chave primária. Isso significa que nenhum atributo não-chave deve depender
parcialmente da chave primária.
3. Terceira Forma Normal (3NF): a terceira forma normal exige que uma tabela
esteja na 2NF e que não haja dependências entre os atributos não-chave. Isto é,
nenhum atributo não-chave deve depender de outro atributo não-chave.
13
No desenvolvimento do sistema informático LockerHive usámos os seguintes diagramas
na linguagem SysML:
As interações são identificadas por um segmento de reta entre o ator e o caso de uso,
sendo que um ator pode estar relacionado a vários casos de uso num mesmo diagrama.
A interação entre ator e caso de uso pode ser visualizada na figura 7.
14
Figura 7: Iteração entre ator e caso de uso.
15
A B C
A B C
Cada bloco é representado por um retângulo e as suas relações por meio de setas, como
representado na figura 11.
16
Os elementos que são propriedade da parte são representados por um bloco normal, já
os elementos que são propriedade de referência são representados por um bloco que
está tracejado à volta. A representação destes blocos é visível na figura 12.
1
sequência de caracteres que identifica de forma única um recurso na web
17
Código sob demanda - habilidade de enviar código executável do server para o
cliente quando solicitado.
Em suma, uma interface API RESTful segue um conjunto de regras e princípios que
proporcionam vantagens significativas em termos de escalabilidade, flexibilidade e de
independência.
De realçar que no sistema informático LockerHive as representações dos recursos
enviadas pelo servidor para o cliente encontram-se maioritariamente no formato JSON
Siren. Este formato está detalhado na próxima subsecção, 2.3.1, Recursos na arquitetura
REST.
18
2.4 Tecnologias usadas no desenvolvimento do sistema
informático LockerHive
Para a implementação do sistema informático LockerHive, a escolha das tecnologias foi
baseada na experiência e familiaridade, bem como na adequação das mesmas aos
requisitos e objetivos do sistema.
Após a elaboração de vários diagramas e esquemas, chegou-se a uma conclusão acerca
dos principais elementos necessários para que o sistema informático LockerHive seja
funcional, estes elementos são:
Base de dados;
Servidor;
Aplicação móvel;
Aplicação web da loja online.
De modo a ter-se uma base de dados persistente e relacional em que seja possível
consultar e manipular os dados com a linguagem SQL, decidiu-se usar o SGBD
PostgreSQL, que está explicado mais em detalhe na subsecção 2.4.1.
Para o servidor optou-se por utilizar a framework Spring (descrita com mais detalhe na
subsecção 2.4.2), já utilizada em projetos anteriores, que apresenta ferramentas para
diferentes aspetos, possibilitando o aceleramento do processo de desenvolvimento do
sistema, a garantia de proteção aos dados, com vários recursos de autenticação e
autorização, a integração com a base de dados, entre outras.
No desenvolvimento da aplicação móvel utilizou-se o kit de ferramentas moderno
Jetpack Compose (descrito em mais detalhe na subsecção 2.4.3). Este kit cria interfaces
nativas para o utilizador, que permite um desenvolvimento da aplicação móvel com
menos código e com vários recursos modernos para o Android.
Na simulação da aplicação web da loja online com parceria LockerHive, optou-se pela
biblioteca de JavaScript, React (descrita em mais detalhe na subsecção 2.4.4), pois ao
ter a vantagem da reatividade, é possível fazer alterações de estado e serem
automaticamente refletidas na interface da loja, proporcionando assim uma
experiência mais fluida para a simulação.
Ao longo da implementação dos principais elementos do sistema informático
LockerHive, houve a necessidade de utilização de mais dois elementos, ambos externos
ao sistema, mas vitais para garantir que funcionamento de algumas funcionalidades do
sistema LockerHive. Estes são:
19
Messaging, descrito em mais detalhe na secção 2.4.5. Esta solução permite, entre outras
vantagens, a entrega confiável de mensagens sem custo e a personalização das
notificações.
A escolha da API para ter recursos a mapas na aplicação móvel e na aplicação web da
simulação da loja, foi a Google Maps API (descrita em mais detalhe na subsecção
2.4.6). A escolha muito se deveu em conta à particularidade de ser gratuita, o que para
este tipo de APIs, não é muito comum, e de possibilitar a personalização do mapa,
sendo assim possível alternar a cor dos marcadores da localização das colmeias
LockerHive.
Modelo relacional;
Modelo hierárquico;
Modelo de ficheiros;
Modelo de grafos.
As grandes diferenças entre estes modelos são a forma como os dados são estruturados,
organizados e relacionados, havendo uns com vantagens em certas funcionalidades e
outros com vantagens noutras, por isso se diz que a escolha do modelo de dados
depende do contexto do sistema que se quer implementar.
No nosso caso, de acordo aos requisitos do projeto, escolheu-se o modelo relacional. A
principal razão desta escolha residiu na forma como os dados são organizados em
tabelas com colunas e linhas, e com relacionamentos estabelecidos por chaves primárias
e estrangeiras.
Deste modo, optou-se por um SGBD que fosse relacional e que satisfizesse as
necessidades do sistema informático LockerHive. O SGBD escolhido foi o PostgreSQL,
pois é um sistema de gestão de bases de dados relacional de uso gratuito que permite
garantir a integridade, organização e escalabilidade dos dados.
Este SGBD foi o PostgreSQL, é um sistema de gestão de bases de dados relacional de uso
gratuito que permite garantir a integridade, organização e escalabilidade dos dados.
Para facilitar a administração e o desenvolvimento da base de dados PostgreSQL foi
utilizada a ferramenta de administrção pgAdmin, que fornece uma interface gráfica para
gerir e interagir com base de dados em PostgreSQL.
20
2.4.2 Framework para execução de um Servidor
A escolha de uma framework2 de execução do servidor é fundamental para o
desenvolvimento de um sistema informático eficiente e robusto. Existem várias
frameworks disponíveis que oferecem recursos e funcionalidades para facilitar o
desenvolvimento de aplicações web e APIs RESTful.
Uma das frameworks mais populares é o Spring, da plataforma Java3. O Spring simplifica
o processo de criação de microserviços, aplicações Java, etc, oferecendo funcionalidades
como a técnica de injeção de dependência, o aumento da facilidade de interação com as
solicitações HTTP ou a definição de rotas. Esta framework tem uma extensão que se
designa por Spring Boot. O Spring Boot simplica processos de configurações que tinham
de ser configurados manualmente. Isto incluía a configuração de ligações à base de
dados, configurações de segurança, integrações com frameworks web, entre outros.
Assim consegue-se reduzir a quantidade de configuração manual necessária e acelerar
o processo de desenvolvimento.
A framework escolhida para a execução do servidor foi então a Spring, com a extensão
Spring Boot, devido às funcionalidades que acrescentam no desenvolvimento do
servidor, já mencionadas anteriormente.
2
conjunto de bibliotecas, componentes e ferramentas que fornecem uma estrutura para desenvolver
aplicações.
3
Linguagem de programação.
4
Sistema operativo móvel desenvolvido pelo Google.
5
representação estrutural da interface do utilizador como uma árvore.
21
que é uma representação virtual eficiente do verdadeiro DOM, que faz com que o React
apenas atualize as partes da interface do utilizador que foram alteradas, ficando assim,
a renderização mais rápida e eficiente.
6
Empurrada.
22
3 Análise do Problema e Conceção do
Sistema Informático LockerHive
Neste capítulo é apresentada a abordagem ao problema e aos modelos de dados
estabelecidos para a sua representação, desenvolvidos antes da implementação das
aplicações do sistema informático LockerHive. De modo a, ao inicializar-se o
desenvolvimento da implementação do sistema, já se saber o que realmente se
pretende como produto final.
O restante capítulo está organizado por secções, na secção 3.1 os requisitos funcionais,
na secção 3.2 os requisitos não funcionais, na secção 3.3 os diagramas de requisitos, na
secção 3.4 os casos de uso, na secção 3.5 a arquitetura, na secção 3.6 o modelo de dados,
na secção 3.7 o modelo relacional, na secção 3.8 os diagramas de atividade e na secção
3.9 as medidas de segurança e proteção de dados no sistema LockerHive.
23
REQ17. Visualizar histórico de transações;
REQ18. Carregar saldo;
REQ19. Fazer registo;
REQ20. Visualizar histórico de pacotes recolhidos;
REQ21. Adiar o transporte do centro de distribuição para a colmeia em 30
dias no máximo;
REQ22. Visualizar os pagamentos pendentes que a conta tem;
REQ23. Utilizador editar o seu perfil;
REQ24. Utilizador não registado, após realizar registo, conseguir ver o ponto
de situação dos pacotes que encomendou antes de estar registado,
para alguma colmeia;
As lojas online com parceria com o sistema informático LockerHive terão as seguintes
funcionalidades:
24
3.3 Diagrama de requisitos
O diagrama de requisitos da aplicação móvel está representado em três partes devido
ao seu tamanho (parte 1 na figura 13, parte 2 na figura 14 e parte 3 na figura 15.
25
Figura 14: Parte 2 do diagrama de requisitos da aplicação móvel LockerHive.
26
Figura 15: Parte 3 do diagrama de requisitos da aplicação móvel LockerHive.
27
3.4 Casos de uso
Para uma melhor compreensão da organização dos requisitos funcionais do sistema
informático LockerHive, utilizou-se um diagrama de casos de uso para o nosso sistema.
28
3.5 Arquitetura do Sistema Informático LockerHive
Para se definir a arquitetura de um sistema, tem-se de ter em conta os elementos que
possui e as suas interações.
29
Para uma representação não tanto abstrata como a anterior, utilizou-se a linguagem de
modelação de sistemas SysML no desenvolvimento de um diagrama de blocos para
representar o sistema informático LockerHive na figura 18.
30
3.6.1 Modelo Entidade-Relação LockerHive
Para representar os dados do nosso sistema informático foi realizado o modelo de
entidade-relação representado na figura 20:
31
Costumer e Hive, ao possuírem uma relação M-N constituem uma relação que foi
designada de Costumer Hive. Esta representa os Hives que o Costumer do sistema tem
associados na sua conta.
A entidade Package representa os pacotes que um determinado Costumer comprou e
pretende enviar para um certo Hive, sendo que estes Packages terão o Hive, escolhido
pelo Costumer, associado na relação Costumer_Hive. Esta entidade tem também duas
relações fracas com ela própria para que seja possível o Costumer alterar o Hive de cada
Package, havendo assim necessidade de se criar outro Package, este novo Package vai
ter a referência para o Package anterior, e o anterior para o novo Package. O Package ao
estar prestes a ser transportado para o Hive, irá ficar associado a um Bundle. Esta
entidade possibilita, caso seja possível, a junção de vários Packages que são do mesmo
Costumer e têm o mesmo Hive como destino, e que através de uma verificação de
condições (tamanho, condições de armazenamento), podem ser agrupados e
depositados na mesma Cell. A mudança de estado do Package vai ser guardado em State
Alt Packages, que vai conter as datas desta mudança de estado, permitindo saber o
histórico de mudança de estado do Package.
A entidade Costumer_Request vai guardar os pedidos do Costumer, como a mudança de
Hive de um Package. Existe também a entidade Package_Bundle gerada pela relação M-
N entre Package e Bundle, onde se pode associar cada Bundle a um ou mais Packages.
A entidade Bundle irá ficar associada a um Operator quando for altura de a transportar
para a Cell indicada pelo sistema informático LockerHive. Quando o Bundle estiver
entregue e pronto a ser recolhido pelo Costumer, ser-lhe-á fornecido um Code que
permite que este consiga abrir a Cell que contém o Bundle. Este Code é então
representado pela entidade Pickup Code.
32
PACKAGE(PK(package_id, costumer_id, hive_id) dc_arrival_time, max_length,
max height, max_width, max_weight, store_temp, state, token, FK(costumer_id
ref COSTUMER), FK(hive_id ref HIVE), FK(next_pkg_id, costumer_id, hive_id ref
PACKAGE), FK(previous_pkg_id, costumer_id, hive_id ref PACKAGE));
BUNDLE (PK (bundle_id), state, max_cell_days, duration, FK (operator_id ref
OPERATOR), FK (cell_id, hive_id ref CELL));
CELL (PK (hive_id, cell_id), max_temp, min_temp, state, length, width, height, FK
(hive_id ref HIVE));
TRANSACTION (PK (transaction_id, costumer_id)), value, time_date, state,
description, FK(costumer_id ref REGISTERED_COSTUMER), FK(package_id,
costumer_id, hive_id) ref PACKAGE) )
ANOMALY (PK(anomaly_id, costumer_id)), title, state, description, response,
time_date, FK(package_id, costumer_id, hive_id ref PACKAGE), FK(costumer_id
ref COSTUMER));
COSTUMER_REQUEST(PK (request_id), type, time_date, FK(costumer_id ref
REGISTERED_COSTUMER), FK(package_id, costumer_id, hive_id ref PACKAGE));
NOTIFICATION(PK(notification_id, costumer_id ), state, type, time_date,
description, FK(costumer_id ref COSTUMER), FK(package_id, costumer_id,
hive_id ref PACKAGE));
OPERATOR(PK(operator_id), name);
PICKUP_CODE(PK(code_id, bundle_id), duration, code, FK(bundle_id ref
BUNDLE);
STATE_ALT_DATE(PK (alt_id,hive_id) new_state, prev_state, time_date, FK
(hive_id ref HIVE), FK (cell_id ref CELL);
PACKAGE_BUNDLE(PK (id), FK(package_id, costumer_id, hive_id ref PACKAGE),
FK(bundle_id ref BUNDLE);
STATE_ALT_PACKAGES(PK (alt_package_id,package_id, costumer_id, hive_id)
new_state, prev_state, time_date, FK (package_id, costumer_id, hive_id ref
PACKAGE).
33
Figura 21: Diagrama de atividades: Autenticação.
34
Figura 22: Diagrama de atividades - visualização do mapa de colmeias.
Na atividade de reportar uma anomalia, irá aparecer duas opções Se o utilizador tiver já
anomalias reportadas, poderá visualizá-las e ver o estado em que se encontram ou poder
reportar uma nova anomalia.
35
Na atividade de visualizar o saldo, o utilizador terá o seu saldo corrente ao longo dos
diferentes ecrãs, sendo que poderá carregar o saldo com um valor à sua escolha.
Também será possível o utilizador visualizar o histórico de transações.
Na figura 24 está representada a atividade de visualizar saldo.
36
Figura 25: Diagrama de atividades: Visualização de notificações.
Na figura 26 está representada a atividade de acompanhamento do pacote a partir do
centro de distribuição até à célula, só possível para os utilizadores que tenham pacotes/s
registado/s por recolher. O utilizador terá as opções de visualizar o estado do pacote,
aceder à chave para a abertura da célula onde estiver o pacote e, se quiser, alterar a
colmeia que escolheu para recolher o pacote, para outra. Se esta for de outro centro de
distribuição relativamente à colmeia escolhida originalmente, terá custos adicionais.
Caso o utilizador não tenha saldo para esta mudança, não a poderá fazer e terá de
carregar o saldo necessário.
37
Figura 26: Diagrama de atividades: acompanhamento do pacote a partir do centro de
distribuição até à célula.
Deste modo, existem certas medidas que tem de estar presentes nos sistemas, sendo
estas:
Acesso Limitado: o acesso aos dados será restrito apenas a clientes autorizados.
Cada cliente terá acesso apenas às suas próprias informações, não conseguindo
aceder a informações de outros clientes ou de recursos para os quais não tem
38
autorização. A solicitação de recursos de origens não reconhecidas pelo servidor,
também não serão possíveis.
Identificação por Cookies: cada cliente ao fazer a sua autenticação no sistema
informático LockerHive, é-lhe atribuído um cookie que o identifica. Neste cookie
está adicionado o atributo HttpOnly7 aplicado nos cabeçalhos da resposta,
impedindo que os cookies sejam acedidos por scripts do lado do cliente.
Para garantir integridade:
4 Aspetos do Desenvolvimento do
Sistema Informático LockerHive
Neste capítulo aborda-se os principais aspetos relacionados com o desenvolvimento e
implementação dos principais elementos do sistema informático LockerHive.
Estes elementos já foram referidos anteriormente neste documento, estando visíveis no
diagrama de blocos do capítulo anterior.
A descrição da implementação destes elementos está descrita nas seguintes subsecções:
7
atributo que protege o cookie.
8
é uma sequência de bits geradas por um algoritmo de dispersão.
9
são blocos que lidam com as falhas.
39
4.1 Base de dados
O sistema de gestão de base de dados escolhido para a persistência dos dados do sistema
informático LockerHive foi o PostgreSQL, devido às vantagens mencionadas
anteriormente na secção 2.4.1.
As tabelas de cada entidade foram estabelecidas de acordo a secção 3.7. Para garantir a
integridade e a consistência dos dados das tabelas, foram criados vários triggers que são
executados sempre que o evento associado ocorra, antes ou depois, sendo evento uma
inserção, atualização ou remoção numa tabela.
4.2 Servidor
O servidor do sistema informático LockerHive foi desenvolvido com a framework Spring
(já descrita na secção 2.4.2) utilizando a extensão Spring Boot e com a linguagem de
programação Kotlin.
A organização do servidor é feita por oito componentes principais:
40
Interação com a base de dados – subsecção 4.2.1;
Formato de envio de dados – subsecção 4.2.2;
Processo de tratamento de solicitações – subsecção 4.2.3;
Segurança dos dados – subsecção 4.2.4.
10
É uma API do Java que descreve uma interface comum para frameworks de persistência de dados.
11
É uma API do Java que permite a ligação e interação com bases de dados.
41
De notar que foi adicionada uma propriedade required para indicar quais dos campos a
inserir ou atualizar, são obrigatórios ou opcionais, para a solicitação ter sucesso. Se
forem obrigatórios terão o valor true, caso contrário, false. Para exemplificar este
formato, na figura 28 está o exemplo de uma resposta à solicitação com método GET
./cell com o id 2.
{
"class": [
"cells"
],
"title": "Cell '2'",
"properties": {
"id": 2,
"state": "not available",
"min_temp": 10.5,
"max_temp": 25.5,
"length": 40.0,
"height": 25.0,
"width": 50.0,
"hive": {
"href": "http://localhost:8080/hives/1"
}
},
"actions": [
{
"name": "delete-cell2",
"title": "Delete Cell '2'",
"method": "DELETE",
"href": "http://localhost:8080/cells/2"
},
{
"name": "update-cell2",
"title": "Update Cell '2'",
"method": "PATCH",
"href": "http://localhost:8080/cells/2",
"type": "application/x-www-form-urlencoded",
"fields": [
{
"name": "min_temp",
"type": "number",
"required": "false"
},
{
"name": "max_temp",
"type": "number",
"required": "false"
},
{
"name": "state",
"type": "text",
"required": "false"
}
]
}
],
"links": [
{
"rel": [
"self"
],
"href": "http://localhost:8080/cells/2"
}
]
}
Figura 28 – Corpo de resposta a uma solicitação GET /cell pelo identificador.
Caso haja algum erro numa solicitação e o servidor tiver capacidade de manipular, o
corpo da resposta terá formato application/problem+json. A figura 29 exemplifica o
formato do corpo destas respostas.
42
{
"instance": "/costumers/login",
"detail": "Registered Costumer with email costumer11@example.com not found
",
"type": "about:blank",
"title": "Not Found",
"status": 404
}
Figura 29: Corpo de resposta de um erro.
Já o envio de notificações para a aplicação móvel é feito com o Firebase Cloud Messaging
(FCM). De modo a ser possível o servidor enviar notificações para a aplicação móvel, é
necessário o token referente ao dispositivo do cliente, e o token de autenticação do
servidor. O servidor obtém o token referente ao dispositivo do cliente no cabeçalho da
solicitação ao autenticar-se no sistema informático LockerHive. Já o token de
autenticação necessário para o servidor se autenticar na Firebase, é obtido na altura que
se criou e registou o projeto LockerHive no Firebase. Estando em posse de ambos os
tokens, a API do servidor pode agora fazer uma solicitação de autenticação à API do FCM,
com o token de autenticação do servidor no cabeçalho, e o token do dispositivo móvel
no corpo da solicitação, junto com a mensagem que se pretende enviar para o respetivo
dispositivo móvel. Ao ser validada a solicitação de autenticação do servidor, o FCM
reencaminha a mensagem para o dispositivo específico.
43
Criar e eliminar loja registada;
Fazer a autenticação de um cliente;
Obter lista de todos os utilizadores;
Obter informação de um utilizador em específico;
Obter lista de todos os centros de distribuição;
Obter informação de um centro de distribuição em específico;
Criar ou remover centro de distribuição;
Criar, editar ou remover bundle;
Obter todos os bundle;
Obter informação de um bundle em específico;
Criar, editar ou remover pacote;
Obter lista de todos os pacotes;
Obter informação de um pacote em específico;
Obter o token do pacote;
Obter lista de todas as colmeias;
Obter informação de uma colmeia em específico;
Criar, editar ou remover colmeia;
Obter lista de todas as células;
Obter informação de uma célula em específico;
Criar, editar ou remover célula;
Obter lista de todas as notificações;
Obter informação de uma notificação em específico;
Editar, criar ou remover uma notificação;
Obter lista de todas as transações;
Obter informação de uma transação em específico;
Editar, criar ou remover uma transação;
Obter lista de todas as anomalias;
Criar, editar ou remover uma anomalia;
Obter informação de uma anomalia em específico;
Obter todos os códigos de abertura da célula;
Obter um código em específico;
Criar um código;
Obter lista de todos os operadores;
Criar ou remover um operador;
Obter a informação de um operador em específico;
Criar etiqueta do pacote.
44
4.2.4 Segurança
De modo implementar o que se referiu nas medidas de segurança especificadas na
secção 3.9, utilizou-se cookies, a biblioteca JJWT (Java JWT) e a interface
WebMvcConfigurer do Spring.
Devido há necessidade de cada utilizador ter um cookie que o identifica, resolveu-se
utilizar tokens JWT. Este token é estruturado em 3 partes:
Cabeçalho;
Conjunto de reivindicações;
Assinatura digital.
Na criação deste token, o identificador único e a role do cliente são adicionados ao
conjunto de reivindicações. Este token é assinado por uma chave secreta, gerada pela
biblioteca JJWT, que é alterada sempre que se volta a executar o servidor. É utilizado o
algoritmo HS256 que usa uma função de hash SHA-256 para gerar a chave secreta. O uso
desta chave permite não só, a garantia da integridade do token, verificando se este não
foi adulterado, mas também a garantia da autenticidade, não sendo possível ser
conhecido o conteúdo do token sem ser descodificado com a chave secreta.
Após o cliente se autenticar com sucesso, será adicionado aos cabeçalhos da resposta o
cookie com o token.
“ADMIN” – vai ser o cliente com identificador 1. Caso exista, terá sempre a role
de administrador, sempre que se autentique. Ao não se ter realizado uma
aplicação web para autenticar os administradores do sistema, foi decidido dar
esta role a apenas um cliente, para ser possível ter acesso a todas as rotas do
servidor do sistema informático LockerHive;
“REGISTERED_COSTUMER” – qualquer cliente que possua conta registada no
sistema e a sua informação se encontre na tabela REGISTERED_COSTUMER na
base de dados. Ao realizar a autenticação no sistema informático LockerHive é-
lhe imposta esta role, ficando com permissão para aceder a rotas limitadas;
“REGISTERED_STORE” – qualquer cliente que possua conta registada no sistema
e a sua informação se encontre na tabela REGISTERED_STORE na base dados. Ao
realizar a autenticação no sistema informático LockerHive é-lhe imposta esta
role, ficando com permissões limitadas para aceder a rotas limitadas.
A verificação destas roles dá-se nos controladores do servidor. Sendo que, antes de os
controladores saberem a role do cliente que fez a solicitação, a solicitação é intercetada.
14
Papel que desempenha o cliente identificado.
45
Nesse momento, é verificada qual a rota que o cliente pretende aceder. Se a rota
requerer autenticação, é verificado se o token e o seu conteúdo é válido (ao ser assinado
o token com a chave secreta do servidor). Caso seja válido, o identificador e a role do
cliente são obtidos do token e inseridos num atributo da solicitação, chegando assim ao
controlador da rota em forma de atributo, sendo depois verificados para se confirmar se
o cliente tem ou não a autorização para aceder ao recurso solicitado.
Com a necessidade de interação entre a API do servidor e a API da aplicação web que
simula uma loja online, foi essencial configurar a permissão para que se permita pedidos
cross-origin15. Para isso, teve-se de implementar numa classe a interface
WebMvcConfigurer, do Spring, que disponibiliza métodos para tal. Portanto, foi
adicionada a origem http://localhost:3000, como origem permitida a interagir com a API
do servidor.
15
Mecanismo que permite recursos restritos numa aplicação serem acedidos por outro domínio fora do
domínio dessa aplicação.
46
como tokens de acesso, estado de pacotes, etc. O acesso a estas informações está
dependente da autenticação do cliente, tendo esta aplicação interfaces que o permitem
fazer (figura 31).
Após a criação de conta e/ou autenticação do cliente será apresentado o menu principal
(representado na figura 32), que possui vários botões que o permite navegar para
diferentes ecrãs e realizar diferentes operações ou consultar informações:
47
Figura 32: Mock do menu principal Figura 33: Mock do menu de pacotes ativos
Figura 34: Mock do ecrã do mapa Figura 35: Mock de pagamentos pendentes
48
Existe também um botão de saldo nos vários ecrãs que, para além de informar o cliente
do seu saldo atual, ao clicar permite realizar a simulação de depósito. Nas notificações,
existe um icon que indica o número de notificações que o cliente possui, que ao clicar,
as apresenta como uma lista, aparecendo as por ler e as já marcadas como lidas.
A aplicação possui ainda um botão de dropdown, onde o cliente terá acesso a outros
ecrãs e funcionalidades tais como:
Perfil: ecrã onde poderá consultar o seu email e alterar a sua password;
Histórico de transações: lista de depósitos e pagamentos efetuados;
Histórico de pacotes entregues: ecrã que lista os pacotes entregues e
recolhidos pelo cliente e informações associadas;
Anomalias: lista de anomalias reportadas pelo utilizador e os seus dados;
Logout.
Com o Jetpack Compose, foi possivel desenvolver a aplicação utilizando o modelo MVVM
(Model-View-ViewModel), que consiste na atualização do interface utilizador através da
observação de alterações de estado no ViewModel desencadeadas pelo Model. Esta
alteração da interface do utilizador, é feita também no momento de receção de
notificações por parte do servidor através do serviço Firebase Cloud Messaging, sendo
as alterações feitas em tempo real, mesmo com a aplicação em funcionamento.
A aplicação móvel no total tem três classes Activity, onde estão os elementos de
interface do utilizador
Os mapas expostos foram obtidos através da API Maps SDK para Android, juntamente
com o suporte fornecido pelo toolkit Compose que simplifica a sua representação.
Para as solicitações à API do servidor, foi usado o framework assíncrono Ktor. Sendo
assim possível assim configurar uma solicitação HTTP. Como requisito para a realização
de cada solicitação HTTP, como a chamada de uma função Ktor é assíncrona, utilizou-se
corrotinas para chamar fazer a respetiva chamada, de modo a não bloquear a thread
principal enquanto a operação de configurar a solicitação e de enviá-la é realizada.
De modo ao utilizador conseguir navegar na aplicação móvel, é necessário que contenha
o cookie de autenticação consigo, gerado no servidor, e que lhe foi entregue no
momento da autenticação. Isto é necessário devido à realização de solicitações por parte
da aplicação móvel, após a autenticação, para a API do servidor, com vista a obter as
informações do utilizador.
Com o objetivo de guardar a informação do cookie de autenticação e adicionar a
possibilidade de o utilizador guardar os dados de acesso para não ser necessário realizar
49
sempre a autenticação, utilizou-se sharedPreferences, que possibilita o armazenamento
local de dados no aplicativo Android. Assim, consegue-se guardar o token do cookie e os
dados de acesso do cliente para ser utilizados durante a navegação da aplicação móvel
na realização de solicitação à API do servidor.
50
{
"class": [
"labels"
],
"properties": {
"name": "joao silva LQLDTQD",
"address": "Bairro Exemplo 3",
"postal_code": "1234-565",
"location": "Gaia",
"district": "Porto"
}
}
Figura 37: Corpo de resposta da API do servidor para a loja após confirmação de
compra da encomenda.
51
5 Conclusões, Experiência e Trabalho
Futuro
Atualmente, o sistema informático LockerHive, apresenta as funcionalidades
implementadas, referidas na secção relativa ao enquadramento deste sistema (secção
1.2), com exceção da possibilidade de se adiar a entrega da encomenda para um cacifo.
Na altura de análise do projeto também foram abordadas outras possíveis
funcionalidades, que seriam interessantes e acrescentariam valor ao sistema, mas,
tendo em atenção o reduzido período para a realização do projeto, não nos foi possível
implementá-las, por serem dado prioridades a algumas a que foram consideradas mais
importantes, ou por questões de tempo, nomeadamente:
Loja online com parceria LockerHive poder arrendar colmeias para uso próprio;
Loja online com parceria LockerHive ter a possibilidade fazer a própria gestão da
colmeia e das células;
Pacote proveniente da loja online com parceria LockerHive ter a descrição do
que contém, permitindo ao cliente saber qual o conteúdo do pacote desde que
foi registado no sistema;
Possibilidade de alterar o destino da encomenda para uma morada introduzida
pelo cliente;
Rotinas de manutenção mês a mês para limpar os dados em excesso que não
têm uso, como por exemplo, o conjunto de caracteres aleatórios gerados para
associar um cliente não registado a uma colmeia.
Possibilidade de o operador ter uma interface própria para poder ir atualizando
o estado dos pacotes que transporta;
Possibilidade de os administradores do sistema terem a respetiva aplicação
web, para fazerem a gestão do mesmo;
Possibilidade da loja online com parceria se autenticar numa aplicação web do
sistema, para fazer a respetiva gestão das colmeias que arrendou;
Possibilidade de o cliente poder reservar células por um limite de tempo, por
um custo monetário adicional;
Possibilidade de os pacotes serem entregues diretamente nas colmeias
arrendadas pela loja online, não tendo de passar pelo centro de distribuição do
sistema;
52
com um código de confirmação, certificando que confirma que o email e
contacto introduzidos são realmente do cliente;
Quando o pacote não é recolhido dentro do prazo estipulado, enviar ao cliente
uma notificação para que este decida se pretende que o pacote se mantenha
armazenado por mais tempo, por um custo monetário adicional;
O número de testes realizados ao sistema informático LockerHive deveria ter sido maior,
de forma a garantir que todo o processo foi bem desenvolvido, despistando erros que
eventualmente ainda possam ocorrer, corrigindo-os.
54
Referências
[1] SysML, 2022 - https://www.omg.org/spec/SysML/1.7/Beta1/PDF
[2] Fundamentals Of Database Systems, de Shamkant B. Navathe e Ramez Elmasri, 2016
[3] Representational State Transfer (REST) :
https://roy.gbiv.com/pubs/dissertation/rest_arch_style.htm
[4] Figma - https://www.figma.com/
[5] https://ec.europa.eu/eurostat/statistics-explained/index.php?title=E-
commerce_statistics_for_individuals (Eurostat, 2022)
[6] https://blog.made2web.com/a-importancia-de-uma-loja-online-inclui-estatisticas-de-2020
[7] Mercado online português vale 7.130 milhões de euros em 2023 e 9.300 milhões de euros
em 2025 (https://observador.pt/2023/05/23/mercado-online-portugues-vale-7-130-milhoes-
de-euros-em-2023-e-9-300-milhoes-de-euros-em-2025/)
[8] https://www.publico.pt/2022/05/18/p3/noticia/novos-cacifos-locky-querem-encomendas-
espera-cliente-2006626
[9] https://www.inpost.pt/
Artigos:
Mais de 60% dos portugueses faz compras online – (DN, 2021)
Sete em cada dez pessoas em Portugal faz compras online várias vezes por mês –
(jornaleconomico, 2022)
Noticias:
Mais de 60% dos portugueses faz compras online – (DN, 2021)
Sete em cada dez pessoas em Portugal faz compras online várias vezes por mês –
(jornaleconomico, 2022)
https://ec.europa.eu/eurostat/statistics-explained/index.php?title=E-
commerce_statistics_for_individuals (Eurostat, 2022)
https://observador.pt/2023/05/23/mercado-online-portugues-vale-7-130-milhoes-de-euros-
em-2023-e-9-300-milhoes-de-euros-em-2025/ (observador, 2023)
https://jornaleconomico.pt/noticias/ctt-dizem-que-numero-de-encomendas-nos-novos-
cacifos-tem-aumentado-de-forma-recorrente-922681/
https://www.pgadmin.org/
https://github.com/kevinswiber/siren
55
https://nodejs.org/en
https://inpost.pl/en
56