Files
forkmessager/backend/src/Modules/Relations/Application/Contacts/Integration/UserRegisteredHandler.cs
T

39 lines
1.2 KiB
C#

using Knot.Shared.Kernel;
using Knot.Shared.Kernel.Events;
using Knot.Modules.Relations.Application.Abstractions;
using Knot.Modules.Relations.Domain;
using MediatR;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
namespace Knot.Modules.Relations.Application.Contacts.Integration;
internal sealed class UserRegisteredHandler : INotificationHandler<UserRegisteredDomainEvent>
{
private readonly IContactsDbContext _context;
public UserRegisteredHandler(IContactsDbContext context)
{
_context = context;
}
public async Task Handle(UserRegisteredDomainEvent notification, CancellationToken cancellationToken)
{
var existing = await _context.UserReplicas.AnyAsync(r => r.Id == notification.UserId, cancellationToken);
if (existing) return;
var replica = UserReplica.Create(
notification.UserId,
notification.Username,
notification.DisplayName,
string.Empty, // Avatar will be synced on update
false,
null
);
_context.UserReplicas.Add(replica);
await _context.SaveChangesAsync(cancellationToken);
}
}