Authors: Matic Kuhar, Rene Laufer, Filip Rap
A TO-DO application for task management supports creating and deleting categories/groups of tasks that form a whole. Each group can contain any number of smaller tasks, which can be assigned one of the statuses: Done, WIP (Work In Progress), or Unfinished. Based on the status of these subtasks, the application calculates and displays our progress in the form of a colored progress bar. Each subtask can also be deleted.
Our TO-DO application is designed for easy to track task management via task groups. These task groups allow users to organize related tasks together and track their progress more easily through easy to read visual interface. Besides simple task recording, implementing task groups goes beyond standard task tracking applications by offering structured handling and management of complex tasks. Further enhancing that is task progression tracking. By implementing status codes users can now visually see the progress of each task group by nicely color coded progress bar. All this together enables users to quickly assess how close to the completion they are with any particular task which can range from simple to more complex.
Application is intended for any user that prefers visual task management instead of monotonous alternatives. It is great for tracking simple tasks but shines when it comes to complex projects where users can easily track their progress of tasks that require multiple smaller tasks to be completed. Therefore the application will find it's way mostly into hands of students, freelancers and team managers who work on shared projects.
Applications function wise offer all the necessary functions like creating, editing and deleting both individual as well as group tasks via simple interface interactions. This highly improves productivity and ease of use, which keeps users motivated to keep their tasks recorded and organized as they won't see task management as a chore, but rather a tool that improves their productivity.
src/: Contains the project's source code.main/: Main application.test/: Test files.
docs/: Project documentation.config/: Configuration files.scripts/: Utility scripts.
- We use Prettier for code formatting.
- We follow the Airbnb JavaScript Style Guide.
- Springboot: Version 3.3.4
- MySQL: Version 8.0.0
- React: Version 17.x
- IntelliJ IDEA Ultimate: Version 2024.2.3
- VS Studio Code: Version 1.94
- Node.js (14.x)
- npm (6.x) or yarn (1.x)
- MySQL (8.x)
- JDK (11 or newest)
- Maven (3.6.x or newest)
- Clone the repository:
git clone https://github.com/Kyuhisan/RIS-Group-Project.git - Move into cloned repository:
cd RIS-Group-Project - Create MySQL DB RIS_Project:
CREATE DATABASE IF NOT EXISTS RIS_ProjectCreate a user on localhost:Set username and password in application.properties - Establish frontend:
Run
npm installto get the modules and then start the frontend environment withnpm run dev - Establish backend:
Run
BackendApplicationthrough InteliJ or some other IDE
All changes must be reviewed via Pull Requests. Tests must pass successfully before merging. Follow coding and documentation standards.
| Word | Discription |
|---|---|
| Task | Task is the main data processed by our configuration. In fact, it represents a task or simply a reminder that the user must complete and write it down in our application so he doesn't forget. In addition, the application offers him the option of appropriately marking, grouping and describing this task. |
| Task name | With task name, the user names an individual task. The naming can be arbitrary and is basically of the string type. For each new task, the program automatically assigns an ID, which is a unique key for each task. |
| Task disription | Task description represents a space where the user can describe an individual task. The description can be as long as you like and is helpful for the user to find their way around when reviewing past tasks. |
| Task group | The user has the option of grouping individual tasks into groups. It does this by assigning them a task group. Tasks with the same task group belong to the same group. This makes it easier for the user to carry out more demanding tasks, as they can be divided into several parts. |
| Task status | The task performed by the user goes through three different statuses: Unfinished, WIP (Working in process) and Done. Depending on the state of the current task, the user can mark it on the application. |
| Task action | Task action allows the user to edit or delete an individual task. |
| Use Case | ID: 20 |
|---|---|
| Goal | Change a single task. |
| Actors | End user, System. |
| Prerequisites | There is at least one task. |
| System State After PU | The system displays the changes. |
| Scenario | 1. The user opens the application. 2. The user presses one of the buttons displayed on the task. 3. The user deletes/changes name of the task. 4. The system make corresponding changes in the database. 5. The system displays the changes to the user. |
| Alternative Flows | 2.1.1 User pressed "Edit" button. 2.1.2 User enters new name for the task. 2.1.3 User confirms the change of name. 2.1.4 System changes the name of the task in database. 2.2.1 User pressed "Delete" button. 2.2.2 User confirms deletion of the task. 2.2.3 System deletes the task from database. |
| Exceptions | Error saving task information (displays an error message). |
| Use Case | ID: 30 |
|---|---|
| Goal | Display all available tasks. |
| Actors | End user, System. |
| Prerequisites | There is at least one task and one group. |
| System State After PU | The system displays all current tasks. |
| Scenario | 1. The user opens the application. 2. The system displays a list of all groups and all tasks in those groups inside the body of the application. |
| Alternative Flows | 1. There are no tasks so the system displays a message (There are no tasks to show!). 2. There are no groups, threfore there can't be any tasks. (There are no tasks to show!). |
| Exceptions | 2.1 Error loading tasks (displays an error message). |
| Primer uporabe | ID: 31 |
|---|---|
| Goal | Tasks can be searched. |
| Actors | End user, System. |
| Prerequisites | There is at least one task inside the database. |
| System State After PU | The system displays search results based on the entered query. |
| Scenario | 1. The user opens the application. 2. A search field appears at the top of the application. 3. The user enters a search query. 4. System in real time searches the database for matching results. 5. The system displays search results. |
| Alternative Flows | If no tasks match the search criteria, the system displays a message (No results found!). |
| Exceptions | 5.1 Search error (displays an error message). |
| Primer uporabe | ID: 40 |
|---|---|
| Goal | A new empty task group is created. |
| Actors | End user, System. |
| Prerequisites | The user has entered the group name. |
| System State After PU | A new group is added to the database. |
| Scenario | 1. The user opens the application. 2. The user enters the group name. 3. The user adds the group to the system. 4. The application saves the group to the database. |
| Alternative Flows | The user does not enter a group name (displays an error message). |
| Exceptions | 3.1. Error creating the group (displays an error message). 4.1. Error saving the group (displays an error message). |
| Primer uporabe | ID: 41 |
|---|---|
| Goal | Visual representation of progress in the form of a color-coded progress bar. |
| Actors | End user, System. |
| Prerequisites | At least one group exists in the system. |
| System State After PU | A color-coded progress bar appears in the user interface. |
| Scenario | 1. The user opens the application. 2. The system retrieves the list of groups from the database. 3. The system displays the groups in the user interface. 4. The system reads the statuses of tasks within each group. 5. The system calculates progress based on task statuses. 6. The system updates each group’s progress bar. 7. The system displays the updated progress. |
| Alternative Flows | The system does not find the group. |
| Exceptions | 1. Error finding the group in the database (displays an error message). 2. Error displaying progress (displays an error message). 3. Error calculating progress (displays an error message). |
| Primer uporabe | ID: 42 |
|---|---|
| Goal | Group is deleted from the system. |
| Actors | End user, System. |
| Prerequisites | A group exists that the user wants to delete. |
| System State After PU | The group is deleted from the database and removed from the system. |
| Scenario | 1. The user opens the application. 2. The user selects a group. 3. The user clicks on "delete". 4. The application sends the request to the database. 5. The application deletes the group from the database. 6. The system is updated without the deleted group. |
| Alternative Flows | Wrong group is deleted. |
| Exceptions | 1. User error during group deletion (displays an error message). 2. Error deleting the group from the database (displays an error message). |
| Primer uporabe | ID: 43 |
|---|---|
| Goal | Task is added to a group. |
| Actors | End user, System. |
| Prerequisites | 1. The group exists. 2. All data is entered. |
| System State After PU | A new task is added to the group. |
| Scenario | 1. The user opens the application. 2. The user selects the option to add a new task within a group. 3. The system displays a form. 4. The user enters the task details. 5. The user saves the task. 6. The system saves the task. 7. The system displays the updated list. |
| Alternative Flows | 1. The user does not enter all required information (displays an error message). 2. The user selects the wrong group |
| Exceptions | Error saving the task (displays an error message). |
| Primer uporabe | ID: 44 |
|---|---|
| Goal | Task status is changed. |
| Actors | End user, System. |
| Prerequisites | Task exists. |
| System State After PU | Task status is changed and progress is updated. |
| Scenario | 1. The user opens the application. 2. The user selects the option to change the task status within a group. 3. The user selects the appropriate status. 4. The system sends the request to the database. 5. The system updates the task status in the database. 6. The system recalculates progress. 7. The system displays the updated status and progress in a color-coded progress bar. |
| Alternative Flows | User selects the existing status. |
| Exceptions | 1. Error changing task status (displays an error message). 2. Error recalculating progress (displays an error message). 3. Error saving the updated status to the database (displays an error message). |
-
Task
- Role: Represents an individual task.
- Attributes:
taskID: Unique identifier for the task.taskName: Name of the task.taskStatus: Status of the task (e.g., IN_PROGRESS, FINISHED, NOT_STARTED).taskDescription: Description of the task.taskGroup: The group to which the task belongs.
-
TaskDTO
- Role: Data transfer object for tasks without unnecessary details.
- Attributes:
taskID: Unique identifier for the task.taskName: Name of the task.taskStatus: Status of the task.
-
Task Services
- Role: Business logic for managing tasks.
- Methods:
createTask(taskDTO: TaskDTO): Task: Creates a new task.editTask(taskID: int, taskDTO: TaskDTO): Task: Edits an existing task.deleteTask(taskID: int): void: Deletes a task.getTask(taskID: int): Task: Retrieves a task by ID.getAllTasks(): List: Retrieves all tasks.
-
TaskController
- Role: Manages HTTP requests for tasks.
- Methods:
addTask(taskDTO: TaskDTO): Task: Adds a new task.updateTask(taskID: int, taskDTO: TaskDTO): Task: Updates an existing task.removeTask(taskID: int): void: Removes a task.retrieveTask(taskID: int): Task: Retrieves a task by ID.retrieveAllTasks(): List: Retrieves all tasks.
-
TaskRepository
- Role: Manages the database for tasks.
- Methods:
findTaskByID(taskID: int): Task: Finds a task by ID.saveTask(task: Task): Task: Saves a task.deleteTask(taskID: int): void: Deletes a task.findAllTasks(): List: Finds all tasks.
-
Group
- Role: Represents a group of tasks.
- Attributes:
groupID: Unique identifier for the group.groupName: Name of the group.groupProgress: Progress of the group.listOfTasks: List of tasks in the group.
-
GroupDTO
- Role: Data transfer object for groups without unnecessary details.
- Attributes:
groupID: Unique identifier for the group.groupName: Name of the group.groupProgress: Progress of the group.
-
Group Services
- Role: Business logic for managing groups.
- Methods:
createGroup(groupDTO: GroupDTO): Group: Creates a new group.editGroup(groupID: int, groupDTO: GroupDTO): Group: Edits an existing group.deleteGroup(groupID: int): void: Deletes a group.getGroup(groupID: int): Group: Retrieves a group by ID.getAllGroups(): List: Retrieves all groups.
-
GroupController
- Role: Manages HTTP requests for groups.
- Methods:
addGroup(groupDTO: GroupDTO): Group: Adds a new group.updateGroup(groupID: int, groupDTO: GroupDTO): Group: Updates an existing group.removeGroup(groupID: int): void: Removes a group.retrieveGroup(groupID: int): Group: Retrieves a group by ID.retrieveAllGroups(): List: Retrieves all groups.
-
GroupRepository
- Role: Manages the database for groups.
- Methods:
findGroupByID(groupID: int): Group: Finds a group by ID.saveGroup(group: Group): Group: Saves a group.deleteGroup(groupID: int): void: Deletes a group.findAllGroups(): List: Finds all groups.
-
SearchService
- Role: Provides search functionality for tasks and groups.
- Attributes:
searchQuery: The query string for searching.
- Methods:
searchTasks(searchQuery: String): List: Searches for tasks based on the query.searchGroups(searchQuery: String): List: Searches for groups based on the query.
-
TaskStatus
- Role: Enum for task statuses.
- Values:
IN_PROGRESS: 0FINISHED: 1NOT_STARTED: 2
- createTask and createGroup: Creating new entities (tasks and groups).
- editTask and editGroup: Editing existing entities.
- deleteTask and deleteGroup: Deleting entities.
- getTask and getGroup: Retrieving individual entities by ID.
- getAllTasks and getAllGroups: Retrieving all entities.
- searchTasks and searchGroups: Searching for tasks and groups based on a query.
We have implemented a new progress bar functionality in the Advanced TO-DO List application. This feature visually represents the progress of tasks within each task group, providing a clear and immediate understanding of how much work has been completed.
The progress bar calculates the percentage of completed tasks within each task group. It dynamically updates based on the status of the tasks:
- Green: 100% completed tasks.
- Yellow: More than 50% but less than 100% completed tasks.
- Red: 50% or fewer completed tasks.
The progress bar is displayed within each task group's row in the main table, showing the exact percentage of tasks completed.
Users can now add attachments (e.g., images or documents) to tasks in the Advanced TO-DO List application. This functionality allows for storing all important information in one place.
- Users can add an attachment to a task by clicking on the attachment icon.
- Attachments can be various types of files, such as images, documents, PDFs, etc.
- Attachments are visible and accessible directly from the task, allowing easy access to all necessary information.
- Run the Application: Ensure your development server is running.
- Navigate to the Home Page: Open the application in your browser and go to the home page.
- View Task Groups: You will see a table listing all task groups. Each group will have a progress bar indicating the completion percentage of its tasks.
- Update Task Status: Change the status of tasks within a group to see the progress bar update in real-time.
- Create and Delete Tasks: Add new tasks or delete existing ones to observe changes in the progress bar.
We have implemented a new periodic task addition functionality in the Advanced TO-DO List application. This feature allows users to create tasks that automatically repeat at specified intervals, ensuring that recurring tasks are never forgotten.
The periodic task addition feature enables users to set tasks to repeat daily, weekly, or monthly. The system automatically generates new instances of these tasks based on the selected interval:
- Daily: Tasks are recreated every day.
- Weekly: Tasks are recreated every week.
- Monthly: Tasks are recreated every month.
The next occurrence of each task is calculated and displayed, helping users keep track of upcoming tasks. The system also provides a countdown to the next renewal, ensuring users are always aware of their upcoming responsibilities.
- Task Creation: Users can select the repeat interval (daily, weekly, monthly) when creating a new task.
- Automatic Renewal: The system calculates the next renewal date based on the task's creation date and the selected interval.
- Countdown Display: A countdown timer shows the time remaining until the next task renewal, providing a clear visual reminder.
This functionality ensures that recurring tasks are managed efficiently, helping users stay organized and on top of their schedules.

