The primary inspiration for developing this project was to gain hands-on experience with Spring Boot and working with APIs. I aimed to create a task management application that enables effective organization of projects and tasks among team members. This tool allows users to assign tasks to developers, add new members to projects, and provide a centralized platform for sharing information through comments on tasks. The ability to add comments can help team members communicate effectively and resolve issues more quickly. Additionally, the app includes a feature for uploading attachments to Dropbox, making document management simpler and ensuring that necessary resources are readily available to all collaborators.
This web application addresses several core challenges in project and task management, especially for collaborative teams. It offers structured organization of tasks and projects, enabling users to prioritize critical tasks and avoid missed deadlines through deadline tracking and automated email reminders. The application simplifies user management, providing role-based access, secure authentication, and the ability to manage team members within projects. It also enhances communication by allowing users to leave comments on tasks, centralizing discussions and relevant information. With Dropbox integration, users can efficiently manage files, ensuring that all necessary resources are readily available. Additionally, label-based task categorization helps users organize tasks based on topics or workflow stages, facilitating better focus and task tracking. Overall, the app streamlines project organization, boosts collaboration, and ensures that deadlines and task priorities are consistently managed.
- Can register an account.
- Can check personal information.
- Can update personal information.
- Can get all projects or get project by id.
- Can get all tasks or get tasks by id.
- Can get all labels for tasks or get labels by id.
- Can write and check comments.
- Can upload attachments and check all attachments.
- Has the ability to add, update, and delete projects, tasks, labels in the system.
- Can update user roles.
-
Spring Boot (v3.3.4)
-
Spring Data JPA (v3.3.4)
-
Liquibase (v4.9.1)
-
Tomcat (v3.3.4)
-
Spring Boot Security (v3.3.4)
-
JSON Web Token (v0.11.5)
-
MapStruck (v1.5.5.Final)
-
MySql 8 (v8.0.33)
-
JpaRepository (v3.3.4)
-
Swagger (v2.1.0)
-
Swagger UI (v3.0)
-
Testcontainers (v1.20.0)
-
Dropbox (v5.3.0)
| HTTP Request | Endpoint | Description |
|---|---|---|
| POST | /api/auth/registr |
Register a new user |
| POST | /api/auth/login |
Login an existing user |
| HTTP Request | Endpoint | Description |
|---|---|---|
| PUT | /users/{id}/role |
Update user's role |
| GET | /users/me |
Get user's personal information |
| PATCH | /users/me |
Update user's personal information |
| HTTP Request | Endpoint | Description |
|---|---|---|
| POST | /api/projects |
Create project and save to database |
| GET | /api/projects |
Get all projects for current registered user |
| GET | /api/projects/{id} |
Get project by its ID |
| PUT | /api/projects/{id} |
Update project by its ID |
| DELETE | /api/projects/{id} |
Delete project from database by its ID |
| HTTP Request | Endpoint | Description |
|---|---|---|
| POST | /api/tasks |
Create task and save to database |
| GET | /api/tasks |
Get all available tasks |
| GET | /api/tasks/{id} |
Get task by its ID |
| PUT | /api/tasks/{id} |
Update task by its ID |
| DELETE | /api/tasks/{id} |
Delete task from database by its ID |
| HTTP Request | Endpoint | Description |
|---|---|---|
| POST | /api/comments |
Create comment and save to database |
| GET | /api/comments/{taskId} |
Get all available comments for task |
| HTTP Request | Endpoint | Description |
|---|---|---|
| POST | /api/attachments/taskId |
Upload new attachments and save its ID and name to database for task |
| GET | /api/attachments/taskId |
Get all available attachments for task |
| HTTP Request | Endpoint | Description |
|---|---|---|
| POST | /api/labels |
Create label and save to database |
| GET | /api/labels |
Get all available labels |
| PUT | /api/labels/{id} |
Update label by its ID |
| DELETE | /api/labels/{id} |
Delete label from database by its ID |
- Prerequisites Docker and Docker Compose on your machine.
- Clone the Repository
git clone https://github.com/Dima23-ops5/FlowBoard
- Navigate to the project directory
cd FlowBoard - Configure Environment Variables:
- Write your date to
.envfile in the project directory to store your database credentials. This file should contain the necessary environment variables, such asDB_HOST,DB_USER, andDB_PASSWORD. - Update the
application.propertiesfile located in thesrc/main/resourcesdirectory with your specific database connection details and any other necessary configurations.
-
Set Up the Environment:
Ensure Docker and Docker Compose are installed on your system. You can configure environment variables directly in the
docker-compose.ymlfile. -
Build and Run the Application:
docker-compose build docker-compose up
-
Access the Application:
The application will be available at
http://localhost:8080/.
To explore and test the API endpoints, you can use Swagger. Swagger provides interactive API documentation that allows you to test endpoints directly from the browser.
task-management.postman_collection.json
You can view the instructional video via this link : https://www.loom.com/share/8c874b3104fc436ab7494d383ea1e5b6?sid=5cdee694-22ea-4e5b-a283-346bfe1b5cfa
- Dropbox API integration
Integrating the Dropbox API was one of the more challenging aspects of this project. This was my first experience working with a third-party API, and it required a significant investment of time to fully understand how to implement it correctly. Initially, I struggled with understanding the authentication process and the correct way to handle file uploads and retrievals via the API, as this process was new to me.
To overcome these challenges, I dedicated time to thoroughly reviewing Dropbox’s API documentation, which provided valuable details on authentication methods, endpoint usage, and best practices for integration. Additionally, I watched several instructional videos on YouTube, which helped clarify the workflow and provided practical examples of Dropbox API implementation. Through persistence and careful study, I was able to successfully integrate Dropbox into my application, allowing users to upload and access attachments seamlessly within the app. This experience not only enhanced the functionality of the project but also expanded my skillset in working with external APIs, a critical skill for developing more complex applications in the future.
For any questions or suggestions, feel free to reach out:
- GitHub: Dima23-ops5
- email: dmmhnk23@gmail.com
