public static async Task<InvitationsIssued> InviteAsync( ApplicationDbContext dbContext, InvitationRequest request) { using (var tx = dbContext.Database.BeginTransaction()) { bool succeeded = false; try { InvitationsIssued current = await GetCurrentInvitations(dbContext); if (!current.Accepted.Contains(request.Email) && !current.Outstanding.Contains(request.Email)) { dbContext.Invitations.Add(new Invitation { Email = request.Email }); await dbContext.SaveChangesAsync(); current.Outstanding.Add(request.Email); } tx.Commit(); succeeded = true; return current; } finally { if (!succeeded) { tx.Rollback(); } } } }
public static async Task<InvitationsIssued> UninviteAsync( ApplicationDbContext dbContext, InvitationRequest request) { using (var tx = dbContext.Database.BeginTransaction()) { bool succeeded = false; try { Invitation existing = await dbContext.Invitations.SingleOrDefaultAsync(e => e.Email == request.Email); if (existing != null) { dbContext.Invitations.Remove(existing); await dbContext.SaveChangesAsync(); } InvitationsIssued current = await GetCurrentInvitations(dbContext); tx.Commit(); succeeded = true; return current; } finally { if (!succeeded) { tx.Rollback(); } } } }
/// <summary> /// Cancel an invitation. /// </summary> /// <param name="request">Who to uninvite.</param> /// <returns></returns> /// <returns>Lists of the outstanding and accepted invitations.</returns> public async Task<InvitationsIssued> PostUninviteAsync(InvitationRequest request) { UserInfo user = await GetUserInfoAsync(); if (!MasterEmails.Contains(user.Email)) { throw new HttpResponseException(HttpStatusCode.Forbidden); } return await InvitationOperations.UninviteAsync(DbContext, request); }