The Project aims to implement a Kanban Board in the form of a web-application.
Table of Contents
- Alessandro Riva, mat. ------
- Lorenzo Olearo, mat. ------
The committed sources consists in a Java Maven project thus they can be imported
into any Java IDE that supports this project managment tool. Once the project is
correctly imported, it is foundamental to resolve its dependencies throught the
attached pom.xml file.
Having resolved all the project's dependencies, the application can be run
throught the class DsKanboardApplication.java
. If started successfully, the
Kanban Board can now be accessed at localhost:8080
.
At first access, the application will prompt the user for a username by displaying a modal login window, this username will later be used by the system to mark the author of each tile and their respective edits. The active user can be changed at any time.
The system is capable of handling multiple boards, once they are created with the dedicated button, the user can switch the displayed board by using a select input.
Each and every time any component of a board is updated by a user, the state
of the aforementioned board is saved throught a persistence system, in this
case, this is done by writing the changes to the server disk.
All the boards data are saved into the ~/ds-kanboard
folder of the running
server unless a different path is specified as shell argument.
The system rapresents three different types of tiles:
- Text tile
- Image tile
- File tile
The image of an image tile cannot exceed 15MB, if its resolution is above 900x900, the image will be risized by the server. The same maximum file size is applied to files uploaded for any file tile. It is important to note that once one of those tiles is created, it cannot be converted in any of the other two types.
Through a non-standard header namely called If-Modified-Since-Millis
added to
any request for a board, the server is able to process and answer the client
request with the board. Depending on the value of the aforementioned header in
the client request, the server will return a different response:
NOT_MODIFIED
if theIf-Modified-Since-Millis
contained in the client request header coincides to the one saved by the server.- The entire board if the
If-Modified-Since-Millis
contained in the client request header is prior to the one saved by the server. When the server sends the board to the client, it sets another non-standard headerLast-Modified-Millis
, this value is then saved by the client to be sent at any later request.
The format of the custom header is the following:
"EEE, dd MMM yyyy HH:mm:ss.SSS zzz" (e.g. "Sun, 20 Jul 1969 16:17:00.000 EDT")
The user interface allows for tiles in the same column to be swapped and for any tile in an active column to be moved active column. The user interface also allows for active columns in the same board to be swapped.
- Creates a new Board
POST /api/boards/add/
- Returns the Board with id {boardID}
GET /api/{boardID}/
- Returns the list of all the boards
GET /api/boards/
- Creates a new Column in the Board with id {boardID}
POST /api/{boardID}/columns/add/
- Returns the list of all the columns in a Board with id {boardID}
GET /api/{boardID}/columns/
- Return the Column with title {columnTitle} in the Board with id {boardID}
GET /api/{boardID}/{columnTitle}/
- Edits the Column with title {columnTitle} in the Board with id {boardID}
PUT /api/{boardID}/{columnTitle}/edit/
- Creates a new Tile in the Column with title {columnTitle} in the board with id
{boardID}
POST /api/{boardID}/{columnTitle}/tiles/add/
- Returns the list of all the tiles in the Column with title {columnTitle} in
the board with id {boardID}
GET /api/{boardID}/{columnTitle}/tiles/
- Returns the Tile with id {tileID} in the Column with title {columnTitle} in the
Board with id {boardID}
GET /api/{boardID}/{columnTitle}/{tileID}/
- Edits the Tile with id {tileID} in the Column with title {columnTitle} in the
Board with id {boardID}
PUT /api/{boardID}/{columnTitle}/{tileID}/edit/
- Moves a Tile from a Column with title {columnTitle} to another in the same Board
with id {boardID}
PUT /api/{boardID}/{columnTitle}/{tileID}/move/
- Swaps the position of two columns in the Board with id {boardID}
PUT /api/{boardID}/columns/swap/
- Swaps the position of two tiles in the Column with title {columnTitle} in the
Board with id {boardID}
PUT /api/{boardID}/{columnTitle}/tiles/swap/
- Deletes the Column with title {columnTitle} in the board with id {boardID}
DELETE /api/{boardID}/{columnTitle}/delete/
- Deletes the Tile with id {tileID} in the Column with title {columnTitle} in
the Board with id {boardID}
DELETE /api/{boardID}/{columnTitle}/{tileID}/delete/
- Returns the list of all the boards without the columns data
GET /api/boards/headers/
By clicking on the question mark icon, the user will land on a help page where all the UI elements are explained.