Files

47 lines
1.4 KiB
C#

using System.Text.Json;
public class AuditService : IAuditService
{
private readonly AppDbContext _db;
private readonly ICurrentUserService _currentUser;
private readonly IHttpContextAccessor _http;
public AuditService(
AppDbContext db,
ICurrentUserService currentUser,
IHttpContextAccessor http)
{
_db = db;
_currentUser = currentUser;
_http = http;
}
public async Task WriteAsync(
AuditAction action,
string entityType,
Guid entityId,
object? previousValue = null,
object? newValue = null,
string? reason = null)
{
var correlationId = _http.HttpContext?.Items["CorrelationId"]?.ToString();
_db.ClinicalAuditLogs.Add(new ClinicalAuditLog
{
Id = Guid.NewGuid(),
Action = action,
EntityType = entityType,
EntityId = entityId,
UserId = _currentUser.UserId,
UserDisplayName = _currentUser.DisplayName ?? _currentUser.Username,
PreviousValueJson = previousValue is null ? null : JsonSerializer.Serialize(previousValue),
NewValueJson = newValue is null ? null : JsonSerializer.Serialize(newValue),
Reason = reason,
IpAddress = _currentUser.IpAddress,
CorrelationId = correlationId,
CreatedAt = DateTimeOffset.UtcNow
});
await _db.SaveChangesAsync();
}
}