# thecoderman2911/advocate-diary architecture

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

- Interactive diagram: https://gitdiagram.com/thecoderman2911/advocate-diary
- Repository: https://github.com/thecoderman2911/advocate-diary

## Overview

Advocate Diary is a law-firm case-management web app backed by an ASP.NET Core API. The principal workflow is that a firm user signs in, manages cases and hearing dates, and uses related documents, fees, dashboards, and reports. Angular routes expose these capabilities; API controllers delegate to application services, which use EF Core persistence and selected integrations. The README documents additional identity, masters, notifications, subscription, and public-site capabilities. Some service wiring is unsampled, so those links reflect documented module boundaries rather than inspected call sites.

Main entry points: [`backend/src/AdvocateDiary.Api/Controllers`](https://github.com/thecoderman2911/advocate-diary/tree/main/backend/src/AdvocateDiary.Api/Controllers) (Other API modules), [`frontend/advocate-diary-web/src/app/app.routes.ts`](https://github.com/thecoderman2911/advocate-diary/blob/main/frontend/advocate-diary-web/src/app/app.routes.ts) (App routes), [`backend/src/AdvocateDiary.Infrastructure/Persistence/AppDbContext.cs`](https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Persistence/AppDbContext.cs) (Application database), [`backend/src/AdvocateDiary.Api/Program.cs`](https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Api/Program.cs) (API host)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Angular web app"]
  node_web_routes["App routes<br/>[app.routes.ts]"]
  node_auth_ui["Sign-in screens<br/>[login.ts]"]
  node_auth_client["Auth client<br/>[auth.service.ts]"]
  node_case_ui["Case screens<br/>[cases-list.ts]"]
  node_diary_ui["Diary screens<br/>[calendar.ts]"]
  node_document_ui["Case documents<br/>[case-documents.ts]"]
  node_billing_ui["Billing screens<br/>[subscription.ts]"]
  node_insight_ui["Dashboard and reports<br/>[reports.ts]"]
  node_admin_ui["Firm administration<br/>[masters-page.ts]"]
end

subgraph group_api["API and application"]
  node_api_host["API host<br/>[Program.cs]"]
  node_auth_api["Authentication API<br/>[AuthController.cs]"]
  node_case_api["Case API<br/>[CasesController.cs]"]
  node_other_api["Other API modules<br/>[Controllers]"]
end

subgraph group_practice["Practice operations"]
  node_auth_service["Authentication service<br/>[AuthService.cs]"]
  node_case_service["Case service<br/>[CaseService.cs]"]
  node_diary_service["Diary service<br/>[DiaryService.cs]"]
  node_document_service["Document service<br/>[DocumentService.cs]"]
  node_billing_service["Billing and fees<br/>[BillingService.cs]"]
  node_insight_service["Dashboard and reports<br/>[ReportService.cs]"]
  node_admin_services["Identity and masters<br/>[UserService.cs]"]
  node_notification_service["Notifications"]
end

subgraph group_platform["Data and integrations"]
  node_db[("Application database<br/>[AppDbContext.cs]")]
  node_file_storage["Local file storage"]
  node_email_sender["Email sender<br/>[SmtpEmailSender.cs]"]
end

subgraph group_public["Public presence"]
  node_public_ui["Marketing pages<br/>[landing.ts]"]
  node_public_service["Public content<br/>[PublicService.cs]"]
end

node_firm_user(("Firm user"))
node_sql_server[("SQL Server")]
node_payment_gateway["Payment gateway"]

node_firm_user -->|"uses"| node_web_routes
node_web_routes -->|"routes to"| node_auth_ui
node_web_routes -->|"routes to"| node_case_ui
node_web_routes -->|"routes to"| node_diary_ui
node_web_routes -->|"routes to"| node_document_ui
node_web_routes -->|"routes to"| node_billing_ui
node_web_routes -->|"routes to"| node_insight_ui
node_web_routes -->|"routes to"| node_admin_ui
node_web_routes -->|"routes to"| node_public_ui
node_auth_ui -->|"submits credentials"| node_auth_client
node_auth_client -->|"calls auth endpoints"| node_auth_api
node_api_host -->|"maps controllers"| node_auth_api
node_api_host -->|"maps controllers"| node_case_api
node_api_host -->|"maps controllers"| node_other_api
node_auth_api -->|"delegates auth"| node_auth_service
node_case_api -->|"delegates cases"| node_case_service
node_case_ui -->|"manages cases"| node_case_api
node_diary_ui -->|"requests diary"| node_other_api
node_document_ui -->|"manages documents"| node_other_api
node_billing_ui -->|"manages billing"| node_other_api
node_insight_ui -->|"requests reports"| node_other_api
node_admin_ui -->|"manages firm data"| node_other_api
node_public_ui -->|"requests public content"| node_other_api
node_other_api -->|"delegates diary"| node_diary_service
node_other_api -->|"delegates documents"| node_document_service
node_other_api -->|"delegates billing"| node_billing_service
node_other_api -->|"delegates reports"| node_insight_service
node_other_api -->|"delegates administration"| node_admin_services
node_other_api -->|"delegates notifications"| node_notification_service
node_other_api -->|"delegates public content"| node_public_service
node_auth_service -->|"reads and writes"| node_db
node_case_service -->|"reads and writes"| node_db
node_diary_service -->|"reads and writes"| node_db
node_document_service -->|"reads and writes"| node_db
node_billing_service -->|"reads and writes"| node_db
node_insight_service -->|"queries cases"| node_db
node_admin_services -->|"reads and writes"| node_db
node_notification_service -->|"records delivery"| node_db
node_public_service -->|"reads content"| node_db
node_db -->|"persists data"| node_sql_server
node_document_service -->|"stores and opens files"| node_file_storage
node_billing_service -.->|"creates checkout"| node_payment_gateway
node_auth_service -.->|"sends reset email"| node_email_sender

click node_web_routes "https://github.com/thecoderman2911/advocate-diary/blob/main/frontend/advocate-diary-web/src/app/app.routes.ts"
click node_auth_ui "https://github.com/thecoderman2911/advocate-diary/blob/main/frontend/advocate-diary-web/src/app/features/auth/login/login.ts"
click node_auth_client "https://github.com/thecoderman2911/advocate-diary/blob/main/frontend/advocate-diary-web/src/app/core/auth/auth.service.ts"
click node_case_ui "https://github.com/thecoderman2911/advocate-diary/blob/main/frontend/advocate-diary-web/src/app/features/cases/cases-list.ts"
click node_diary_ui "https://github.com/thecoderman2911/advocate-diary/blob/main/frontend/advocate-diary-web/src/app/features/diary/calendar.ts"
click node_document_ui "https://github.com/thecoderman2911/advocate-diary/blob/main/frontend/advocate-diary-web/src/app/features/cases/case-documents.ts"
click node_billing_ui "https://github.com/thecoderman2911/advocate-diary/blob/main/frontend/advocate-diary-web/src/app/features/billing/subscription.ts"
click node_insight_ui "https://github.com/thecoderman2911/advocate-diary/blob/main/frontend/advocate-diary-web/src/app/features/reports/reports.ts"
click node_admin_ui "https://github.com/thecoderman2911/advocate-diary/blob/main/frontend/advocate-diary-web/src/app/features/masters/masters-page.ts"
click node_public_ui "https://github.com/thecoderman2911/advocate-diary/blob/main/frontend/advocate-diary-web/src/app/features/public/landing.ts"
click node_api_host "https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Api/Program.cs"
click node_auth_api "https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Api/Controllers/AuthController.cs"
click node_case_api "https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Api/Controllers/CasesController.cs"
click node_other_api "https://github.com/thecoderman2911/advocate-diary/tree/main/backend/src/AdvocateDiary.Api/Controllers"
click node_auth_service "https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Auth/AuthService.cs"
click node_case_service "https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Cases/CaseService.cs"
click node_diary_service "https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Diary/DiaryService.cs"
click node_document_service "https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Documents/DocumentService.cs"
click node_billing_service "https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Billing/BillingService.cs"
click node_insight_service "https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Reports/ReportService.cs"
click node_admin_services "https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Identity/UserService.cs"
click node_notification_service "https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Notifications/NotificationService.cs"
click node_public_service "https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Public/PublicService.cs"
click node_db "https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Persistence/AppDbContext.cs"
click node_file_storage "https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Storage/LocalFileStorage.cs"
click node_email_sender "https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Email/SmtpEmailSender.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_web_routes,node_auth_ui,node_auth_client,node_case_ui,node_diary_ui,node_document_ui,node_billing_ui,node_insight_ui,node_admin_ui,node_firm_user toneBlue
class node_api_host,node_auth_api,node_case_api,node_other_api,node_sql_server toneAmber
class node_auth_service,node_case_service,node_diary_service,node_document_service,node_billing_service,node_insight_service,node_admin_services,node_notification_service toneMint
class node_db,node_file_storage,node_email_sender toneRose
class node_public_ui,node_public_service,node_payment_gateway toneIndigo
```

## Components

### Angular web app

- [App routes](https://github.com/thecoderman2911/advocate-diary/blob/main/frontend/advocate-diary-web/src/app/app.routes.ts): `frontend/advocate-diary-web/src/app/app.routes.ts`
- [Sign-in screens](https://github.com/thecoderman2911/advocate-diary/blob/main/frontend/advocate-diary-web/src/app/features/auth/login/login.ts): `frontend/advocate-diary-web/src/app/features/auth/login/login.ts`
- [Auth client](https://github.com/thecoderman2911/advocate-diary/blob/main/frontend/advocate-diary-web/src/app/core/auth/auth.service.ts): `frontend/advocate-diary-web/src/app/core/auth/auth.service.ts`
- [Case screens](https://github.com/thecoderman2911/advocate-diary/blob/main/frontend/advocate-diary-web/src/app/features/cases/cases-list.ts): `frontend/advocate-diary-web/src/app/features/cases/cases-list.ts`
- [Diary screens](https://github.com/thecoderman2911/advocate-diary/blob/main/frontend/advocate-diary-web/src/app/features/diary/calendar.ts): `frontend/advocate-diary-web/src/app/features/diary/calendar.ts`
- [Case documents](https://github.com/thecoderman2911/advocate-diary/blob/main/frontend/advocate-diary-web/src/app/features/cases/case-documents.ts): `frontend/advocate-diary-web/src/app/features/cases/case-documents.ts`
- [Billing screens](https://github.com/thecoderman2911/advocate-diary/blob/main/frontend/advocate-diary-web/src/app/features/billing/subscription.ts): `frontend/advocate-diary-web/src/app/features/billing/subscription.ts`
- [Dashboard and reports](https://github.com/thecoderman2911/advocate-diary/blob/main/frontend/advocate-diary-web/src/app/features/reports/reports.ts): `frontend/advocate-diary-web/src/app/features/reports/reports.ts`
- [Firm administration](https://github.com/thecoderman2911/advocate-diary/blob/main/frontend/advocate-diary-web/src/app/features/masters/masters-page.ts): `frontend/advocate-diary-web/src/app/features/masters/masters-page.ts`

### API and application

- [API host](https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Api/Program.cs): `backend/src/AdvocateDiary.Api/Program.cs`
- [Authentication API](https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Api/Controllers/AuthController.cs): `backend/src/AdvocateDiary.Api/Controllers/AuthController.cs`
- [Case API](https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Api/Controllers/CasesController.cs): `backend/src/AdvocateDiary.Api/Controllers/CasesController.cs`
- [Other API modules](https://github.com/thecoderman2911/advocate-diary/tree/main/backend/src/AdvocateDiary.Api/Controllers): `backend/src/AdvocateDiary.Api/Controllers`

### Practice operations

- [Authentication service](https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Auth/AuthService.cs): `backend/src/AdvocateDiary.Infrastructure/Auth/AuthService.cs`
- [Case service](https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Cases/CaseService.cs): `backend/src/AdvocateDiary.Infrastructure/Cases/CaseService.cs`
- [Diary service](https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Diary/DiaryService.cs): `backend/src/AdvocateDiary.Infrastructure/Diary/DiaryService.cs`
- [Document service](https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Documents/DocumentService.cs): `backend/src/AdvocateDiary.Infrastructure/Documents/DocumentService.cs`
- [Billing and fees](https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Billing/BillingService.cs): `backend/src/AdvocateDiary.Infrastructure/Billing/BillingService.cs`
- [Dashboard and reports](https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Reports/ReportService.cs): `backend/src/AdvocateDiary.Infrastructure/Reports/ReportService.cs`
- [Identity and masters](https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Identity/UserService.cs): `backend/src/AdvocateDiary.Infrastructure/Identity/UserService.cs`
- [Notifications](https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Notifications/NotificationService.cs): `backend/src/AdvocateDiary.Infrastructure/Notifications/NotificationService.cs`

### Data and integrations

- [Application database](https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Persistence/AppDbContext.cs): `backend/src/AdvocateDiary.Infrastructure/Persistence/AppDbContext.cs`
- [Local file storage](https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Storage/LocalFileStorage.cs): `backend/src/AdvocateDiary.Infrastructure/Storage/LocalFileStorage.cs`
- [Email sender](https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Email/SmtpEmailSender.cs): `backend/src/AdvocateDiary.Infrastructure/Email/SmtpEmailSender.cs`

### Public presence

- [Marketing pages](https://github.com/thecoderman2911/advocate-diary/blob/main/frontend/advocate-diary-web/src/app/features/public/landing.ts): `frontend/advocate-diary-web/src/app/features/public/landing.ts`
- [Public content](https://github.com/thecoderman2911/advocate-diary/blob/main/backend/src/AdvocateDiary.Infrastructure/Public/PublicService.cs): `backend/src/AdvocateDiary.Infrastructure/Public/PublicService.cs`

### Other components

- **Firm user**
- **SQL Server**
- **Payment gateway**

## Connections

- Firm user → App routes: uses
- App routes → Sign-in screens: routes to
- App routes → Case screens: routes to
- App routes → Diary screens: routes to
- App routes → Case documents: routes to
- App routes → Billing screens: routes to
- App routes → Dashboard and reports: routes to
- App routes → Firm administration: routes to
- App routes → Marketing pages: routes to
- Sign-in screens → Auth client: submits credentials
- Auth client → Authentication API: calls auth endpoints
- API host → Authentication API: maps controllers
- API host → Case API: maps controllers
- API host → Other API modules: maps controllers
- Authentication API → Authentication service: delegates auth
- Case API → Case service: delegates cases
- Case screens → Case API: manages cases
- Diary screens → Other API modules: requests diary
- Case documents → Other API modules: manages documents
- Billing screens → Other API modules: manages billing
- Dashboard and reports → Other API modules: requests reports
- Firm administration → Other API modules: manages firm data
- Marketing pages → Other API modules: requests public content
- Other API modules → Diary service: delegates diary
- Other API modules → Document service: delegates documents
- Other API modules → Billing and fees: delegates billing
- Other API modules → Dashboard and reports: delegates reports
- Other API modules → Identity and masters: delegates administration
- Other API modules → Notifications: delegates notifications
- Other API modules → Public content: delegates public content
- Authentication service → Application database: reads and writes
- Case service → Application database: reads and writes
- Diary service → Application database: reads and writes
- Document service → Application database: reads and writes
- Billing and fees → Application database: reads and writes
- Dashboard and reports → Application database: queries cases
- Identity and masters → Application database: reads and writes
- Notifications → Application database: records delivery
- Public content → Application database: reads content
- Application database → SQL Server: persists data
- Document service → Local file storage: stores and opens files
- Billing and fees → Payment gateway: creates checkout
- Authentication service → Email sender: sends reset email
