# rags-cyber/nory_final_assignment architecture

> Architecture diagram of the GitHub repository rags-cyber/nory_final_assignment, 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/rags-cyber/nory_final_assignment
- Repository: https://github.com/rags-cyber/nory_final_assignment
- Video tour (about a minute): https://gitdiagram.com/rags-cyber/nory_final_assignment/video

## Overview

Nory Music LMS is a role-based music-learning application. Students browse and enroll in courses, view lessons, take quizzes, review results, and track progress; instructors manage course content and monitor enrollment, while admins manage users and learning content. Razor Pages implement these role-specific workflows over an EF Core context backed by SQL Server. The README also documents a searchable chord-song library and awards. Some capabilities are represented by their documented page areas because their handlers were not sampled; uncertain internal links are omitted.

Main entry points: [`Data/ApplicationDbContext.cs`](https://github.com/rags-cyber/nory_final_assignment/blob/main/Data/ApplicationDbContext.cs) (EF Core context), [`Areas/Student/Pages/Quiz/Take.cshtml.cs`](https://github.com/rags-cyber/nory_final_assignment/blob/main/Areas/Student/Pages/Quiz/Take.cshtml.cs) (Quiz attempt), [`Areas/Identity/Pages/Account`](https://github.com/rags-cyber/nory_final_assignment/tree/main/Areas/Identity/Pages/Account) (Identity pages), [`Program.cs`](https://github.com/rags-cyber/nory_final_assignment/blob/main/Program.cs) (Application setup)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Identity and Roles"]
  node_program["Application setup<br/>[Program.cs]"]
  node_identity["Identity pages"]
  node_user_model["User model<br/>[ApplicationUser.cs]"]
end

subgraph group_management["Course Management"]
  node_admin["Admin workspace"]
  node_instructor["Instructor workspace"]
  node_course_model["Course content models<br/>[Course.cs]"]
end

subgraph group_learning["Student Learning"]
  node_student_home["Student dashboard<br/>[Index.cshtml.cs]"]
  node_browse["Course discovery"]
  node_course_details["Course details"]
  node_lesson_view["Lesson viewing"]
  node_quiz_take["Quiz attempt<br/>[Take.cshtml.cs]"]
  node_quiz_result["Quiz results<br/>[Result.cshtml.cs]"]
  node_chord_library["Chord-song library<br/>[Index.cshtml.cs]"]
  node_progress_models["Progress and quiz models<br/>[Enrollment.cs]"]
  node_chord_model["Chord-song model<br/>[ChordSong.cs]"]
end

subgraph group_storage["Persistence and Awards"]
  node_award_service["Award service<br/>[AwardService.cs]"]
  node_db_context["EF Core context"]
  node_sql_server[("SQL Server")]
end

node_visitor(("Site user"))

node_visitor -->|"signs in"| node_identity
node_visitor -->|"browses courses"| node_browse
node_visitor -->|"administers"| node_admin
node_visitor -->|"teaches"| node_instructor
node_visitor -->|"learns"| node_student_home
node_program -->|"configures"| node_db_context
node_program -->|"enables identity"| node_identity
node_identity -->|"authenticates"| node_user_model
node_admin -->|"manages records"| node_db_context
node_instructor -->|"manages courses"| node_db_context
node_browse -->|"queries courses"| node_db_context
node_course_details -->|"reads course"| node_db_context
node_student_home -->|"loads progress"| node_db_context
node_lesson_view -->|"loads lesson"| node_db_context
node_quiz_take -->|"loads quiz"| node_db_context
node_quiz_take -->|"saves attempt"| node_db_context
node_quiz_take -->|"grants on pass"| node_award_service
node_award_service -->|"saves award"| node_db_context
node_quiz_take -->|"redirects with attempt"| node_quiz_result
node_chord_library -->|"queries songs"| node_db_context
node_db_context -->|"reads and writes"| node_sql_server
node_course_model -->|"mapped by"| node_db_context
node_progress_models -->|"mapped by"| node_db_context
node_chord_model -->|"mapped by"| node_db_context

click node_program "https://github.com/rags-cyber/nory_final_assignment/blob/main/Program.cs"
click node_identity "https://github.com/rags-cyber/nory_final_assignment/tree/main/Areas/Identity/Pages/Account"
click node_user_model "https://github.com/rags-cyber/nory_final_assignment/blob/main/Models/ApplicationUser.cs"
click node_admin "https://github.com/rags-cyber/nory_final_assignment/tree/main/Areas/Admin/Pages"
click node_instructor "https://github.com/rags-cyber/nory_final_assignment/tree/main/Areas/Instructor/Pages"
click node_student_home "https://github.com/rags-cyber/nory_final_assignment/blob/main/Areas/Student/Pages/Index.cshtml.cs"
click node_browse "https://github.com/rags-cyber/nory_final_assignment/blob/main/Areas/Student/Pages/BrowseCourses.cshtml.cs"
click node_course_details "https://github.com/rags-cyber/nory_final_assignment/blob/main/Areas/Student/Pages/CourseDetails.cshtml.cs"
click node_lesson_view "https://github.com/rags-cyber/nory_final_assignment/blob/main/Areas/Student/Pages/LessonView.cshtml.cs"
click node_quiz_take "https://github.com/rags-cyber/nory_final_assignment/blob/main/Areas/Student/Pages/Quiz/Take.cshtml.cs"
click node_quiz_result "https://github.com/rags-cyber/nory_final_assignment/blob/main/Areas/Student/Pages/Quiz/Result.cshtml.cs"
click node_chord_library "https://github.com/rags-cyber/nory_final_assignment/blob/main/Areas/Student/Pages/ChordSongs/Index.cshtml.cs"
click node_course_model "https://github.com/rags-cyber/nory_final_assignment/blob/main/Models/Course.cs"
click node_progress_models "https://github.com/rags-cyber/nory_final_assignment/blob/main/Models/Enrollment.cs"
click node_chord_model "https://github.com/rags-cyber/nory_final_assignment/blob/main/Models/ChordSong.cs"
click node_award_service "https://github.com/rags-cyber/nory_final_assignment/blob/main/Services/AwardService.cs"
click node_db_context "https://github.com/rags-cyber/nory_final_assignment/blob/main/Data/ApplicationDbContext.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_program,node_identity,node_user_model,node_visitor toneBlue
class node_admin,node_instructor,node_course_model toneAmber
class node_student_home,node_browse,node_course_details,node_lesson_view,node_quiz_take,node_quiz_result,node_chord_library,node_progress_models,node_chord_model toneMint
class node_award_service,node_db_context,node_sql_server toneRose
```

## Components

### Identity and Roles

- [Application setup](https://github.com/rags-cyber/nory_final_assignment/blob/main/Program.cs): `Program.cs`
- [Identity pages](https://github.com/rags-cyber/nory_final_assignment/tree/main/Areas/Identity/Pages/Account): `Areas/Identity/Pages/Account`
- [User model](https://github.com/rags-cyber/nory_final_assignment/blob/main/Models/ApplicationUser.cs): `Models/ApplicationUser.cs`

### Course Management

- [Admin workspace](https://github.com/rags-cyber/nory_final_assignment/tree/main/Areas/Admin/Pages): `Areas/Admin/Pages`
- [Instructor workspace](https://github.com/rags-cyber/nory_final_assignment/tree/main/Areas/Instructor/Pages): `Areas/Instructor/Pages`
- [Course content models](https://github.com/rags-cyber/nory_final_assignment/blob/main/Models/Course.cs): `Models/Course.cs`

### Student Learning

- [Student dashboard](https://github.com/rags-cyber/nory_final_assignment/blob/main/Areas/Student/Pages/Index.cshtml.cs): `Areas/Student/Pages/Index.cshtml.cs`
- [Course discovery](https://github.com/rags-cyber/nory_final_assignment/blob/main/Areas/Student/Pages/BrowseCourses.cshtml.cs): `Areas/Student/Pages/BrowseCourses.cshtml.cs`
- [Course details](https://github.com/rags-cyber/nory_final_assignment/blob/main/Areas/Student/Pages/CourseDetails.cshtml.cs): `Areas/Student/Pages/CourseDetails.cshtml.cs`
- [Lesson viewing](https://github.com/rags-cyber/nory_final_assignment/blob/main/Areas/Student/Pages/LessonView.cshtml.cs): `Areas/Student/Pages/LessonView.cshtml.cs`
- [Quiz attempt](https://github.com/rags-cyber/nory_final_assignment/blob/main/Areas/Student/Pages/Quiz/Take.cshtml.cs): `Areas/Student/Pages/Quiz/Take.cshtml.cs`
- [Quiz results](https://github.com/rags-cyber/nory_final_assignment/blob/main/Areas/Student/Pages/Quiz/Result.cshtml.cs): `Areas/Student/Pages/Quiz/Result.cshtml.cs`
- [Chord-song library](https://github.com/rags-cyber/nory_final_assignment/blob/main/Areas/Student/Pages/ChordSongs/Index.cshtml.cs): `Areas/Student/Pages/ChordSongs/Index.cshtml.cs`
- [Progress and quiz models](https://github.com/rags-cyber/nory_final_assignment/blob/main/Models/Enrollment.cs): `Models/Enrollment.cs`
- [Chord-song model](https://github.com/rags-cyber/nory_final_assignment/blob/main/Models/ChordSong.cs): `Models/ChordSong.cs`

### Persistence and Awards

- [Award service](https://github.com/rags-cyber/nory_final_assignment/blob/main/Services/AwardService.cs): `Services/AwardService.cs`
- [EF Core context](https://github.com/rags-cyber/nory_final_assignment/blob/main/Data/ApplicationDbContext.cs): `Data/ApplicationDbContext.cs`
- **SQL Server**

### Other components

- **Site user**

## Connections

- Site user → Identity pages: signs in
- Site user → Course discovery: browses courses
- Site user → Admin workspace: administers
- Site user → Instructor workspace: teaches
- Site user → Student dashboard: learns
- Application setup → EF Core context: configures
- Application setup → Identity pages: enables identity
- Identity pages → User model: authenticates
- Admin workspace → EF Core context: manages records
- Instructor workspace → EF Core context: manages courses
- Course discovery → EF Core context: queries courses
- Course details → EF Core context: reads course
- Student dashboard → EF Core context: loads progress
- Lesson viewing → EF Core context: loads lesson
- Quiz attempt → EF Core context: loads quiz
- Quiz attempt → EF Core context: saves attempt
- Quiz attempt → Award service: grants on pass
- Award service → EF Core context: saves award
- Quiz attempt → Quiz results: redirects with attempt
- Chord-song library → EF Core context: queries songs
- EF Core context → SQL Server: reads and writes
- Course content models → EF Core context: mapped by
- Progress and quiz models → EF Core context: mapped by
- Chord-song model → EF Core context: mapped by
