Skip to content

Commit a9aa222

Browse files
committed
pdf HLD and LLD
1 parent 012d267 commit a9aa222

4 files changed

Lines changed: 1542 additions & 0 deletions

File tree

README.md

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,168 @@ The frontend can be run with:
6969
npm run dev
7070
```
7171

72+
## User Interface Steps
73+
74+
### 1. Authentication
75+
- **Login Page**: Access via http://localhost (or http://localhost/login)
76+
- Enter username/email and password
77+
- Click "Login" button
78+
- On success, redirects to dashboard
79+
- On failure, shows error message
80+
81+
- **Register Page**: Access via http://localhost/register
82+
- Fill in registration form (username, email, password, first name, last name)
83+
- Click "Register" button
84+
- On success, redirects to login page
85+
- On failure, shows validation errors
86+
87+
### 2. Dashboard
88+
- Access via http://localhost/dashboard
89+
- Shows overview widgets:
90+
- Total projects count
91+
- Total issues count (by status)
92+
- Recent activity
93+
- Quick navigation to projects and issues
94+
95+
### 3. Projects Management
96+
- Access via http://localhost/projects
97+
- **View Projects**: List of all projects with pagination
98+
- **Create Project**: Click "New Project" button
99+
- Fill project form (key, name, description)
100+
- Click "Create" button
101+
- **Edit Project**: Click edit icon on project row
102+
- Modify project details
103+
- Click "Update" button
104+
- **Delete Project**: Click delete icon on project row
105+
- Confirm deletion in modal dialog
106+
- **Project Details**: Click on project name
107+
- Shows project overview and member list
108+
- Manage project members (add/remove users)
109+
110+
### 4. Issues Management
111+
- Access via http://localhost/issues
112+
- **View Issues**: List of all issues with filtering and pagination
113+
- Filter by project, status, priority, assignee
114+
- Search by key or summary
115+
- **Kanban Board**: Switch to board view for visual workflow management
116+
- Drag and drop issues between status columns (TODO, IN_PROGRESS, IN_REVIEW, DONE)
117+
- **Create Issue**: Click "New Issue" button
118+
- Fill issue form (project, summary, description, type, priority, assignee)
119+
- Click "Create" button
120+
- **Edit Issue**: Click on issue key or edit icon
121+
- Modify issue details
122+
- Click "Update" button
123+
- **Issue Detail**: Click on issue key in list or board
124+
- View full issue details
125+
- Add comments
126+
- Upload attachments
127+
- View activity history
128+
- Change status via workflow transitions
129+
130+
### 5. Profile Management
131+
- Access via http://localhost/profile (via user dropdown in header)
132+
- View and edit profile information
133+
- Change password
134+
- Manage notification preferences
135+
136+
### 6. Admin Panel
137+
- Access via http://localhost/admin (requires ADMIN role)
138+
- User management:
139+
- List all users
140+
- Create/edit/delete users
141+
- Assign roles to users
142+
- System monitoring:
143+
- View service health status
144+
- Check API response times
145+
- Monitor error rates
146+
147+
## API Details
148+
149+
### API Gateway (Port 8080)
150+
- Entry point for all client requests
151+
- Routes to appropriate microservices based on path
152+
- Handles JWT authentication and authorization
153+
- Implements rate limiting and request logging
154+
155+
### Authentication Service (Port 8081)
156+
**Base URL**: `http://localhost:8081/api/auth`
157+
158+
| Method | Endpoint | Description | Request Body | Response |
159+
|--------|----------|-------------|--------------|----------|
160+
| POST | `/login` | Authenticate user and generate JWT tokens | `{ "usernameOrEmail": "string", "password": "string" }` | `{ "accessToken": "string", "refreshToken": "string", "expiresIn": "int" }` |
161+
| POST | `/register` | Register new user | `{ "username": "string", "email": "string", "password": "string", "firstName": "string", "lastName": "string" }` | `"User registered successfully"` |
162+
| POST | `/refresh` | Refresh access token using refresh token | N/A (query param: `refreshToken`) | `{ "accessToken": "string", "refreshToken": "string", "expiresIn": "int" }` |
163+
164+
### User Service (Port 8082)
165+
**Base URL**: `http://localhost:8082/api/users`
166+
167+
| Method | Endpoint | Description | Request Body | Response |
168+
|--------|----------|-------------|--------------|----------|
169+
| POST | `/` | Create new user | `UserDTO` | `UserDTO` |
170+
| GET | `/{id}` | Get user by ID | N/A | `UserDTO` |
171+
| GET | `/username/{username}` | Get user by username | N/A | `UserDTO` |
172+
| GET | `/email/{email}` | Get user by email | N/A | `UserDTO` |
173+
| GET | `/` | Get all users (paginated) | Query: `page` (int), `size` (int) | `List<UserDTO>` |
174+
| PUT | `/{id}` | Update user | `UserDTO` | `UserDTO` |
175+
| DELETE | `/{id}` | Delete user | N/A | `204 No Content` |
176+
| GET | `/exists/username/{username}` | Check if username exists | N/A | `boolean` |
177+
| GET | `/exists/email/{email}` | Check if email exists | N/A | `boolean` |
178+
179+
### Project Service (Port 8083)
180+
**Base URL**: `http://localhost:8083/api/projects`
181+
182+
| Method | Endpoint | Description | Request Body | Response |
183+
|--------|----------|-------------|--------------|----------|
184+
| POST | `/` | Create new project | `ProjectDTO` | `ProjectDTO` |
185+
| GET | `/{id}` | Get project by ID | N/A | `ProjectDTO` |
186+
| GET | `/key/{key}` | Get project by key | N/A | `ProjectDTO` |
187+
| GET | `/` | Get all projects (paginated) | Query: `page` (int), `size` (int) | `List<ProjectDTO>` |
188+
| PUT | `/{id}` | Update project | `ProjectDTO` | `ProjectDTO` |
189+
| DELETE | `/{id}` | Delete project | N/A | `204 No Content` |
190+
| POST | `/{projectId}/members` | Add member to project | `ProjectMemberDTO` | `ProjectMemberDTO` |
191+
| DELETE | `/{projectId}/members/{userId}` | Remove member from project | N/A | `204 No Content` |
192+
| GET | `/{projectId}/members` | Get all members of project | N/A | `List<ProjectMemberDTO>` |
193+
| GET | `/user/{userId}/projects` | Get projects for user | N/A | `List<ProjectMemberDTO>` |
194+
195+
### Issue Service (Port 8084)
196+
**Base URL**: `http://localhost:8084/api/issues`
197+
198+
| Method | Endpoint | Description | Request Body | Response |
199+
|--------|----------|-------------|--------------|----------|
200+
| POST | `/` | Create new issue | `IssueDTO` | `IssueDTO` |
201+
| GET | `/{id}` | Get issue by ID | N/A | `IssueDTO` |
202+
| GET | `/{key}/project/{projectId}` | Get issue by key and project ID | N/A | `IssueDTO` |
203+
| GET | `/` | Get all issues (paginated) | Query: `page` (int), `size` (int) | `List<IssueDTO>` |
204+
| GET | `/project/{projectId}` | Get issues by project ID | N/A | `List<IssueDTO>` |
205+
| GET | `/assignee/{assigneeId}` | Get issues by assignee ID | N/A | `List<IssueDTO>` |
206+
| GET | `/reporter/{reporterId}` | Get issues by reporter ID | N/A | `List<IssueDTO>` |
207+
| PUT | `/{id}` | Update issue | `IssueDTO` | `IssueDTO` |
208+
| DELETE | `/{id}` | Delete issue | N/A | `204 No Content` |
209+
| POST | `/{issueId}/comments` | Add comment to issue | `CommentDTO` | `CommentDTO` |
210+
| GET | `/{issueId}/comments` | Get comments for issue | N/A | `List<CommentDTO>` |
211+
212+
### Notification Service (Port 8085)
213+
**Base URL**: `http://localhost:8085/api/notifications`
214+
215+
| Method | Endpoint | Description | Request Body | Response |
216+
|--------|----------|-------------|--------------|----------|
217+
| GET | `/` | Get notifications for current user (paginated) | Query: `page` (int), `size` (int), `unreadOnly` (boolean) | `List<NotificationDTO>` |
218+
| PUT | `/{id}/read` | Mark notification as read | N/A | `NotificationDTO` |
219+
| PUT | `/read-all` | Mark all notifications as read | N/A | `200 OK` |
220+
| DELETE | `/{id}` | Delete notification | N/A | `204 No Content` |
221+
| DELETE | `/` | Delete all notifications | N/A | `204 No Content` |
222+
72223
## Database
73224

74225
The platform uses MySQL 8.0. The database schema is managed by Flyway migrations located in each service's `src/main/resources/db/migration` directory.
75226

227+
Each service has its own database schema:
228+
- **auth-service**: users, roles, user_roles tables
229+
- **user-service**: user_profiles table (extends auth users)
230+
- **project-service**: projects, project_members tables
231+
- **issue-service**: issue_types, issues, labels, issue_labels, issue_comments, issue_attachments, workflows, workflow_transitions tables
232+
- **notification-service**: notifications table
233+
76234
## API Documentation
77235

78236
Once the services are running, you can access the Swagger UI for each service at:
@@ -89,6 +247,11 @@ To run tests for a service:
89247
./mvnw test
90248
```
91249

250+
To run frontend tests:
251+
```bash
252+
npm test
253+
```
254+
92255
## CI/CD
93256

94257
The platform includes a GitHub Actions workflow for continuous integration and deployment. The workflow runs on every push to the main branch and includes:

docs/HLD.pdf

15 KB
Binary file not shown.

0 commit comments

Comments
 (0)