124 lines
5.5 KiB
Markdown
124 lines
5.5 KiB
Markdown
# System Architecture
|
|
|
|
## System Overview
|
|
|
|
SlpModularCms is a modular, ASP.NET Core-based CMS platform. The backend is structured as a monolith-with-modules: a single API host (`SlpModularCms.Api`) that dynamically loads feature modules at startup. Each module is self-contained and registers its own services and HTTP middleware. Persistence is handled via Entity Framework Core with SQL Server. Authentication uses JWT Bearer tokens with refresh token rotation.
|
|
|
|
The frontend is a React SPA (to be built) that communicates with the API via REST/JSON. The example app (from ZIP) provides the design foundation: Vite + React Router v7 + shadcn/ui + Tailwind CSS v4 with primary color `#ac0000`.
|
|
|
|
## Architecture Diagram
|
|
|
|
```
|
|
+--------------------------------------------------+
|
|
| Client Layer |
|
|
| +--------------------------------------------+ |
|
|
| | React SPA (SlpModularCms.Frontend) | |
|
|
| | Vite + React Router v7 + shadcn/ui | |
|
|
| | Tailwind CSS v4 (#ac0000 theme) | |
|
|
| +--------------------------------------------+ |
|
|
+---------------------------+----------------------+
|
|
| HTTP REST / JSON
|
|
+---------------------------v----------------------+
|
|
| API Layer |
|
|
| +--------------------------------------------+ |
|
|
| | SlpModularCms.Api (ASP.NET Core) | |
|
|
| | - JWT Bearer Auth Middleware | |
|
|
| | - CORS, Swagger/OpenAPI | |
|
|
| | - Module registration pipeline | |
|
|
| +--------------------------------------------+ |
|
|
| |
|
|
| +------------------+ +---------------------+ |
|
|
| | Identity Module | | Availability Module | |
|
|
| | - AuthController| | - AvailabilityCtrl | |
|
|
| | - SetupCtrl | | - PersistentService | |
|
|
| | - UsersCtrl | | - CircuitBreaker | |
|
|
| +------------------+ +---------------------+ |
|
|
+---------------------------+----------------------+
|
|
|
|
|
+---------------------------v----------------------+
|
|
| Core Layer |
|
|
| +--------------------------------------------+ |
|
|
| | SlpModularCms.Core | |
|
|
| | - ApplicationDbContext (EF Core) | |
|
|
| | - Domain Entities | |
|
|
| | - Identity Services (Auth, Setup, Invite) | |
|
|
| | - IModule interface + ModuleInfo | |
|
|
| +--------------------------------------------+ |
|
|
+---------------------------+----------------------+
|
|
|
|
|
+---------------------------v----------------------+
|
|
| Data Layer |
|
|
| +--------------------------------------------+ |
|
|
| | SQL Server Database | |
|
|
| | - ASP.NET Identity tables | |
|
|
| | - RefreshTokens | |
|
|
| | - Invitations | |
|
|
| | - GlobalAvailabilityState | |
|
|
| +--------------------------------------------+ |
|
|
+--------------------------------------------------+
|
|
```
|
|
|
|
## Component Descriptions
|
|
|
|
### SlpModularCms.Api
|
|
- **Purpose**: Web API host and application entry point
|
|
- **Responsibilities**: Bootstrap, module loading, middleware pipeline, CORS, Swagger
|
|
- **Dependencies**: SlpModularCms.Core, SlpModularCms.Modules.Identity, SlpModularCms.Modules.Availability
|
|
- **Type**: Application
|
|
|
|
### SlpModularCms.Core
|
|
- **Purpose**: Shared domain layer
|
|
- **Responsibilities**: Domain entities, EF Core DbContext, authentication services, module interface
|
|
- **Dependencies**: EF Core, ASP.NET Identity, SQL Server provider
|
|
- **Type**: Shared Library
|
|
|
|
### SlpModularCms.Modules.Identity
|
|
- **Purpose**: Identity and user management module
|
|
- **Responsibilities**: HTTP endpoints for auth, setup, and user invitation flows
|
|
- **Dependencies**: SlpModularCms.Core
|
|
- **Type**: Application Module
|
|
|
|
### SlpModularCms.Modules.Availability
|
|
- **Purpose**: System availability tracking module
|
|
- **Responsibilities**: Exposes system status, allows owners to update it, caches with circuit breaker
|
|
- **Dependencies**: SlpModularCms.Core
|
|
- **Type**: Application Module
|
|
|
|
### SlpModularCms.Frontend (To Be Built)
|
|
- **Purpose**: Admin SPA for CMS management
|
|
- **Responsibilities**: Login, dashboard, user management, CMS content management, availability status display
|
|
- **Dependencies**: SlpModularCms.Api (REST)
|
|
- **Type**: Frontend Application
|
|
|
|
## Data Flow
|
|
|
|
```
|
|
Login Flow:
|
|
Browser -> POST /auth/login -> AuthController
|
|
-> AuthService.AuthenticateAsync()
|
|
-> PasswordHasher validates credentials
|
|
-> JwtService generates access + refresh tokens
|
|
-> Returns {accessToken, refreshToken}
|
|
|
|
Invite Flow:
|
|
Admin -> POST /users/invite -> UsersController
|
|
-> InvitationService.CreateInvitationAsync()
|
|
-> Stores Invitation entity with token
|
|
-> Returns invite link
|
|
|
|
New User Setup:
|
|
User -> POST /users/complete-setup -> UsersController
|
|
-> InvitationService.CompleteInvitationAsync()
|
|
-> Sets password, activates account
|
|
```
|
|
|
|
## Integration Points
|
|
- **External APIs**: None currently
|
|
- **Databases**: SQL Server (via EF Core)
|
|
- **Third-party Services**: None currently
|
|
|
|
## Infrastructure Components
|
|
- **Deployment Model**: Single API process + React SPA (separate deploy or static files)
|
|
- **Authentication**: JWT Bearer tokens (HS256 or RS256 based on JwtSettings config)
|
|
- **Database Migrations**: EF Core Code-First migrations in SlpModularCms.Core/Migrations/
|