# mynrdvx/b226-csp2-gabriel architecture

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

- Interactive diagram: https://gitdiagram.com/mynrdvx/b226-csp2-gabriel
- Repository: https://github.com/mynrdvx/b226-csp2-gabriel

## Overview

This is a Java command-line music catalog and playlist manager with administrator and user dashboards. Users register or log in; successful authentication routes them by role to catalog-management or user features. The application includes song search and archive/restore, artist and album management, user administration, and user-owned playlists with song membership. The tree shows a layered controller/service/repository design backed by a database connection. Several views and implementations were not sampled, so the graph avoids asserting their internal call wiring.

Main entry points: [`src/main/java/com/joysistvi/recordingapp/service`](https://github.com/mynrdvx/b226-csp2-gabriel/tree/master/src/main/java/com/joysistvi/recordingapp/service) (Business services), [`src/main/java/com/joysistvi/recordingapp/cliview/UserDashboardView.java`](https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/cliview/UserDashboardView.java) (User dashboard), [`src/main/java/com/joysistvi/recordingapp/App.java`](https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/App.java) (App routing), [`src/main/java/com/joysistvi/recordingapp/cliview`](https://github.com/mynrdvx/b226-csp2-gabriel/tree/master/src/main/java/com/joysistvi/recordingapp/cliview) (Catalog views)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cli["CLI workflows"]
  node_app["App routing<br/>[App.java]"]
  node_auth["Authentication view<br/>[AuthView.java]"]
  node_adminview["Admin dashboard"]
  node_userview["User dashboard"]
  node_catalogviews["Catalog views"]
  node_playlistviews["Playlist views"]
end

subgraph group_domain["Catalog and playlists"]
  node_songs["Song management"]
  node_artists["Artist management"]
  node_albums["Album management"]
  node_users["User accounts"]
  node_playlists["Playlist management"]
  node_memberships["Playlist songs"]
end

subgraph group_layers["Application layers"]
  node_services["Business services"]
  node_models["Domain models"]
end

subgraph group_storage["Persistence"]
  node_songrepo["Song repository"]
  node_playlistrepo["Playlist repository"]
  node_otherrepos["Other repositories"]
  node_dbconn["DB connection<br/>[DbConnection.java]"]
end

node_operator(("CLI user"))
node_database[("Relational database")]

node_operator -->|"chooses menu"| node_app
node_app -->|"authenticates"| node_auth
node_app -->|"routes admin"| node_adminview
node_app -->|"routes user"| node_userview
node_adminview -->|"uses views"| node_catalogviews
node_userview -->|"uses view"| node_playlistviews
node_catalogviews -->|"catalog actions"| node_songs
node_catalogviews -->|"artist actions"| node_artists
node_catalogviews -->|"album actions"| node_albums
node_adminview -->|"administers users"| node_users
node_playlistviews -->|"manages playlists"| node_playlists
node_playlistviews -->|"manages songs"| node_memberships
node_userview -->|"browses songs"| node_songs
node_userview -->|"browses albums"| node_albums
node_userview -->|"browses artists"| node_artists
node_songs -->|"delegates"| node_services
node_artists -->|"delegates"| node_services
node_albums -->|"delegates"| node_services
node_users -->|"delegates"| node_services
node_playlists -->|"delegates"| node_services
node_memberships -->|"delegates"| node_services
node_services -->|"uses song persistence"| node_songrepo
node_services -->|"uses playlist persistence"| node_playlistrepo
node_services -->|"uses persistence"| node_otherrepos
node_songrepo -->|"opens connection"| node_dbconn
node_playlistrepo -->|"opens connection"| node_dbconn
node_otherrepos -->|"opens connection"| node_dbconn
node_dbconn -->|"connects"| node_database

click node_app "https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/App.java"
click node_auth "https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/cliview/AuthView.java"
click node_adminview "https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/cliview/AdminDashboardView.java"
click node_userview "https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/cliview/UserDashboardView.java"
click node_catalogviews "https://github.com/mynrdvx/b226-csp2-gabriel/tree/master/src/main/java/com/joysistvi/recordingapp/cliview"
click node_playlistviews "https://github.com/mynrdvx/b226-csp2-gabriel/tree/master/src/main/java/com/joysistvi/recordingapp/cliview"
click node_songs "https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/controller/SongController.java"
click node_artists "https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/controller/ArtistController.java"
click node_albums "https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/controller/AlbumController.java"
click node_users "https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/controller/UserController.java"
click node_playlists "https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/controller/PlaylistController.java"
click node_memberships "https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/controller/PlaylistSongController.java"
click node_services "https://github.com/mynrdvx/b226-csp2-gabriel/tree/master/src/main/java/com/joysistvi/recordingapp/service"
click node_songrepo "https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/repository/SongRepositoryImpl.java"
click node_playlistrepo "https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/repository/PlaylistRepositoryImpl.java"
click node_otherrepos "https://github.com/mynrdvx/b226-csp2-gabriel/tree/master/src/main/java/com/joysistvi/recordingapp/repository"
click node_dbconn "https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/config/DbConnection.java"
click node_models "https://github.com/mynrdvx/b226-csp2-gabriel/tree/master/src/main/java/com/joysistvi/recordingapp/model"

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_auth,node_adminview,node_userview,node_catalogviews,node_playlistviews,node_operator toneBlue
class node_songs,node_artists,node_albums,node_users,node_playlists,node_memberships,node_database toneAmber
class node_services,node_models toneMint
class node_songrepo,node_playlistrepo,node_otherrepos,node_dbconn toneRose
```

## Components

### CLI workflows

- [App routing](https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/App.java): `src/main/java/com/joysistvi/recordingapp/App.java`
- [Authentication view](https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/cliview/AuthView.java): `src/main/java/com/joysistvi/recordingapp/cliview/AuthView.java`
- [Admin dashboard](https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/cliview/AdminDashboardView.java): `src/main/java/com/joysistvi/recordingapp/cliview/AdminDashboardView.java`
- [User dashboard](https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/cliview/UserDashboardView.java): `src/main/java/com/joysistvi/recordingapp/cliview/UserDashboardView.java`
- [Catalog views](https://github.com/mynrdvx/b226-csp2-gabriel/tree/master/src/main/java/com/joysistvi/recordingapp/cliview): `src/main/java/com/joysistvi/recordingapp/cliview`
- [Playlist views](https://github.com/mynrdvx/b226-csp2-gabriel/tree/master/src/main/java/com/joysistvi/recordingapp/cliview): `src/main/java/com/joysistvi/recordingapp/cliview`

### Catalog and playlists

- [Song management](https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/controller/SongController.java): `src/main/java/com/joysistvi/recordingapp/controller/SongController.java`
- [Artist management](https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/controller/ArtistController.java): `src/main/java/com/joysistvi/recordingapp/controller/ArtistController.java`
- [Album management](https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/controller/AlbumController.java): `src/main/java/com/joysistvi/recordingapp/controller/AlbumController.java`
- [User accounts](https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/controller/UserController.java): `src/main/java/com/joysistvi/recordingapp/controller/UserController.java`
- [Playlist management](https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/controller/PlaylistController.java): `src/main/java/com/joysistvi/recordingapp/controller/PlaylistController.java`
- [Playlist songs](https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/controller/PlaylistSongController.java): `src/main/java/com/joysistvi/recordingapp/controller/PlaylistSongController.java`

### Application layers

- [Business services](https://github.com/mynrdvx/b226-csp2-gabriel/tree/master/src/main/java/com/joysistvi/recordingapp/service): `src/main/java/com/joysistvi/recordingapp/service`
- [Domain models](https://github.com/mynrdvx/b226-csp2-gabriel/tree/master/src/main/java/com/joysistvi/recordingapp/model): `src/main/java/com/joysistvi/recordingapp/model`

### Persistence

- [Song repository](https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/repository/SongRepositoryImpl.java): `src/main/java/com/joysistvi/recordingapp/repository/SongRepositoryImpl.java`
- [Playlist repository](https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/repository/PlaylistRepositoryImpl.java): `src/main/java/com/joysistvi/recordingapp/repository/PlaylistRepositoryImpl.java`
- [Other repositories](https://github.com/mynrdvx/b226-csp2-gabriel/tree/master/src/main/java/com/joysistvi/recordingapp/repository): `src/main/java/com/joysistvi/recordingapp/repository`
- [DB connection](https://github.com/mynrdvx/b226-csp2-gabriel/blob/master/src/main/java/com/joysistvi/recordingapp/config/DbConnection.java): `src/main/java/com/joysistvi/recordingapp/config/DbConnection.java`

### Other components

- **CLI user**
- **Relational database**

## Connections

- CLI user → App routing: chooses menu
- App routing → Authentication view: authenticates
- App routing → Admin dashboard: routes admin
- App routing → User dashboard: routes user
- Admin dashboard → Catalog views: uses views
- User dashboard → Playlist views: uses view
- Catalog views → Song management: catalog actions
- Catalog views → Artist management: artist actions
- Catalog views → Album management: album actions
- Admin dashboard → User accounts: administers users
- Playlist views → Playlist management: manages playlists
- Playlist views → Playlist songs: manages songs
- User dashboard → Song management: browses songs
- User dashboard → Album management: browses albums
- User dashboard → Artist management: browses artists
- Song management → Business services: delegates
- Artist management → Business services: delegates
- Album management → Business services: delegates
- User accounts → Business services: delegates
- Playlist management → Business services: delegates
- Playlist songs → Business services: delegates
- Business services → Song repository: uses song persistence
- Business services → Playlist repository: uses playlist persistence
- Business services → Other repositories: uses persistence
- Song repository → DB connection: opens connection
- Playlist repository → DB connection: opens connection
- Other repositories → DB connection: opens connection
- DB connection → Relational database: connects
