# arzukerimxanova/portfolio-api architecture

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

## Overview

This is a Spring-based portfolio API, with separate controller, service, repository, and domain-model areas, plus authentication and authorization code. The apparent user workflow is to authenticate and then access portfolio data such as education, experience, projects, and skills. The README provides no capability details, and the sampled source contains only build configuration, so these workflows and component boundaries are inferred from names and layout; specific calls and data transfers cannot be verified.

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Portfolio API"]
  node_application["Spring application"]
  node_education["Education API"]
  node_experience["Experience API"]
  node_projects["Projects API"]
  node_skills["Skills API"]
  node_education_service["Education service"]
  node_experience_service["Experience service"]
  node_project_service["Project service"]
  node_skill_service["Skill service"]
end

subgraph group_auth["Authentication"]
  node_auth_api["Authentication API"]
  node_auth_service["Authentication service"]
  node_security["JWT security"]
  node_jwt_filter["JWT filter"]
end

subgraph group_data["Persistence"]
  node_repositories["JPA repositories"]
  node_database[("PostgreSQL database")]
  node_entities["Portfolio entities"]
end

subgraph group_shared["Shared models"]
  node_dtos["Request and response DTOs"]
  node_mappers["DTO mappers"]
  node_validation["Input validation"]
  node_exceptions["API exception handling"]
end

node_client(("API client"))

click node_application "https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/PortfolioApiProjectApplication.java"
click node_education "https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/controller/EducationController.java"
click node_experience "https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/controller/ExperienceController.java"
click node_projects "https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/controller/ProjectController.java"
click node_skills "https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/controller/SkillController.java"
click node_education_service "https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/service/impl/EducationServiceImpl.java"
click node_experience_service "https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/service/impl/ExperienceServiceImpl.java"
click node_project_service "https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/service/impl/ProjectServiceImpl.java"
click node_skill_service "https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/service/impl/SkillServiceImpl.java"
click node_auth_api "https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/controller/AuthController.java"
click node_auth_service "https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/service/impl/AuthServiceImpl.java"
click node_security "https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/security/SecurityConfig.java"
click node_jwt_filter "https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/security/JwtAuthenticationFilter.java"
click node_repositories "https://github.com/arzukerimxanova/portfolio-api/tree/main/src/main/java/org/example/portfolio_api_project/dao/repo"
click node_database "https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/resources/application.properties"
click node_entities "https://github.com/arzukerimxanova/portfolio-api/tree/main/src/main/java/org/example/portfolio_api_project/dao/entity"
click node_dtos "https://github.com/arzukerimxanova/portfolio-api/tree/main/src/main/java/org/example/portfolio_api_project/dto"
click node_mappers "https://github.com/arzukerimxanova/portfolio-api/tree/main/src/main/java/org/example/portfolio_api_project/mapper"
click node_validation "https://github.com/arzukerimxanova/portfolio-api/tree/main/src/main/java/org/example/portfolio_api_project/validation"
click node_exceptions "https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/exception/GlobalExceptionHandler.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_application,node_education,node_experience,node_projects,node_skills,node_education_service,node_experience_service,node_project_service,node_skill_service,node_client toneBlue
class node_auth_api,node_auth_service,node_security,node_jwt_filter toneAmber
class node_repositories,node_database,node_entities toneMint
class node_dtos,node_mappers,node_validation,node_exceptions toneRose
```

## Components

### Portfolio API

- [Spring application](https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/PortfolioApiProjectApplication.java): `src/main/java/org/example/portfolio_api_project/PortfolioApiProjectApplication.java`
- [Education API](https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/controller/EducationController.java): `src/main/java/org/example/portfolio_api_project/controller/EducationController.java`
- [Experience API](https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/controller/ExperienceController.java): `src/main/java/org/example/portfolio_api_project/controller/ExperienceController.java`
- [Projects API](https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/controller/ProjectController.java): `src/main/java/org/example/portfolio_api_project/controller/ProjectController.java`
- [Skills API](https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/controller/SkillController.java): `src/main/java/org/example/portfolio_api_project/controller/SkillController.java`
- [Education service](https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/service/impl/EducationServiceImpl.java): `src/main/java/org/example/portfolio_api_project/service/impl/EducationServiceImpl.java`
- [Experience service](https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/service/impl/ExperienceServiceImpl.java): `src/main/java/org/example/portfolio_api_project/service/impl/ExperienceServiceImpl.java`
- [Project service](https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/service/impl/ProjectServiceImpl.java): `src/main/java/org/example/portfolio_api_project/service/impl/ProjectServiceImpl.java`
- [Skill service](https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/service/impl/SkillServiceImpl.java): `src/main/java/org/example/portfolio_api_project/service/impl/SkillServiceImpl.java`

### Authentication

- [Authentication API](https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/controller/AuthController.java): `src/main/java/org/example/portfolio_api_project/controller/AuthController.java`
- [Authentication service](https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/service/impl/AuthServiceImpl.java): `src/main/java/org/example/portfolio_api_project/service/impl/AuthServiceImpl.java`
- [JWT security](https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/security/SecurityConfig.java): `src/main/java/org/example/portfolio_api_project/security/SecurityConfig.java`
- [JWT filter](https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/security/JwtAuthenticationFilter.java): `src/main/java/org/example/portfolio_api_project/security/JwtAuthenticationFilter.java`

### Persistence

- [JPA repositories](https://github.com/arzukerimxanova/portfolio-api/tree/main/src/main/java/org/example/portfolio_api_project/dao/repo): `src/main/java/org/example/portfolio_api_project/dao/repo`
- [PostgreSQL database](https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/resources/application.properties): `src/main/resources/application.properties`
- [Portfolio entities](https://github.com/arzukerimxanova/portfolio-api/tree/main/src/main/java/org/example/portfolio_api_project/dao/entity): `src/main/java/org/example/portfolio_api_project/dao/entity`

### Shared models

- [Request and response DTOs](https://github.com/arzukerimxanova/portfolio-api/tree/main/src/main/java/org/example/portfolio_api_project/dto): `src/main/java/org/example/portfolio_api_project/dto`
- [DTO mappers](https://github.com/arzukerimxanova/portfolio-api/tree/main/src/main/java/org/example/portfolio_api_project/mapper): `src/main/java/org/example/portfolio_api_project/mapper`
- [Input validation](https://github.com/arzukerimxanova/portfolio-api/tree/main/src/main/java/org/example/portfolio_api_project/validation): `src/main/java/org/example/portfolio_api_project/validation`
- [API exception handling](https://github.com/arzukerimxanova/portfolio-api/blob/main/src/main/java/org/example/portfolio_api_project/exception/GlobalExceptionHandler.java): `src/main/java/org/example/portfolio_api_project/exception/GlobalExceptionHandler.java`

### Other components

- **API client**
