Newer
Older
ReservationPattern / ReservationSaga / ReserveUsername.cs
@Derek Comartin Derek Comartin on 7 Feb 2023 937 bytes Another Exmaple
using NServiceBus;

namespace ReservationSaga;

public class ReserveUsername : ICommand
{
    public string Username { get; set; }
}

public class ReserveUsernameHandler : IHandleMessages<ReserveUsername>
{
    private readonly UsernameReservation _usernameReservation;

    public ReserveUsernameHandler(UsernameReservation usernameReservation)
    {
        _usernameReservation = usernameReservation;
    }

    public async Task Handle(ReserveUsername message, IMessageHandlerContext context)
    {
        Console.WriteLine($"Async: Reserving Username for {message.Username}");

        if (_usernameReservation.Reserve(message.Username))
        {
            await context.Publish(new UsernameReserved { Username = message.Username });
        }
    }
}

public class UsernameReserved : IEvent
{
    public string Username { get; set; }
}

public class UserRegistrationTimeout : IEvent
{
    public string Username { get; set; }
}