# locnpd/swp391-jira-github-integration architecture

> Architecture diagram of the GitHub repository locnpd/swp391-jira-github-integration, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/locnpd/swp391-jira-github-integration
- Repository: https://github.com/locnpd/swp391-jira-github-integration

## Overview

SWP391 is a course-project progress tool: users sign in, manage classes and groups, configure Jira/GitHub integrations, and review synchronized work and progress. The graph follows the React routes into the Spring REST API, then highlights the documented Jira sync and the sampled requirement→story→subtask query stages. It also preserves administration, class/group management, GitHub commit reporting, and integration configuration. The excerpts do not expose most controller-to-service or persistence wiring, so those connections are represented at subsystem level; optional GitHub integration links are dashed.

Main entry points: [`frontend/react-basic/src/App.jsx`](https://github.com/locnpd/swp391-jira-github-integration/blob/main/frontend/react-basic/src/App.jsx) (Role-based routes), [`backend/src/main/java/com/swp391/backend/controller`](https://github.com/locnpd/swp391-jira-github-integration/tree/main/backend/src/main/java/com/swp391/backend/controller) (Group and integration API), [`frontend/react-basic/src/pages`](https://github.com/locnpd/swp391-jira-github-integration/tree/main/frontend/react-basic/src/pages) (Group dashboards), [`backend/src/main/java/com/swp391/backend/service/JiraManualSyncService.java`](https://github.com/locnpd/swp391-jira-github-integration/blob/main/backend/src/main/java/com/swp391/backend/service/JiraManualSyncService.java) (Jira issue sync)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_app["Role-based routes<br/>[App.jsx]"]
  node_adminui["Admin screens"]
  node_groupui["Group dashboards"]
  node_workui["Work and reports"]
  node_jiraui["Jira setup and previews"]
end

subgraph group_access["Access and administration"]
  node_authapi["Authentication API"]
  node_security["Authorization checks"]
  node_adminapi["Course administration API"]
end

subgraph group_course["Course workspace"]
  node_courseops["Class and group services"]
  node_groupapi["Group and integration API"]
end

subgraph group_progress["Progress and integrations"]
  node_jirasync["Jira issue sync"]
  node_jiraclient["Jira REST client<br/>[JiraClient.java]"]
  node_githubsync["GitHub sync and stats"]
  node_dashboardapi["Progress query API"]
  node_epics["Requirement dashboard"]
  node_stories["Story and subtask views"]
  node_mywork["Personal subtasks"]
end

node_admin(("Administrator"))
node_lecturer(("Lecturer"))
node_student(("Student or leader"))
node_sql[("SQL Server")]
node_jira["Jira Cloud"]
node_github["GitHub"]

node_admin -->|"uses"| node_app
node_lecturer -->|"uses"| node_app
node_student -->|"uses"| node_app
node_app -->|"routes"| node_adminui
node_app -->|"routes"| node_groupui
node_app -->|"routes"| node_workui
node_app -->|"routes"| node_jiraui
node_adminui -->|"requests"| node_adminapi
node_groupui -->|"requests"| node_groupapi
node_jiraui -->|"configures and previews"| node_groupapi
node_workui -->|"requests"| node_dashboardapi
node_app -->|"signs in"| node_authapi
node_authapi -->|"checks identity"| node_security
node_adminapi -->|"manages course data"| node_courseops
node_groupapi -->|"checks group access"| node_security
node_groupapi -->|"manages groups"| node_courseops
node_groupapi -->|"starts sync"| node_jirasync
node_jirasync -->|"fetches issues"| node_jiraclient
node_jiraclient -->|"calls REST API"| node_jira
node_jirasync -->|"persists synchronized data"| node_sql
node_dashboardapi -->|"queries requirements"| node_epics
node_dashboardapi -->|"queries stories"| node_stories
node_dashboardapi -->|"queries assigned work"| node_mywork
node_epics -->|"reads progress data"| node_sql
node_stories -->|"reads tasks"| node_sql
node_mywork -->|"reads assigned subtasks"| node_sql
node_adminapi -->|"stores course data"| node_sql
node_groupapi -->|"stores group configuration"| node_sql
node_groupui -.->|"views commit activity"| node_githubsync
node_githubsync -.->|"fetches commits"| node_github
node_githubsync -.->|"stores commit data"| node_sql

click node_app "https://github.com/locnpd/swp391-jira-github-integration/blob/main/frontend/react-basic/src/App.jsx"
click node_adminui "https://github.com/locnpd/swp391-jira-github-integration/tree/main/frontend/react-basic/src/pages"
click node_groupui "https://github.com/locnpd/swp391-jira-github-integration/tree/main/frontend/react-basic/src/pages"
click node_workui "https://github.com/locnpd/swp391-jira-github-integration/tree/main/frontend/react-basic/src/pages"
click node_authapi "https://github.com/locnpd/swp391-jira-github-integration/blob/main/backend/src/main/java/com/swp391/backend/controller/AuthController.java"
click node_security "https://github.com/locnpd/swp391-jira-github-integration/blob/main/backend/src/main/java/com/swp391/backend/security/SecurityService.java"
click node_adminapi "https://github.com/locnpd/swp391-jira-github-integration/tree/main/backend/src/main/java/com/swp391/backend/controller"
click node_courseops "https://github.com/locnpd/swp391-jira-github-integration/tree/main/backend/src/main/java/com/swp391/backend/service"
click node_jiraui "https://github.com/locnpd/swp391-jira-github-integration/tree/main/frontend/react-basic/src/pages"
click node_groupapi "https://github.com/locnpd/swp391-jira-github-integration/tree/main/backend/src/main/java/com/swp391/backend/controller"
click node_jirasync "https://github.com/locnpd/swp391-jira-github-integration/blob/main/backend/src/main/java/com/swp391/backend/service/JiraManualSyncService.java"
click node_jiraclient "https://github.com/locnpd/swp391-jira-github-integration/blob/main/backend/src/main/java/com/swp391/backend/integration/jira/JiraClient.java"
click node_githubsync "https://github.com/locnpd/swp391-jira-github-integration/tree/main/backend/src/main/java/com/swp391/backend/service"
click node_dashboardapi "https://github.com/locnpd/swp391-jira-github-integration/tree/main/backend/src/main/java/com/swp391/backend/controller"
click node_epics "https://github.com/locnpd/swp391-jira-github-integration/blob/main/backend/src/main/java/com/swp391/backend/service/impl/RequirementQueryServiceImpl.java"
click node_stories "https://github.com/locnpd/swp391-jira-github-integration/blob/main/backend/src/main/java/com/swp391/backend/service/impl/StoryQueryServiceImpl.java"
click node_mywork "https://github.com/locnpd/swp391-jira-github-integration/blob/main/backend/src/main/java/com/swp391/backend/service/impl/MyWorkQueryServiceImpl.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_adminui,node_groupui,node_workui,node_jiraui toneBlue
class node_authapi,node_security,node_adminapi,node_sql toneAmber
class node_courseops,node_groupapi toneMint
class node_jirasync,node_jiraclient,node_githubsync,node_dashboardapi,node_epics,node_stories,node_mywork toneRose
class node_admin,node_lecturer,node_student,node_jira,node_github toneIndigo
```

## Components

### Web application

- [Role-based routes](https://github.com/locnpd/swp391-jira-github-integration/blob/main/frontend/react-basic/src/App.jsx): `frontend/react-basic/src/App.jsx`
- [Admin screens](https://github.com/locnpd/swp391-jira-github-integration/tree/main/frontend/react-basic/src/pages): `frontend/react-basic/src/pages`
- [Group dashboards](https://github.com/locnpd/swp391-jira-github-integration/tree/main/frontend/react-basic/src/pages): `frontend/react-basic/src/pages`
- [Work and reports](https://github.com/locnpd/swp391-jira-github-integration/tree/main/frontend/react-basic/src/pages): `frontend/react-basic/src/pages`
- [Jira setup and previews](https://github.com/locnpd/swp391-jira-github-integration/tree/main/frontend/react-basic/src/pages): `frontend/react-basic/src/pages`

### Access and administration

- [Authentication API](https://github.com/locnpd/swp391-jira-github-integration/blob/main/backend/src/main/java/com/swp391/backend/controller/AuthController.java): `backend/src/main/java/com/swp391/backend/controller/AuthController.java`
- [Authorization checks](https://github.com/locnpd/swp391-jira-github-integration/blob/main/backend/src/main/java/com/swp391/backend/security/SecurityService.java): `backend/src/main/java/com/swp391/backend/security/SecurityService.java`
- [Course administration API](https://github.com/locnpd/swp391-jira-github-integration/tree/main/backend/src/main/java/com/swp391/backend/controller): `backend/src/main/java/com/swp391/backend/controller`

### Course workspace

- [Class and group services](https://github.com/locnpd/swp391-jira-github-integration/tree/main/backend/src/main/java/com/swp391/backend/service): `backend/src/main/java/com/swp391/backend/service`
- [Group and integration API](https://github.com/locnpd/swp391-jira-github-integration/tree/main/backend/src/main/java/com/swp391/backend/controller): `backend/src/main/java/com/swp391/backend/controller`

### Progress and integrations

- [Jira issue sync](https://github.com/locnpd/swp391-jira-github-integration/blob/main/backend/src/main/java/com/swp391/backend/service/JiraManualSyncService.java): `backend/src/main/java/com/swp391/backend/service/JiraManualSyncService.java`
- [Jira REST client](https://github.com/locnpd/swp391-jira-github-integration/blob/main/backend/src/main/java/com/swp391/backend/integration/jira/JiraClient.java): `backend/src/main/java/com/swp391/backend/integration/jira/JiraClient.java`
- [GitHub sync and stats](https://github.com/locnpd/swp391-jira-github-integration/tree/main/backend/src/main/java/com/swp391/backend/service): `backend/src/main/java/com/swp391/backend/service`
- [Progress query API](https://github.com/locnpd/swp391-jira-github-integration/tree/main/backend/src/main/java/com/swp391/backend/controller): `backend/src/main/java/com/swp391/backend/controller`
- [Requirement dashboard](https://github.com/locnpd/swp391-jira-github-integration/blob/main/backend/src/main/java/com/swp391/backend/service/impl/RequirementQueryServiceImpl.java): `backend/src/main/java/com/swp391/backend/service/impl/RequirementQueryServiceImpl.java`
- [Story and subtask views](https://github.com/locnpd/swp391-jira-github-integration/blob/main/backend/src/main/java/com/swp391/backend/service/impl/StoryQueryServiceImpl.java): `backend/src/main/java/com/swp391/backend/service/impl/StoryQueryServiceImpl.java`
- [Personal subtasks](https://github.com/locnpd/swp391-jira-github-integration/blob/main/backend/src/main/java/com/swp391/backend/service/impl/MyWorkQueryServiceImpl.java): `backend/src/main/java/com/swp391/backend/service/impl/MyWorkQueryServiceImpl.java`

### Other components

- **Administrator**
- **Lecturer**
- **Student or leader**
- **SQL Server**
- **Jira Cloud**
- **GitHub**

## Connections

- Administrator → Role-based routes: uses
- Lecturer → Role-based routes: uses
- Student or leader → Role-based routes: uses
- Role-based routes → Admin screens: routes
- Role-based routes → Group dashboards: routes
- Role-based routes → Work and reports: routes
- Role-based routes → Jira setup and previews: routes
- Admin screens → Course administration API: requests
- Group dashboards → Group and integration API: requests
- Jira setup and previews → Group and integration API: configures and previews
- Work and reports → Progress query API: requests
- Role-based routes → Authentication API: signs in
- Authentication API → Authorization checks: checks identity
- Course administration API → Class and group services: manages course data
- Group and integration API → Authorization checks: checks group access
- Group and integration API → Class and group services: manages groups
- Group and integration API → Jira issue sync: starts sync
- Jira issue sync → Jira REST client: fetches issues
- Jira REST client → Jira Cloud: calls REST API
- Jira issue sync → SQL Server: persists synchronized data
- Progress query API → Requirement dashboard: queries requirements
- Progress query API → Story and subtask views: queries stories
- Progress query API → Personal subtasks: queries assigned work
- Requirement dashboard → SQL Server: reads progress data
- Story and subtask views → SQL Server: reads tasks
- Personal subtasks → SQL Server: reads assigned subtasks
- Course administration API → SQL Server: stores course data
- Group and integration API → SQL Server: stores group configuration
- Group dashboards → GitHub sync and stats: views commit activity
- GitHub sync and stats → GitHub: fetches commits
- GitHub sync and stats → SQL Server: stores commit data
