# matejhauschwitz/psi architecture

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

- Interactive diagram: https://gitdiagram.com/matejhauschwitz/psi
- Repository: https://github.com/matejhauschwitz/psi

## Overview

Bookstore is a React storefront backed by an ASP.NET Core API and MySQL. The principal workflow is browsing and filtering the catalogue, viewing a book and its reviews, then signing in to manage favourites or place and review orders. Separate capabilities cover account administration, book imports, and audit logs. The API and authentication wiring are visible in sampled source; several service and frontend details are represented at their documented subsystem paths because their implementations were not sampled.

Main entry points: [`frontend/src/services/api.ts`](https://github.com/matejhauschwitz/psi/blob/main/frontend/src/services/api.ts) (API Client), [`api/EFModels/Data/DatabaseContext.cs`](https://github.com/matejhauschwitz/psi/blob/main/api/EFModels/Data/DatabaseContext.cs) (Entity Context), [`frontend/src/App.tsx`](https://github.com/matejhauschwitz/psi/blob/main/frontend/src/App.tsx) (React Application), [`api/api/Controllers/AdminController.cs`](https://github.com/matejhauschwitz/psi/blob/main/api/api/Controllers/AdminController.cs) (Admin Endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_storefront["Storefront"]
  node_app["React Application<br/>[App.tsx]"]
  node_catalogui["Catalogue UI<br/>[BooksPage.tsx]"]
  node_detailui["Book Detail UI<br/>[BookDetailPage.tsx]"]
  node_accountui["Account And Auth UI"]
  node_cartui["Cart And Orders UI<br/>[Cart.tsx]"]
  node_client["API Client<br/>[api.ts]"]
end

subgraph group_identity["Accounts"]
  node_authcontroller["Auth Endpoints<br/>[AuthController.cs]"]
  node_userscontroller["User Endpoints<br/>[UserController.cs]"]
  node_authservice["Authentication Service<br/>[AuthService.cs]"]
  node_userservice["User Service<br/>[UserService.cs]"]
end

subgraph group_commerce["Books And Orders"]
  node_bookscontroller["Book Endpoints<br/>[BooksController.cs]"]
  node_bookservice["Book Service<br/>[BookService.cs]"]
  node_commentscontroller["Review Endpoints"]
  node_commentservice["Comment Service<br/>[CommentService.cs]"]
  node_orderscontroller["Order Endpoints<br/>[OrderController.cs]"]
  node_orderservice["Order Service<br/>[OrderService.cs]"]
end

subgraph group_operations["Administration"]
  node_admincontroller["Admin Endpoints<br/>[AdminController.cs]"]
  node_importcontroller["Import Endpoints"]
  node_csvimport["CSV Import"]
  node_jsonimport["JSON Import"]
  node_auditcontroller["Audit Endpoints<br/>[AuditController.cs]"]
  node_auditservice["Audit Service<br/>[AuditService.cs]"]
end

subgraph group_backend["API And Persistence"]
  node_context["Entity Context<br/>[DatabaseContext.cs]"]
  node_mysql[("MySQL Database")]
end

node_visitor(("Visitor"))
node_customer(("Registered User"))
node_admin(("Administrator"))
node_importfile["CSV Or JSON File"]

node_visitor -->|"browses"| node_app
node_customer -->|"uses"| node_app
node_admin -->|"administers"| node_app
node_app -->|"routes to"| node_catalogui
node_app -->|"routes to"| node_detailui
node_app -->|"routes to"| node_accountui
node_app -->|"routes to"| node_cartui
node_catalogui -->|"requests catalogue"| node_client
node_detailui -->|"requests details"| node_client
node_accountui -->|"requests account"| node_client
node_cartui -->|"submits orders"| node_client
node_client -->|"calls auth API"| node_authcontroller
node_client -->|"calls user API"| node_userscontroller
node_client -->|"calls books API"| node_bookscontroller
node_client -->|"calls review API"| node_commentscontroller
node_client -->|"calls order API"| node_orderscontroller
node_authcontroller -->|"delegates auth"| node_authservice
node_userscontroller -->|"delegates users"| node_userservice
node_bookscontroller -->|"validates token"| node_authservice
node_bookscontroller -->|"delegates books"| node_bookservice
node_commentscontroller -->|"delegates reviews"| node_commentservice
node_orderscontroller -->|"delegates orders"| node_orderservice
node_admincontroller -->|"checks admin"| node_authservice
node_admincontroller -->|"manages users"| node_userservice
node_admincontroller -->|"manages orders"| node_orderservice
node_admincontroller -->|"manages books"| node_bookservice
node_admincontroller -->|"reads logs"| node_auditservice
node_importfile -->|"uploads data"| node_importcontroller
node_importcontroller -->|"dispatches CSV"| node_csvimport
node_importcontroller -->|"dispatches JSON"| node_jsonimport
node_authservice -->|"logs registration"| node_auditservice
node_authservice -->|"reads and writes"| node_context
node_userservice -->|"reads and writes"| node_context
node_bookservice -->|"reads and writes"| node_context
node_commentservice -->|"reads and writes"| node_context
node_orderservice -->|"reads and writes"| node_context
node_auditservice -->|"reads and writes"| node_context
node_csvimport -->|"imports records"| node_context
node_jsonimport -->|"imports records"| node_context
node_context -->|"persists entities"| node_mysql

click node_app "https://github.com/matejhauschwitz/psi/blob/main/frontend/src/App.tsx"
click node_catalogui "https://github.com/matejhauschwitz/psi/blob/main/frontend/src/pages/BooksPage.tsx"
click node_detailui "https://github.com/matejhauschwitz/psi/blob/main/frontend/src/pages/BookDetailPage.tsx"
click node_accountui "https://github.com/matejhauschwitz/psi/tree/main/frontend/src/pages"
click node_cartui "https://github.com/matejhauschwitz/psi/blob/main/frontend/src/components/Cart.tsx"
click node_client "https://github.com/matejhauschwitz/psi/blob/main/frontend/src/services/api.ts"
click node_authcontroller "https://github.com/matejhauschwitz/psi/blob/main/api/api/Controllers/AuthController.cs"
click node_userscontroller "https://github.com/matejhauschwitz/psi/blob/main/api/api/Controllers/UserController.cs"
click node_authservice "https://github.com/matejhauschwitz/psi/blob/main/api/api/Services/AuthService.cs"
click node_userservice "https://github.com/matejhauschwitz/psi/blob/main/api/api/Services/UserService.cs"
click node_bookscontroller "https://github.com/matejhauschwitz/psi/blob/main/api/api/Controllers/BooksController.cs"
click node_bookservice "https://github.com/matejhauschwitz/psi/blob/main/api/api/Services/BookService.cs"
click node_commentscontroller "https://github.com/matejhauschwitz/psi/blob/main/api/api/Controllers/CommentController.cs"
click node_commentservice "https://github.com/matejhauschwitz/psi/blob/main/api/api/Services/CommentService.cs"
click node_orderscontroller "https://github.com/matejhauschwitz/psi/blob/main/api/api/Controllers/OrderController.cs"
click node_orderservice "https://github.com/matejhauschwitz/psi/blob/main/api/api/Services/OrderService.cs"
click node_admincontroller "https://github.com/matejhauschwitz/psi/blob/main/api/api/Controllers/AdminController.cs"
click node_importcontroller "https://github.com/matejhauschwitz/psi/blob/main/api/api/Controllers/DataLoadController.cs"
click node_csvimport "https://github.com/matejhauschwitz/psi/blob/main/api/api/Services/LoadFromCSVService.cs"
click node_jsonimport "https://github.com/matejhauschwitz/psi/blob/main/api/api/Services/LoadFromCdbService.cs"
click node_auditcontroller "https://github.com/matejhauschwitz/psi/blob/main/api/api/Controllers/AuditController.cs"
click node_auditservice "https://github.com/matejhauschwitz/psi/blob/main/api/api/Services/AuditService.cs"
click node_context "https://github.com/matejhauschwitz/psi/blob/main/api/EFModels/Data/DatabaseContext.cs"

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_catalogui,node_detailui,node_accountui,node_cartui,node_client,node_customer toneBlue
class node_authcontroller,node_userscontroller,node_authservice,node_userservice toneAmber
class node_bookscontroller,node_bookservice,node_commentscontroller,node_commentservice,node_orderscontroller,node_orderservice toneMint
class node_admincontroller,node_importcontroller,node_csvimport,node_jsonimport,node_auditcontroller,node_auditservice toneRose
class node_context,node_mysql,node_visitor,node_admin,node_importfile toneIndigo
```

## Components

### Storefront

- [React Application](https://github.com/matejhauschwitz/psi/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Catalogue UI](https://github.com/matejhauschwitz/psi/blob/main/frontend/src/pages/BooksPage.tsx): `frontend/src/pages/BooksPage.tsx`
- [Book Detail UI](https://github.com/matejhauschwitz/psi/blob/main/frontend/src/pages/BookDetailPage.tsx): `frontend/src/pages/BookDetailPage.tsx`
- [Account And Auth UI](https://github.com/matejhauschwitz/psi/tree/main/frontend/src/pages): `frontend/src/pages`
- [Cart And Orders UI](https://github.com/matejhauschwitz/psi/blob/main/frontend/src/components/Cart.tsx): `frontend/src/components/Cart.tsx`
- [API Client](https://github.com/matejhauschwitz/psi/blob/main/frontend/src/services/api.ts): `frontend/src/services/api.ts`

### Accounts

- [Auth Endpoints](https://github.com/matejhauschwitz/psi/blob/main/api/api/Controllers/AuthController.cs): `api/api/Controllers/AuthController.cs`
- [User Endpoints](https://github.com/matejhauschwitz/psi/blob/main/api/api/Controllers/UserController.cs): `api/api/Controllers/UserController.cs`
- [Authentication Service](https://github.com/matejhauschwitz/psi/blob/main/api/api/Services/AuthService.cs): `api/api/Services/AuthService.cs`
- [User Service](https://github.com/matejhauschwitz/psi/blob/main/api/api/Services/UserService.cs): `api/api/Services/UserService.cs`

### Books And Orders

- [Book Endpoints](https://github.com/matejhauschwitz/psi/blob/main/api/api/Controllers/BooksController.cs): `api/api/Controllers/BooksController.cs`
- [Book Service](https://github.com/matejhauschwitz/psi/blob/main/api/api/Services/BookService.cs): `api/api/Services/BookService.cs`
- [Review Endpoints](https://github.com/matejhauschwitz/psi/blob/main/api/api/Controllers/CommentController.cs): `api/api/Controllers/CommentController.cs`
- [Comment Service](https://github.com/matejhauschwitz/psi/blob/main/api/api/Services/CommentService.cs): `api/api/Services/CommentService.cs`
- [Order Endpoints](https://github.com/matejhauschwitz/psi/blob/main/api/api/Controllers/OrderController.cs): `api/api/Controllers/OrderController.cs`
- [Order Service](https://github.com/matejhauschwitz/psi/blob/main/api/api/Services/OrderService.cs): `api/api/Services/OrderService.cs`

### Administration

- [Admin Endpoints](https://github.com/matejhauschwitz/psi/blob/main/api/api/Controllers/AdminController.cs): `api/api/Controllers/AdminController.cs`
- [Import Endpoints](https://github.com/matejhauschwitz/psi/blob/main/api/api/Controllers/DataLoadController.cs): `api/api/Controllers/DataLoadController.cs`
- [CSV Import](https://github.com/matejhauschwitz/psi/blob/main/api/api/Services/LoadFromCSVService.cs): `api/api/Services/LoadFromCSVService.cs`
- [JSON Import](https://github.com/matejhauschwitz/psi/blob/main/api/api/Services/LoadFromCdbService.cs): `api/api/Services/LoadFromCdbService.cs`
- [Audit Endpoints](https://github.com/matejhauschwitz/psi/blob/main/api/api/Controllers/AuditController.cs): `api/api/Controllers/AuditController.cs`
- [Audit Service](https://github.com/matejhauschwitz/psi/blob/main/api/api/Services/AuditService.cs): `api/api/Services/AuditService.cs`

### API And Persistence

- [Entity Context](https://github.com/matejhauschwitz/psi/blob/main/api/EFModels/Data/DatabaseContext.cs): `api/EFModels/Data/DatabaseContext.cs`
- **MySQL Database**

### Other components

- **Visitor**
- **Registered User**
- **Administrator**
- **CSV Or JSON File**

## Connections

- Visitor → React Application: browses
- Registered User → React Application: uses
- Administrator → React Application: administers
- React Application → Catalogue UI: routes to
- React Application → Book Detail UI: routes to
- React Application → Account And Auth UI: routes to
- React Application → Cart And Orders UI: routes to
- Catalogue UI → API Client: requests catalogue
- Book Detail UI → API Client: requests details
- Account And Auth UI → API Client: requests account
- Cart And Orders UI → API Client: submits orders
- API Client → Auth Endpoints: calls auth API
- API Client → User Endpoints: calls user API
- API Client → Book Endpoints: calls books API
- API Client → Review Endpoints: calls review API
- API Client → Order Endpoints: calls order API
- Auth Endpoints → Authentication Service: delegates auth
- User Endpoints → User Service: delegates users
- Book Endpoints → Authentication Service: validates token
- Book Endpoints → Book Service: delegates books
- Review Endpoints → Comment Service: delegates reviews
- Order Endpoints → Order Service: delegates orders
- Admin Endpoints → Authentication Service: checks admin
- Admin Endpoints → User Service: manages users
- Admin Endpoints → Order Service: manages orders
- Admin Endpoints → Book Service: manages books
- Admin Endpoints → Audit Service: reads logs
- CSV Or JSON File → Import Endpoints: uploads data
- Import Endpoints → CSV Import: dispatches CSV
- Import Endpoints → JSON Import: dispatches JSON
- Authentication Service → Audit Service: logs registration
- Authentication Service → Entity Context: reads and writes
- User Service → Entity Context: reads and writes
- Book Service → Entity Context: reads and writes
- Comment Service → Entity Context: reads and writes
- Order Service → Entity Context: reads and writes
- Audit Service → Entity Context: reads and writes
- CSV Import → Entity Context: imports records
- JSON Import → Entity Context: imports records
- Entity Context → MySQL Database: persists entities
