Skip to content
Pedro Felix edited this page Oct 10, 2016 · 9 revisions

Goals

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

Domain

  • A task represents some activity that must be performed (e.g "buy milk", "submit the LS project", "ensure gradlew build runs successfully", "create a tag"). A task is characterized by

    • A short name (less than 80 characters) and a description.
    • An optional due date.
    • A completion state (completed or not completed).
  • A checklist represents a sequence of tasks and is characterized by

    • The contained tasks.
    • A short name (less than 80 characters) and a description.
    • An optional due date, which can never be lower than the greatest due date of any contained task.
  • A checklist is completed when all its tasks are completed.

  • A template represents the format of a checklist. It is used to define checklists that will be instantiated multiple times. For instance, the checklist of verifications to perform before submitting a LS project phase will be similar to all four phases (e.g. "ensure project builds successfully", "check if last commit contains all changes", "create tag", ...).

Management application

On the first phase, the interaction with the information system is done via commands on 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. /checklists or /checklists/123).
  • the parameters is a sequence of name=value pairs, separated by & (e.g. name=create+tag&description=create+git+tag+on+the+last+commit). The same name can appear more than once in the sequence.

Phase 1 requirements

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

  • POST /checklists - creates a new checklist, given the following parameters

    • name - short name.
    • description - the checklist description.
    • dueDate - an optional due date for the completion of the checklist

    This command returns the checklist unique identifier.

  • GET /checklists - returns a list with all the checklists.

  • POST /checklists/{cid}/tasks - submits a new task for the checklist cid, given the following parameters

    • name - the task's short name.
    • description - the description.
    • dueDate - an optional due date for the task completion.

    Returns the task unique identifier

  • POST /checklists/{cid}/tasks/{lid} - changes the state of the task identified by lid, belonging to the checklist identified by cid, given the following parameters

    • isClosed - true or false
  • GET /checklists/{cid} - returns the detailed information for the checklist identified by cid, including its tasks and the template from which it was created (if any).

  • POST /templates - creates a new template, given the following parameters

    • name - short name.
    • description - the template description.

    This command returns the template unique identifier.

  • POST /templates/{tid}/tasks - submits a new task for the format of the template tid, given the following parameters

    • name - the task's short name.
    • description - the description.
  • POST /templates/{tid}/create - creates a new checklist with the tasks of the template tid, given the following parameters

    • name - an optional checklist name. If absent, the checklist will have the template's name.
    • description - an optional checklist description. If absent, the checklist will have the template's description.
    • dueDate - an optional due date for the checklist completion.
  • GET /templates - returns a list with all the templates.

  • GET /templates/{tid} - returns the details for the template tid, including its tasks and the checklists created from it.

  • GET /checklists/closed - returns a list with all completed checklists.

  • GET /checklists/open/sorted/duedate - returns a list with all uncompleted checklists, ordered by increasing completion date (if any).

  • GET /checklists/open/sorted/noftasks - returns a list with all uncompleted checklists, ordered by decreasing number of open tasks.

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 October 22 (end of week 5), via the creation of a 0.1.0 tag on the GitHub repository.

Clone this wiki locally