IPW_IP 2425 1 A3 - isel-leic-ipw/2425i-IPW-LEIC33D GitHub Wiki

Instituto Superior de Engenharia de Lisboa
Bachelor in Computer Science and Computer Engineering
Bachelor in Informatics, Networks and Telecommunications Engineering
Internet Programming/Introduction to Web Programming
Winter Semester of 2024/2025 – 3rd practical assignment - FOCCACIA - Part2
---

Delivery

Due date for this assignment: 22/12/2024-23h59

Delivery method

The development of the FOCCACIA application has 3 development cycles, phased in three parts. For each one, the deadline for delivering the solution will be defined, and it will be a non-negotiable requirement.

This document includes the requirements of part 2 of the FOCCACIA application. The assignment should be delivered in the same Git repository used in part 1, by creating a tag called FOCCACIA-P2. If you need to make some changes to the delivery, just create another tag named FOCCACIA-P2.1, FOCCACIA-P2.2, etc.

The main goals of this part are adding a Web user interface to the FOCCACIA application developed in part 1, storing data in a database instead of memory, and incorporating new technologies and techniques covered in lectures.

Functional requirements

  1. Add the following to FOCCACIA Web API:

    1. Support more than one group with the same name, irrespective of its owner user.
    2. Create a new resource that returns a given team details (this is not a search), which must include at least the following details: team name, team image, stadium name, and the leagues the team has participated.
  2. Create a web interface for presentation in a web browser, for all the functionalities provided by the Web API. All operations that in Web Api are implemented with PUT and DELETE methods, except for user creation, must be implemented using the POST method using HTML forms. This web interface is server-side rendered, using the following technologies: HTML, CSS, and Handlebars. You may use Bootstrap for the base style of the user interface.

When using the web application, in no situation the (human) user will have to know and/or introduce any id for groups or teams or leagues. The only situations in which it is allowed to write the name of a teams is to carry out searches in order to obtain a list of results. The only situation in which it is allowed to manually enter the name of a group is when creating or editing that group.

Non-functional requirements

  1. The web HTML and CSS interface should be implemented in a new file called focaccia-web-site.mjs that should be at the same level as focaccia-web-api.mjs.

  2. Create a new module that replaces focaccia-data-mem.mjs so that the data is stored in an ElasticSearch database. This change should not imply any additional change in the remaining modules of the application besides module loading in focaccia-server.mjs (or a specific module for application configurations). The interaction with ElasticSearch must be done through its HTTP API using fetch function, without using any specific node module for ElasticSearch.

NOTE: The module focaccia-data-mem.mjs must not be deletes and it should be possible to change the implementations by changing the module imports in the module that configuras the application.

  1. In addition to the previous requirements, this part of work should be used to improve the code quality as well as the quality and quantity of tests, whether unit or integration.

  2. [optional] Create integration tests for the API with supertest module

The server application modules dependencies should be as follows:

Module dependencies

⚠️ **GitHub.com Fallback** ⚠️