public async Task CheckAsync(CancellationToken ct) { try { var pending = await appStore.QueryNonConfirmedEmailAddressesAsync(ct); if (pending.Count > 0) { var emails = pending.Select(x => x.EmailAddress).ToHashSet(StringComparer.OrdinalIgnoreCase); var statuses = await emailServer.GetStatusAsync(emails !, ct); foreach (var(emailAddress, status) in statuses) { foreach (var app in pending.Where(x => string.Equals(x.EmailAddress, emailAddress, StringComparison.OrdinalIgnoreCase))) { var currentStatus = status; if (app.EmailVerificationStatus != currentStatus) { if (currentStatus == EmailVerificationStatus.Failed) { if (!string.IsNullOrWhiteSpace(app.EmailAddress)) { await emailServer.AddEmailAddressAsync(app.EmailAddress, ct); currentStatus = EmailVerificationStatus.Pending; } } var update = new UpdateAppEmailVerificationStatus { Status = currentStatus }; await appStore.UpsertAsync(app.Id, update, ct); } } } } } catch (Exception ex) { log.LogError(ex, w => w .WriteProperty("action", "CheckEmailAddresses") .WriteProperty("status", "Failed")); } }
public async Task <IActionResult> PostApp([FromBody] UpsertAppDto request) { var subject = UserId; if (string.IsNullOrWhiteSpace(subject)) { return(Forbid()); } var update = request.ToUpdate(subject); var app = await appStore.UpsertAsync(null, update, HttpContext.RequestAborted); var response = AppDto.FromDomainObject(app, UserId); return(Ok(response)); }