public async Task<List<TeamModel>> Handle(GetAllTeamQuery request, CancellationToken cancellationToken) { var user = await userStore.FindByIdAsync(request.GetUser(), cancellationToken); if (user == null) throw new UserDoesNotExistException(); var teamsDb = await _teamRepository.GetAllTeamsAsync(); var teamsByWorkerDb = await _workersByTeamRepository.GetTotalWorkersByTeam(); var response = new List<TeamModel>(); var groupByTeamId = teamsByWorkerDb .GroupBy(x => x.TeamId) .Select(w => new TeamModel(w.Key, w.Count()) ); response.AddRange( teamsDb.Select(x => new TeamModel(x.TeamId, x.Name) { TotalWorkers = groupByTeamId.Any(y => y.TeamId == x.TeamId) ? groupByTeamId.Where(y => y.TeamId == x.TeamId).Select(y => y.TotalWorkers).FirstOrDefault() : 0 }) ); return response; }
public async Task <ActionResult <TeamModel> > GetAllTeamAsync([FromQuery] GetAllTeamQuery request) { try { request.SetUser(User.GetUserId()); var response = await _mediator.Send(request); return(Ok(response)); } catch (Exception ex) { _logger.Error(ex, $"Operation failed into controller {Routes.Get_All_Teams} with message: {ex.Message}"); return(BadRequest(ex.Message)); } }