Ficha rpcw2022-recurso

Avaliação: Representação e Processamento de Conhecimento na Web

Representação e Processamento de Conhecimento na Web (MIEI e MEI)

O objectivo principal desta ficha é testar os conhecimentos obtidos durante as aulas no desenvolvimento de aplicações Web e outras tarefas afins.

Os resultados finais deverão ser enviados ao docente da seguinte forma:

  • Enviar por email para: jcr@di.uminho.pt
  • Colocar no subject/assunto: RPCW2022::Recurso::Axxxxx
  • Em que Axxxxx (ou PGxxxxx) corresponde ao número do aluno;
  • Enviar ao docente um link do github para um repositório novo criado especificamente para o exame com o seguinte conteúdo (esta preparação poderá valer 1 valor do exame):
    • O repositório no GitHub deverá chamar-se "RPCW2022-Recurso";
    • Dentro do repositório deverá haver um ficheiro, "PR.xml" (ou em formato txt), contendo uma descrição de como fez a persistência de dados, do setup de bases de dados, respostas textuais pedidas, instruções de como executar as aplicações desenvolvidas, etc...
    • Dentro do repositório deverão existir duas pastas: "ex1", onde colocarão a aplicação desenvolvida para responder ao primeiro exercício e, "ex2", onde colocarão a aplicação desenvolvida para responder ao segundo exercício.

Os exercícios que envolvam criação de rotas serão testados com as rotas no enunciado, qualquer rota que seja diferente da pedida será avaliada com 0.


Cria um modelo em MongoDB para modelar o universo da gestão de condomónios. A seguir apresentam-se alguns requisitos:

  • A base de dados deverá chamar-se "CONDOMINIO";
  • Cria as coleções: pagamentos, movimentos (receitas e despesas) e fracoes;
  • Um condomínio é constituído por uma lista de frações (cada fração corresponde a um espaço que foi adquirido ou alugado, pode ser uma loja, uma garagem ou um apartamento);
  • Cada fração tem uma permilagem correspondente à sua parte no todo que é o prédio;
  • Cada fração está associada a um proprietário ou arrendatário;
  • Dum arrendatário/proprietário conhece-se o seu nome, email e telefone;
  • Da gestão do condomínio fazem parte dois tipos de objetos anuais(têm uma instância para cada ano): mapa de pagamento e livro de receitas e despesas;
  • Um mapa de pagamento corresponde a uma matriz onde se indica para cada fração e para cada mês se pagou ou não;
  • Cada fração tem a ela associada o valor da mensalidade a pagar;
  • O livro de receitas e despesas é uma lista de entradas em cada entrada tem a ela associada: o tipo (receita ou despesa), a data, o valor e a sua origem (fração no caso de receita, fornecedor no caso de despesa);
  • És livre de criar o modelo que entenderes e de decidires quais as propriedades/relações a criar podendo ainda acrescentar outras não referidas no enunciado;
  • A seguir apresentam-se 3 blocos de dados, um mapa de pagamentos, um livro de receitas/despesas e uma lista de frações. Carrega-os na tua base de dados (podes fazê-lo manualmente ou programando uma script na lingugem da tua conveniência).

Mapa de pagamentos de 2020:

-------------------------------------------------------
Fração,Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set ,Out,Nov,Dez
1Dto,1,1,1,1,,,,,,,,
2Dto,,,,,,,,,,,,
3Dto,1,1,1,1,1,1,1,1,1,1,1,1
4Dto,1,1,1,1,1,1,1,1,1,1,1,1
5Dto,1,1,1,1,1,1,,,,,,
6Dto,1,1,1,1,1,1,1,1,,,,
7Dto,1,1,1,1,,,,,,,,
8Dto,,,,,,,,,,,,
1Esq,1,1,1,,,,,,,,,
3Esq,1,1,1,,,,,,,,,
5Esq,1,1,1,1,,,,,,,,
7Esq,1,1,1,1,,,,,,,,
Loja,,,,,,,,,,,,
-------------------------------------------------------

Livro de receitas e despesas de 2020:

-------------------------------------------------------
Número,Tipo,Data,Valor,Entidade,Descrição
2020/001,Despesa,2020-01-04,7.28,CGD,Manutenção da conta
2020/002,Receita,2020-01-06,64.00,7Esq,Janeiro
2020/003,Receita,2020-01-06,406.62,2Dto,Abril a Dezembro de 2019
2020/004,Despesa,2020-01-08,222.65,EDP,Luz
2020/005,Receita,2020-01-16,45.18,7Dto,Janeiro
2020/006,Despesa,2020-02-01,7.28,CGD,Manutenção da conta
2020/007,Receita,2020-02-04,64.00,5Esq,Fevereiro
2020/008,Receita,2020-02-06,64.00,7Esq,Fevereiro
2020/009,Despesa,2020-01-20,439.77,Kone,Manutenção dos elevadores: 1º trimestre
2020/010,Receita,2020-02-12,384.00,1Esq e 3Esq,"Janeiro, Fevereiro e Março"
2020/011,Receita,2020-02-20,45.18,7Dto,Fevereiro
2020/012,Despesa,2020-02-24,20.00,Serralheiro,Concerto do trinco da porta
2020/013,Despesa,2020-02-24,174.30,CMB,Inspeção dos elevadores
2020/014,Receita,2020-02-24,194.30,1Dto,"Acertos: Janeiro, Fevereiro, Março, Abril e 13.58 de Maio"
2020/015,Receita,2020-03-11,271.08,5Dto,Janeiro a Junho
2020/016,Despesa,2020-03-11,1655.00,PluriRapel,Reparação das fachadas
2020/017,Receita,2020-02-26,64.00,5Esq,Março
2020/018,Receita,2020-02-29,542.16,3Dto,Janeiro a Dezembro
2020/019,Despesa,2020-03-04,236.59,EDP,Luz
2020/020,Receita,2020-03-06,64.00,7Esq,Março
2020/021,Despesa,2020-03-07,7.28,CGD,Manutenção da conta
2020/022,Receita,2020-03-15,45.18,7Dto,Março
2020/023,Receita,2020-03-30,64.00,5Esq,Abril 
2020/024,Despesa,2020-04-04,7.28,CGD,Manutenção da conta
2020/025,Receita,2020-04-06,64.00,7Esq,Abril
2020/026,Receita,2020-04-07,225.90,6Dto,Abril a Agosto
2020/027,Receita,2020-04-14,45.18,7Dto,Abril
2020/028,Despesa,2020-04-15,207.98,Vizinhos,Luz Comum
2020/029,Despesa,2020-04-15,1080.00,Limpeza,Limpeza 2020
2020/030,Receita,2020-04-15,542.16,4Dto,Janeiro a Dezembro
2020/031,Despesa,2020-04-01,439.77,Kone,Manutenção dos elevadores: 2º trimestre
-------------------------------------------------------

Lista de Frações:

-------------------------------------------------------
Fração,Permilagem,Mensalidade
Loja,50,6.06
1Dto,24,36.45
1Esq,34,51.63
2Dto,24,36.45
3Dto,24,36.45
3Esq,34,51.63
4Dto,24,36.45
5Dto,24,36.45
5Esq,34,51.63
6Dto,24,36.45
7Dto,24,36.45
7Esq,34,51.63
8Dto,24,36.45
-------------------------------------------------------

Depois de teres o modelo criado em MongoDB e de teres carregado a informação apresentada, cria um servidor nodejs que dê suporte à seguinte API de dados (note que não é necessário qualquer interface web):

    • GET /api/movimentos - Devolve a lista de movimentos, com todos os campos;
    • GET /api/movimentos?groupBy=tipo - Devolve a lista de movimentos de um determinado tipo (receita ou despesa);
    • GET /api/movimentos?groupBy=entidade - Devolve a lista de entidades, indicando para cada uma, quanto se recebeu (se for uma fração do condomínio) ou quanto se pagou (se for um fornecedor);
    • GET /api/pagamentos - Devolve a lista de pagamentos;
    • GET /api/pagamentos/:id - Devolve a lista de pagamentos da fração id, indicando os meses pagos, o total pago e o total em dívida;
    • GET /api/pagamentos?status=mês - Devolve a lista de devedores e o respetivo montante até ao mês indicado;
    • POST /api/movimentos - Acrescenta um novo movimento;
    • POST /api/pagamentos - Acrescenta um novo pagamento.