Ho un'applicazione DDD che utilizza due API esterne: Google Calendar API e Google Gmail. In uno dei servizi dell'applicazione voglio creare un evento del calendario (utilizzando l'API di Calendar) e quindi inviare un'e-mail di conferma con l'API di Google Gmail:
public ValidationResult CreateEventAndSendEmail(string email, EventViewModel EventViewModel)
{
// SEVERAL VALIDATIONS
// Call to Google Calendar API
validationResult = _googleApiProxy.CreateCalendarEvent(...);
// Confirmation email
if (validationResult.Succeeded)
{
var email = new Email
{
...
};
var emailSent = _emailApiProxy.SendEmail(email);
if (!emailSent.Succeeded)
{
// Call to Gmail API
validationResult.Errors.Add(string.Format("Error sending email to {0}", user.Email));
// What if the email wasn't delivered?
}
}
return validationResult;
}
Ma come devo gestire il caso quando la chiamata all'API di Calendar ha funzionato, ma l'API di Gmail non è riuscita? Qual è il modo migliore per rendere transazionale questo intero metodo quando ci sono due chiamate a API esterne (e diverse)? Un'alternativa sarebbe un'altra chiamata all'API di Calendar che cancella l'evento ma, sarebbe questo il giusto approccio?