47 lines
1.4 KiB
C#
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();
|
|
}
|
|
} |