# youssefboualy913/user_management_api architecture

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

## Overview

This is a Spring-based user-management API. Clients register users and, after HTTP Basic authentication, administrators can list users or fetch one by ID. Controllers delegate to a user service, which hashes registration passwords and uses a JPA repository; the security configuration loads accounts by email and enforces roles. The graph also shows persistence and startup admin initialization. DTOs, mapping, and exception-handling modules exist in the tree, but their runtime relationships are not established by the available excerpts.

Main entry points: [`src/main/java/com/usermanagement/repository/UserRepository.java`](https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/repository/UserRepository.java) (User repository), [`src/main/java/com/usermanagement/config/SecurityConfig.java`](https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/config/SecurityConfig.java) (Authentication and authorization), [`src/main/java/com/usermanagement/entity/User.java`](https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/entity/User.java) (User account), [`src/main/java/com/usermanagement/config/DataInitializer.java`](https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/config/DataInitializer.java) (Admin account initializer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API"]
  node_auth["Registration endpoint"]
  node_user_api["Admin user endpoints"]
  node_dto["Request and response DTOs"]
  node_errors["API error handling"]
end

subgraph group_domain["User domain"]
  node_service["User service<br/>[UserService.java]"]
  node_user["User account<br/>[User.java]"]
  node_role["Account roles<br/>[Role.java]"]
  node_repository["User repository"]
  node_mapper["User mapper<br/>[UserMapper.java]"]
end

subgraph group_platform["Security and persistence"]
  node_database[("Configured database")]
  node_security["Authentication and authorization"]
  node_initializer["Admin account initializer"]
  node_persistence["JPA persistence setup"]
  node_web_config["Web configuration<br/>[WebConfig.java]"]
  node_root_config["Root configuration<br/>[RootConfig.java]"]
  node_app_initializer["Servlet initializer"]
end

node_client(("API client"))

node_client -->|"registers via"| node_auth
node_client -->|"requests users"| node_user_api
node_auth -->|"creates user"| node_service
node_user_api -->|"queries users"| node_service
node_service -->|"saves and queries"| node_repository
node_repository -->|"persists entities"| node_user
node_user -->|"has role"| node_role
node_security -->|"loads accounts"| node_repository
node_security -->|"reads account fields"| node_user
node_security -->|"protects requests"| node_user_api
node_initializer -->|"checks and saves"| node_repository
node_initializer -->|"creates admin"| node_user
node_initializer -->|"assigns role"| node_role
node_repository -.->|"uses JPA store"| node_database
node_persistence -->|"configures datasource"| node_database
node_app_initializer -->|"registers root"| node_root_config
node_app_initializer -->|"registers web"| node_web_config
node_root_config -->|"imports config"| node_persistence
node_root_config -->|"imports config"| node_security

click node_auth "https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/controller/AuthController.java"
click node_user_api "https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/controller/UserController.java"
click node_service "https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/service/UserService.java"
click node_user "https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/entity/User.java"
click node_role "https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/entity/Role.java"
click node_repository "https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/repository/UserRepository.java"
click node_security "https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/config/SecurityConfig.java"
click node_initializer "https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/config/DataInitializer.java"
click node_persistence "https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/config/PersistenceConfig.java"
click node_web_config "https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/config/WebConfig.java"
click node_root_config "https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/config/RootConfig.java"
click node_app_initializer "https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/config/WebAppInitializer.java"
click node_dto "https://github.com/youssefboualy913/user_management_api/tree/main/src/main/java/com/usermanagement/dto"
click node_mapper "https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/mapper/UserMapper.java"
click node_errors "https://github.com/youssefboualy913/user_management_api/tree/main/src/main/java/com/usermanagement/exception"

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,node_user_api,node_dto,node_errors,node_client toneBlue
class node_service,node_user,node_role,node_repository,node_mapper toneAmber
class node_database,node_security,node_initializer,node_persistence,node_web_config,node_root_config,node_app_initializer toneMint
```

## Components

### API

- [Registration endpoint](https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/controller/AuthController.java): `src/main/java/com/usermanagement/controller/AuthController.java`
- [Admin user endpoints](https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/controller/UserController.java): `src/main/java/com/usermanagement/controller/UserController.java`
- [Request and response DTOs](https://github.com/youssefboualy913/user_management_api/tree/main/src/main/java/com/usermanagement/dto): `src/main/java/com/usermanagement/dto`
- [API error handling](https://github.com/youssefboualy913/user_management_api/tree/main/src/main/java/com/usermanagement/exception): `src/main/java/com/usermanagement/exception`

### User domain

- [User service](https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/service/UserService.java): `src/main/java/com/usermanagement/service/UserService.java`
- [User account](https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/entity/User.java): `src/main/java/com/usermanagement/entity/User.java`
- [Account roles](https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/entity/Role.java): `src/main/java/com/usermanagement/entity/Role.java`
- [User repository](https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/repository/UserRepository.java): `src/main/java/com/usermanagement/repository/UserRepository.java`
- [User mapper](https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/mapper/UserMapper.java): `src/main/java/com/usermanagement/mapper/UserMapper.java`

### Security and persistence

- **Configured database**
- [Authentication and authorization](https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/config/SecurityConfig.java): `src/main/java/com/usermanagement/config/SecurityConfig.java`
- [Admin account initializer](https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/config/DataInitializer.java): `src/main/java/com/usermanagement/config/DataInitializer.java`
- [JPA persistence setup](https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/config/PersistenceConfig.java): `src/main/java/com/usermanagement/config/PersistenceConfig.java`
- [Web configuration](https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/config/WebConfig.java): `src/main/java/com/usermanagement/config/WebConfig.java`
- [Root configuration](https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/config/RootConfig.java): `src/main/java/com/usermanagement/config/RootConfig.java`
- [Servlet initializer](https://github.com/youssefboualy913/user_management_api/blob/main/src/main/java/com/usermanagement/config/WebAppInitializer.java): `src/main/java/com/usermanagement/config/WebAppInitializer.java`

### Other components

- **API client**

## Connections

- API client → Registration endpoint: registers via (evidence: `src/main/java/com/usermanagement/controller/AuthController.java`)
- API client → Admin user endpoints: requests users (evidence: `src/main/java/com/usermanagement/controller/UserController.java`)
- Registration endpoint → User service: creates user (evidence: `src/main/java/com/usermanagement/controller/AuthController.java`)
- Admin user endpoints → User service: queries users (evidence: `src/main/java/com/usermanagement/controller/UserController.java`)
- User service → User repository: saves and queries (evidence: `src/main/java/com/usermanagement/service/UserService.java`)
- User repository → User account: persists entities (evidence: `src/main/java/com/usermanagement/repository/UserRepository.java`)
- User account → Account roles: has role (evidence: `src/main/java/com/usermanagement/entity/User.java`)
- Authentication and authorization → User repository: loads accounts (evidence: `src/main/java/com/usermanagement/config/SecurityConfig.java`)
- Authentication and authorization → User account: reads account fields (evidence: `src/main/java/com/usermanagement/config/SecurityConfig.java`)
- Authentication and authorization → Admin user endpoints: protects requests (evidence: `src/main/java/com/usermanagement/config/SecurityConfig.java`)
- Admin account initializer → User repository: checks and saves (evidence: `src/main/java/com/usermanagement/config/DataInitializer.java`)
- Admin account initializer → User account: creates admin (evidence: `src/main/java/com/usermanagement/config/DataInitializer.java`)
- Admin account initializer → Account roles: assigns role (evidence: `src/main/java/com/usermanagement/config/DataInitializer.java`)
- User repository → Configured database: uses JPA store
- JPA persistence setup → Configured database: configures datasource (evidence: `src/main/java/com/usermanagement/config/PersistenceConfig.java`)
- Servlet initializer → Root configuration: registers root (evidence: `src/main/java/com/usermanagement/config/WebAppInitializer.java`)
- Servlet initializer → Web configuration: registers web (evidence: `src/main/java/com/usermanagement/config/WebAppInitializer.java`)
- Root configuration → JPA persistence setup: imports config (evidence: `src/main/java/com/usermanagement/config/RootConfig.java`)
- Root configuration → Authentication and authorization: imports config (evidence: `src/main/java/com/usermanagement/config/RootConfig.java`)
