2025-04-02 22:08:17 +01:00

63 lines
2.6 KiB
C#

using System.Text.Json;
using EnotaryoPH.Data;
using EnotaryoPH.Data.Entities;
namespace EnotaryoPH.Web.Common.Services
{
public class EventService : IEventService
{
private readonly NotaryoDBContext _dBContext;
private readonly INotificationService _notificationService;
public EventService(NotaryoDBContext dBContext, INotificationService notificationService)
{
_dBContext = dBContext;
_notificationService = notificationService;
}
public Task LogAsync(NotaryoEvent notaryoEvent, object entityId) => LogAsync(notaryoEvent, entityId, null);
public async Task LogAsync(NotaryoEvent notaryoEvent, List<object> entityIds, object payLoad)
{
foreach (var entityId in entityIds)
{
await LogAsync(notaryoEvent, entityId, payLoad);
}
}
public async Task LogAsync(NotaryoEvent notaryoEvent, object entityId, object payLoad)
{
var logItem = new EventLog
{
Description = $"Event: {notaryoEvent}, Entity: {entityId}",
EventLog_UID = Guid.CreateVersion7(DateTime.UtcNow),
LogDate = DateTime.UtcNow,
LogType = notaryoEvent.ToString(),
Payload = payLoad != null ? JsonSerializer.Serialize(payLoad) : null,
StreamID = entityId.ToString(),
};
if (notaryoEvent == NotaryoEvent.TransactionApproved)
{
var transaction = _dBContext.Transactions.AsNoTracking()
.Include(t => t.TransactionSignatories)
.ThenInclude(ts => ts.User)
.Include(t => t.Lawyer)
.ThenInclude(l => l.User)
.Include(t => t.Principal)
.Include(t => t.TransactionDocument)
.FirstOrDefault(t => t.TransactionID == entityId.ToInteger());
logItem.Description = $"Transaction {entityId} has been approved.";
if (transaction != null)
{
var message = $"The document {transaction.TransactionDocument.DocumentType} has been approved.";
var allUsers = transaction.TransactionSignatories.ConvertAll(ts => ts.User.Email);
allUsers.Add(transaction.Lawyer.User.Email);
allUsers.Add(transaction.Principal.Email);
await _notificationService.NotifyUsersAsync(message, allUsers.ToArray());
}
}
_dBContext.Add(logItem);
_dBContext.SaveChanges();
}
}
}