Пример #1
0
        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);
        }
Пример #2
0
        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);
        }