Skip to content
Pedro Felix edited this page Mar 12, 2016 · 4 revisions

Goals

The Software Laboratory project is comprised by the analysis, design and implementation of an information system to manage movies and associated ratings and reviews. Its development is divided into 4 phases, with incremental requirements published before the beginning of each phase.

Domain

  • A movie is characterized at least by a title and a release year. A movie may also have other attributes such as its genre, the set of cast and directors, and associated pictures. Multiple movies can have the same title. However, no two movies released in the same year may have the same title.
    Movies can also belong to collections ('Oscar 2016 Winners') or series ('Star Wars').

  • A rating is a number from 1 to 5 assigned to a movie by an user.

  • A review is the evaluation of a movie by a movie critic. It is characterized by a review summary, the review complete text and a rating.

Management application

On the first phase, the interaction with the information system is done via commands for a console application. Each application execution performs one and only one command, presenting the command result on the standard output.

Each command is defined using the following generic structure

{method} {path} {parameters}

where

  • the method defines the type of action to perform (e.g. GET or POST).
  • the path defines the resource on which the command is executed (e.g. /movies or /movies/123).
  • the parameters is a sequence of name=value pairs, separated by & (e.g. name=LS&description=software+laboratory).

Phase 1 requirements

For phase 1, the management application must support the following commands.

  • POST /movies - creates a new movie, given the following parameters

    • title - movie name.
    • releaseYear - movie's release year.

    This command returns the movie unique identifier.

  • GET /movies - returns a list with all movies.

  • GET /movies/{mid} - returns the detailed information for the movie identified by mid.

  • POST /movies/{mid}/ratings - submits a new rating for the movie identified by mid, given the following parameters

    • rating - integer between 1 and 5.
  • GET /movies/{mid}/ratings - returns the rating information for the movie identified by mid. This rating information include:

    • The rating average
    • The number of votes for each rating value
  • POST /movies/{mid}/reviews - creates a new review for the movie identified by mid, given the following parameters

    • reviewerName - the reviewer name
    • reviewSummary - the review summary
    • review - the complete review
    • rating - the review rating

    This command returns the review unique identifier.

  • GET /movies/{mid}/reviews - returns all the reviews for the movie identified by mid. The information for each review must not include the full review text.

  • GET /movies/{mid}/reviews/{rid} - returns the full information for the review rid of the movie identified by mid.

  • GET /tops/ratings/higher/average - returns the detail for the movie with the higher average rating.

  • GET /tops/{n}/ratings/higher/average - returns a list with the n movies with higher average ratings, sorted decreasingly.

  • GET /tops/ratings/lower/average - returns the detail for the movie with the lower average rating.

  • GET /tops/{n}/ratings/lower/average - returns a list with the n movies with the lower average ratings, sorted decreasingly.

  • GET /tops/reviews/higher/count - returns the detail for the movie with most reviews.

  • GET /tops/{n}/reviews/higher/count - returns a list with the n movies with higher review count.

Non-functional requirements

The following non-functional requirements will be highly valued.

  • Readability.
  • Testability, including on machines not belonging to the development team.

Delivery date

The project must be delivery until April 9 (end of week 5), via the creation of a 0.1.0 tag on the GitHub repository.

Clone this wiki locally