public async Task <Feedbacks> GetNamesForFeedback(string id)
        {
            var repo = new TableStorageRepository();

            var feedback = await repo.GetFeedByFeedId(id);

            var users = await repo.GetUsersWithoutParams();

            var names = new Feedbacks {
            };

            foreach (var user in users)
            {
                if (user.Id == feedback.ID)
                {
                    feedback.ID = user.Name;
                }

                if (user.Id == feedback.ID_receiver)
                {
                    feedback.ID_receiver = user.Name;
                }

                if (user.Id == feedback.ID_manager)
                {
                    feedback.ID_manager = user.Name;
                }
            }

            return(feedback);
        }
        public async Task <IEnumerable <User> > GetMyTeamAsManager(string managerid)
        {
            var repo  = new TableStorageRepository();
            var users = await repo.GetUsersForTeam();

            Dictionary <string, List <Models.User> > descendantsFromManager = new Dictionary <string, List <Models.User> >();

            Models.User manager = new Models.User();
            manager.Id   = managerid;
            manager.Name = managerid;
            foreach (var user in users)
            {
                if (!descendantsFromManager.ContainsKey(user.Manager_ID))
                {
                    descendantsFromManager[user.Manager_ID] = new List <Models.User>();
                }
                descendantsFromManager[user.Manager_ID].Add(user);

                if (user.Name == managerid || user.Id == managerid)
                {
                    manager = user;
                }
            }
            Queue <Models.User> queue       = new Queue <Models.User>();
            List <Models.User>  descendants = new List <Models.User>();

            queue.Enqueue(manager);
            while (queue.Count != 0)
            {
                var user = queue.Dequeue();
                if (user.Name != managerid && user.Id != managerid)
                {
                    descendants.Add(user);
                }
                if (descendantsFromManager.ContainsKey(user.Name))
                {
                    foreach (var child in descendantsFromManager[user.Name])
                    {
                        queue.Enqueue(child);
                    }
                    descendantsFromManager.Remove(user.Name);
                }
            }



            // descendants = descendants.Where(x => x.IsDeleted == false).ToList();

            return(descendants);
        }
        public async Task <PagedList <User> > GetUsers(UserParams userParams)
        {
            var repo = new TableStorageRepository();
            await userTable.CreateIfNotExistsAsync();

            var results = (await userTable.ExecuteQuerySegmentedAsync(new TableQuery <User>(), null)).AsQueryable();

            results = results.Where(x => x.IsDeleted == false).Where(x => x.Role != "admin").Where(x => x.RowKey != userParams.UserId).OrderBy(x => x.Name);

            if ((!string.IsNullOrEmpty(userParams.Role)) && userParams.Team)
            {
                if (userParams.Role == "manager")
                {
                    var newResults = await repo.GetMyTeamAsManager(userParams.UserId);

                    results = newResults.AsQueryable().OrderByDescending(x => x.Name);
                }
                else if (userParams.Role == "employee")
                {
                    var newResults = await repo.GetMyTeamAsEmployee(userParams.Manager);

                    results = newResults.AsQueryable().Where(x => x.RowKey != userParams.UserId).Union(results.AsQueryable()
                                                                                                       .Where(x => x.Name == userParams.Manager)).OrderByDescending(x => x.Name);
                }
                else
                {
                    userParams.Role = null;
                }
            }

            if (!string.IsNullOrEmpty(userParams.Search))
            {
                results = results.Where(x => x.Name.ToLower().Contains(userParams.Search.ToLower()) ||
                                        x.Manager_ID.ToLower().Contains(userParams.Search.ToLower()) ||
                                        x.Email.ToLower().Contains(userParams.Search.ToLower())
                                        );
            }


            if (!string.IsNullOrEmpty(userParams.OrderBy))
            {
                switch (userParams.OrderBy)
                {
                case "desc":
                    results = results.OrderByDescending(u => u.Name);
                    break;

                case "asc":
                    results = results.OrderBy(u => u.Name);
                    break;

                case "man-asc":
                    results = results.OrderBy(u => u.Manager_ID);
                    break;

                case "man-desc":
                    results = results.OrderByDescending(u => u.Manager_ID);
                    break;

                default:
                    results = results.OrderBy(u => u.Name);
                    break;
                }
            }


            if (results == null)
            {
                return(null);
            }

            var paginatedResult = PagedList <User> .Create(results, userParams.PageNumber, userParams.PageSize);

            if (paginatedResult == null)
            {
                return(null);
            }
            return(paginatedResult);
        }
        public async Task <bool> SaveAll()
        {
            var repo = new TableStorageRepository();

            return(await repo.SaveAll());
        }
        public void Delete <T>(T entity) where T : class
        {
            var repo = new TableStorageRepository();

            repo.Delete(entity);
        }
        /////user apisss
        public void Add <T>(T entity) where T : class
        {
            var repo = new TableStorageRepository();

            repo.Add(entity);
        }