# jvivekvardhan/ocms-backend architecture

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

- Interactive diagram: https://gitdiagram.com/jvivekvardhan/ocms-backend
- Repository: https://github.com/jvivekvardhan/ocms-backend

## Overview

OCMS is a Spring Boot backend for user authentication and role-based course management. The documented workflow is a client calling authentication or course APIs; controllers delegate business work to services, which use repositories for persistence. Course enrollment and content management are documented capabilities, and the tree includes lesson components, but their precise wiring is not shown. Security and JWT components are present; README describes JWT conditionally, so their runtime connections are left unspecified.

Main entry points: [`src/main/java/com/example/demo/service/UserService.java`](https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/service/UserService.java) (User service), [`src/main/java/com/example/demo/controller/AuthController.java`](https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/controller/AuthController.java) (Auth API), [`src/main/java/com/example/demo/controller/CourseController.java`](https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/controller/CourseController.java) (Course API), [`src/main/java/com/example/demo/controller/UserController.java`](https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/controller/UserController.java) (User API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API layer"]
  node_auth_api["Auth API"]
  node_course_api["Course API"]
  node_lesson_api["Lesson API"]
  node_user_api["User API"]
end

subgraph group_domain["Domain services"]
  node_user_service["User service<br/>[UserService.java]"]
  node_course_service["Course service<br/>[CourseService.java]"]
end

subgraph group_security["Security"]
  node_security_config["Security config"]
  node_jwt_filter["JWT filter"]
  node_jwt_util["JWT utilities<br/>[JwtUtil.java]"]
  node_auth_entry["Auth entry point"]
end

subgraph group_persistence["Persistence"]
  node_user_repo["User repository"]
  node_course_repo["Course repository"]
  node_lesson_repo["Lesson repository"]
  node_user_entity["User model<br/>[User.java]"]
  node_course_entity["Course model<br/>[Course.java]"]
  node_lesson_entity["Lesson model<br/>[Lesson.java]"]
end

node_client(("Client"))
node_database[("MySQL")]

node_client -->|"requests"| node_auth_api
node_client -->|"requests"| node_course_api
node_client -->|"requests"| node_lesson_api
node_client -->|"requests"| node_user_api
node_auth_api -->|"delegates"| node_user_service
node_user_api -->|"delegates"| node_user_service
node_course_api -->|"delegates"| node_course_service
node_user_service -->|"database operations"| node_user_repo
node_course_service -->|"database operations"| node_course_repo
node_user_repo -->|"persists users"| node_database
node_course_repo -->|"persists courses"| node_database
node_lesson_repo -->|"persists lessons"| node_database

click node_auth_api "https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/controller/AuthController.java"
click node_course_api "https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/controller/CourseController.java"
click node_lesson_api "https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/controller/LessonController.java"
click node_user_api "https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/controller/UserController.java"
click node_user_service "https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/service/UserService.java"
click node_course_service "https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/service/CourseService.java"
click node_user_repo "https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/repository/UserRepository.java"
click node_course_repo "https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/repository/CourseRepository.java"
click node_lesson_repo "https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/repository/LessonRepository.java"
click node_user_entity "https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/entity/User.java"
click node_course_entity "https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/entity/Course.java"
click node_lesson_entity "https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/entity/Lesson.java"
click node_security_config "https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/config/SecurityConfig.java"
click node_jwt_filter "https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/security/JwtAuthenticationFilter.java"
click node_jwt_util "https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/security/JwtUtil.java"
click node_auth_entry "https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/security/JwtAuthenticationEntryPoint.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_auth_api,node_course_api,node_lesson_api,node_user_api,node_client toneBlue
class node_user_service,node_course_service,node_database toneAmber
class node_security_config,node_jwt_filter,node_jwt_util,node_auth_entry toneMint
class node_user_repo,node_course_repo,node_lesson_repo,node_user_entity,node_course_entity,node_lesson_entity toneRose
```

## Components

### API layer

- [Auth API](https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/controller/AuthController.java): `src/main/java/com/example/demo/controller/AuthController.java`
- [Course API](https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/controller/CourseController.java): `src/main/java/com/example/demo/controller/CourseController.java`
- [Lesson API](https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/controller/LessonController.java): `src/main/java/com/example/demo/controller/LessonController.java`
- [User API](https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/controller/UserController.java): `src/main/java/com/example/demo/controller/UserController.java`

### Domain services

- [User service](https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/service/UserService.java): `src/main/java/com/example/demo/service/UserService.java`
- [Course service](https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/service/CourseService.java): `src/main/java/com/example/demo/service/CourseService.java`

### Security

- [Security config](https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/config/SecurityConfig.java): `src/main/java/com/example/demo/config/SecurityConfig.java`
- [JWT filter](https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/security/JwtAuthenticationFilter.java): `src/main/java/com/example/demo/security/JwtAuthenticationFilter.java`
- [JWT utilities](https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/security/JwtUtil.java): `src/main/java/com/example/demo/security/JwtUtil.java`
- [Auth entry point](https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/security/JwtAuthenticationEntryPoint.java): `src/main/java/com/example/demo/security/JwtAuthenticationEntryPoint.java`

### Persistence

- [User repository](https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/repository/UserRepository.java): `src/main/java/com/example/demo/repository/UserRepository.java`
- [Course repository](https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/repository/CourseRepository.java): `src/main/java/com/example/demo/repository/CourseRepository.java`
- [Lesson repository](https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/repository/LessonRepository.java): `src/main/java/com/example/demo/repository/LessonRepository.java`
- [User model](https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/entity/User.java): `src/main/java/com/example/demo/entity/User.java`
- [Course model](https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/entity/Course.java): `src/main/java/com/example/demo/entity/Course.java`
- [Lesson model](https://github.com/jvivekvardhan/ocms-backend/blob/main/src/main/java/com/example/demo/entity/Lesson.java): `src/main/java/com/example/demo/entity/Lesson.java`

### Other components

- **Client**
- **MySQL**

## Connections

- Client → Auth API: requests
- Client → Course API: requests
- Client → Lesson API: requests
- Client → User API: requests
- Auth API → User service: delegates
- User API → User service: delegates
- Course API → Course service: delegates
- User service → User repository: database operations
- Course service → Course repository: database operations
- User repository → MySQL: persists users
- Course repository → MySQL: persists courses
- Lesson repository → MySQL: persists lessons
