public async Task <List <HouseInviteSimpleInfo> > GetInvitesAvailableForUserAsync( decimal userId, CancellationToken cancellationToken = default) { var houseInviteInfos = await _houseInviteService.GetInvitesAvailableForUserAsync( userId, cancellationToken); var userIds = houseInviteInfos .Select(hii => hii.InvitedByUserId) .Distinct() .ToList(); var houseIds = houseInviteInfos .Select(hii => hii.HouseId) .Distinct() .ToList(); var userSimpleInfos = await _userService.GetByIdsAsync(userIds, cancellationToken); var houseSimpleInfos = await _houseService.GetSimpleHouseInfosByIdsAsync(houseIds, cancellationToken); var houseInviteSimpleInfos = _mapper.Map <List <HouseInviteSimpleInfo> >(houseInviteInfos); houseInviteSimpleInfos.ForEach(hisi => { var invitedByUser = userSimpleInfos.First(usi => usi.GoogleId == hisi.InvitedByUserId); hisi.InvitedBy = invitedByUser; var houseSimpleInfo = houseSimpleInfos.First(hsi => hsi.Id == hisi.HouseId); hisi.HouseInfo = houseSimpleInfo; }); return(houseInviteSimpleInfos); }
public async Task <AvailableHousesInfo> GetAvailableHouseInfosForUserAsync( decimal userId, CancellationToken cancellationToken = default) { var ownedHouseInfos = await _houseService.GetOwnedHouseSimpleInfosOfUserAsync( userId, cancellationToken); var membershipHouseInfos = await _houseService.GetMembershipHouseSimpleInfosOfUserAsync( userId, cancellationToken); var userIds = new List <decimal>() .Concat(ownedHouseInfos.Select(ohi => ohi.OwnerId)) .Concat(ownedHouseInfos.SelectMany(ohi => ohi.MemberIds)) .Concat(membershipHouseInfos.Select(mhi => mhi.OwnerId)) .Concat(membershipHouseInfos.SelectMany(mhi => mhi.MemberIds)) .Distinct() .ToList(); var userInfos = await _userService.GetByIdsAsync(userIds, cancellationToken); ownedHouseInfos .Concat(membershipHouseInfos) .ToList() .ForEach(hi => { var ownerInfo = userInfos.FirstOrDefault(ui => ui.GoogleId == hi.OwnerId); hi.OwnerInfo = ownerInfo; var memberInfos = userInfos .Where(ui => hi.MemberIds.Contains(ui.GoogleId)) .ToList(); hi.MemberInfos = memberInfos; }); var availableHousesInfo = new AvailableHousesInfo() { Owned = ownedHouseInfos, MemberOf = membershipHouseInfos }; return(availableHousesInfo); }