Adding
This commit is contained in:
+84
@@ -0,0 +1,84 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using LCU.API.Internal.RepoApi.Repos.Models;
|
||||
using LCU.API.Internal.RepoApi.Repos.Models.Producer;
|
||||
using LCU.API.Internal.RepoApi.Repos.Persistence;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace LCU.API.Internal.RepoApi.Repos.Repositories
|
||||
{
|
||||
public class ProcessingReceiptRepository : BaseRepository, IProcessingReceiptRepository
|
||||
{
|
||||
private readonly IReadOnlyCollection<RepoProcessingResult> _retryOutcomes = new List<RepoProcessingResult>()
|
||||
{
|
||||
RepoProcessingResult.Error, RepoProcessingResult.MissingRequirement
|
||||
};
|
||||
|
||||
public ProcessingReceiptRepository(AppDbContext context) : base(context)
|
||||
{
|
||||
}
|
||||
|
||||
public async Task<IReadOnlyCollection<ProcessingReceipt>> FindReceiptsAsync(string accountNo,
|
||||
string accountId = "", string caseId = "")
|
||||
{
|
||||
return await _context.ProcessingReceipts.Where(receipt => receipt.AccountNo == accountNo
|
||||
&& receipt.AccountId == accountId &&
|
||||
receipt.CaseId == caseId).AsNoTracking().ToListAsync();
|
||||
}
|
||||
|
||||
public async Task<IReadOnlyCollection<ProcessingReceipt>> GetReceiptsByAccountNoAsync(string accountNo)
|
||||
{
|
||||
return await _context.ProcessingReceipts.Where(receipt => receipt.AccountNo == accountNo).AsNoTracking().ToListAsync();
|
||||
}
|
||||
|
||||
public async Task<IReadOnlyCollection<ProcessingReceipt>> GetRetryListAsync()
|
||||
{
|
||||
return await _context.ProcessingReceipts.Where(receipt => _retryOutcomes.Contains(receipt.Outcome))
|
||||
.AsNoTracking().ToListAsync();
|
||||
}
|
||||
|
||||
public async Task AddOrUpdateAsync(ProcessingReceipt receipt)
|
||||
{
|
||||
if (receipt.Message != null && receipt.Message.Length > 124)
|
||||
{
|
||||
receipt.Message = receipt.Message.Substring(0, 124);
|
||||
}
|
||||
|
||||
if (receipt.QueuedBy != null && receipt.QueuedBy.Length > 39)
|
||||
{
|
||||
receipt.QueuedBy = receipt.QueuedBy.Substring(0, 39);
|
||||
}
|
||||
|
||||
if (!IsDuplicateReceipt(receipt))
|
||||
{
|
||||
await _context.ProcessingReceipts.AddAsync(receipt);
|
||||
}
|
||||
else
|
||||
{
|
||||
_context.Entry(receipt).State = EntityState.Modified;
|
||||
_context.ProcessingReceipts.Update(receipt);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task SaveAllAsync(IReadOnlyCollection<ProcessingReceipt> receipts)
|
||||
{
|
||||
var saveAllReceipts = receipts.Select(AddOrUpdateAsync).ToList();
|
||||
await Task.WhenAll(saveAllReceipts);
|
||||
}
|
||||
|
||||
public bool IsDuplicateReceipt(ProcessingReceipt newReceipt)
|
||||
{
|
||||
var duplicateReceipts = (
|
||||
from existingReceipt in _context.ProcessingReceipts
|
||||
where existingReceipt.AccountNo == newReceipt.AccountNo
|
||||
&& existingReceipt.AccountId == newReceipt.AccountId
|
||||
&& existingReceipt.CaseId == newReceipt.CaseId
|
||||
select existingReceipt
|
||||
).AsNoTracking().ToList();
|
||||
|
||||
return (duplicateReceipts.Count() != 0);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user