The goal was to create the back-end (REST API) part of the task management application (like Trello) with no authentication and authorization required.
The main entity is a Project (or Board) that always has its name and contains multiple Columns. A Column always has a name, contains Tasks and represents their status.
When a Project is created at least one "default" Column must be created in it as well.
A Task can be created only inside the Column and can be moved within the Column (change priority) or across the Columns (change status).
A Task can have Comments that could contain questions or Task clarification information.
User must be able to manage (create, read, update, delete) Projects:
- Projects in a list are sorted by name.
Project must contain at least one column:
- the first column created by default when a Project created;
- the last column cannot be deleted.
User must be able to manage (create, read, update, delete) Columns:
- Columns in a list are sorted by their position specified by User;
- Column name must be unique;
- when a Column is deleted its tasks are moved to the Column to the left of the current.
User must be able to move a Column left or right.
User must be able to rename a Column
User must be able to manage (create, read, update, delete) Tasks:
- Task can be created only within a Column;
- User can view Tasks in all Columns of a Project;
- User can update the name and the description of the Task;
- User can delete the Task, with all Comments related to this Task.
User must be able to move a Task across the Columns (left or right) to change its status.
User must be able to move a Task within the Column (up and down) to prioritize it.
User must be able to manage (create, read, update, delete) Comments:
- Comment can be created only within a Task;
- Comments in a list are sorted by their creation date (from newest to oldest);
- User can view Comments related to a Task;
- User can update the Comment text;
- User can delete the Comment.
Project
- Name (1-500 characters)
- Description (0-1000 characters)
Column
- Name/Status (1-255 characters, unique )
Task
- Name (1-500 characters)
- Description (0-5000 characters)
Comment
- Text (1-5000 characters)
To start Task-Management application locally, you need to:
make dev-up
make run
To start Task-Management application in simple production:
make prod-up
Also application uses these environment variables:
PORT
: port to run app on. Example: PORT=8080ROOT_URL
: scheme and host of a running app. Example:ROOT_URL="http://localhost"
DATABASE_URL
: data source name (DSN) for a PostgreSQL database. Example:DATABASE_URL='postgres://user:password@localhost:5432/database'
MIGRATE
: specify if database needs to be migrated every time app is started. Example:MIGRATE=true