# sunilos/springboot architecture

> Architecture diagram of the GitHub repository sunilos/springboot, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sunilos/springboot
- Repository: https://github.com/sunilos/springboot

## Overview

SOSSpringBoot is a Spring Boot REST application for marksheets, users, roles, and document metadata and file content. Clients call domain APIs; controllers delegate to services, which persist through a custom EntityManager DAO for marksheets, users, and roles, or Spring Data repositories for documents. User login returns a JWT, and the documented interceptor checks protected requests. The README also describes validation and actuator endpoints, but their implementation is not represented in the sampled source. Links reflect excerpted calls and README statements; unsampled wiring is not inferred.

Main entry points: [`src/main/java/com/sunilos/springboot/ctl/UserCtl.java`](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/ctl/UserCtl.java) (User API), [`src/main/java/com/sunilos/springboot/service/DocumentServiceImpl.java`](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/service/DocumentServiceImpl.java) (Document Service), [`src/main/java/com/sunilos/springboot/ctl/MarksheetCtl.java`](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/ctl/MarksheetCtl.java) (Marksheet API), [`src/main/java/com/sunilos/springboot/ctl/RoleCtl.java`](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/ctl/RoleCtl.java) (Role API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_marksheetctl["Marksheet API<br/>[MarksheetCtl.java]"]
  node_userctl["User API<br/>[UserCtl.java]"]
  node_rolectl["Role API<br/>[RoleCtl.java]"]
  node_documentctl["Document API<br/>[DocumentCtl.java]"]
  node_actuator["Actuator Endpoints"]
end

subgraph group_services["Domain Services"]
  node_marksheetservice["Marksheet Service"]
  node_userservice["User Service"]
  node_roleservice["Role Service"]
  node_documentservice["Document Service"]
end

subgraph group_persistence["Persistence"]
  node_marksheetdao["Marksheet DAO"]
  node_userdao["User DAO<br/>[UserDAOImpl.java]"]
  node_roledao["Role DAO<br/>[RoleDAOImpl.java]"]
  node_docrepo["Document Repository"]
  node_summaryrepo["Summary Repository"]
  node_marksheetentity["Marksheet Entity<br/>[Marksheet.java]"]
  node_userentity["User Entity<br/>[User.java]"]
  node_roleentity["Role Entity<br/>[Role.java]"]
  node_documententity["Document Entity<br/>[Document.java]"]
  node_summaryentity["Document Summary"]
  node_mysqldb[("MySQL Database")]
end

subgraph group_security["Authentication"]
  node_jwtutil["JWT Utility<br/>[JwtUtil.java]"]
  node_frontctl["JWT Interceptor<br/>[FrontCtl.java]"]
end

node_client(("API Client"))

node_client -->|"calls API"| node_marksheetctl
node_client -->|"calls API"| node_userctl
node_client -->|"calls API"| node_rolectl
node_client -->|"calls API"| node_documentctl
node_client -->|"calls API"| node_actuator
node_marksheetctl -->|"delegates to"| node_marksheetservice
node_userctl -->|"delegates to"| node_userservice
node_rolectl -->|"delegates to"| node_roleservice
node_documentctl -->|"delegates to"| node_documentservice
node_userctl -->|"uses tokens"| node_jwtutil
node_frontctl -.->|"validates tokens"| node_jwtutil
node_marksheetservice -->|"delegates to"| node_marksheetdao
node_userservice -->|"delegates to"| node_userdao
node_roleservice -->|"delegates to"| node_roledao
node_documentservice -->|"reads and writes"| node_docrepo
node_documentservice -->|"searches summaries"| node_summaryrepo
node_marksheetdao -->|"persists entities"| node_mysqldb
node_userdao -->|"persists entities"| node_mysqldb
node_roledao -->|"persists entities"| node_mysqldb
node_docrepo -->|"stores documents"| node_mysqldb
node_summaryrepo -->|"reads summaries"| node_mysqldb

click node_marksheetctl "https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/ctl/MarksheetCtl.java"
click node_userctl "https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/ctl/UserCtl.java"
click node_rolectl "https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/ctl/RoleCtl.java"
click node_documentctl "https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/ctl/DocumentCtl.java"
click node_marksheetservice "https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/service/MarksheetServiceImpl.java"
click node_userservice "https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/service/UserServiceImpl.java"
click node_roleservice "https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/service/RoleServiceImpl.java"
click node_documentservice "https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/service/DocumentServiceImpl.java"
click node_marksheetdao "https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/dao/MarksheetDAOImpl.java"
click node_userdao "https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/dao/UserDAOImpl.java"
click node_roledao "https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/dao/RoleDAOImpl.java"
click node_docrepo "https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/dao/DocumentRespositoryInt.java"
click node_summaryrepo "https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/dao/DocumentSummaryRespositoryInt.java"
click node_marksheetentity "https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/bean/Marksheet.java"
click node_userentity "https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/bean/User.java"
click node_roleentity "https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/bean/Role.java"
click node_documententity "https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/bean/Document.java"
click node_summaryentity "https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/bean/DocumentSummary.java"
click node_jwtutil "https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/ctl/JwtUtil.java"
click node_frontctl "https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/ctl/FrontCtl.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_marksheetctl,node_userctl,node_rolectl,node_documentctl,node_actuator,node_client toneBlue
class node_marksheetservice,node_userservice,node_roleservice,node_documentservice toneAmber
class node_marksheetdao,node_userdao,node_roledao,node_docrepo,node_summaryrepo,node_marksheetentity,node_userentity,node_roleentity,node_documententity,node_summaryentity,node_mysqldb toneMint
class node_jwtutil,node_frontctl toneRose
```

## Components

### REST API

- [Marksheet API](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/ctl/MarksheetCtl.java): `src/main/java/com/sunilos/springboot/ctl/MarksheetCtl.java`
- [User API](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/ctl/UserCtl.java): `src/main/java/com/sunilos/springboot/ctl/UserCtl.java`
- [Role API](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/ctl/RoleCtl.java): `src/main/java/com/sunilos/springboot/ctl/RoleCtl.java`
- [Document API](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/ctl/DocumentCtl.java): `src/main/java/com/sunilos/springboot/ctl/DocumentCtl.java`
- **Actuator Endpoints**

### Domain Services

- [Marksheet Service](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/service/MarksheetServiceImpl.java): `src/main/java/com/sunilos/springboot/service/MarksheetServiceImpl.java`
- [User Service](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/service/UserServiceImpl.java): `src/main/java/com/sunilos/springboot/service/UserServiceImpl.java`
- [Role Service](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/service/RoleServiceImpl.java): `src/main/java/com/sunilos/springboot/service/RoleServiceImpl.java`
- [Document Service](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/service/DocumentServiceImpl.java): `src/main/java/com/sunilos/springboot/service/DocumentServiceImpl.java`

### Persistence

- [Marksheet DAO](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/dao/MarksheetDAOImpl.java): `src/main/java/com/sunilos/springboot/dao/MarksheetDAOImpl.java`
- [User DAO](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/dao/UserDAOImpl.java): `src/main/java/com/sunilos/springboot/dao/UserDAOImpl.java`
- [Role DAO](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/dao/RoleDAOImpl.java): `src/main/java/com/sunilos/springboot/dao/RoleDAOImpl.java`
- [Document Repository](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/dao/DocumentRespositoryInt.java): `src/main/java/com/sunilos/springboot/dao/DocumentRespositoryInt.java`
- [Summary Repository](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/dao/DocumentSummaryRespositoryInt.java): `src/main/java/com/sunilos/springboot/dao/DocumentSummaryRespositoryInt.java`
- [Marksheet Entity](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/bean/Marksheet.java): `src/main/java/com/sunilos/springboot/bean/Marksheet.java`
- [User Entity](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/bean/User.java): `src/main/java/com/sunilos/springboot/bean/User.java`
- [Role Entity](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/bean/Role.java): `src/main/java/com/sunilos/springboot/bean/Role.java`
- [Document Entity](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/bean/Document.java): `src/main/java/com/sunilos/springboot/bean/Document.java`
- [Document Summary](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/bean/DocumentSummary.java): `src/main/java/com/sunilos/springboot/bean/DocumentSummary.java`
- **MySQL Database**

### Authentication

- [JWT Utility](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/ctl/JwtUtil.java): `src/main/java/com/sunilos/springboot/ctl/JwtUtil.java`
- [JWT Interceptor](https://github.com/sunilos/springboot/blob/master/src/main/java/com/sunilos/springboot/ctl/FrontCtl.java): `src/main/java/com/sunilos/springboot/ctl/FrontCtl.java`

### Other components

- **API Client**

## Connections

- API Client → Marksheet API: calls API
- API Client → User API: calls API
- API Client → Role API: calls API
- API Client → Document API: calls API
- API Client → Actuator Endpoints: calls API
- Marksheet API → Marksheet Service: delegates to (evidence: `src/main/java/com/sunilos/springboot/ctl/MarksheetCtl.java`)
- User API → User Service: delegates to (evidence: `src/main/java/com/sunilos/springboot/ctl/UserCtl.java`)
- Role API → Role Service: delegates to (evidence: `src/main/java/com/sunilos/springboot/ctl/RoleCtl.java`)
- Document API → Document Service: delegates to (evidence: `src/main/java/com/sunilos/springboot/ctl/DocumentCtl.java`)
- User API → JWT Utility: uses tokens (evidence: `src/main/java/com/sunilos/springboot/ctl/UserCtl.java`)
- JWT Interceptor → JWT Utility: validates tokens
- Marksheet Service → Marksheet DAO: delegates to (evidence: `src/main/java/com/sunilos/springboot/service/MarksheetServiceImpl.java`)
- User Service → User DAO: delegates to (evidence: `src/main/java/com/sunilos/springboot/service/UserServiceImpl.java`)
- Role Service → Role DAO: delegates to (evidence: `src/main/java/com/sunilos/springboot/service/RoleServiceImpl.java`)
- Document Service → Document Repository: reads and writes (evidence: `src/main/java/com/sunilos/springboot/service/DocumentServiceImpl.java`)
- Document Service → Summary Repository: searches summaries (evidence: `src/main/java/com/sunilos/springboot/service/DocumentServiceImpl.java`)
- Marksheet DAO → MySQL Database: persists entities
- User DAO → MySQL Database: persists entities
- Role DAO → MySQL Database: persists entities
- Document Repository → MySQL Database: stores documents
- Summary Repository → MySQL Database: reads summaries
