# dmangubat0646/vertical-slice architecture

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

- Interactive diagram: https://gitdiagram.com/dmangubat0646/vertical-slice
- Repository: https://github.com/dmangubat0646/vertical-slice

## Overview

This is a Minimal API for student, course, admission, and employee management, organized as vertical slices with custom CQRS handlers, Result-based errors, and EF Core persistence. The main workflow is an HTTP request entering a feature endpoint, invoking its application operation, and reading or writing through the database abstraction. The README documents the student/course/admission API and validation; the tree and source index also show employee slices and user persistence. Some links are documented at architecture level because the relevant implementation excerpts are incomplete.

Main entry points: [`Infrastructure/Persistence/AppDbContext.cs`](https://github.com/dmangubat0646/vertical-slice/blob/main/Infrastructure/Persistence/AppDbContext.cs) (EF Core Context), [`Application/Features/Admissions`](https://github.com/dmangubat0646/vertical-slice/tree/main/Application/Features/Admissions) (Admission Operations), [`Application/Abstractions/Data/IAppDbContext.cs`](https://github.com/dmangubat0646/vertical-slice/blob/main/Application/Abstractions/Data/IAppDbContext.cs) (Database Abstraction), [`Application/Features/Students`](https://github.com/dmangubat0646/vertical-slice/tree/main/Application/Features/Students) (Student Operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_studentapi["Student Endpoints"]
  node_courseapi["Course Endpoints<br/>[CourseEndpoints.cs]"]
  node_admissionapi["Admission Endpoints"]
  node_employeeapi["Employee Endpoints"]
  node_startup["API Startup<br/>[Program.cs]"]
  node_resultmap["HTTP Result Mapping"]
end

subgraph group_slices["Feature Slices"]
  node_students["Student Operations"]
  node_courses["Course Operations"]
  node_admissions["Admission Operations"]
  node_employees["Employee Operations"]
  node_studentvalidation["Student Validation"]
  node_coursevalidation["Course Validation"]
  node_admissionvalidation["Admission Validation"]
  node_employeevalidation["Employee Validation"]
end

subgraph group_application["Application Core"]
  node_messaging["CQRS Contracts"]
  node_result["Result Pattern<br/>[Result.cs]"]
  node_dbcontract["Database Abstraction<br/>[IAppDbContext.cs]"]
end

subgraph group_domain["Domain Model"]
  node_studentsmodel["Student Entity<br/>[Student.cs]"]
  node_coursesmodel["Course Entity<br/>[Course.cs]"]
  node_admissionsmodel["Admission Model<br/>[Admission.cs]"]
  node_admissioncourse["Admission Courses<br/>[AdmissionCourse.cs]"]
  node_employeemodel["Employee Entity<br/>[Employee.cs]"]
  node_usermodel["Application User<br/>[ApplicationUser.cs]"]
end

subgraph group_persistence["Persistence"]
  node_dbcontext[("EF Core Context<br/>[AppDbContext.cs]")]
  node_seed["Seed Data<br/>[DbSeeder.cs]"]
end

node_caller(("API Client"))

node_caller -->|"requests"| node_studentapi
node_caller -->|"requests"| node_courseapi
node_caller -->|"requests"| node_admissionapi
node_studentapi -->|"dispatches"| node_students
node_courseapi -->|"dispatches"| node_courses
node_admissionapi -->|"dispatches"| node_admissions
node_employeeapi -->|"dispatches"| node_employees
node_students -->|"validates"| node_studentvalidation
node_courses -->|"validates"| node_coursevalidation
node_admissions -->|"validates"| node_admissionvalidation
node_employees -->|"validates"| node_employeevalidation
node_students -->|"uses contracts"| node_messaging
node_courses -->|"uses contracts"| node_messaging
node_admissions -->|"uses contracts"| node_messaging
node_employees -->|"uses contracts"| node_messaging
node_students -->|"accesses data"| node_dbcontract
node_courses -->|"accesses data"| node_dbcontract
node_admissions -->|"accesses data"| node_dbcontract
node_employees -->|"accesses data"| node_dbcontract
node_dbcontext -->|"implements"| node_dbcontract
node_dbcontext -->|"maps"| node_studentsmodel
node_dbcontext -->|"maps"| node_coursesmodel
node_dbcontext -->|"maps"| node_admissionsmodel
node_dbcontext -->|"maps"| node_admissioncourse
node_dbcontext -->|"maps"| node_employeemodel
node_dbcontext -->|"maps"| node_usermodel
node_admissions -->|"returns outcomes"| node_result
node_admissionapi -->|"maps results"| node_resultmap
node_startup -->|"configures"| node_dbcontext
node_startup -.->|"runs seeding"| node_seed

click node_studentapi "https://github.com/dmangubat0646/vertical-slice/blob/main/Api/Features/Students/StudentEndpoints.cs"
click node_courseapi "https://github.com/dmangubat0646/vertical-slice/blob/main/Api/Features/Courses/CourseEndpoints.cs"
click node_admissionapi "https://github.com/dmangubat0646/vertical-slice/blob/main/Api/Features/Admissions/AdmissionEndpoints.cs"
click node_employeeapi "https://github.com/dmangubat0646/vertical-slice/blob/main/Api/Features/Employees/EmployeeEndpoints.cs"
click node_students "https://github.com/dmangubat0646/vertical-slice/tree/main/Application/Features/Students"
click node_courses "https://github.com/dmangubat0646/vertical-slice/tree/main/Application/Features/Courses"
click node_admissions "https://github.com/dmangubat0646/vertical-slice/tree/main/Application/Features/Admissions"
click node_employees "https://github.com/dmangubat0646/vertical-slice/tree/main/Application/Features/Employees"
click node_studentvalidation "https://github.com/dmangubat0646/vertical-slice/blob/main/Application/Features/Students/CreateStudent/CreateStudentValidator.cs"
click node_coursevalidation "https://github.com/dmangubat0646/vertical-slice/blob/main/Application/Features/Courses/CreateCourse/CreateCourseValidator.cs"
click node_admissionvalidation "https://github.com/dmangubat0646/vertical-slice/blob/main/Application/Features/Admissions/CreateAdmission/CreateAdmissionValidator.cs"
click node_employeevalidation "https://github.com/dmangubat0646/vertical-slice/blob/main/Application/Features/Employees/CreateEmployee/CreateEmployeeValidator.cs"
click node_messaging "https://github.com/dmangubat0646/vertical-slice/tree/main/Application/Abstractions/Messaging"
click node_result "https://github.com/dmangubat0646/vertical-slice/blob/main/Domain/Common/Result.cs"
click node_studentsmodel "https://github.com/dmangubat0646/vertical-slice/blob/main/Domain/Entities/Student.cs"
click node_coursesmodel "https://github.com/dmangubat0646/vertical-slice/blob/main/Domain/Entities/Course.cs"
click node_admissionsmodel "https://github.com/dmangubat0646/vertical-slice/blob/main/Domain/Entities/Admission.cs"
click node_admissioncourse "https://github.com/dmangubat0646/vertical-slice/blob/main/Domain/Entities/AdmissionCourse.cs"
click node_employeemodel "https://github.com/dmangubat0646/vertical-slice/blob/main/Domain/Entities/Employee.cs"
click node_usermodel "https://github.com/dmangubat0646/vertical-slice/blob/main/Domain/Entities/ApplicationUser.cs"
click node_dbcontract "https://github.com/dmangubat0646/vertical-slice/blob/main/Application/Abstractions/Data/IAppDbContext.cs"
click node_dbcontext "https://github.com/dmangubat0646/vertical-slice/blob/main/Infrastructure/Persistence/AppDbContext.cs"
click node_seed "https://github.com/dmangubat0646/vertical-slice/blob/main/Infrastructure/Persistence/DbSeeder.cs"
click node_startup "https://github.com/dmangubat0646/vertical-slice/blob/main/Api/Program.cs"
click node_resultmap "https://github.com/dmangubat0646/vertical-slice/blob/main/Api/Common/Extensions/ResultExtensions.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_studentapi,node_courseapi,node_admissionapi,node_employeeapi,node_startup,node_resultmap,node_caller toneBlue
class node_students,node_courses,node_admissions,node_employees,node_studentvalidation,node_coursevalidation,node_admissionvalidation,node_employeevalidation toneAmber
class node_messaging,node_result,node_dbcontract toneMint
class node_studentsmodel,node_coursesmodel,node_admissionsmodel,node_admissioncourse,node_employeemodel,node_usermodel toneRose
class node_dbcontext,node_seed toneIndigo
```

## Components

### HTTP API

- [Student Endpoints](https://github.com/dmangubat0646/vertical-slice/blob/main/Api/Features/Students/StudentEndpoints.cs): `Api/Features/Students/StudentEndpoints.cs`
- [Course Endpoints](https://github.com/dmangubat0646/vertical-slice/blob/main/Api/Features/Courses/CourseEndpoints.cs): `Api/Features/Courses/CourseEndpoints.cs`
- [Admission Endpoints](https://github.com/dmangubat0646/vertical-slice/blob/main/Api/Features/Admissions/AdmissionEndpoints.cs): `Api/Features/Admissions/AdmissionEndpoints.cs`
- [Employee Endpoints](https://github.com/dmangubat0646/vertical-slice/blob/main/Api/Features/Employees/EmployeeEndpoints.cs): `Api/Features/Employees/EmployeeEndpoints.cs`
- [API Startup](https://github.com/dmangubat0646/vertical-slice/blob/main/Api/Program.cs): `Api/Program.cs`
- [HTTP Result Mapping](https://github.com/dmangubat0646/vertical-slice/blob/main/Api/Common/Extensions/ResultExtensions.cs): `Api/Common/Extensions/ResultExtensions.cs`

### Feature Slices

- [Student Operations](https://github.com/dmangubat0646/vertical-slice/tree/main/Application/Features/Students): `Application/Features/Students`
- [Course Operations](https://github.com/dmangubat0646/vertical-slice/tree/main/Application/Features/Courses): `Application/Features/Courses`
- [Admission Operations](https://github.com/dmangubat0646/vertical-slice/tree/main/Application/Features/Admissions): `Application/Features/Admissions`
- [Employee Operations](https://github.com/dmangubat0646/vertical-slice/tree/main/Application/Features/Employees): `Application/Features/Employees`
- [Student Validation](https://github.com/dmangubat0646/vertical-slice/blob/main/Application/Features/Students/CreateStudent/CreateStudentValidator.cs): `Application/Features/Students/CreateStudent/CreateStudentValidator.cs`
- [Course Validation](https://github.com/dmangubat0646/vertical-slice/blob/main/Application/Features/Courses/CreateCourse/CreateCourseValidator.cs): `Application/Features/Courses/CreateCourse/CreateCourseValidator.cs`
- [Admission Validation](https://github.com/dmangubat0646/vertical-slice/blob/main/Application/Features/Admissions/CreateAdmission/CreateAdmissionValidator.cs): `Application/Features/Admissions/CreateAdmission/CreateAdmissionValidator.cs`
- [Employee Validation](https://github.com/dmangubat0646/vertical-slice/blob/main/Application/Features/Employees/CreateEmployee/CreateEmployeeValidator.cs): `Application/Features/Employees/CreateEmployee/CreateEmployeeValidator.cs`

### Application Core

- [CQRS Contracts](https://github.com/dmangubat0646/vertical-slice/tree/main/Application/Abstractions/Messaging): `Application/Abstractions/Messaging`
- [Result Pattern](https://github.com/dmangubat0646/vertical-slice/blob/main/Domain/Common/Result.cs): `Domain/Common/Result.cs`
- [Database Abstraction](https://github.com/dmangubat0646/vertical-slice/blob/main/Application/Abstractions/Data/IAppDbContext.cs): `Application/Abstractions/Data/IAppDbContext.cs`

### Domain Model

- [Student Entity](https://github.com/dmangubat0646/vertical-slice/blob/main/Domain/Entities/Student.cs): `Domain/Entities/Student.cs`
- [Course Entity](https://github.com/dmangubat0646/vertical-slice/blob/main/Domain/Entities/Course.cs): `Domain/Entities/Course.cs`
- [Admission Model](https://github.com/dmangubat0646/vertical-slice/blob/main/Domain/Entities/Admission.cs): `Domain/Entities/Admission.cs`
- [Admission Courses](https://github.com/dmangubat0646/vertical-slice/blob/main/Domain/Entities/AdmissionCourse.cs): `Domain/Entities/AdmissionCourse.cs`
- [Employee Entity](https://github.com/dmangubat0646/vertical-slice/blob/main/Domain/Entities/Employee.cs): `Domain/Entities/Employee.cs`
- [Application User](https://github.com/dmangubat0646/vertical-slice/blob/main/Domain/Entities/ApplicationUser.cs): `Domain/Entities/ApplicationUser.cs`

### Persistence

- [EF Core Context](https://github.com/dmangubat0646/vertical-slice/blob/main/Infrastructure/Persistence/AppDbContext.cs): `Infrastructure/Persistence/AppDbContext.cs`
- [Seed Data](https://github.com/dmangubat0646/vertical-slice/blob/main/Infrastructure/Persistence/DbSeeder.cs): `Infrastructure/Persistence/DbSeeder.cs`

### Other components

- **API Client**

## Connections

- API Client → Student Endpoints: requests
- API Client → Course Endpoints: requests
- API Client → Admission Endpoints: requests
- Student Endpoints → Student Operations: dispatches
- Course Endpoints → Course Operations: dispatches (evidence: `Api/Features/Courses/CourseEndpoints.cs`)
- Admission Endpoints → Admission Operations: dispatches (evidence: `Api/Features/Admissions/AdmissionEndpoints.cs`)
- Employee Endpoints → Employee Operations: dispatches (evidence: `Api/Features/Employees/EmployeeEndpoints.cs`)
- Student Operations → Student Validation: validates
- Course Operations → Course Validation: validates
- Admission Operations → Admission Validation: validates
- Employee Operations → Employee Validation: validates
- Student Operations → CQRS Contracts: uses contracts (evidence: `Api/Program.cs`)
- Course Operations → CQRS Contracts: uses contracts (evidence: `Api/Program.cs`)
- Admission Operations → CQRS Contracts: uses contracts (evidence: `Api/Features/Admissions/AdmissionEndpoints.cs`)
- Employee Operations → CQRS Contracts: uses contracts (evidence: `Api/Features/Employees/EmployeeEndpoints.cs`)
- Student Operations → Database Abstraction: accesses data (evidence: `Application/Features/Students/GetAllStudents/GetAllStudentsQueryHandler.cs`)
- Course Operations → Database Abstraction: accesses data (evidence: `Application/Features/Courses/GetAllCourses/GetAllCoursesQueryHandler.cs`)
- Admission Operations → Database Abstraction: accesses data (evidence: `Application/Features/Admissions/GetAdmissionById/GetAdmissionByIdQueryHandler.cs`)
- Employee Operations → Database Abstraction: accesses data (evidence: `Application/Features/Employees/GetAllEmployees/GetAllEmployeesQueryHandler.cs`)
- EF Core Context → Database Abstraction: implements (evidence: `Infrastructure/Persistence/AppDbContext.cs`)
- EF Core Context → Student Entity: maps (evidence: `Infrastructure/Persistence/AppDbContext.cs`)
- EF Core Context → Course Entity: maps (evidence: `Infrastructure/Persistence/AppDbContext.cs`)
- EF Core Context → Admission Model: maps (evidence: `Infrastructure/Persistence/AppDbContext.cs`)
- EF Core Context → Admission Courses: maps (evidence: `Infrastructure/Persistence/AppDbContext.cs`)
- EF Core Context → Employee Entity: maps (evidence: `Infrastructure/Persistence/AppDbContext.cs`)
- EF Core Context → Application User: maps (evidence: `Infrastructure/Persistence/AppDbContext.cs`)
- Admission Operations → Result Pattern: returns outcomes (evidence: `Application/Features/Admissions/GetAdmissionById/GetAdmissionByIdQueryHandler.cs`)
- Admission Endpoints → HTTP Result Mapping: maps results (evidence: `Api/Common/Extensions/ResultExtensions.cs`)
- API Startup → EF Core Context: configures (evidence: `Api/Program.cs`)
- API Startup → Seed Data: runs seeding
