79 lines
2.6 KiB
C#
79 lines
2.6 KiB
C#
using DD.Persistence.Database.Entity;
|
|
using DD.Persistence.Models.Requests;
|
|
using DD.Persistence.Repositories;
|
|
using Microsoft.AspNetCore.Components.Forms;
|
|
using Microsoft.Extensions.Caching.Memory;
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
namespace DD.Persistence.API.Services;
|
|
public class ChangeLogService
|
|
{
|
|
private readonly IMemoryCache memoryCache;
|
|
private readonly IChangeLogCommitRepository commitRepository;
|
|
private readonly IChangeLogRepository repository;
|
|
private readonly TimeSpan? AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(60);
|
|
|
|
public ChangeLogService(
|
|
IMemoryCache memoryCache,
|
|
IChangeLogCommitRepository commitRepository,
|
|
IChangeLogRepository repository)
|
|
{
|
|
this.memoryCache = memoryCache;
|
|
this.commitRepository = commitRepository;
|
|
this.repository = repository;
|
|
}
|
|
|
|
private async Task<Guid> GetOrCreateAsync(ChangeLogCommitDto commitDto, CancellationToken token)
|
|
{
|
|
var key = (commitDto.IdAuthor, commitDto.Comment);
|
|
var commitId = await memoryCache.GetOrCreateAsync(key, async (cacheEntry) =>
|
|
{
|
|
cacheEntry.AbsoluteExpirationRelativeToNow = AbsoluteExpirationRelativeToNow;
|
|
|
|
var commitId = await commitRepository.Add(commitDto, token);
|
|
|
|
return commitId;
|
|
});
|
|
return commitId;
|
|
}
|
|
|
|
public async Task<int> AddRange(Guid idDiscriminator, ChangeLogCommitDto commitDto, CancellationToken token)
|
|
{
|
|
var commitId = await GetOrCreateAsync(commitDto, token);
|
|
commitDto.Id = commitId;
|
|
|
|
var result = await repository.AddRange(idDiscriminator, commitDto, token);
|
|
return result;
|
|
}
|
|
|
|
public async Task<int> MarkAsDeleted(IEnumerable<Guid> ids, ChangeLogCommitDto commitDto, CancellationToken token)
|
|
{
|
|
var commitId = await GetOrCreateAsync(commitDto, token);
|
|
commitDto.Id = commitId;
|
|
|
|
var result = await repository.MarkAsDeleted(commitId, ids, commitDto.Creation, token);
|
|
|
|
return result;
|
|
}
|
|
|
|
public async Task<int> ClearAndAddRange(Guid idDiscriminator, ChangeLogCommitDto commitDto, CancellationToken token)
|
|
{
|
|
var commitId = await GetOrCreateAsync(commitDto, token);
|
|
commitDto.Id = commitId;
|
|
|
|
var result = await repository.ClearAndAddRange(idDiscriminator, commitDto, token);
|
|
|
|
return result;
|
|
}
|
|
|
|
public async Task<int> UpdateRange(ChangeLogCommitDto changeLogCommit, CancellationToken token)
|
|
{
|
|
var commitId = await GetOrCreateAsync(changeLogCommit, token);
|
|
changeLogCommit.Id = commitId;
|
|
|
|
var result = await repository.UpdateRange(changeLogCommit, token);
|
|
|
|
return result;
|
|
}
|
|
}
|