# vasileiosliaskas/vasilis-api architecture

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

- Interactive diagram: https://gitdiagram.com/vasileiosliaskas/vasilis-api
- Repository: https://github.com/vasileiosliaskas/vasilis-api

## Overview

This is a Spring application for managing business records and associated invoices, with user authentication. The main workflow is a client request routed to a business or invoice controller, handled by a service, and persisted through a repository; invoice operations can also look up a linked business and store or return uploaded file data. Separate user and security components provide JWT-based authentication. The README is empty, so broader product capabilities are not documented; edges reflect only relationships visible in the sampled source or SOURCE INDEX.

Main entry points: [`src/main/java/vasilis/vasilis/business/BusinessServiceImpl.java`](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/business/BusinessServiceImpl.java) (Business service), [`src/main/java/vasilis/vasilis/invoice/InvoiceServiceImpl.java`](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/invoice/InvoiceServiceImpl.java) (Invoice service), [`src/main/java/vasilis/vasilis/business/DTO/BusinessDTO.java`](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/business/DTO/BusinessDTO.java) (Business DTOs), [`src/main/java/vasilis/vasilis/invoice/DTO/InvoiceDTO.java`](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/invoice/DTO/InvoiceDTO.java) (Invoice DTO)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_business["Business records"]
  node_business_controller["Business API"]
  node_business_service["Business service"]
  node_business_repo["Business repository"]
  node_business_model["Business record<br/>[Business.java]"]
  node_business_dto["Business DTOs<br/>[BusinessDTO.java]"]
  node_business_args["Business search args"]
  node_business_query["Business query contract"]
end

subgraph group_invoice["Invoice management"]
  node_invoice_controller["Invoice API"]
  node_invoice_service["Invoice service"]
  node_invoice_repo["Invoice repository"]
  node_invoice_model["Invoice record<br/>[Invoice.java]"]
  node_invoice_dto["Invoice DTO<br/>[InvoiceDTO.java]"]
  node_invoice_args["Invoice search args"]
  node_invoice_type["Invoice types<br/>[InvoiceEnum.java]"]
end

subgraph group_identity["Users and security"]
  node_user_controller["User API"]
  node_user_service["User service"]
  node_user_repo["User repository"]
  node_user_model["User record<br/>[User.java]"]
  node_jwt_service["JWT service<br/>[JWTService.java]"]
  node_jwt_filter["JWT filter<br/>[JwtFilter.java]"]
  node_user_details["User details lookup"]
  node_security_config["Security configuration"]
  node_jwt_response["JWT response<br/>[JwtResponse.java]"]
end

subgraph group_shared["Shared data formats"]
  node_date_serializer["Date serializer"]
  node_date_deserializer["Date deserializer"]
  node_translation["Translation utility"]
end

node_client(("API client"))

node_client -->|"requests"| node_business_controller
node_client -->|"requests"| node_invoice_controller
node_client -->|"requests"| node_user_controller
node_business_controller -->|"delegates"| node_business_service
node_business_controller -->|"accepts and returns"| node_business_dto
node_business_service -->|"queries and saves"| node_business_repo
node_business_service -->|"uses invoice operations"| node_invoice_service
node_business_service -->|"maps"| node_business_dto
node_business_service -->|"maps"| node_business_model
node_business_service -->|"uses"| node_translation
node_business_repo -->|"implements"| node_business_query
node_business_repo -->|"queries"| node_business_model
node_business_repo -->|"uses"| node_business_args
node_business_repo -->|"projects"| node_business_dto
node_invoice_controller -->|"delegates"| node_invoice_service
node_invoice_controller -->|"accepts"| node_invoice_args
node_invoice_controller -->|"returns"| node_invoice_dto
node_invoice_service -->|"queries and saves"| node_invoice_repo
node_invoice_service -->|"looks up business"| node_business_service
node_invoice_service -->|"maps and updates"| node_invoice_model
node_invoice_service -->|"maps"| node_invoice_dto
node_invoice_service -->|"filters by"| node_invoice_args
node_invoice_controller -->|"uses"| node_invoice_type
node_invoice_dto -->|"uses"| node_invoice_type
node_business_dto -->|"includes"| node_invoice_dto
node_business_model -->|"owns invoices"| node_invoice_model
node_invoice_model -->|"references business"| node_business_model
node_user_controller -->|"delegates"| node_user_service
node_user_controller -->|"returns"| node_jwt_response
node_user_service -->|"queries and saves"| node_user_repo
node_user_service -->|"generates token"| node_jwt_service
node_user_service -->|"uses"| node_user_model
node_user_details -->|"loads user"| node_user_repo
node_user_details -->|"wraps"| node_user_model
node_jwt_filter -->|"validates token"| node_jwt_service
node_jwt_filter -->|"loads identity"| node_user_details
node_security_config -->|"registers"| node_jwt_filter
node_security_config -->|"configures"| node_user_details
node_business_dto -->|"uses"| node_date_deserializer
node_business_dto -->|"uses"| node_date_serializer
node_invoice_dto -->|"uses"| node_date_deserializer
node_invoice_dto -->|"uses"| node_date_serializer

click node_business_controller "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/business/BusinessController.java"
click node_business_service "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/business/BusinessServiceImpl.java"
click node_business_repo "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/business/BusinessRepositoryImpl.java"
click node_business_model "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/business/Business.java"
click node_business_dto "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/business/DTO/BusinessDTO.java"
click node_business_args "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/business/DTO/BusinessArgsDTO.java"
click node_business_query "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/business/BusinessRepositoryCustom.java"
click node_invoice_controller "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/invoice/InvoiceController.java"
click node_invoice_service "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/invoice/InvoiceServiceImpl.java"
click node_invoice_repo "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/invoice/InvoiceRepository.java"
click node_invoice_model "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/invoice/Invoice.java"
click node_invoice_dto "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/invoice/DTO/InvoiceDTO.java"
click node_invoice_args "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/invoice/DTO/InvoiceArgsDTO.java"
click node_invoice_type "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/invoice/InvoiceEnum.java"
click node_user_controller "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/user/UserController.java"
click node_user_service "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/user/UserServiceImpl.java"
click node_user_repo "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/user/UserRepository.java"
click node_user_model "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/user/User.java"
click node_jwt_service "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/user/JWTService.java"
click node_jwt_filter "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/security/JwtFilter.java"
click node_user_details "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/security/CustomUserDetailsService.java"
click node_security_config "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/security/SecurityConfiguration.java"
click node_jwt_response "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/security/JwtResponse.java"
click node_date_serializer "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/general/CustomDateSerializer.java"
click node_date_deserializer "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/general/CustomDateDeserializer.java"
click node_translation "https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/general/TranslationUtil.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_business_controller,node_business_service,node_business_repo,node_business_model,node_business_dto,node_business_args,node_business_query,node_client toneBlue
class node_invoice_controller,node_invoice_service,node_invoice_repo,node_invoice_model,node_invoice_dto,node_invoice_args,node_invoice_type toneAmber
class node_user_controller,node_user_service,node_user_repo,node_user_model,node_jwt_service,node_jwt_filter,node_user_details,node_security_config,node_jwt_response toneMint
class node_date_serializer,node_date_deserializer,node_translation toneRose
```

## Components

### Business records

- [Business API](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/business/BusinessController.java): `src/main/java/vasilis/vasilis/business/BusinessController.java`
- [Business service](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/business/BusinessServiceImpl.java): `src/main/java/vasilis/vasilis/business/BusinessServiceImpl.java`
- [Business repository](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/business/BusinessRepositoryImpl.java): `src/main/java/vasilis/vasilis/business/BusinessRepositoryImpl.java`
- [Business record](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/business/Business.java): `src/main/java/vasilis/vasilis/business/Business.java`
- [Business DTOs](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/business/DTO/BusinessDTO.java): `src/main/java/vasilis/vasilis/business/DTO/BusinessDTO.java`
- [Business search args](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/business/DTO/BusinessArgsDTO.java): `src/main/java/vasilis/vasilis/business/DTO/BusinessArgsDTO.java`
- [Business query contract](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/business/BusinessRepositoryCustom.java): `src/main/java/vasilis/vasilis/business/BusinessRepositoryCustom.java`

### Invoice management

- [Invoice API](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/invoice/InvoiceController.java): `src/main/java/vasilis/vasilis/invoice/InvoiceController.java`
- [Invoice service](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/invoice/InvoiceServiceImpl.java): `src/main/java/vasilis/vasilis/invoice/InvoiceServiceImpl.java`
- [Invoice repository](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/invoice/InvoiceRepository.java): `src/main/java/vasilis/vasilis/invoice/InvoiceRepository.java`
- [Invoice record](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/invoice/Invoice.java): `src/main/java/vasilis/vasilis/invoice/Invoice.java`
- [Invoice DTO](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/invoice/DTO/InvoiceDTO.java): `src/main/java/vasilis/vasilis/invoice/DTO/InvoiceDTO.java`
- [Invoice search args](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/invoice/DTO/InvoiceArgsDTO.java): `src/main/java/vasilis/vasilis/invoice/DTO/InvoiceArgsDTO.java`
- [Invoice types](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/invoice/InvoiceEnum.java): `src/main/java/vasilis/vasilis/invoice/InvoiceEnum.java`

### Users and security

- [User API](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/user/UserController.java): `src/main/java/vasilis/vasilis/user/UserController.java`
- [User service](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/user/UserServiceImpl.java): `src/main/java/vasilis/vasilis/user/UserServiceImpl.java`
- [User repository](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/user/UserRepository.java): `src/main/java/vasilis/vasilis/user/UserRepository.java`
- [User record](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/user/User.java): `src/main/java/vasilis/vasilis/user/User.java`
- [JWT service](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/user/JWTService.java): `src/main/java/vasilis/vasilis/user/JWTService.java`
- [JWT filter](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/security/JwtFilter.java): `src/main/java/vasilis/vasilis/security/JwtFilter.java`
- [User details lookup](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/security/CustomUserDetailsService.java): `src/main/java/vasilis/vasilis/security/CustomUserDetailsService.java`
- [Security configuration](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/security/SecurityConfiguration.java): `src/main/java/vasilis/vasilis/security/SecurityConfiguration.java`
- [JWT response](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/security/JwtResponse.java): `src/main/java/vasilis/vasilis/security/JwtResponse.java`

### Shared data formats

- [Date serializer](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/general/CustomDateSerializer.java): `src/main/java/vasilis/vasilis/general/CustomDateSerializer.java`
- [Date deserializer](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/general/CustomDateDeserializer.java): `src/main/java/vasilis/vasilis/general/CustomDateDeserializer.java`
- [Translation utility](https://github.com/vasileiosliaskas/vasilis-api/blob/master/src/main/java/vasilis/vasilis/general/TranslationUtil.java): `src/main/java/vasilis/vasilis/general/TranslationUtil.java`

### Other components

- **API client**

## Connections

- API client → Business API: requests (evidence: `src/main/java/vasilis/vasilis/business/BusinessController.java`)
- API client → Invoice API: requests (evidence: `src/main/java/vasilis/vasilis/invoice/InvoiceController.java`)
- API client → User API: requests (evidence: `src/main/java/vasilis/vasilis/user/UserController.java`)
- Business API → Business service: delegates (evidence: `src/main/java/vasilis/vasilis/business/BusinessController.java`)
- Business API → Business DTOs: accepts and returns (evidence: `src/main/java/vasilis/vasilis/business/BusinessController.java`)
- Business service → Business repository: queries and saves (evidence: `src/main/java/vasilis/vasilis/business/BusinessServiceImpl.java`)
- Business service → Invoice service: uses invoice operations (evidence: `src/main/java/vasilis/vasilis/business/BusinessServiceImpl.java`)
- Business service → Business DTOs: maps (evidence: `src/main/java/vasilis/vasilis/business/BusinessServiceImpl.java`)
- Business service → Business record: maps (evidence: `src/main/java/vasilis/vasilis/business/BusinessServiceImpl.java`)
- Business service → Translation utility: uses (evidence: `src/main/java/vasilis/vasilis/business/BusinessServiceImpl.java`)
- Business repository → Business query contract: implements (evidence: `src/main/java/vasilis/vasilis/business/BusinessRepositoryImpl.java`)
- Business repository → Business record: queries (evidence: `src/main/java/vasilis/vasilis/business/BusinessRepositoryImpl.java`)
- Business repository → Business search args: uses (evidence: `src/main/java/vasilis/vasilis/business/BusinessRepositoryImpl.java`)
- Business repository → Business DTOs: projects (evidence: `src/main/java/vasilis/vasilis/business/BusinessRepositoryImpl.java`)
- Invoice API → Invoice service: delegates (evidence: `src/main/java/vasilis/vasilis/invoice/InvoiceController.java`)
- Invoice API → Invoice search args: accepts (evidence: `src/main/java/vasilis/vasilis/invoice/InvoiceController.java`)
- Invoice API → Invoice DTO: returns (evidence: `src/main/java/vasilis/vasilis/invoice/InvoiceController.java`)
- Invoice service → Invoice repository: queries and saves (evidence: `src/main/java/vasilis/vasilis/invoice/InvoiceServiceImpl.java`)
- Invoice service → Business service: looks up business (evidence: `src/main/java/vasilis/vasilis/invoice/InvoiceServiceImpl.java`)
- Invoice service → Invoice record: maps and updates (evidence: `src/main/java/vasilis/vasilis/invoice/InvoiceServiceImpl.java`)
- Invoice service → Invoice DTO: maps (evidence: `src/main/java/vasilis/vasilis/invoice/InvoiceServiceImpl.java`)
- Invoice service → Invoice search args: filters by (evidence: `src/main/java/vasilis/vasilis/invoice/InvoiceServiceImpl.java`)
- Invoice API → Invoice types: uses (evidence: `src/main/java/vasilis/vasilis/invoice/InvoiceController.java`)
- Invoice DTO → Invoice types: uses (evidence: `src/main/java/vasilis/vasilis/invoice/DTO/InvoiceDTO.java`)
- Business DTOs → Invoice DTO: includes (evidence: `src/main/java/vasilis/vasilis/business/DTO/BusinessDTO.java`)
- Business record → Invoice record: owns invoices (evidence: `src/main/java/vasilis/vasilis/business/Business.java`)
- Invoice record → Business record: references business (evidence: `src/main/java/vasilis/vasilis/invoice/Invoice.java`)
- User API → User service: delegates (evidence: `src/main/java/vasilis/vasilis/user/UserController.java`)
- User API → JWT response: returns (evidence: `src/main/java/vasilis/vasilis/user/UserController.java`)
- User service → User repository: queries and saves (evidence: `src/main/java/vasilis/vasilis/user/UserServiceImpl.java`)
- User service → JWT service: generates token (evidence: `src/main/java/vasilis/vasilis/user/UserServiceImpl.java`)
- User service → User record: uses (evidence: `src/main/java/vasilis/vasilis/user/UserServiceImpl.java`)
- User details lookup → User repository: loads user (evidence: `src/main/java/vasilis/vasilis/security/CustomUserDetailsService.java`)
- User details lookup → User record: wraps (evidence: `src/main/java/vasilis/vasilis/security/CustomUserDetailsService.java`)
- JWT filter → JWT service: validates token (evidence: `src/main/java/vasilis/vasilis/security/JwtFilter.java`)
- JWT filter → User details lookup: loads identity (evidence: `src/main/java/vasilis/vasilis/security/JwtFilter.java`)
- Security configuration → JWT filter: registers (evidence: `src/main/java/vasilis/vasilis/security/SecurityConfiguration.java`)
- Security configuration → User details lookup: configures (evidence: `src/main/java/vasilis/vasilis/security/SecurityConfiguration.java`)
- Business DTOs → Date deserializer: uses (evidence: `src/main/java/vasilis/vasilis/business/DTO/BusinessDTO.java`)
- Business DTOs → Date serializer: uses (evidence: `src/main/java/vasilis/vasilis/business/DTO/BusinessDTO.java`)
- Invoice DTO → Date deserializer: uses (evidence: `src/main/java/vasilis/vasilis/invoice/DTO/InvoiceDTO.java`)
- Invoice DTO → Date serializer: uses (evidence: `src/main/java/vasilis/vasilis/invoice/DTO/InvoiceDTO.java`)
