4.8 KiB
4.8 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Build and Development Commands
# Build the solution
dotnet build
# Build in release mode
dotnet build -c Release
# Clean build artifacts
dotnet clean
# Restore NuGet packages
dotnet restore
# Run a specific project (from project directory)
dotnet run
# Run all tests
dotnet test
# Run tests with detailed output
dotnet test --logger "console;verbosity=normal"
# Run only unit tests (excluding integration tests)
dotnet test --filter "TestCategory!=Integration"
# Run tests with coverage
dotnet test --settings Tests/.runsettings --collect:"XPlat Code Coverage"
Architecture Overview
This is a .NET 9.0 solution with a modular architecture using Autofac for dependency injection. The codebase follows these key patterns:
Core Project Structure (SWP.Core)
- CommandQueries: CQRS pattern implementation with ICommand interface
- Configurations: Multi-provider configuration system supporting JSON files and database-backed smart configuration
- Database: PostgreSQL data access layer using Insight.Database ORM with connection factory pattern
- ModuleRegistry: Autofac modules for dependency registration (Security, Telemetry, Seq Logging, Database)
- Telemetry: Application Insights integration with custom enrichers and Seq telemetry channel
- SeqLogging: Structured logging implementation with Seq API integration
Database Project Structure (PlanTempus.Database)
- Database setup and configuration management
- Identity system setup (DDL)
- User management with DCL scripts for different user types (Application, Organization, DbAdmin)
- Tenant initialization
- Navigation and roles/permissions systems
Key Architectural Patterns
- Repository Pattern: Used for configuration management (IConfigurationRepository)
- Factory Pattern: Database connection management (IDbConnectionFactory)
- Module Pattern: Autofac modules organize dependencies by feature
- CQRS Elements: Command pattern with correlation and transaction IDs
- Smart Configuration: Database-backed configuration provider that integrates with .NET configuration system
Technology Stack
- .NET 9.0
- PostgreSQL with Npgsql and Insight.Database ORM
- Autofac for dependency injection
- FluentValidation for validation
- Seq API for structured logging
- Application Insights for telemetry
- Sodium.Core for encryption
- Newtonsoft.Json for JSON processing
Security Features
- SecureTokenizer service for token generation
- Multi-key encryption with MasterKey management
- Secure connection string handling
Testing Structure
The solution includes a comprehensive test project SWP.Core.X.TDD using:
- MSTest as the test framework
- Moq for mocking dependencies
- Shouldly for fluent assertions
- Coverlet for code coverage
Test Categories
- Unit Tests: Fast, isolated tests for individual components
- Integration Tests: Tests requiring database or external dependencies (marked with
[TestCategory("Integration")])
Running Specific Tests
# Run tests for a specific class
dotnet test --filter "ClassName=SecureTokenizerTests"
# Run tests by category
dotnet test --filter "TestCategory=Integration"
# Run tests by name pattern
dotnet test --filter "Name~Token"
Test Helpers
TestDataBuilder: Factory methods for creating test dataTestFixtureBase: Base class for test setup and teardown
Known Test Issues
- Some tests require external dependencies (Seq logging server, PostgreSQL)
- Integration tests are marked with
[Ignore]when external dependencies are not available - Current SecureTokenizer implementation has null handling issues that need fixing
Naming Conventions
The project follows a comprehensive naming convention documented in NAMING_CONVENTION.md. Key points:
Code Style
- Namespaces: PascalCase with
SWP.Coreprefix (notPlanTempus.Core) - Classes: PascalCase with appropriate suffixes (
Factory,Service,Exception, etc.) - Interfaces: PascalCase with
Iprefix - Methods: PascalCase, async methods end with
Async - Properties: PascalCase
- Private fields: camelCase with
_prefix - Parameters: camelCase
File Organization
- One main class per file
- File names match class names (PascalCase)
- Folder structure mirrors namespace hierarchy
Test Naming
- Test classes:
[ClassName]Tests - Test methods:
[MethodName]_Should[Behavior]_[Condition] - Test projects:
[ProjectName].X.TDD
Configuration
.editorconfigenforces formatting rules- Hierarchical configuration keys with PascalCase sections
- Database uses snake_case, C# uses PascalCase with proper mapping