Manage tasks and projects effectively through a web-based application. This system enables task creation, assignment, progress tracking, and completion.
- Backend: Java, Spring Boot, Hibernate, Maven
- Database: PostgreSQL
- Migrations: Liquibase
- Security: JWT, OAuth2
- Third-party applications used: Dropbox, WhatsApp, Google Calendar
- Deployment: AWS, Ngrok
- ACID, CRUD and SOLID adherence
- PostgreSQL and Dropbox API intercommunication
- Internal security with JWT token and external security with OAuth2 flow
- Role allocation (ADMIN acts as a project manager who creates and assigns work, USER acts as a developer who executes tasks) π
- Soft deletion in almost all entities for data consistency
- Transactional safety for method changing database state
- WhatsApp notification usage for user's tasks
- Integration with third-party application of Google Calendar for tasks assignment
- Docker and Swagger usage
- +80% test coverage (both unit and integration testing)
Created with JaCoCo
- CI/CD checkstyle pipeline: custom & Qodana
- AWS CI for flexible and rapid updates deployment
POST/api/auth/register β User registrationPOST/api/auth/login β User authentication
GET/api/auth/google/authorize β Authenticate Google Calendar account as ADMIN to assign tasks for usersGET/api/auth/google/callback β Google Calendar account url callback
PUT/users/{id}/role β Update user role (for ADMIN only)GET/users/me β Get my profile info (for authorized users)PATCH/users/me β Update profile info (for authorized users)
POST/api/projects β Create a new project (for ADMIN only)GET/api/projects β Retrieve user's projects (ADMIN retrieves all projects, USER retrieves their own projects)GET/api/projects/{id} β Retrieve project details (ADMIN retrieves any project, USER can retrieve only their own project)PUT/api/projects/{id} β Update project (ADMIN updates any project, USER can update only their own project)DELETE/api/projects/{id} β Delete project (for ADMIN only)GET/api/projects/search?[status/end_date]={[status/end_date]} β Search projects by parameter (for ADMIN only)
POST/api/tasks β Create a new task (for ADMIN only)GET/api/tasks?projectId={projectId} β Retrieve tasks for a project (ADMIN retrieves any project's tasks, USER can retrieve only their own projects' tasks)GET/api/tasks/{id} β Retrieve task details (ADMIN retrieves any task, USER can retrieve only their own task)PUT/api/tasks/{id} β Update task (ADMIN updates any task, USER can update only their own task)DELETE/api/tasks/{id} β Delete task (for ADMIN only)GET/api/tasks/search?[priority/status]={[priority/status]} β Search tasks by parameter (for ADMIN only)
POST/api/comments β Add a comment to a task (ADMIN comments any task, USER can comment only their own task)GET/api/comments?taskId={taskId} β Retrieve comments for a task (ADMIN retrieves any task's comments, USER can retrieve only their own tasks' comments)DELETE/api/comments/{id} β Delete comment (ADMIN deletes any comment, USER can delete only their own comment)
POST/api/attachments?taskId={taskId} β Upload an attachment to a task (ADMIN uploads attachment for any task, USER can upload attachment only for their own task)GET/api/attachments?taskId={taskId} β Retrieve attachments for a task (ADMIN retrieves any task's attachments, USER can retrieve only their own tasks' attachments)GET/api/attachments/{id} β Download attachment (ADMIN retrieves any attachment, USER can retrieve only their own attachment)DELETE/api/attachments/{id} β Delete attachment (ADMIN deletes any attachment, USER can delete only their own attachment)
POST/api/labels β Create a new label (for ADMIN only)GET/api/labels β Retrieve labels (for authorized users)PUT/api/labels/{id} β Update label (for ADMIN only)DELETE/api/labels/{id} β Delete label (for ADMIN only)
We allow labels to be assigned to tasks for better organization. In our migrations we have default label colors, which are possible Google Calendar event colors (i.e. 11 TOMATO, 6 TANGERINE, 2 SAGE). You can set any label to any task.
Mind: correspondence between label color and task priority is on user since user can create their own labels. However, we highly recommend setting 2 SAGE for LOW priority tasks, 6 TANGERINE for MEDIUM priority tasks and 11 TOMATO for HIGH priority tasks.
Due to Google Calendar's policy, task's label color is visible only for ADMIN (assigner), but it can be changed in assignee's calendar manually as well.
Steps to reproduce below.
- Copy
.env.samplefile to new.envfile - Fill your
.envfile with required environment variables - Run Docker application
Mind: for prod stage, you may need to get ngrok host for appropriate callback. For this, enter
ngrok http 35.153.183.93:80into your ngrok terminal.
Just fill your .env file with appropriate variable by generating your own Dropbox access token
You can also join Dropbox in the way like we join Google Calendar API now (see below). OAuth 2.0 can give you more flexibility and safety; nevertheless, Dropbox API access token is easier to implement and works quicker locally.
Task assignment notifications are sent via WhatsApp Business API (Meta Cloud API). Also, we use Meta API message template with Google Calendar event reference in such messages.
Due to Meta's policy, the system can only send free-form text messages to a user within a 24-hour window after that user sends a message to the business account first. Each assignee must send any message to the business WhatsApp number before they can receive task notifications.
- Do not forget to fill your
.envfile with appropriate variables by setting up your own Meta API - Open WhatsApp
- Add the business number to your contacts:
+1 555 145 2899(or your configured number) - Send any message, for example
start - After that, task assignment notifications will be delivered automatically
If the 24-hour window expires, you must send a message again to reactivate notifications.
Due to Google's policy, the system can join the feature of sending Google Calendar event (task) invitation to users only manually through OAuth 2.0 standard.
Steps to reproduce below.
- Do not forget to fill your
.envfile with appropriate variables by setting up your own Google Cloud API. Mind to add your/api/auth/google/callbackendpoint asGOOGLE_REDIRECT_URI(for prod stage, we have link generated by Ngrok technology here) - Log into the system as an ADMIN
- Apply for
GET /api/auth/google/authorizeendpoint to get special link for Google Calendar integration into your profile (as a project manager) - After successful page message return to the app's main page and test the system with assigning tasks to some users
API endpoints collection is available at https://www.postman.com/astashenkova-katya-2138811/task-management-app
Documentation is available at https://documenter.getpostman.com/view/51183420/2sBXqKp1Ap
Steps to reproduce below.
- Authenticate β Run the authentication request first to obtain a token
- Connect Google Calendar β Run the authentication request first in order to get your connection link, past this link into your browser and select your email, after successfull message return back
- Explore available requests β Browse the collection folders to find grouped endpoints; each request includes a description of its purpose and expected parameters
- Send requests β Select any request, adjust path parameters or the request body as needed, click
Sendto interact with the API directly - Use it for testing β The collection can be run as a full test suite via the
Collection Runneror withNewmanfor automated testing
Documentation API is available at http://35.153.183.93/api/swagger-ui/index.html
Steps to reproduce below.
- Authenticate β Run the authentication request first to obtain a token
- Connect Google Calendar β Run the authentication request first in order to get your connection link, past this link into your browser and select your email, after successfull message return back
- Explore available requests β Each controller includes a short description of its purpose
- Send requests β Select any request, click
Try it out, adjust path parameters or the request body as needed, clickExecuteto interact with the API directly