-
-
Save dcomartin/5a5d3e5a402ce78447924f0a89c62224 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class UserRegistration : | |
Saga<EmailReservationSagaData>, | |
IAmStartedByMessages<UserRegistrationStarted>, | |
IHandleMessages<UsernameReserved>, | |
IHandleMessages<UserAccountCreated>, | |
IHandleMessages<UsernameRegistered> | |
{ | |
protected override void ConfigureHowToFindSaga(SagaPropertyMapper<EmailReservationSagaData> mapper) | |
{ | |
mapper.ConfigureMapping<UserRegistrationStarted>(message => message.Username).ToSaga(sagaData => sagaData.Username); | |
mapper.ConfigureMapping<UsernameReserved>(message => message.Username).ToSaga(sagaData => sagaData.Username); | |
mapper.ConfigureMapping<UserAccountCreated>(message => message.Username).ToSaga(sagaData => sagaData.Username); | |
mapper.ConfigureMapping<UsernameRegistered>(message => message.Username).ToSaga(sagaData => sagaData.Username); | |
} | |
public async Task Handle(UserRegistrationStarted message, IMessageHandlerContext context) | |
{ | |
await context.Send(new ReserveUsername { Username = message.Username }); | |
} | |
public async Task Handle(UsernameReserved message, IMessageHandlerContext context) | |
{ | |
await context.Send(new CreateUserAccount { Username = message.Username }); | |
} | |
public async Task Handle(UserAccountCreated message, IMessageHandlerContext context) | |
{ | |
if (message.Username == "test" && Data.Attempts == 0) | |
{ | |
Data.Attempts++; | |
Console.WriteLine("Async: Account Creation Failed."); | |
return; | |
} | |
await context.Send(new ConfirmUsernameReservation { Username = message.Username }); | |
} | |
public Task Handle(UsernameRegistered message, IMessageHandlerContext context) | |
{ | |
Console.WriteLine($"Async: Registration Complete for {message.Username}"); | |
MarkAsComplete(); | |
return Task.CompletedTask; | |
} | |
} | |
public class EmailReservationSagaData : ContainSagaData | |
{ | |
public string Username { get; set; } | |
public int Attempts { get; set; } | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment