Adds reverse engineering docs and adds new aidlc feature for front-end development
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
# API Documentation
|
||||
|
||||
## REST APIs
|
||||
|
||||
### Authentication
|
||||
|
||||
#### POST /auth/login
|
||||
- **Method**: POST
|
||||
- **Path**: `/auth/login`
|
||||
- **Purpose**: Authenticate a user and receive JWT tokens
|
||||
- **Authorization**: Anonymous
|
||||
- **Request**: `{ "email": string, "password": string }`
|
||||
- **Response**: `{ "accessToken": string, "refreshToken": string, "expiresAt": datetime, "user": { "id": guid, "email": string, "naam": string, "role": string } }`
|
||||
|
||||
#### POST /auth/refresh
|
||||
- **Method**: POST
|
||||
- **Path**: `/auth/refresh`
|
||||
- **Purpose**: Refresh an access token using a valid refresh token
|
||||
- **Authorization**: Anonymous
|
||||
- **Request**: `{ "accessToken": string, "refreshToken": string }`
|
||||
- **Response**: Same as `/auth/login`
|
||||
|
||||
#### POST /auth/revoke
|
||||
- **Method**: POST
|
||||
- **Path**: `/auth/revoke`
|
||||
- **Purpose**: Revoke a refresh token (logout)
|
||||
- **Authorization**: Bearer JWT required
|
||||
- **Request**: `"<refreshToken>"` (string body)
|
||||
- **Response**: 204 No Content
|
||||
|
||||
---
|
||||
|
||||
### Setup
|
||||
|
||||
#### GET /setup/status
|
||||
- **Method**: GET
|
||||
- **Path**: `/setup/status`
|
||||
- **Purpose**: Check if the system has been initialized (first owner created)
|
||||
- **Authorization**: Anonymous
|
||||
- **Response**: `{ "initialized": boolean }`
|
||||
|
||||
#### POST /setup/owner
|
||||
- **Method**: POST
|
||||
- **Path**: `/setup/owner`
|
||||
- **Purpose**: Create the initial Owner account (only usable when system is not yet initialized)
|
||||
- **Authorization**: Anonymous
|
||||
- **Request**: `{ "email": string, "password": string }`
|
||||
- **Response**: `{ "message": string }`
|
||||
|
||||
---
|
||||
|
||||
### Users
|
||||
|
||||
#### POST /users/invite
|
||||
- **Method**: POST
|
||||
- **Path**: `/users/invite`
|
||||
- **Purpose**: Invite a new user by email with a specified role
|
||||
- **Authorization**: Bearer JWT, Policy: AdminOnly
|
||||
- **Request**: `{ "email": string, "role": string }`
|
||||
- **Response**: `{ "inviteLink": string }`
|
||||
|
||||
#### POST /users/complete-setup
|
||||
- **Method**: POST
|
||||
- **Path**: `/users/complete-setup`
|
||||
- **Purpose**: Complete account setup using an invitation token
|
||||
- **Authorization**: Anonymous
|
||||
- **Request**: `{ "token": string, "password": string }`
|
||||
- **Response**: `{ "message": string }`
|
||||
|
||||
#### GET /users/validate-invitation
|
||||
- **Method**: GET
|
||||
- **Path**: `/users/validate-invitation?token={token}`
|
||||
- **Purpose**: Validate an invitation token before showing the setup form
|
||||
- **Authorization**: Anonymous
|
||||
- **Response**: `{ "valid": boolean, "email": string, "role": string }` or error
|
||||
|
||||
---
|
||||
|
||||
### Availability
|
||||
|
||||
#### GET /availability/status
|
||||
- **Method**: GET
|
||||
- **Path**: `/availability/status`
|
||||
- **Purpose**: Get current system availability status
|
||||
- **Authorization**: Anonymous
|
||||
- **Response**: `{ "status": "Available|Maintenance|Unavailable", "checkedAt": datetime, "message": string }`
|
||||
|
||||
#### POST /availability/admin/status
|
||||
- **Method**: POST
|
||||
- **Path**: `/availability/admin/status`
|
||||
- **Purpose**: Update the system availability status
|
||||
- **Authorization**: Bearer JWT, Policy: OwnerOnly
|
||||
- **Request**: `{ "newStatus": "Available|Maintenance|Unavailable", "reason": string }`
|
||||
- **Response**: 200 OK or 400 Bad Request
|
||||
|
||||
---
|
||||
|
||||
## Authorization Policies
|
||||
|
||||
| Policy | Required Role | Description |
|
||||
|--------|--------------|-------------|
|
||||
| `OwnerOnly` | Owner | Full system access including availability management |
|
||||
| `AdminOnly` | Owner or Admin | User management access |
|
||||
|
||||
## Data Models
|
||||
|
||||
### AuthResponse
|
||||
- `accessToken` — short-lived JWT (e.g. 15 min)
|
||||
- `refreshToken` — long-lived opaque token
|
||||
- `expiresAt` — access token expiry datetime
|
||||
- `user` — authenticated user info
|
||||
|
||||
### ApplicationUser (returned in auth responses)
|
||||
- `id` — Guid
|
||||
- `email` — string
|
||||
- `naam` — string (display name)
|
||||
- `role` — string (Owner / Admin / User)
|
||||
- `isActive` — boolean
|
||||
|
||||
### Invitation
|
||||
- `token` — string (URL-safe token)
|
||||
- `email` — string
|
||||
- `role` — string
|
||||
- `expiryDate` — datetime
|
||||
- `isUsed` — boolean
|
||||
@@ -0,0 +1,123 @@
|
||||
# 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/
|
||||
@@ -0,0 +1,68 @@
|
||||
# Business Overview
|
||||
|
||||
## Business Context Diagram
|
||||
|
||||
```
|
||||
+--------------------------------------------------+
|
||||
| SlpModularCms Platform |
|
||||
| |
|
||||
| +-----------+ +-----------+ +-----------+ |
|
||||
| | Identity | | CMS | |Availability| |
|
||||
| | Module | | Module | | Module | |
|
||||
| | (Auth + | | (Content | | (System | |
|
||||
| | Users) | | Mgmt) | | Status) | |
|
||||
| +-----------+ +-----------+ +-----------+ |
|
||||
| |
|
||||
| +-------------------------------------------+ |
|
||||
| | Core / Shell | |
|
||||
| | (Domain entities, DbContext, Module I/F) | |
|
||||
| +-------------------------------------------+ |
|
||||
+--------------------------------------------------+
|
||||
| |
|
||||
v v
|
||||
[Admin Frontend] [External Clients]
|
||||
(React SPA) (API consumers)
|
||||
```
|
||||
|
||||
## Business Description
|
||||
|
||||
- **Business Description**: SlpModularCms is a modular Content Management System (CMS) platform. It provides a REST API backend for managing CMS content, users, and system availability. The platform uses role-based access control (Owner, Admin, User) and supports a modular plugin architecture so that features can be added as independent modules.
|
||||
- **Business Transactions**:
|
||||
- **User Authentication**: Login with email/password, receive JWT access + refresh token pair; refresh tokens for continued sessions; revoke tokens on logout.
|
||||
- **System Initialization**: First-time setup — create initial Owner account before normal operations can begin.
|
||||
- **User Invitation**: Admins and Owners invite new users by email; new users complete their account setup via an invitation link.
|
||||
- **System Availability Management**: Owners can update the system availability status (Available / Maintenance / Unavailable); anyone can query current status.
|
||||
- **CMS Content Management**: (Planned — module structure is in place but CMS-specific content modules are not yet implemented.)
|
||||
- **Business Dictionary**:
|
||||
- **Owner**: Highest-privilege role; can manage users, modules, and system availability.
|
||||
- **Admin**: Can manage users and CMS content within their scope.
|
||||
- **User**: Standard access; can use CMS features but cannot manage system settings.
|
||||
- **Module**: An independently deployable feature unit that integrates into the CMS shell.
|
||||
- **Invitation**: A time-limited token sent to a new user allowing them to create their account.
|
||||
- **Availability Status**: Available | Maintenance | Unavailable — represents the operational state of the system.
|
||||
|
||||
## Component Level Business Descriptions
|
||||
|
||||
### SlpModularCms.Api
|
||||
- **Purpose**: ASP.NET Core Web API host — the entry point for all HTTP requests.
|
||||
- **Responsibilities**: Bootstraps the application, registers modules, configures middleware (auth, CORS, Swagger), exposes REST endpoints.
|
||||
|
||||
### SlpModularCms.Core
|
||||
- **Purpose**: Shared domain core — entities, DbContext, interfaces, services, and migrations.
|
||||
- **Responsibilities**: Defines domain entities (ApplicationUser, ApplicationRole, Invitation, RefreshToken, GlobalAvailabilityState), persistence (EF Core + SQL Server), and shared service contracts.
|
||||
|
||||
### SlpModularCms.Modules.Identity
|
||||
- **Purpose**: Authentication and user management module.
|
||||
- **Responsibilities**: Implements AuthController (login/refresh/revoke), SetupController (initial owner creation), UsersController (invite, complete-setup, validate-invitation).
|
||||
|
||||
### SlpModularCms.Modules.Availability
|
||||
- **Purpose**: System availability / health status module.
|
||||
- **Responsibilities**: Implements AvailabilityController (get status, update status), caches status in-memory with circuit breaker, persists status changes to the database.
|
||||
|
||||
### SlpModularCms.Core.Tests
|
||||
- **Purpose**: Unit tests for the Core layer.
|
||||
- **Responsibilities**: Tests for exception classes, invitation service logic, identity services.
|
||||
|
||||
### SlpModularCms.Modules.Availability.Tests
|
||||
- **Purpose**: Unit/integration tests for the Availability module.
|
||||
- **Responsibilities**: Tests for availability service logic and controller behavior.
|
||||
@@ -0,0 +1,34 @@
|
||||
# Code Quality Assessment
|
||||
|
||||
## Test Coverage
|
||||
- **Overall**: Fair — unit tests exist for Core and Availability modules
|
||||
- **Unit Tests**: Present for Core.Tests and Modules.Availability.Tests
|
||||
- **Integration Tests**: Not observed in current structure
|
||||
- **Frontend Tests**: None (example app has no test files)
|
||||
|
||||
## Code Quality Indicators
|
||||
- **Linting**: Not explicitly configured (no .editorconfig or eslint config seen in backend; frontend likely uses Vite defaults)
|
||||
- **Code Style**: Consistent — clean C# with XML doc comments on public interfaces and entities
|
||||
- **Documentation**: Good for core interfaces and entities (XML doc comments); controllers have minimal comments
|
||||
- **Naming**: Follows .NET conventions (PascalCase classes/methods, camelCase parameters)
|
||||
|
||||
## Technical Debt
|
||||
- Auth context in example React app uses `localStorage` for user state (security concern — no httpOnly cookies)
|
||||
- Example app auth-context simulates login locally without real API calls (will need to be replaced with actual API integration)
|
||||
- No CORS configuration confirmed in backend (needs verification for SPA integration)
|
||||
- `AvailabilityController.UpdateStatus` uses a direct service cast (`as PersistentAvailabilityService`) which couples controller to implementation
|
||||
- No OpenAPI/Swagger spec currently integrated (would help frontend integration)
|
||||
|
||||
## Patterns and Anti-patterns
|
||||
|
||||
### Good Patterns
|
||||
- Module pattern provides clear separation of concerns between features
|
||||
- JWT refresh token rotation is properly implemented
|
||||
- Authorization policies are well-defined (OwnerOnly, AdminOnly)
|
||||
- EF Core used consistently for persistence
|
||||
- Service interfaces (IAuthService, IInvitationService, ISetupService) for testability
|
||||
|
||||
### Anti-patterns
|
||||
- Direct implementation cast in `AvailabilityController` (should use extended interface instead)
|
||||
- Example React app uses localStorage-based auth (acceptable for prototype, not production)
|
||||
- Example React app `auth-context` hardcodes mock users (must be replaced with real API calls)
|
||||
@@ -0,0 +1,108 @@
|
||||
# Code Structure
|
||||
|
||||
## Build System
|
||||
- **Type**: .NET SDK (MSBuild / dotnet CLI)
|
||||
- **Configuration**: `SlpModularCms.sln` — solution file referencing all projects
|
||||
- **Target Framework**: `net10.0`
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
SlpModularCms/
|
||||
+-- src/
|
||||
| +-- SlpModularCms.Api/ # API host
|
||||
| | +-- Extensions/
|
||||
| | | +-- ServiceCollectionExtensions.cs # DI setup (JWT, Identity, EF, Auth)
|
||||
| | +-- Infrastructure/ # Global exception handler
|
||||
| | +-- Properties/launchSettings.json
|
||||
| | +-- Program.cs # App startup and module loading
|
||||
| | +-- appsettings.json
|
||||
| | +-- appsettings.local.json # Local dev overrides
|
||||
| |
|
||||
| +-- SlpModularCms.Core/ # Shared core
|
||||
| | +-- Availability/
|
||||
| | | +-- AvailabilityOptions.cs # Circuit breaker config
|
||||
| | | +-- AvailabilityStatus.cs # Enum: Available, Maintenance, Unavailable
|
||||
| | +-- Data/
|
||||
| | | +-- ApplicationDbContext.cs # EF Core DbContext
|
||||
| | +-- Exceptions/ # Custom exception types
|
||||
| | +-- Identity/
|
||||
| | | +-- Authorization/ # Policy handlers
|
||||
| | | +-- Entities/
|
||||
| | | | +-- ApplicationUser.cs # IdentityUser<Guid> + IsActive + CreatedAt
|
||||
| | | | +-- ApplicationRole.cs # IdentityRole<Guid>
|
||||
| | | | +-- RefreshToken.cs # Refresh token entity
|
||||
| | | | +-- Invitation.cs # Invite entity with expiry
|
||||
| | | | +-- GlobalAvailabilityState.cs # Persisted system status
|
||||
| | | +-- Models/ # DTOs/request-response models
|
||||
| | | +-- Services/
|
||||
| | | +-- AuthService.cs # JWT generation + token validation
|
||||
| | | +-- InvitationService.cs # Invite creation + completion
|
||||
| | | +-- SetupService.cs # Initial owner creation
|
||||
| | +-- Migrations/ # EF Core migrations
|
||||
| | +-- Modules/
|
||||
| | +-- IModule.cs # Module interface (Name, Version, RegisterServices, UseModule)
|
||||
| | +-- ModuleInfo.cs # Module metadata record
|
||||
| |
|
||||
| +-- SlpModularCms.Modules.Identity/ # Identity feature module
|
||||
| | +-- Controllers/
|
||||
| | +-- AuthController.cs # /auth/* endpoints
|
||||
| | +-- SetupController.cs # /setup/* endpoints
|
||||
| | +-- UsersController.cs # /users/* endpoints
|
||||
| |
|
||||
| +-- SlpModularCms.Modules.Availability/ # Availability feature module
|
||||
| | +-- Controllers/
|
||||
| | | +-- AvailabilityController.cs # /availability/* endpoints
|
||||
| | +-- Middleware/ # Availability check middleware
|
||||
| | +-- Services/
|
||||
| | +-- PersistentAvailabilityService.cs # Reads/writes status to DB + cache
|
||||
| |
|
||||
| +-- SlpModularCms.Core.Tests/ # Core unit tests
|
||||
| +-- SlpModularCms.Modules.Availability.Tests/ # Availability unit tests
|
||||
|
|
||||
+-- aidlc-docs/ # AI-DLC workflow documentation
|
||||
```
|
||||
|
||||
## Key Classes/Modules
|
||||
|
||||
### Core Domain Entities
|
||||
- `ApplicationUser` — extends `IdentityUser<Guid>` with `IsActive`, `CreatedAt`, `Naam`
|
||||
- `ApplicationRole` — extends `IdentityRole<Guid>`
|
||||
- `RefreshToken` — linked to user; has `Token`, `ExpiryDate`, `IsRevoked`, `IsActive`
|
||||
- `Invitation` — linked to user (invitee); has `Token`, `ExpiryDate`, `IsUsed`, `Role`
|
||||
- `GlobalAvailabilityState` — singleton-ish entity storing `Status`, `Message`, `LastUpdatedAt`, `UpdatedBy`
|
||||
|
||||
### Core Services
|
||||
- `IAuthService` / `AuthService` — `AuthenticateAsync`, `RefreshTokenAsync`, `RevokeTokenAsync`
|
||||
- `IInvitationService` / `InvitationService` — `CreateInvitationAsync`, `CompleteInvitationAsync`, `ValidateInvitationAsync`
|
||||
- `ISetupService` / `SetupService` — `IsSystemInitializedAsync`, `CreateInitialOwnerAsync`
|
||||
- `IAvailabilityService` / `PersistentAvailabilityService` — `IsAvailableAsync`, `UpdateStatusAsync`
|
||||
|
||||
### Module System
|
||||
- `IModule` — interface: `RegisterServices(IServiceCollection)`, `UseModule(IApplicationBuilder)`
|
||||
- Modules discovered at startup and invoked in sequence
|
||||
|
||||
## Design Patterns
|
||||
### Module Pattern
|
||||
- **Location**: `SlpModularCms.Core/Modules/`, `SlpModularCms.Api/Program.cs`
|
||||
- **Purpose**: Allows features to be developed, tested, and deployed independently
|
||||
- **Implementation**: Each module class implements `IModule` and is registered in the API host
|
||||
|
||||
### Repository Pattern via EF Core
|
||||
- **Location**: `ApplicationDbContext` used directly in services
|
||||
- **Purpose**: Centralized persistence with Entity Framework
|
||||
|
||||
### JWT with Refresh Token Rotation
|
||||
- **Location**: `AuthService.cs`, `AuthController.cs`
|
||||
- **Purpose**: Stateless auth with token refresh capability
|
||||
|
||||
## Critical Dependencies
|
||||
### ASP.NET Core Identity
|
||||
- **Version**: .NET 10 built-in
|
||||
- **Usage**: User/Role management, password hashing
|
||||
- **Purpose**: Provides authentication primitives
|
||||
|
||||
### Entity Framework Core
|
||||
- **Version**: .NET 10 built-in
|
||||
- **Usage**: Data persistence with SQL Server provider
|
||||
- **Purpose**: ORM for all domain entities
|
||||
@@ -0,0 +1,23 @@
|
||||
# Component Inventory
|
||||
|
||||
## Application Packages
|
||||
- `SlpModularCms.Api` — Web API host; bootstraps application, registers modules, exposes HTTP endpoints
|
||||
- `SlpModularCms.Modules.Identity` — Identity module: authentication, setup, user invitation controllers
|
||||
- `SlpModularCms.Modules.Availability` — Availability module: system status tracking controllers and services
|
||||
|
||||
## Shared Packages
|
||||
- `SlpModularCms.Core` — Core domain: entities, DbContext, services, module interface, migrations
|
||||
|
||||
## Test Packages
|
||||
- `SlpModularCms.Core.Tests` — Unit tests for Core layer (exceptions, identity services)
|
||||
- `SlpModularCms.Modules.Availability.Tests` — Unit tests for Availability module
|
||||
|
||||
## Frontend (To Be Built)
|
||||
- `SlpModularCms.Frontend` — React SPA; admin panel for CMS management
|
||||
|
||||
## Total Count
|
||||
- **Total Packages**: 6 (5 existing .NET + 1 new frontend)
|
||||
- **Application**: 3 (Api, Modules.Identity, Modules.Availability)
|
||||
- **Shared**: 1 (Core)
|
||||
- **Test**: 2 (Core.Tests, Modules.Availability.Tests)
|
||||
- **Frontend**: 1 (to be built)
|
||||
@@ -0,0 +1,112 @@
|
||||
# Dependencies
|
||||
|
||||
## Internal Dependencies
|
||||
|
||||
```
|
||||
SlpModularCms.Api
|
||||
+-- SlpModularCms.Core (compile)
|
||||
+-- SlpModularCms.Modules.Identity (compile)
|
||||
+-- SlpModularCms.Modules.Availability (compile)
|
||||
|
||||
SlpModularCms.Modules.Identity
|
||||
+-- SlpModularCms.Core (compile)
|
||||
|
||||
SlpModularCms.Modules.Availability
|
||||
+-- SlpModularCms.Core (compile)
|
||||
|
||||
SlpModularCms.Core.Tests
|
||||
+-- SlpModularCms.Core (test)
|
||||
|
||||
SlpModularCms.Modules.Availability.Tests
|
||||
+-- SlpModularCms.Modules.Availability (test)
|
||||
+-- SlpModularCms.Core (test)
|
||||
|
||||
SlpModularCms.Frontend (to be built)
|
||||
+-- SlpModularCms.Api (runtime via REST HTTP)
|
||||
```
|
||||
|
||||
### Dependency Details
|
||||
|
||||
#### SlpModularCms.Api depends on SlpModularCms.Core
|
||||
- **Type**: Compile
|
||||
- **Reason**: Needs ApplicationDbContext, entities, DI extensions, module registration
|
||||
|
||||
#### SlpModularCms.Api depends on SlpModularCms.Modules.Identity
|
||||
- **Type**: Compile
|
||||
- **Reason**: Registers Identity module and its HTTP controllers
|
||||
|
||||
#### SlpModularCms.Api depends on SlpModularCms.Modules.Availability
|
||||
- **Type**: Compile
|
||||
- **Reason**: Registers Availability module and its HTTP controllers
|
||||
|
||||
#### SlpModularCms.Modules.Identity depends on SlpModularCms.Core
|
||||
- **Type**: Compile
|
||||
- **Reason**: Uses domain entities (ApplicationUser, Invitation), services (IAuthService), and DbContext
|
||||
|
||||
#### SlpModularCms.Modules.Availability depends on SlpModularCms.Core
|
||||
- **Type**: Compile
|
||||
- **Reason**: Uses GlobalAvailabilityState, AvailabilityStatus, AvailabilityOptions
|
||||
|
||||
## External Dependencies (Backend)
|
||||
|
||||
### Microsoft.AspNetCore.Identity
|
||||
- **Version**: .NET 10 built-in
|
||||
- **Purpose**: User and role management, password hashing
|
||||
- **License**: MIT
|
||||
|
||||
### Microsoft.EntityFrameworkCore + SqlServer provider
|
||||
- **Version**: .NET 10 built-in
|
||||
- **Purpose**: Data persistence
|
||||
- **License**: MIT
|
||||
|
||||
### Microsoft.AspNetCore.Authentication.JwtBearer
|
||||
- **Version**: .NET 10 built-in
|
||||
- **Purpose**: JWT authentication middleware
|
||||
- **License**: MIT
|
||||
|
||||
### Microsoft.IdentityModel.Tokens
|
||||
- **Version**: .NET 10 built-in
|
||||
- **Purpose**: JWT token creation and validation
|
||||
- **License**: MIT
|
||||
|
||||
## External Dependencies (Frontend — from package.json)
|
||||
|
||||
### react + react-dom
|
||||
- **Version**: 18.3.1
|
||||
- **Purpose**: Core UI framework
|
||||
- **License**: MIT
|
||||
|
||||
### react-router
|
||||
- **Version**: 7.13.0
|
||||
- **Purpose**: Client-side routing
|
||||
- **License**: MIT
|
||||
|
||||
### @radix-ui/* (multiple packages)
|
||||
- **Version**: Various (1.x–2.x)
|
||||
- **Purpose**: shadcn/ui component primitives
|
||||
- **License**: MIT
|
||||
|
||||
### tailwindcss
|
||||
- **Version**: 4.1.12
|
||||
- **Purpose**: Utility-first CSS framework
|
||||
- **License**: MIT
|
||||
|
||||
### lucide-react
|
||||
- **Version**: 0.487.0
|
||||
- **Purpose**: Icon library
|
||||
- **License**: ISC
|
||||
|
||||
### recharts
|
||||
- **Version**: 2.15.2
|
||||
- **Purpose**: Charts and data visualization
|
||||
- **License**: MIT
|
||||
|
||||
### react-hook-form
|
||||
- **Version**: 7.55.0
|
||||
- **Purpose**: Form state management
|
||||
- **License**: MIT
|
||||
|
||||
### sonner
|
||||
- **Version**: 2.0.3
|
||||
- **Purpose**: Toast notifications
|
||||
- **License**: MIT
|
||||
@@ -0,0 +1,16 @@
|
||||
# Reverse Engineering Metadata
|
||||
|
||||
**Analysis Date**: 2026-06-16T20:30:00Z
|
||||
**Analyzer**: AI-DLC (Junie)
|
||||
**Workspace**: K:\Development\Projects\SlpModularCms
|
||||
**Total Files Analyzed**: ~35 (backend .cs files) + ~60 (frontend .tsx/.ts files from ZIP)
|
||||
|
||||
## Artifacts Generated
|
||||
- [x] business-overview.md
|
||||
- [x] architecture.md
|
||||
- [x] code-structure.md
|
||||
- [x] api-documentation.md
|
||||
- [x] component-inventory.md
|
||||
- [x] technology-stack.md
|
||||
- [x] dependencies.md
|
||||
- [x] code-quality-assessment.md
|
||||
@@ -0,0 +1,56 @@
|
||||
# Technology Stack
|
||||
|
||||
## Backend
|
||||
|
||||
### Programming Languages
|
||||
- C# 14.0 — All backend packages
|
||||
|
||||
### Frameworks
|
||||
- ASP.NET Core 10.0 — Web API framework
|
||||
- ASP.NET Core Identity — User/role management, password hashing
|
||||
- Entity Framework Core 10.0 — ORM for SQL Server persistence
|
||||
|
||||
### Infrastructure
|
||||
- SQL Server — Primary database
|
||||
- JWT Bearer Authentication — Stateless auth with refresh tokens
|
||||
|
||||
### Build Tools
|
||||
- .NET 10 SDK / dotnet CLI — Build, test, publish
|
||||
- MSBuild — Underlying build engine
|
||||
|
||||
### Testing Tools
|
||||
- xUnit (inferred from project conventions) — Unit testing framework
|
||||
- Moq or similar (inferred) — Mocking in unit tests
|
||||
|
||||
---
|
||||
|
||||
## Frontend (Example App — ZIP file basis)
|
||||
|
||||
### Programming Languages
|
||||
- TypeScript — All frontend code
|
||||
|
||||
### Frameworks
|
||||
- React 18.3.1 — UI framework
|
||||
- React Router v7 (7.13.0) — Client-side routing
|
||||
- Tailwind CSS v4 (4.1.12) — Utility-first CSS framework
|
||||
- shadcn/ui (via Radix UI) — Accessible component primitives
|
||||
|
||||
### UI Component Libraries
|
||||
- Radix UI — Headless component primitives (accordion, dialog, dropdown, etc.)
|
||||
- lucide-react (0.487.0) — SVG icon library
|
||||
- recharts (2.15.2) — Charts and data visualization
|
||||
- MUI / Material UI (7.3.5) — Additional UI components
|
||||
|
||||
### State / Data
|
||||
- react-hook-form (7.55.0) — Form state management
|
||||
- sonner (2.0.3) — Toast notifications
|
||||
- next-themes (0.4.6) — Dark/light theme support
|
||||
|
||||
### Build Tools
|
||||
- Vite 6.3.5 — Build tool and dev server
|
||||
- pnpm — Package manager (pnpm-workspace.yaml present)
|
||||
- PostCSS — CSS processing
|
||||
|
||||
### Theme
|
||||
- Primary color: `#ac0000` (deep red)
|
||||
- Mode: Light + dark via CSS custom properties
|
||||
Reference in New Issue
Block a user