# changproj/ctclub architecture

> Architecture diagram of the GitHub repository changproj/ctclub, 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/changproj/ctclub
- Repository: https://github.com/changproj/ctclub

## Overview

This is an ASP.NET MVC club-membership application. Staff submit or resume applications; department heads verify them, and committee members approve or reject them. Approval creates a membership and initial term; the application also supports annual renewals, payment recording and history, member directory/details, and development-only role selection. The excerpts show controller/repository calls and SQL-backed persistence; several UI and controller details are indexed but not excerpted, so those relationships are omitted where unverified.

Main entry points: [`WebApplication1/Repositories/MemberRepository.cs`](https://github.com/changproj/ctclub/blob/master/WebApplication1/Repositories/MemberRepository.cs) (Membership repository), [`WebApplication1/Controllers/ReviewController.cs`](https://github.com/changproj/ctclub/blob/master/WebApplication1/Controllers/ReviewController.cs) (Review actions), [`WebApplication1/Controllers/MemberController.cs`](https://github.com/changproj/ctclub/blob/master/WebApplication1/Controllers/MemberController.cs) (Member portal), [`WebApplication1/Controllers/DevSessionController.cs`](https://github.com/changproj/ctclub/blob/master/WebApplication1/Controllers/DevSessionController.cs) (Dev role session)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_application["Applications"]
  node_memberweb["Member portal"]
  node_memberform["Application form<br/>[membership-form.js]"]
  node_memberapi["Member API client<br/>[member.api.js]"]
  node_membermapper["Form mapping<br/>[MemberMapper.cs]"]
  node_membermodel["Member application<br/>[Member.cs]"]
  node_devsession["Dev role session"]
  node_staffrecords["Corporate employee lookup"]
  node_home["Home and directory<br/>[HomeController.cs]"]
  node_training["Training pages"]
end

subgraph group_review["Review Workflow"]
  node_reviewcontroller["Review actions"]
  node_status["Application states"]
  node_reviewui["Review interface<br/>[review.js]"]
end

subgraph group_membership["Membership Finance"]
  node_membershipcontroller["Membership views"]
  node_paymentui["Payment interface<br/>[payments.js]"]
  node_repository["Membership repository"]
  node_terms["Membership terms<br/>[MembershipTerm.cs]"]
  node_payments["Payment records<br/>[Payment.cs]"]
  node_membershipdata[("Membership database")]
end

subgraph group_infrastructure["Runtime Infrastructure"]
  node_dbfactory["SQL connection factory"]
  node_resolver["Dependency resolver"]
end

node_staff(("Staff user"))
node_depthead(("Department head"))
node_committee(("Committee user"))

node_staff -->|"selects role"| node_devsession
node_devsession -->|"looks up employee"| node_staffrecords
node_devsession -->|"redirects home"| node_memberweb
node_staff -.->|"enters application"| node_memberform
node_memberform -.->|"uses API client"| node_memberapi
node_memberweb -->|"maps submitted form"| node_membermapper
node_memberweb -.->|"reads and writes"| node_repository
node_repository -->|"creates connections"| node_dbfactory
node_dbfactory -.->|"connects SQL"| node_membershipdata
node_memberweb -->|"returns member data"| node_membermodel
node_membermapper -->|"maps fields"| node_membermodel
node_depthead -.->|"verifies application"| node_reviewcontroller
node_committee -.->|"approves application"| node_reviewcontroller
node_reviewcontroller -->|"runs review actions"| node_repository
node_reviewcontroller -.->|"loads applicant"| node_membermodel
node_reviewcontroller -.->|"checks lifecycle"| node_status
node_reviewcontroller -.->|"serves review actions"| node_reviewui
node_repository -->|"queries and updates"| node_membershipdata
node_repository -.->|"loads term history"| node_terms
node_repository -.->|"loads payment history"| node_payments
node_membershipcontroller -.->|"loads membership data"| node_repository
node_membershipcontroller -.->|"serves payment views"| node_paymentui
node_paymentui -.->|"uses API client"| node_memberapi
node_resolver -->|"constructs repository"| node_repository
node_resolver -->|"constructs factory"| node_dbfactory
node_home -.->|"loads directory data"| node_repository

click node_memberweb "https://github.com/changproj/ctclub/blob/master/WebApplication1/Controllers/MemberController.cs"
click node_memberform "https://github.com/changproj/ctclub/blob/master/WebApplication1/Scripts/app/membership-form.js"
click node_memberapi "https://github.com/changproj/ctclub/blob/master/WebApplication1/Scripts/app/member.api.js"
click node_membermapper "https://github.com/changproj/ctclub/blob/master/WebApplication1/Mappers/MemberMapper.cs"
click node_membermodel "https://github.com/changproj/ctclub/blob/master/WebApplication1/Models/Member.cs"
click node_devsession "https://github.com/changproj/ctclub/blob/master/WebApplication1/Controllers/DevSessionController.cs"
click node_staffrecords "https://github.com/changproj/ctclub/blob/master/WebApplication1/Repositories/CorporateEmployeeRepository.cs"
click node_reviewcontroller "https://github.com/changproj/ctclub/blob/master/WebApplication1/Controllers/ReviewController.cs"
click node_status "https://github.com/changproj/ctclub/blob/master/WebApplication1/Models/ApplicationStatus.cs"
click node_membershipcontroller "https://github.com/changproj/ctclub/blob/master/WebApplication1/Controllers/MemberController.cs"
click node_reviewui "https://github.com/changproj/ctclub/blob/master/WebApplication1/Scripts/app/review.js"
click node_paymentui "https://github.com/changproj/ctclub/blob/master/WebApplication1/Scripts/app/payments.js"
click node_repository "https://github.com/changproj/ctclub/blob/master/WebApplication1/Repositories/MemberRepository.cs"
click node_terms "https://github.com/changproj/ctclub/blob/master/WebApplication1/Models/MembershipTerm.cs"
click node_payments "https://github.com/changproj/ctclub/blob/master/WebApplication1/Models/Payment.cs"
click node_dbfactory "https://github.com/changproj/ctclub/blob/master/WebApplication1/Infrastructure/Data/SqlConnectionFactory.cs"
click node_resolver "https://github.com/changproj/ctclub/blob/master/WebApplication1/Infrastructure/DependencyInjection/SimpleDependencyResolver.cs"
click node_home "https://github.com/changproj/ctclub/blob/master/WebApplication1/Controllers/HomeController.cs"
click node_training "https://github.com/changproj/ctclub/blob/master/WebApplication1/Controllers/TrainingController.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_memberweb,node_memberform,node_memberapi,node_membermapper,node_membermodel,node_devsession,node_staffrecords,node_home,node_training,node_staff,node_committee toneBlue
class node_reviewcontroller,node_status,node_reviewui toneAmber
class node_membershipcontroller,node_paymentui,node_repository,node_terms,node_payments,node_membershipdata toneMint
class node_dbfactory,node_resolver toneRose
class node_depthead toneIndigo
```

## Components

### Applications

- [Member portal](https://github.com/changproj/ctclub/blob/master/WebApplication1/Controllers/MemberController.cs): `WebApplication1/Controllers/MemberController.cs`
- [Application form](https://github.com/changproj/ctclub/blob/master/WebApplication1/Scripts/app/membership-form.js): `WebApplication1/Scripts/app/membership-form.js`
- [Member API client](https://github.com/changproj/ctclub/blob/master/WebApplication1/Scripts/app/member.api.js): `WebApplication1/Scripts/app/member.api.js`
- [Form mapping](https://github.com/changproj/ctclub/blob/master/WebApplication1/Mappers/MemberMapper.cs): `WebApplication1/Mappers/MemberMapper.cs`
- [Member application](https://github.com/changproj/ctclub/blob/master/WebApplication1/Models/Member.cs): `WebApplication1/Models/Member.cs`
- [Dev role session](https://github.com/changproj/ctclub/blob/master/WebApplication1/Controllers/DevSessionController.cs): `WebApplication1/Controllers/DevSessionController.cs`
- [Corporate employee lookup](https://github.com/changproj/ctclub/blob/master/WebApplication1/Repositories/CorporateEmployeeRepository.cs): `WebApplication1/Repositories/CorporateEmployeeRepository.cs`
- [Home and directory](https://github.com/changproj/ctclub/blob/master/WebApplication1/Controllers/HomeController.cs): `WebApplication1/Controllers/HomeController.cs`
- [Training pages](https://github.com/changproj/ctclub/blob/master/WebApplication1/Controllers/TrainingController.cs): `WebApplication1/Controllers/TrainingController.cs`

### Review Workflow

- [Review actions](https://github.com/changproj/ctclub/blob/master/WebApplication1/Controllers/ReviewController.cs): `WebApplication1/Controllers/ReviewController.cs`
- [Application states](https://github.com/changproj/ctclub/blob/master/WebApplication1/Models/ApplicationStatus.cs): `WebApplication1/Models/ApplicationStatus.cs`
- [Review interface](https://github.com/changproj/ctclub/blob/master/WebApplication1/Scripts/app/review.js): `WebApplication1/Scripts/app/review.js`

### Membership Finance

- [Membership views](https://github.com/changproj/ctclub/blob/master/WebApplication1/Controllers/MemberController.cs): `WebApplication1/Controllers/MemberController.cs`
- [Payment interface](https://github.com/changproj/ctclub/blob/master/WebApplication1/Scripts/app/payments.js): `WebApplication1/Scripts/app/payments.js`
- [Membership repository](https://github.com/changproj/ctclub/blob/master/WebApplication1/Repositories/MemberRepository.cs): `WebApplication1/Repositories/MemberRepository.cs`
- [Membership terms](https://github.com/changproj/ctclub/blob/master/WebApplication1/Models/MembershipTerm.cs): `WebApplication1/Models/MembershipTerm.cs`
- [Payment records](https://github.com/changproj/ctclub/blob/master/WebApplication1/Models/Payment.cs): `WebApplication1/Models/Payment.cs`
- **Membership database**

### Runtime Infrastructure

- [SQL connection factory](https://github.com/changproj/ctclub/blob/master/WebApplication1/Infrastructure/Data/SqlConnectionFactory.cs): `WebApplication1/Infrastructure/Data/SqlConnectionFactory.cs`
- [Dependency resolver](https://github.com/changproj/ctclub/blob/master/WebApplication1/Infrastructure/DependencyInjection/SimpleDependencyResolver.cs): `WebApplication1/Infrastructure/DependencyInjection/SimpleDependencyResolver.cs`

### Other components

- **Staff user**
- **Department head**
- **Committee user**

## Connections

- Staff user → Dev role session: selects role (evidence: `WebApplication1/Controllers/DevSessionController.cs`)
- Dev role session → Corporate employee lookup: looks up employee (evidence: `WebApplication1/Controllers/DevSessionController.cs`)
- Dev role session → Member portal: redirects home (evidence: `WebApplication1/Controllers/DevSessionController.cs`)
- Staff user → Application form: enters application
- Application form → Member API client: uses API client
- Member portal → Form mapping: maps submitted form (evidence: `WebApplication1/Controllers/MemberController.cs`)
- Member portal → Membership repository: reads and writes
- Membership repository → SQL connection factory: creates connections (evidence: `WebApplication1/Repositories/MemberRepository.cs`)
- SQL connection factory → Membership database: connects SQL
- Member portal → Member application: returns member data (evidence: `WebApplication1/Controllers/MemberController.cs`)
- Form mapping → Member application: maps fields (evidence: `WebApplication1/Mappers/MemberMapper.cs`)
- Department head → Review actions: verifies application
- Committee user → Review actions: approves application
- Review actions → Membership repository: runs review actions (evidence: `WebApplication1/Controllers/ReviewController.cs`)
- Review actions → Member application: loads applicant (evidence: `WebApplication1/Controllers/ReviewController.cs`)
- Review actions → Application states: checks lifecycle (evidence: `WebApplication1/Controllers/ReviewController.cs`)
- Review actions → Review interface: serves review actions
- Membership repository → Membership database: queries and updates (evidence: `WebApplication1/Repositories/MemberRepository.cs`)
- Membership repository → Membership terms: loads term history (evidence: `WebApplication1/Repositories/MemberRepository.cs`)
- Membership repository → Payment records: loads payment history (evidence: `WebApplication1/Repositories/MemberRepository.cs`)
- Membership views → Membership repository: loads membership data
- Membership views → Payment interface: serves payment views
- Payment interface → Member API client: uses API client
- Dependency resolver → Membership repository: constructs repository (evidence: `WebApplication1/Infrastructure/DependencyInjection/SimpleDependencyResolver.cs`)
- Dependency resolver → SQL connection factory: constructs factory (evidence: `WebApplication1/Infrastructure/DependencyInjection/SimpleDependencyResolver.cs`)
- Home and directory → Membership repository: loads directory data
