Esempio n. 1
0
        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();
                    }
                }
            }
        }
Esempio n. 2
0
        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();
                    }
                }
            }
        }
Esempio n. 3
0
 /// <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);
 }