Implement repository pattern for AuditLog entity for Sprint 2 Story 1 Task 2.
Changes:
- Created IAuditLogRepository interface with 6 query methods
- Implemented AuditLogRepository with efficient querying
- Registered repository in DI container
- All queries use AsNoTracking for read-only operations
Query Methods:
- GetByIdAsync: Get single audit log by ID
- GetByEntityAsync: Get audit history for specific entity
- GetByUserAsync: Get user activity with pagination
- GetRecentAsync: Get recent audit logs
- AddAsync: Add new audit log
- GetCountAsync: Get total audit log count
Performance:
- All queries automatically filtered by TenantId (Global Query Filter)
- Efficient use of composite indexes
- AsNoTracking for read-only operations
Testing:
- All tests passing (192 domain + 113 identity + 8 arch + 32 app + 12 infra = 357 tests)
- No compilation errors
- Zero test failures
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implement AuditLog entity and EF Core configuration for Sprint 2 Story 1 Task 1.
Changes:
- Created AuditLog entity with multi-tenant support
- Added EF Core configuration with JSONB columns for PostgreSQL
- Created composite indexes for query optimization
- Generated database migration (20251104220842_AddAuditLogTable)
- Updated PMDbContext with AuditLog DbSet and query filter
- Updated task status to in_progress in sprint plan
Technical Details:
- PostgreSQL JSONB type for OldValues/NewValues (flexible schema)
- Composite index on (TenantId, EntityType, EntityId) for entity history queries
- Timestamp index (DESC) for recent logs queries
- UserId index for user activity tracking
- Multi-tenant query filter applied to AuditLog
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>