# evansabraham/spotify-microservice-application architecture

> Architecture diagram of the GitHub repository evansabraham/spotify-microservice-application, 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/evansabraham/spotify-microservice-application
- Repository: https://github.com/evansabraham/spotify-microservice-application

## Overview

This is a microservice-based music streaming platform. Users browse albums and songs, play audio, and can register or log in; administrators manage albums, songs, and thumbnails. The frontend’s route map and playback component are represented, while the README documents its REST integration with the three backend services. Backend routes dispatch to domain handlers, which access service-specific databases and, where documented or shown, media storage and Redis caching. Frontend data-fetching details and several integrations are unsampled, so those relationships are documented at service level rather than attributed to unverified frontend modules.

Main entry points: [`frontend/src/App.tsx`](https://github.com/evansabraham/spotify-microservice-application/blob/master/frontend/src/App.tsx) (Route selection), [`admin-service/src/controllers.ts`](https://github.com/evansabraham/spotify-microservice-application/blob/master/admin-service/src/controllers.ts) (Catalog administration), [`song-service/src/controller.ts`](https://github.com/evansabraham/spotify-microservice-application/blob/master/song-service/src/controller.ts) (Catalog retrieval), [`admin-service/src/route.ts`](https://github.com/evansabraham/spotify-microservice-application/blob/master/admin-service/src/route.ts) (Admin API routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["React frontend"]
  node_app["Route selection<br/>[App.tsx]"]
  node_browse["Browse pages"]
  node_playlist["Playlist page<br/>[PlayList.tsx]"]
  node_adminui["Admin dashboard<br/>[Admin.tsx]"]
  node_player["Audio player<br/>[Player.tsx]"]
  node_providers["Client providers"]
end

subgraph group_users["User service"]
  node_user_routes["User API routes<br/>[routes.ts]"]
  node_user_auth["Auth and profile<br/>[controllers.ts]"]
  node_user_guard["JWT guard<br/>[middleware.ts]"]
  node_user_model["User records<br/>[models.ts]"]
end

subgraph group_admin["Admin service"]
  node_admin_routes["Admin API routes<br/>[route.ts]"]
  node_admin_ops["Catalog administration<br/>[controllers.ts]"]
  node_admin_guard["Admin authorization<br/>[middleware.ts]"]
  node_admin_server["Admin server and schema<br/>[index.ts]"]
end

subgraph group_songs["Song service"]
  node_song_routes["Catalog API routes<br/>[route.ts]"]
  node_song_reads["Catalog retrieval<br/>[controller.ts]"]
end

subgraph group_infra["Data and media"]
  node_user_db[("MongoDB")]
  node_admin_db[("Admin PostgreSQL<br/>[db.ts]")]
  node_song_db[("Song PostgreSQL<br/>[db.ts]")]
  node_redis[("Redis cache")]
  node_cloudinary[("Cloudinary media")]
end

node_listener(("Listener / admin"))

node_listener -->|"opens"| node_app
node_app -->|"routes to"| node_browse
node_app -->|"routes to"| node_playlist
node_app -->|"routes to"| node_adminui
node_browse -.->|"plays with"| node_player
node_providers -.->|"supplies data"| node_browse
node_providers -->|"supplies actions"| node_adminui
node_listener -.->|"uses REST API"| node_user_routes
node_listener -.->|"uses REST API"| node_song_routes
node_listener -.->|"uses REST API"| node_admin_routes
node_user_routes -->|"dispatches"| node_user_auth
node_user_routes -->|"guards profile"| node_user_guard
node_user_auth -->|"reads and writes"| node_user_model
node_user_guard -->|"loads user"| node_user_model
node_user_model -->|"persists in"| node_user_db
node_admin_routes -->|"guards requests"| node_admin_guard
node_admin_routes -->|"dispatches"| node_admin_ops
node_admin_ops -->|"queries"| node_admin_db
node_admin_ops -->|"uploads media"| node_cloudinary
node_admin_ops -->|"invalidates cache"| node_redis
node_admin_server -->|"mounts"| node_admin_routes
node_admin_server -->|"initializes schema"| node_admin_db
node_song_routes -->|"dispatches"| node_song_reads
node_song_reads -->|"queries"| node_song_db
node_song_reads -->|"reads and caches"| node_redis
node_song_reads -.->|"fetches media"| node_cloudinary

click node_app "https://github.com/evansabraham/spotify-microservice-application/blob/master/frontend/src/App.tsx"
click node_browse "https://github.com/evansabraham/spotify-microservice-application/tree/master/frontend/src/pages"
click node_playlist "https://github.com/evansabraham/spotify-microservice-application/blob/master/frontend/src/pages/PlayList.tsx"
click node_adminui "https://github.com/evansabraham/spotify-microservice-application/blob/master/frontend/src/pages/Admin.tsx"
click node_player "https://github.com/evansabraham/spotify-microservice-application/blob/master/frontend/src/components/Player.tsx"
click node_providers "https://github.com/evansabraham/spotify-microservice-application/tree/master/frontend/src/Providers"
click node_user_routes "https://github.com/evansabraham/spotify-microservice-application/blob/master/user-service/src/routes.ts"
click node_user_auth "https://github.com/evansabraham/spotify-microservice-application/blob/master/user-service/src/controllers.ts"
click node_user_guard "https://github.com/evansabraham/spotify-microservice-application/blob/master/user-service/src/middleware.ts"
click node_user_model "https://github.com/evansabraham/spotify-microservice-application/blob/master/user-service/src/models.ts"
click node_admin_routes "https://github.com/evansabraham/spotify-microservice-application/blob/master/admin-service/src/route.ts"
click node_admin_ops "https://github.com/evansabraham/spotify-microservice-application/blob/master/admin-service/src/controllers.ts"
click node_admin_guard "https://github.com/evansabraham/spotify-microservice-application/blob/master/admin-service/src/middleware.ts"
click node_admin_server "https://github.com/evansabraham/spotify-microservice-application/blob/master/admin-service/src/index.ts"
click node_song_routes "https://github.com/evansabraham/spotify-microservice-application/blob/master/song-service/src/route.ts"
click node_song_reads "https://github.com/evansabraham/spotify-microservice-application/blob/master/song-service/src/controller.ts"
click node_admin_db "https://github.com/evansabraham/spotify-microservice-application/blob/master/admin-service/src/config/db.ts"
click node_song_db "https://github.com/evansabraham/spotify-microservice-application/blob/master/song-service/src/config/db.ts"

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_browse,node_playlist,node_adminui,node_player,node_providers toneBlue
class node_user_routes,node_user_auth,node_user_guard,node_user_model toneAmber
class node_admin_routes,node_admin_ops,node_admin_guard,node_admin_server toneMint
class node_song_routes,node_song_reads toneRose
class node_user_db,node_admin_db,node_song_db,node_redis,node_cloudinary,node_listener toneIndigo
```

## Components

### React frontend

- [Route selection](https://github.com/evansabraham/spotify-microservice-application/blob/master/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Browse pages](https://github.com/evansabraham/spotify-microservice-application/tree/master/frontend/src/pages): `frontend/src/pages`
- [Playlist page](https://github.com/evansabraham/spotify-microservice-application/blob/master/frontend/src/pages/PlayList.tsx): `frontend/src/pages/PlayList.tsx`
- [Admin dashboard](https://github.com/evansabraham/spotify-microservice-application/blob/master/frontend/src/pages/Admin.tsx): `frontend/src/pages/Admin.tsx`
- [Audio player](https://github.com/evansabraham/spotify-microservice-application/blob/master/frontend/src/components/Player.tsx): `frontend/src/components/Player.tsx`
- [Client providers](https://github.com/evansabraham/spotify-microservice-application/tree/master/frontend/src/Providers): `frontend/src/Providers`

### User service

- [User API routes](https://github.com/evansabraham/spotify-microservice-application/blob/master/user-service/src/routes.ts): `user-service/src/routes.ts`
- [Auth and profile](https://github.com/evansabraham/spotify-microservice-application/blob/master/user-service/src/controllers.ts): `user-service/src/controllers.ts`
- [JWT guard](https://github.com/evansabraham/spotify-microservice-application/blob/master/user-service/src/middleware.ts): `user-service/src/middleware.ts`
- [User records](https://github.com/evansabraham/spotify-microservice-application/blob/master/user-service/src/models.ts): `user-service/src/models.ts`

### Admin service

- [Admin API routes](https://github.com/evansabraham/spotify-microservice-application/blob/master/admin-service/src/route.ts): `admin-service/src/route.ts`
- [Catalog administration](https://github.com/evansabraham/spotify-microservice-application/blob/master/admin-service/src/controllers.ts): `admin-service/src/controllers.ts`
- [Admin authorization](https://github.com/evansabraham/spotify-microservice-application/blob/master/admin-service/src/middleware.ts): `admin-service/src/middleware.ts`
- [Admin server and schema](https://github.com/evansabraham/spotify-microservice-application/blob/master/admin-service/src/index.ts): `admin-service/src/index.ts`

### Song service

- [Catalog API routes](https://github.com/evansabraham/spotify-microservice-application/blob/master/song-service/src/route.ts): `song-service/src/route.ts`
- [Catalog retrieval](https://github.com/evansabraham/spotify-microservice-application/blob/master/song-service/src/controller.ts): `song-service/src/controller.ts`

### Data and media

- **MongoDB**
- [Admin PostgreSQL](https://github.com/evansabraham/spotify-microservice-application/blob/master/admin-service/src/config/db.ts): `admin-service/src/config/db.ts`
- [Song PostgreSQL](https://github.com/evansabraham/spotify-microservice-application/blob/master/song-service/src/config/db.ts): `song-service/src/config/db.ts`
- **Redis cache**
- **Cloudinary media**

### Other components

- **Listener / admin**

## Connections

- Listener / admin → Route selection: opens (evidence: `README.md`)
- Route selection → Browse pages: routes to (evidence: `frontend/src/App.tsx`)
- Route selection → Playlist page: routes to (evidence: `frontend/src/App.tsx`)
- Route selection → Admin dashboard: routes to (evidence: `frontend/src/App.tsx`)
- Browse pages → Audio player: plays with
- Client providers → Browse pages: supplies data
- Client providers → Admin dashboard: supplies actions (evidence: `frontend/src/Providers/AdminProvider.tsx`)
- Listener / admin → User API routes: uses REST API (evidence: `README.md`)
- Listener / admin → Catalog API routes: uses REST API (evidence: `README.md`)
- Listener / admin → Admin API routes: uses REST API (evidence: `README.md`)
- User API routes → Auth and profile: dispatches (evidence: `user-service/src/routes.ts`)
- User API routes → JWT guard: guards profile (evidence: `user-service/src/routes.ts`)
- Auth and profile → User records: reads and writes (evidence: `user-service/src/controllers.ts`)
- JWT guard → User records: loads user (evidence: `user-service/src/middleware.ts`)
- User records → MongoDB: persists in (evidence: `README.md`)
- Admin API routes → Admin authorization: guards requests (evidence: `admin-service/src/route.ts`)
- Admin API routes → Catalog administration: dispatches (evidence: `admin-service/src/route.ts`)
- Catalog administration → Admin PostgreSQL: queries (evidence: `admin-service/src/controllers.ts`)
- Catalog administration → Cloudinary media: uploads media (evidence: `admin-service/src/controllers.ts`)
- Catalog administration → Redis cache: invalidates cache (evidence: `admin-service/src/controllers.ts`)
- Admin server and schema → Admin API routes: mounts (evidence: `admin-service/src/index.ts`)
- Admin server and schema → Admin PostgreSQL: initializes schema (evidence: `admin-service/src/index.ts`)
- Catalog API routes → Catalog retrieval: dispatches (evidence: `song-service/src/route.ts`)
- Catalog retrieval → Song PostgreSQL: queries (evidence: `song-service/src/controller.ts`)
- Catalog retrieval → Redis cache: reads and caches (evidence: `song-service/src/controller.ts`)
- Catalog retrieval → Cloudinary media: fetches media (evidence: `README.md`)
