39 lines
1.1 KiB
C#
39 lines
1.1 KiB
C#
using MicCheck.Api.Data;
|
|
|
|
namespace MicCheck.Api.Audit;
|
|
|
|
public class AuditService(MicCheckDbContext db, IHttpContextAccessor httpContextAccessor)
|
|
{
|
|
public virtual async Task LogAsync(
|
|
string resourceType,
|
|
string resourceId,
|
|
string action,
|
|
int organizationId,
|
|
int? projectId = null,
|
|
int? environmentId = null,
|
|
string? changes = null,
|
|
CancellationToken ct = default)
|
|
{
|
|
int? actorUserId = null;
|
|
|
|
var userIdClaim = httpContextAccessor.HttpContext?.User.FindFirst("UserId")?.Value;
|
|
if (int.TryParse(userIdClaim, out var parsedId))
|
|
actorUserId = parsedId;
|
|
|
|
db.AuditLogs.Add(new AuditLog
|
|
{
|
|
ResourceType = resourceType,
|
|
ResourceId = resourceId,
|
|
Action = action,
|
|
OrganizationId = organizationId,
|
|
ProjectId = projectId,
|
|
EnvironmentId = environmentId,
|
|
ActorUserId = actorUserId,
|
|
Changes = changes,
|
|
CreatedAt = DateTimeOffset.UtcNow
|
|
});
|
|
|
|
await db.SaveChangesAsync(ct);
|
|
}
|
|
}
|