61 lines
2.6 KiB
C#
61 lines
2.6 KiB
C#
using PostFundManagement.Domain;
|
|
using PostFundManagement.Domain.Abstractions;
|
|
using PostFundManagement.Domain.Errors;
|
|
using PostFundManagement.Domain.Extensions;
|
|
using PostFundManagement.Domain.Models;
|
|
using PostFundManagement.Infrastructure.Database;
|
|
|
|
namespace PostFundManagement.Application.Services.Shared;
|
|
|
|
public sealed class AuditService(IDbContextFactory<ApplicationDbContext> contextFactory, ITenantContextService tenantContextService) : IService
|
|
{
|
|
public async Task<Result<AuditLog[]>> GetAuditLogsAsync(CancellationToken cancellationToken = default) =>
|
|
await Result.Try((Func<Task<Result<AuditLog[]>>>)(async () =>
|
|
{
|
|
await using var context = await contextFactory.CreateDbContextAsync(cancellationToken);
|
|
|
|
var pagination = new Pagination { Page = 1, PageSize = 500, Index = 1 };
|
|
|
|
var logs = await context.AuditLogs
|
|
.OrderByDescending(o => o.Id)
|
|
.Skip((pagination.Page - 1) * pagination.PageSize)
|
|
.Take(pagination.PageSize)
|
|
.ToListAsync(cancellationToken);
|
|
|
|
return Result.Ok(logs.Select(p => p.Map()).ToArray());
|
|
}));
|
|
|
|
public async Task<Result<AuditLog[]>> GetAuditLogsAsync(Pagination pagination, CancellationToken cancellationToken = default) =>
|
|
await Result.Try((Func<Task<Result<AuditLog[]>>>)(async () =>
|
|
{
|
|
await using var context = await contextFactory.CreateDbContextAsync(cancellationToken);
|
|
|
|
var logs = await context.AuditLogs
|
|
.OrderByDescending(o => o.Id)
|
|
.Skip((pagination.Page - 1) * pagination.PageSize)
|
|
.Take(pagination.PageSize)
|
|
.ToListAsync(cancellationToken);
|
|
|
|
return Result.Ok(logs.Select(p => p.Map()).ToArray());
|
|
}));
|
|
|
|
public async Task<Result> LogActionAsync(string entityId, string entityName, string action, string[] changes, Guid performedBy, CancellationToken cancellationToken = default) =>
|
|
await Result.Try((Func<Task<Result>>)(async () =>
|
|
{
|
|
await using var context = await contextFactory.CreateDbContextAsync(cancellationToken);
|
|
|
|
context.Add(new Domain.Entities.AuditLog
|
|
{
|
|
EntityId = entityId,
|
|
Action = action,
|
|
Changes = changes,
|
|
EntityName = entityName,
|
|
PerformedBy = performedBy,
|
|
Timestamp = DateTime.UtcNow,
|
|
TenantId = tenantContextService.TenantId > 0 ? tenantContextService.TenantId : null,
|
|
});
|
|
|
|
return Result.FailIf(await context.SaveChangesAsync(cancellationToken) <= 0, CreateError.New);
|
|
}));
|
|
}
|