# mapo0/springmvc architecture

> Architecture diagram of the GitHub repository mapo0/springmvc, 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/mapo0/springmvc
- Repository: https://github.com/mapo0/springmvc

## Overview

This is a Spring MVC shop application with login/session handling, category-based index and admin pages, and product lookup/deletion endpoints. The main request paths run from the browser through controllers to services or repositories, with JSP views for page responses. Product and user repositories shown in the sampled source keep data in in-memory lists. The tree also identifies basket services/repositories and request interceptors, but their implementations and wiring were not sampled, so their relationships are left unspecified.

Main entry points: [`src/main/java/com/epam/controller/MainController.java`](https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/controller/MainController.java) (Page controller), [`src/main/java/com/epam/controller/AuthController.java`](https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/controller/AuthController.java) (Login controller), [`src/main/java/com/epam/controller/RESTController.java`](https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/controller/RESTController.java) (Product endpoints), [`src/main/java/com/epam/service/impl/UserServiceImpl.java`](https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/service/impl/UserServiceImpl.java) (User service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web interface"]
  node_pages["JSP pages"]
  node_main["Page controller"]
  node_rest["Product endpoints"]
  node_webconfig["Web configuration"]
  node_authguard["Auth interceptor"]
  node_userguard["User interceptor"]
  node_adminguard["Admin interceptor"]
end

subgraph group_identity["Identity and access"]
  node_auth["Login controller"]
  node_userservice["User service"]
  node_userrepo["User repository"]
  node_session["Session user"]
end

subgraph group_catalog["Product catalog"]
  node_products["Product service"]
  node_productrepo["Product repository"]
  node_categories["Category service"]
  node_categoryrepo["Category repository"]
  node_productviews["Catalog scripts"]
end

subgraph group_basket["Basket"]
  node_basketservice["Basket service<br/>[BasketService.java]"]
  node_basketrepo["Basket repository"]
  node_basketdata["Basket model<br/>[Basket.java]"]
end

node_shopper(("Browser user"))

node_shopper -->|"requests pages"| node_main
node_shopper -->|"login requests"| node_auth
node_shopper -->|"product requests"| node_rest
node_main -->|"reads categories"| node_categoryrepo
node_main -->|"reads session"| node_session
node_main -->|"selects view"| node_pages
node_auth -->|"authenticates"| node_userservice
node_auth -->|"sets user"| node_session
node_userservice -->|"looks up user"| node_userrepo
node_rest -->|"requests product"| node_products
node_products -->|"reads and mutates"| node_productrepo

click node_pages "https://github.com/mapo0/springmvc/tree/master/src/main/webapp/WEB-INF/jsp"
click node_main "https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/controller/MainController.java"
click node_rest "https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/controller/RESTController.java"
click node_webconfig "https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/config/WebConfiguration.java"
click node_authguard "https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/interceptor/AuthInterCeptor.java"
click node_userguard "https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/interceptor/UserInterCeptor.java"
click node_adminguard "https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/interceptor/AdminInterCeptor.java"
click node_auth "https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/controller/AuthController.java"
click node_userservice "https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/service/impl/UserServiceImpl.java"
click node_userrepo "https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/repository/impl/UserRepositoryImpl.java"
click node_session "https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/manager/SessionUserManagerImpl.java"
click node_products "https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/service/impl/ProductServiceImpl.java"
click node_productrepo "https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/repository/impl/ProductRepositoryImpl.java"
click node_categories "https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/service/CategoryService.java"
click node_categoryrepo "https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/repository/CategoryRepository.java"
click node_productviews "https://github.com/mapo0/springmvc/tree/master/src/main/resources/static/js"
click node_basketservice "https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/service/BasketService.java"
click node_basketrepo "https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/repository/BasketRepository.java"
click node_basketdata "https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/dto/Basket.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_pages,node_main,node_rest,node_webconfig,node_authguard,node_userguard,node_adminguard,node_shopper toneBlue
class node_auth,node_userservice,node_userrepo,node_session toneAmber
class node_products,node_productrepo,node_categories,node_categoryrepo,node_productviews toneMint
class node_basketservice,node_basketrepo,node_basketdata toneRose
```

## Components

### Web interface

- [JSP pages](https://github.com/mapo0/springmvc/tree/master/src/main/webapp/WEB-INF/jsp): `src/main/webapp/WEB-INF/jsp`
- [Page controller](https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/controller/MainController.java): `src/main/java/com/epam/controller/MainController.java`
- [Product endpoints](https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/controller/RESTController.java): `src/main/java/com/epam/controller/RESTController.java`
- [Web configuration](https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/config/WebConfiguration.java): `src/main/java/com/epam/config/WebConfiguration.java`
- [Auth interceptor](https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/interceptor/AuthInterCeptor.java): `src/main/java/com/epam/interceptor/AuthInterCeptor.java`
- [User interceptor](https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/interceptor/UserInterCeptor.java): `src/main/java/com/epam/interceptor/UserInterCeptor.java`
- [Admin interceptor](https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/interceptor/AdminInterCeptor.java): `src/main/java/com/epam/interceptor/AdminInterCeptor.java`

### Identity and access

- [Login controller](https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/controller/AuthController.java): `src/main/java/com/epam/controller/AuthController.java`
- [User service](https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/service/impl/UserServiceImpl.java): `src/main/java/com/epam/service/impl/UserServiceImpl.java`
- [User repository](https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/repository/impl/UserRepositoryImpl.java): `src/main/java/com/epam/repository/impl/UserRepositoryImpl.java`
- [Session user](https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/manager/SessionUserManagerImpl.java): `src/main/java/com/epam/manager/SessionUserManagerImpl.java`

### Product catalog

- [Product service](https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/service/impl/ProductServiceImpl.java): `src/main/java/com/epam/service/impl/ProductServiceImpl.java`
- [Product repository](https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/repository/impl/ProductRepositoryImpl.java): `src/main/java/com/epam/repository/impl/ProductRepositoryImpl.java`
- [Category service](https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/service/CategoryService.java): `src/main/java/com/epam/service/CategoryService.java`
- [Category repository](https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/repository/CategoryRepository.java): `src/main/java/com/epam/repository/CategoryRepository.java`
- [Catalog scripts](https://github.com/mapo0/springmvc/tree/master/src/main/resources/static/js): `src/main/resources/static/js`

### Basket

- [Basket service](https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/service/BasketService.java): `src/main/java/com/epam/service/BasketService.java`
- [Basket repository](https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/repository/BasketRepository.java): `src/main/java/com/epam/repository/BasketRepository.java`
- [Basket model](https://github.com/mapo0/springmvc/blob/master/src/main/java/com/epam/dto/Basket.java): `src/main/java/com/epam/dto/Basket.java`

### Other components

- **Browser user**

## Connections

- Browser user → Page controller: requests pages
- Browser user → Login controller: login requests
- Browser user → Product endpoints: product requests
- Page controller → Category repository: reads categories
- Page controller → Session user: reads session
- Page controller → JSP pages: selects view
- Login controller → User service: authenticates
- Login controller → Session user: sets user
- User service → User repository: looks up user
- Product endpoints → Product service: requests product
- Product service → Product repository: reads and mutates
