# braxon2/koncerto architecture

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

## Overview

KonCerto is an event-discovery and ticketing application with a React frontend and Spring backend. Users browse events, inspect ticket types, purchase tickets, and access their profile and ticket records; organizers can create events and manage ticket inventory. Backend services handle authentication, event rules and image storage, ticket issuance, and downloadable PDF/QR tickets. The source excerpts show service-level calls, but not frontend API wiring or Spring controller bodies, so those connections are not asserted; unsampled repository behavior is represented only where documented by the source index.

Main entry points: [`backend/src/main/java/com/dusan/koncerto/service/EventService.java`](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/service/EventService.java) (Event service), [`backend/src/main/java/com/dusan/koncerto/service/TicketService.java`](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/service/TicketService.java) (Ticket service), [`frontend/src/App.jsx`](https://github.com/braxon2/koncerto/blob/master/frontend/src/App.jsx) (Routes and shell), [`backend/src/main/java/com/dusan/koncerto/auth/AuthenticationService.java`](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/auth/AuthenticationService.java) (Authentication service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web application"]
  node_app["Routes and shell<br/>[App.jsx]"]
  node_authstate["Auth state<br/>[AuthContext.jsx]"]
  node_eventpages["Event pages"]
  node_home["Event discovery<br/>[Home.jsx]"]
  node_createpage["Event creation"]
  node_profile["Profile and tickets<br/>[ProfilePage.jsx]"]
end

subgraph group_auth["Identity and access"]
  node_authcontroller["Authentication API"]
  node_authservice["Authentication service"]
  node_jwt["JWT service<br/>[JwtService.java]"]
  node_user["User account<br/>[User.java]"]
end

subgraph group_events["Event management"]
  node_eventcontroller["Event API"]
  node_eventservice["Event service<br/>[EventService.java]"]
  node_event["Event record<br/>[Event.java]"]
  node_eventdto["Event request data"]
  node_eventticketdto["Ticket-type request"]
end

subgraph group_tickets["Ticketing"]
  node_ticketcontroller["Ticket API"]
  node_ticketservice["Ticket service<br/>[TicketService.java]"]
  node_eventticket["Ticket type<br/>[EventTicket.java]"]
  node_ticket["Issued ticket<br/>[Ticket.java]"]
  node_pdf["PDF and QR generator"]
  node_usercontroller["User API"]
  node_userservice["User and ticket views<br/>[UserService.java]"]
end

subgraph group_persistence["Persistence and media"]
  node_userrepo[("User repository")]
  node_eventrepo[("Event repository")]
  node_eventticketrepo[("Ticket-type repository")]
  node_ticketrepo[("Ticket repository")]
  node_s3["S3 image storage<br/>[S3Service.java]"]
end

node_visitor(("Attendee / organizer"))
node_aws[("AWS S3")]

node_visitor -.->|"uses"| node_app
node_app -->|"routes to"| node_home
node_app -->|"routes to"| node_eventpages
node_app -->|"routes to"| node_createpage
node_app -->|"routes to"| node_profile
node_eventpages -->|"reads auth"| node_authstate
node_profile -->|"reads auth"| node_authstate
node_authcontroller -->|"delegates to"| node_authservice
node_authservice -->|"reads and saves"| node_userrepo
node_authservice -->|"generates token"| node_jwt
node_authservice -->|"creates account"| node_user
node_eventcontroller -->|"delegates to"| node_eventservice
node_eventcontroller -->|"delegates to"| node_ticketservice
node_eventservice -->|"reads and saves"| node_eventrepo
node_eventservice -->|"reads and saves"| node_eventticketrepo
node_eventservice -->|"uploads images"| node_s3
node_eventservice -->|"builds event"| node_event
node_eventservice -->|"maps request"| node_eventdto
node_eventservice -->|"maps request"| node_eventticketdto
node_ticketcontroller -->|"delegates to"| node_ticketservice
node_ticketservice -->|"reads and saves"| node_ticketrepo
node_ticketservice -->|"reads and updates"| node_eventticketrepo
node_ticketservice -->|"looks up buyer"| node_userrepo
node_ticketservice -->|"generates PDF"| node_pdf
node_ticketservice -->|"issues tickets"| node_ticket
node_pdf -->|"reads event details"| node_event
node_pdf -->|"renders ticket data"| node_ticket
node_usercontroller -->|"delegates to"| node_userservice
node_userservice -->|"loads user"| node_userrepo
node_s3 -.->|"stores files"| node_aws

click node_app "https://github.com/braxon2/koncerto/blob/master/frontend/src/App.jsx"
click node_authstate "https://github.com/braxon2/koncerto/blob/master/frontend/src/context/AuthContext.jsx"
click node_eventpages "https://github.com/braxon2/koncerto/blob/master/frontend/src/pages/EventDetailsPage%20.jsx"
click node_home "https://github.com/braxon2/koncerto/blob/master/frontend/src/pages/Home.jsx"
click node_createpage "https://github.com/braxon2/koncerto/blob/master/frontend/src/pages/CreateEventPage.jsx"
click node_profile "https://github.com/braxon2/koncerto/blob/master/frontend/src/pages/ProfilePage.jsx"
click node_authcontroller "https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/auth/AuthenticationController.java"
click node_authservice "https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/auth/AuthenticationService.java"
click node_jwt "https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/config/JwtService.java"
click node_user "https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/model/User.java"
click node_eventcontroller "https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/controllers/EventController.java"
click node_eventservice "https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/service/EventService.java"
click node_event "https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/model/Event.java"
click node_eventdto "https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/dto/request/EventRequestDTO.java"
click node_eventticketdto "https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/dto/request/EventTicketRequestDTO.java"
click node_ticketcontroller "https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/controllers/TicketController.java"
click node_ticketservice "https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/service/TicketService.java"
click node_eventticket "https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/model/EventTicket.java"
click node_ticket "https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/model/Ticket.java"
click node_pdf "https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/service/PdfGeneratorService.java"
click node_usercontroller "https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/controllers/UserController.java"
click node_userservice "https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/service/UserService.java"
click node_userrepo "https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/repository/UserRepository.java"
click node_eventrepo "https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/repository/EventRepository.java"
click node_eventticketrepo "https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/repository/EventTicketRepository.java"
click node_ticketrepo "https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/repository/TicketRepository.java"
click node_s3 "https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/service/S3Service.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_app,node_authstate,node_eventpages,node_home,node_createpage,node_profile toneBlue
class node_authcontroller,node_authservice,node_jwt,node_user,node_aws toneAmber
class node_eventcontroller,node_eventservice,node_event,node_eventdto,node_eventticketdto toneMint
class node_ticketcontroller,node_ticketservice,node_eventticket,node_ticket,node_pdf,node_usercontroller,node_userservice toneRose
class node_userrepo,node_eventrepo,node_eventticketrepo,node_ticketrepo,node_s3,node_visitor toneIndigo
```

## Components

### Web application

- [Routes and shell](https://github.com/braxon2/koncerto/blob/master/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Auth state](https://github.com/braxon2/koncerto/blob/master/frontend/src/context/AuthContext.jsx): `frontend/src/context/AuthContext.jsx`
- [Event pages](https://github.com/braxon2/koncerto/blob/master/frontend/src/pages/EventDetailsPage%20.jsx): `frontend/src/pages/EventDetailsPage .jsx`
- [Event discovery](https://github.com/braxon2/koncerto/blob/master/frontend/src/pages/Home.jsx): `frontend/src/pages/Home.jsx`
- [Event creation](https://github.com/braxon2/koncerto/blob/master/frontend/src/pages/CreateEventPage.jsx): `frontend/src/pages/CreateEventPage.jsx`
- [Profile and tickets](https://github.com/braxon2/koncerto/blob/master/frontend/src/pages/ProfilePage.jsx): `frontend/src/pages/ProfilePage.jsx`

### Identity and access

- [Authentication API](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/auth/AuthenticationController.java): `backend/src/main/java/com/dusan/koncerto/auth/AuthenticationController.java`
- [Authentication service](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/auth/AuthenticationService.java): `backend/src/main/java/com/dusan/koncerto/auth/AuthenticationService.java`
- [JWT service](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/config/JwtService.java): `backend/src/main/java/com/dusan/koncerto/config/JwtService.java`
- [User account](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/model/User.java): `backend/src/main/java/com/dusan/koncerto/model/User.java`

### Event management

- [Event API](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/controllers/EventController.java): `backend/src/main/java/com/dusan/koncerto/controllers/EventController.java`
- [Event service](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/service/EventService.java): `backend/src/main/java/com/dusan/koncerto/service/EventService.java`
- [Event record](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/model/Event.java): `backend/src/main/java/com/dusan/koncerto/model/Event.java`
- [Event request data](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/dto/request/EventRequestDTO.java): `backend/src/main/java/com/dusan/koncerto/dto/request/EventRequestDTO.java`
- [Ticket-type request](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/dto/request/EventTicketRequestDTO.java): `backend/src/main/java/com/dusan/koncerto/dto/request/EventTicketRequestDTO.java`

### Ticketing

- [Ticket API](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/controllers/TicketController.java): `backend/src/main/java/com/dusan/koncerto/controllers/TicketController.java`
- [Ticket service](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/service/TicketService.java): `backend/src/main/java/com/dusan/koncerto/service/TicketService.java`
- [Ticket type](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/model/EventTicket.java): `backend/src/main/java/com/dusan/koncerto/model/EventTicket.java`
- [Issued ticket](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/model/Ticket.java): `backend/src/main/java/com/dusan/koncerto/model/Ticket.java`
- [PDF and QR generator](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/service/PdfGeneratorService.java): `backend/src/main/java/com/dusan/koncerto/service/PdfGeneratorService.java`
- [User API](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/controllers/UserController.java): `backend/src/main/java/com/dusan/koncerto/controllers/UserController.java`
- [User and ticket views](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/service/UserService.java): `backend/src/main/java/com/dusan/koncerto/service/UserService.java`

### Persistence and media

- [User repository](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/repository/UserRepository.java): `backend/src/main/java/com/dusan/koncerto/repository/UserRepository.java`
- [Event repository](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/repository/EventRepository.java): `backend/src/main/java/com/dusan/koncerto/repository/EventRepository.java`
- [Ticket-type repository](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/repository/EventTicketRepository.java): `backend/src/main/java/com/dusan/koncerto/repository/EventTicketRepository.java`
- [Ticket repository](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/repository/TicketRepository.java): `backend/src/main/java/com/dusan/koncerto/repository/TicketRepository.java`
- [S3 image storage](https://github.com/braxon2/koncerto/blob/master/backend/src/main/java/com/dusan/koncerto/service/S3Service.java): `backend/src/main/java/com/dusan/koncerto/service/S3Service.java`

### Other components

- **Attendee / organizer**
- **AWS S3**

## Connections

- Attendee / organizer → Routes and shell: uses
- Routes and shell → Event discovery: routes to (evidence: `frontend/src/App.jsx`)
- Routes and shell → Event pages: routes to (evidence: `frontend/src/App.jsx`)
- Routes and shell → Event creation: routes to (evidence: `frontend/src/App.jsx`)
- Routes and shell → Profile and tickets: routes to (evidence: `frontend/src/App.jsx`)
- Event pages → Auth state: reads auth (evidence: `frontend/src/pages/EventDetailsPage .jsx`)
- Profile and tickets → Auth state: reads auth (evidence: `frontend/src/pages/ProfilePage.jsx`)
- Authentication API → Authentication service: delegates to (evidence: `backend/src/main/java/com/dusan/koncerto/auth/AuthenticationController.java`)
- Authentication service → User repository: reads and saves (evidence: `backend/src/main/java/com/dusan/koncerto/auth/AuthenticationService.java`)
- Authentication service → JWT service: generates token (evidence: `backend/src/main/java/com/dusan/koncerto/auth/AuthenticationService.java`)
- Authentication service → User account: creates account (evidence: `backend/src/main/java/com/dusan/koncerto/auth/AuthenticationService.java`)
- Event API → Event service: delegates to (evidence: `backend/src/main/java/com/dusan/koncerto/controllers/EventController.java`)
- Event API → Ticket service: delegates to (evidence: `backend/src/main/java/com/dusan/koncerto/controllers/EventController.java`)
- Event service → Event repository: reads and saves (evidence: `backend/src/main/java/com/dusan/koncerto/service/EventService.java`)
- Event service → Ticket-type repository: reads and saves (evidence: `backend/src/main/java/com/dusan/koncerto/service/EventService.java`)
- Event service → S3 image storage: uploads images (evidence: `backend/src/main/java/com/dusan/koncerto/service/EventService.java`)
- Event service → Event record: builds event (evidence: `backend/src/main/java/com/dusan/koncerto/service/EventService.java`)
- Event service → Event request data: maps request (evidence: `backend/src/main/java/com/dusan/koncerto/service/EventService.java`)
- Event service → Ticket-type request: maps request (evidence: `backend/src/main/java/com/dusan/koncerto/service/EventService.java`)
- Ticket API → Ticket service: delegates to (evidence: `backend/src/main/java/com/dusan/koncerto/controllers/TicketController.java`)
- Ticket service → Ticket repository: reads and saves (evidence: `backend/src/main/java/com/dusan/koncerto/service/TicketService.java`)
- Ticket service → Ticket-type repository: reads and updates (evidence: `backend/src/main/java/com/dusan/koncerto/service/TicketService.java`)
- Ticket service → User repository: looks up buyer (evidence: `backend/src/main/java/com/dusan/koncerto/service/TicketService.java`)
- Ticket service → PDF and QR generator: generates PDF (evidence: `backend/src/main/java/com/dusan/koncerto/service/TicketService.java`)
- Ticket service → Issued ticket: issues tickets (evidence: `backend/src/main/java/com/dusan/koncerto/service/TicketService.java`)
- PDF and QR generator → Event record: reads event details (evidence: `backend/src/main/java/com/dusan/koncerto/service/PdfGeneratorService.java`)
- PDF and QR generator → Issued ticket: renders ticket data (evidence: `backend/src/main/java/com/dusan/koncerto/service/PdfGeneratorService.java`)
- User API → User and ticket views: delegates to (evidence: `backend/src/main/java/com/dusan/koncerto/controllers/UserController.java`)
- User and ticket views → User repository: loads user (evidence: `backend/src/main/java/com/dusan/koncerto/service/UserService.java`)
- S3 image storage → AWS S3: stores files
