Example #1
0
        public async Task <List <RoleModel> > Handle(GetAllRolesQuery request, CancellationToken cancellationToken)
        {
            var user = await userStore.FindByIdAsync(request.GetUser(), cancellationToken);

            if (user == null)
            {
                throw new Exceptions.UserDoesNotExistException();
            }

            var roleDb = await _roleRepository.GetAllRolesAsync();

            var workersDb = await _workerRepository.GetAllWorkersAsync();


            var groupByRoleId = workersDb
                                .GroupBy(x => x.Role)
                                .Select(w => new RoleModel(w.Key.RoleId, w.Count())
                                        );

            var response = roleDb.Select(x =>
                                         new RoleModel(roleId: x.RoleId,
                                                       roleName: x.Name,
                                                       abbreviation: x.Abbreviation)
            {
                TotalWorkers = groupByRoleId.Any(y => y.RoleId == x.RoleId)
                                                        ? groupByRoleId.Where(y => y.RoleId == x.RoleId).Select(y => y.TotalWorkers).FirstOrDefault()
                                                        : 0
            })
                           .ToList();

            return(response);
        }