# arsbelkin/remindersapi architecture

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

- Interactive diagram: https://gitdiagram.com/arsbelkin/remindersapi
- Repository: https://github.com/arsbelkin/remindersapi

## Overview

RemindersAPI is a reminder-management service with user authentication, shared categories and reminders, notification scheduling, and administrative reporting. The main flow is an HTTP client calling API controllers, which delegate to application services and repositories backed by the database. Two workers handle notification scheduling and delivery through Redis and email integrations. The README provides no capability detail; the tree and sampled files support the feature branches shown. Several service, repository, and worker implementations were not sampled, so their internal calls are not expanded.

Main entry points: [`src/Reminders/Reminders.Infrastructure/Repositories`](https://github.com/arsbelkin/remindersapi/tree/main/src/Reminders/Reminders.Infrastructure/Repositories) (Repository Implementations), [`src/Reminders/Reminders.NotificationSenderWorker/Worker.cs`](https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.NotificationSenderWorker/Worker.cs) (Notification Sender), [`src/Reminders/Reminders.Application/Services/AuthService.cs`](https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.Application/Services/AuthService.cs) (Authentication), [`src/Reminders/Reminders.Infrastructure/Messaging/RedisNotificationClient.cs`](https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.Infrastructure/Messaging/RedisNotificationClient.cs) (Redis Queue Client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_api_runtime["API Runtime<br/>[Program.cs]"]
  node_auth_api["Authentication API<br/>[AuthController.cs]"]
  node_category_api["Categories API"]
  node_reminder_api["Reminders API"]
  node_notification_api["Notifications API"]
  node_admin_api["Admin API<br/>[AdminController.cs]"]
  node_exception_handler["Error Mapping"]
end

subgraph group_app["Application Services"]
  node_auth_service["Authentication<br/>[AuthService.cs]"]
  node_category_service["Category Management<br/>[CategoryService.cs]"]
  node_reminder_service["Reminder Management<br/>[ReminderService.cs]"]
  node_notification_service["Notification Management"]
  node_admin_service["Administration<br/>[AdminService.cs]"]
  node_hasher["Password Hashing"]
end

subgraph group_data["Persistence"]
  node_repositories["Repository Implementations<br/>[Repositories]"]
  node_db_context["EF Data Context"]
  node_database[("Relational Database")]
end

subgraph group_delivery["Notification Delivery"]
  node_scanner_worker["Notification Scanner<br/>[Worker.cs]"]
  node_sender_worker["Notification Sender<br/>[Worker.cs]"]
  node_redis_client["Redis Queue Client"]
  node_email_sender["Email Sender<br/>[EmailSender.cs]"]
end

node_client(("API Client"))
node_redis["Redis"]
node_email_provider["Email Provider"]

node_client -->|"sends requests"| node_api_runtime
node_auth_api -->|"delegates auth"| node_auth_service
node_category_api -->|"delegates categories"| node_category_service
node_reminder_api -->|"delegates reminders"| node_reminder_service
node_notification_api -->|"delegates notifications"| node_notification_service
node_admin_api -.->|"delegates admin"| node_admin_service
node_auth_service -->|"uses user repository"| node_repositories
node_auth_service -->|"hashes credentials"| node_hasher
node_category_service -.->|"uses repositories"| node_repositories
node_reminder_service -.->|"uses repositories"| node_repositories
node_notification_service -.->|"uses repositories"| node_repositories
node_admin_service -.->|"uses repositories"| node_repositories
node_repositories -->|"queries and saves"| node_db_context
node_db_context -.->|"maps entities"| node_database
node_scanner_worker -->|"reads notifications"| node_repositories
node_scanner_worker -->|"queues messages"| node_redis_client
node_sender_worker -->|"receives messages"| node_redis_client
node_sender_worker -->|"checks notifications"| node_repositories
node_sender_worker -->|"sends email"| node_email_sender
node_redis_client -.->|"uses queue"| node_redis
node_email_sender -.->|"delivers email"| node_email_provider

click node_api_runtime "https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.API/Program.cs"
click node_auth_api "https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.API/Controllers/AuthController.cs"
click node_category_api "https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.API/Controllers/CategoriesController.cs"
click node_reminder_api "https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.API/Controllers/RemindersController.cs"
click node_notification_api "https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.API/Controllers/NotificationsController.cs"
click node_admin_api "https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.API/Controllers/AdminController.cs"
click node_exception_handler "https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.API/Extensions/GlobalExceptionHandler.cs"
click node_auth_service "https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.Application/Services/AuthService.cs"
click node_category_service "https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.Application/Services/CategoryService.cs"
click node_reminder_service "https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.Application/Services/ReminderService.cs"
click node_notification_service "https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.Application/Services/NotificationService.cs"
click node_admin_service "https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.Application/Services/AdminService.cs"
click node_hasher "https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.Application/Common/BCryptHasherService.cs"
click node_repositories "https://github.com/arsbelkin/remindersapi/tree/main/src/Reminders/Reminders.Infrastructure/Repositories"
click node_db_context "https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.Infrastructure/Contexts/RemindersContext.cs"
click node_scanner_worker "https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.DbScannerWorker/Worker.cs"
click node_sender_worker "https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.NotificationSenderWorker/Worker.cs"
click node_redis_client "https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.Infrastructure/Messaging/RedisNotificationClient.cs"
click node_email_sender "https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.Infrastructure/Messaging/EmailSender.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_api_runtime,node_auth_api,node_category_api,node_reminder_api,node_notification_api,node_admin_api,node_exception_handler,node_client toneBlue
class node_auth_service,node_category_service,node_reminder_service,node_notification_service,node_admin_service,node_hasher,node_redis toneAmber
class node_repositories,node_db_context,node_database toneMint
class node_scanner_worker,node_sender_worker,node_redis_client,node_email_sender toneRose
class node_email_provider toneIndigo
```

## Components

### HTTP API

- [API Runtime](https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.API/Program.cs): `src/Reminders/Reminders.API/Program.cs`
- [Authentication API](https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.API/Controllers/AuthController.cs): `src/Reminders/Reminders.API/Controllers/AuthController.cs`
- [Categories API](https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.API/Controllers/CategoriesController.cs): `src/Reminders/Reminders.API/Controllers/CategoriesController.cs`
- [Reminders API](https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.API/Controllers/RemindersController.cs): `src/Reminders/Reminders.API/Controllers/RemindersController.cs`
- [Notifications API](https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.API/Controllers/NotificationsController.cs): `src/Reminders/Reminders.API/Controllers/NotificationsController.cs`
- [Admin API](https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.API/Controllers/AdminController.cs): `src/Reminders/Reminders.API/Controllers/AdminController.cs`
- [Error Mapping](https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.API/Extensions/GlobalExceptionHandler.cs): `src/Reminders/Reminders.API/Extensions/GlobalExceptionHandler.cs`

### Application Services

- [Authentication](https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.Application/Services/AuthService.cs): `src/Reminders/Reminders.Application/Services/AuthService.cs`
- [Category Management](https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.Application/Services/CategoryService.cs): `src/Reminders/Reminders.Application/Services/CategoryService.cs`
- [Reminder Management](https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.Application/Services/ReminderService.cs): `src/Reminders/Reminders.Application/Services/ReminderService.cs`
- [Notification Management](https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.Application/Services/NotificationService.cs): `src/Reminders/Reminders.Application/Services/NotificationService.cs`
- [Administration](https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.Application/Services/AdminService.cs): `src/Reminders/Reminders.Application/Services/AdminService.cs`
- [Password Hashing](https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.Application/Common/BCryptHasherService.cs): `src/Reminders/Reminders.Application/Common/BCryptHasherService.cs`

### Persistence

- [Repository Implementations](https://github.com/arsbelkin/remindersapi/tree/main/src/Reminders/Reminders.Infrastructure/Repositories): `src/Reminders/Reminders.Infrastructure/Repositories`
- [EF Data Context](https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.Infrastructure/Contexts/RemindersContext.cs): `src/Reminders/Reminders.Infrastructure/Contexts/RemindersContext.cs`
- **Relational Database**

### Notification Delivery

- [Notification Scanner](https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.DbScannerWorker/Worker.cs): `src/Reminders/Reminders.DbScannerWorker/Worker.cs`
- [Notification Sender](https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.NotificationSenderWorker/Worker.cs): `src/Reminders/Reminders.NotificationSenderWorker/Worker.cs`
- [Redis Queue Client](https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.Infrastructure/Messaging/RedisNotificationClient.cs): `src/Reminders/Reminders.Infrastructure/Messaging/RedisNotificationClient.cs`
- [Email Sender](https://github.com/arsbelkin/remindersapi/blob/main/src/Reminders/Reminders.Infrastructure/Messaging/EmailSender.cs): `src/Reminders/Reminders.Infrastructure/Messaging/EmailSender.cs`

### Other components

- **API Client**
- **Redis**
- **Email Provider**

## Connections

- API Client → API Runtime: sends requests
- Authentication API → Authentication: delegates auth (evidence: `src/Reminders/Reminders.Application/Services/AuthService.cs`)
- Categories API → Category Management: delegates categories (evidence: `src/Reminders/Reminders.API/Controllers/CategoriesController.cs`)
- Reminders API → Reminder Management: delegates reminders (evidence: `src/Reminders/Reminders.API/Controllers/RemindersController.cs`)
- Notifications API → Notification Management: delegates notifications (evidence: `src/Reminders/Reminders.API/Controllers/NotificationsController.cs`)
- Admin API → Administration: delegates admin
- Authentication → Repository Implementations: uses user repository (evidence: `src/Reminders/Reminders.Application/Services/AuthService.cs`)
- Authentication → Password Hashing: hashes credentials (evidence: `src/Reminders/Reminders.Application/Services/AuthService.cs`)
- Category Management → Repository Implementations: uses repositories
- Reminder Management → Repository Implementations: uses repositories
- Notification Management → Repository Implementations: uses repositories
- Administration → Repository Implementations: uses repositories
- Repository Implementations → EF Data Context: queries and saves (evidence: `src/Reminders/Reminders.Infrastructure/Repositories/ReminderRepository.cs`)
- EF Data Context → Relational Database: maps entities
- Notification Scanner → Repository Implementations: reads notifications (evidence: `src/Reminders/Reminders.DbScannerWorker/Worker.cs`)
- Notification Scanner → Redis Queue Client: queues messages (evidence: `src/Reminders/Reminders.DbScannerWorker/Worker.cs`)
- Notification Sender → Redis Queue Client: receives messages (evidence: `src/Reminders/Reminders.NotificationSenderWorker/Worker.cs`)
- Notification Sender → Repository Implementations: checks notifications (evidence: `src/Reminders/Reminders.NotificationSenderWorker/Worker.cs`)
- Notification Sender → Email Sender: sends email (evidence: `src/Reminders/Reminders.NotificationSenderWorker/Worker.cs`)
- Redis Queue Client → Redis: uses queue
- Email Sender → Email Provider: delivers email
