Skip to content
This repository has been archived by the owner on Jan 21, 2024. It is now read-only.

Latest commit

 

History

History
49 lines (26 loc) · 3.18 KB

README.md

File metadata and controls

49 lines (26 loc) · 3.18 KB

Exercício de Candidatura à Bolsa de Iniciação à Investigação do DEI (BL38/2021)

EDIT: Nota - 18.9 (melhor entre todos os candidatos)

Rafael Serra e Oliveira, abril 2021

Ver o enunciado para a especificação.

Instalar Dependências

Antes de correr o código, é imperativo que o sistema esteja equipado com Python (^3.9.3) e os respetivos modules:

  • requests (^2.22.0)
  • django (^3.2)

Correr Servidor de Desenvolvimento

  1. Na diretoria de topo do repositório (onde está este ficheiro), correr:

python manage.py runserver --insecure

IMPORTANTE: A opção --insecure apenas significa que ficheiros estáticos são disponibilizados pelo Django diretamente, mesmo com DEBUG=False. Como é um servidor local, não há quaisquer riscos acrescidos.

  1. Aceder ao endereço http://127.0.0.1:8000/deipet/ através de qualquer browser1;

  2. Ctrl-C para terminar a execução.

Não está apto para produção, por motivos evidentes.


Escolhas de Implementação
  1. Ao contrário do que é usual, a API Petstore disponibilizada não expõe nenhuma forma de determinar quantos animais de estimação existem no total. Assim, implementando paginação na lista de animais, a única maneira de mostrar ao utilizador quantas páginas há ao todo a seria obter todos e contá-los ­— o que claramente é contra o propósito da própria Petstore fazer paginação e não seria escalável. Assim, foi tomada a decisão de mostrar apenas botões de navegação, sem a informação da quantidade total.

  2. Pela mesma razão, não foi implementada uma funcionalidade de pesquisa nem de ordenação, pois tais operações apenas poderiam ser feitas por página em vez de no geral, o que seria pouco útil (ou até enganador) para o utilizador.

  3. É de notar que alguns animais podem aparecer repetidos em páginas diferentes pelo que APARENTA2 ser um lapso na implementação da Petstore: o parâmetro offset afeta os IDs e não o número real de animais existentes, não contemplando que alguns IDs podem ter sido apagados. Por exemplo, havendo animais com IDs [0 1 2 3 50] (tendo os animais 4-49 sendo apagados), o #50 é listado tanto com (limit=20, offset=0) (primeira página) como com (limit=20, offset=20) (segunda página).

  4. Por limitação do próprio sistema de templates, não é possível usar o mesmo block "title" duas vezes (<title /> e <h1 />). Para evitar repetição, portanto, o template estrutural foi separado em base.html e layout.html, sendo o primeiro extremamente básico mas havendo assim uma workaround para esta limitação. Como bonus, o código fica (discutivelmente) melhor organizado.


1 Visto esta ser a única aplicação, para efeitos de conveniência, foi tomada a liberdade de criar um redirect, pelo que basta aceder ao endereço http://127.0.0.1:8000 sem qualquer path.

2 Pouco tempo foi gasto a testar esta teoria; no entanto, é pouco provável tratar-se de um erro na presente implementação devido à sua simplicidade.