public RepositoryUser AddContributorToRepository(Guid repoId, string username, RepositoryUserTypes userTypes)
        {
            if (userTypes == RepositoryUserTypes.None)
            {
                userTypes = RepositoryUserTypes.User;
            }

            if (string.IsNullOrEmpty(username))
            {
                SetError("Invalid username");
                return(null);
            }

            var userId = Context.Users
                         .Where(u => u.UserDisplayName == username)
                         .Select(u => u.Id)
                         .FirstOrDefault();

            if (userId == Guid.Empty)
            {
                SetError("Invalid username");
                return(null);
            }

            return(AddContributorToRepository(repoId, userId, userTypes));
        }
        public RepositoryUser AddContributorToRepository(Guid repoId, Guid userId, RepositoryUserTypes userTypes)
        {
            var repo = Context.Repositories.FirstOrDefault(u => u.Id == repoId);

            if (repo == null)
            {
                SetError("Respositor to add user to doesn't exist.");
                return(null);
            }

            var user = Context.Users.FirstOrDefault(u => u.Id == userId);

            if (user == null)
            {
                SetError("User to add to repository doesn't exist.");
                return(null);
            }

            var map = Context.UserRepositories
                      .Include(ur => ur.User)
                      .FirstOrDefault(c => c.RepositoryId == repoId && c.UserId == userId);

            if (map != null)
            {
                SetError("User is already a contributor or owner of this repository");
                return(null);

                ; // already an owner or contributor
            }

            map = new RepositoryUser()
            {
                RepositoryId = repo.Id,
                UserId       = user.Id,
                UserType     = userTypes
            };
            repo.Users.Add(map);

            //// already a contributor
            //if (Context.RepositoryUser.Any(c => c.RepositoryId == repoId && c.UserId == userId))
            //    return true;

            //// User is the owner
            //if (Context.UserRepositories.Any(c => c.RepositoryId == repoId && c.UserId == userId))
            //    return true;

            //var map = new RepositoryContributor()
            //{
            //    RepositoryId = repo.Id,
            //    UserId = user.Id
            //};
            //repo.Contributors.Add(map);

            if (!Save())
            {
                return(null);
            }

            map.User       = user;
            map.Repository = repo;

            return(Context.UserRepositories.Include(ur => ur.User).FirstOrDefault(ur => ur.Id == map.Id));
        }