# bjonne696/back-end-exam-project-1 architecture

> Architecture diagram of the GitHub repository bjonne696/back-end-exam-project-1, 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/bjonne696/back-end-exam-project-1
- Repository: https://github.com/bjonne696/back-end-exam-project-1

## Overview

VEM is a virtual event management system: users interact with an Express/EJS web client, whose browser-side scripts call a REST API backed by MySQL. The principal workflow covers authentication, event discovery and management, speaker assignment, and attendee registration; administrators also initialize imported data and manage organizers and event types. The README documents these capabilities, while sampled source confirms API composition, login, search, attendee registration, event routes, and model associations. Unsampled domain internals are represented only at their documented source paths.

Main entry points: [`Back-end/controllers`](https://github.com/bjonne696/back-end-exam-project-1/tree/main/Back-end/controllers) (HTTP controllers), [`Front-end/app.js`](https://github.com/bjonne696/back-end-exam-project-1/blob/main/Front-end/app.js) (Web app), [`Front-end/public/javascripts`](https://github.com/bjonne696/back-end-exam-project-1/tree/main/Front-end/public/javascripts) (Browser scripts), [`Back-end/models/index.js`](https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/models/index.js) (Model registry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web client"]
  node_webapp["Web app<br/>[app.js]"]
  node_publicpages["Public pages<br/>[default.js]"]
  node_adminpages["Admin pages<br/>[admin.js]"]
  node_clientjs["Browser scripts"]
end

subgraph group_api["REST API"]
  node_api["API app<br/>[app.js]"]
  node_auth["Authentication<br/>[authService.js]"]
  node_routes["Resource routes"]
  node_controllers["HTTP controllers"]
end

subgraph group_domain["Event domains"]
  node_init["Data initialization<br/>[initService.js]"]
  node_events["Event management<br/>[eventService.js]"]
  node_types["Event types"]
  node_speakers["Speaker management<br/>[speakerService.js]"]
  node_attendees["Attendee registration<br/>[attendeeService.js]"]
  node_organizers["Organizer management"]
  node_search["Event search<br/>[searchService.js]"]
  node_stats["Event statistics<br/>[statsService.js]"]
end

subgraph group_data["Persistence"]
  node_models["Model registry<br/>[index.js]"]
  node_mysql[("MySQL database<br/>[database.js]")]
end

node_user(("Browser user"))
node_noroff["Noroff source API"]

node_user -->|"opens pages"| node_webapp
node_webapp -->|"dispatches"| node_publicpages
node_webapp -->|"dispatches"| node_adminpages
node_publicpages -->|"serves client"| node_clientjs
node_adminpages -->|"serves client"| node_clientjs
node_clientjs -->|"Axios requests"| node_api
node_api -->|"mounts routes"| node_routes
node_routes -->|"dispatches"| node_controllers
node_controllers -->|"calls login"| node_auth
node_controllers -->|"calls initialization"| node_init
node_controllers -->|"calls event logic"| node_events
node_controllers -->|"calls type logic"| node_types
node_controllers -->|"calls speaker logic"| node_speakers
node_controllers -->|"calls registration"| node_attendees
node_controllers -->|"calls organizer logic"| node_organizers
node_controllers -->|"calls search"| node_search
node_controllers -->|"calls statistics"| node_stats
node_auth -->|"queries users"| node_models
node_search -->|"queries events"| node_models
node_init -.->|"imports source data"| node_noroff
node_models -->|"reads and writes"| node_mysql

click node_webapp "https://github.com/bjonne696/back-end-exam-project-1/blob/main/Front-end/app.js"
click node_publicpages "https://github.com/bjonne696/back-end-exam-project-1/blob/main/Front-end/routes/default.js"
click node_adminpages "https://github.com/bjonne696/back-end-exam-project-1/blob/main/Front-end/routes/admin.js"
click node_clientjs "https://github.com/bjonne696/back-end-exam-project-1/tree/main/Front-end/public/javascripts"
click node_api "https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/app.js"
click node_auth "https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/services/authService.js"
click node_init "https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/services/initService.js"
click node_events "https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/services/eventService.js"
click node_types "https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/services/eventTypeService.js"
click node_speakers "https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/services/speakerService.js"
click node_attendees "https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/services/attendeeService.js"
click node_organizers "https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/services/organizerService.js"
click node_search "https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/services/searchService.js"
click node_stats "https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/services/statsService.js"
click node_routes "https://github.com/bjonne696/back-end-exam-project-1/tree/main/Back-end/routes"
click node_controllers "https://github.com/bjonne696/back-end-exam-project-1/tree/main/Back-end/controllers"
click node_models "https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/models/index.js"
click node_mysql "https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/config/database.js"

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_webapp,node_publicpages,node_adminpages,node_clientjs,node_user toneBlue
class node_api,node_auth,node_routes,node_controllers toneAmber
class node_init,node_events,node_types,node_speakers,node_attendees,node_organizers,node_search,node_stats,node_noroff toneMint
class node_models,node_mysql toneRose
```

## Components

### Web client

- [Web app](https://github.com/bjonne696/back-end-exam-project-1/blob/main/Front-end/app.js): `Front-end/app.js`
- [Public pages](https://github.com/bjonne696/back-end-exam-project-1/blob/main/Front-end/routes/default.js): `Front-end/routes/default.js`
- [Admin pages](https://github.com/bjonne696/back-end-exam-project-1/blob/main/Front-end/routes/admin.js): `Front-end/routes/admin.js`
- [Browser scripts](https://github.com/bjonne696/back-end-exam-project-1/tree/main/Front-end/public/javascripts): `Front-end/public/javascripts`

### REST API

- [API app](https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/app.js): `Back-end/app.js`
- [Authentication](https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/services/authService.js): `Back-end/services/authService.js`
- [Resource routes](https://github.com/bjonne696/back-end-exam-project-1/tree/main/Back-end/routes): `Back-end/routes`
- [HTTP controllers](https://github.com/bjonne696/back-end-exam-project-1/tree/main/Back-end/controllers): `Back-end/controllers`

### Event domains

- [Data initialization](https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/services/initService.js): `Back-end/services/initService.js`
- [Event management](https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/services/eventService.js): `Back-end/services/eventService.js`
- [Event types](https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/services/eventTypeService.js): `Back-end/services/eventTypeService.js`
- [Speaker management](https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/services/speakerService.js): `Back-end/services/speakerService.js`
- [Attendee registration](https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/services/attendeeService.js): `Back-end/services/attendeeService.js`
- [Organizer management](https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/services/organizerService.js): `Back-end/services/organizerService.js`
- [Event search](https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/services/searchService.js): `Back-end/services/searchService.js`
- [Event statistics](https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/services/statsService.js): `Back-end/services/statsService.js`

### Persistence

- [Model registry](https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/models/index.js): `Back-end/models/index.js`
- [MySQL database](https://github.com/bjonne696/back-end-exam-project-1/blob/main/Back-end/config/database.js): `Back-end/config/database.js`

### Other components

- **Browser user**
- **Noroff source API**

## Connections

- Browser user → Web app: opens pages
- Web app → Public pages: dispatches
- Web app → Admin pages: dispatches
- Public pages → Browser scripts: serves client
- Admin pages → Browser scripts: serves client
- Browser scripts → API app: Axios requests
- API app → Resource routes: mounts routes
- Resource routes → HTTP controllers: dispatches
- HTTP controllers → Authentication: calls login
- HTTP controllers → Data initialization: calls initialization
- HTTP controllers → Event management: calls event logic
- HTTP controllers → Event types: calls type logic
- HTTP controllers → Speaker management: calls speaker logic
- HTTP controllers → Attendee registration: calls registration
- HTTP controllers → Organizer management: calls organizer logic
- HTTP controllers → Event search: calls search
- HTTP controllers → Event statistics: calls statistics
- Authentication → Model registry: queries users
- Event search → Model registry: queries events
- Data initialization → Noroff source API: imports source data
- Model registry → MySQL database: reads and writes
