Пример #1
0
        public async Task <PagedResponse <PetLostAlert> > Post(PetLastAlertsRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            return(await _petSearchProvider.GetPetLostAlertsAsync(request)
                   .ConfigureAwait(false));
        }
        public PagedResponseViewModel <PetLostAlert> GetPetLastAlerts(PetLastAlertsRequest request)
        {
            var response = _findMyPetClient.JsonClient().Post(request);

            return(new PagedResponseViewModel <PetLostAlert>
            {
                Result = response.Result,
                TotalPages = response.TotalPages,
                TotalRecords = response.TotalRecords
            });
        }
Пример #3
0
        public PagedResponseViewModel <PetLastAlertDetailViewModel> GetPetLastAlerts(DateTime from, DateTime to, int pageSize, int pageNumber)
        {
            var request = new PetLastAlertsRequest
            {
                From       = from,
                To         = to,
                PageSize   = pageSize,
                PageNumber = pageNumber
            };

            var response = _petSearchServiceClient.GetPetLastAlerts(request);

            return(new PagedResponseViewModel <PetLastAlertDetailViewModel>
            {
                Result = response.Result.ConvertAll(x => _petSearchMapper.PetLastAlertToViewModel(x)),
                TotalPages = response.TotalPages,
                TotalRecords = response.TotalRecords
            });
        }
Пример #4
0
        public async Task <PagedResponse <PetLostAlert> > GetPetLostAlertsAsync(PetLastAlertsRequest request)
        {
            var response = new PagedResponse <PetLostAlert>();
            List <PetAlertTableModel> petAlerts;
            var records       = new List <Tuple <PetAlertTableModel, PetTableModel, OwnerTableModel, PetImageTableModel> >();
            var imagesResults = new List <Tuple <PetAlertTableModel, PetAlertImageTableModel> >();
            int totalRecords  = 0;
            int totalPages    = 0;

            using (var dbConnection = _dbConnectionFactory.Open())
            {
                var q = dbConnection.From <PetAlertTableModel>()
                        .Where(pa => pa.AlertStatus == (int)AlertStatusEnum.Active &&
                               (pa.CreatedOn >= request.From && pa.CreatedOn <= request.To))
                        .OrderByDescending(pa => pa.CreatedOn);

                totalRecords = await dbConnection.SqlScalarAsync <int>(q.ToCountStatement(), q.Params);

                if (
                    (request.PageSize.HasValue && request.PageNumber.HasValue) &&
                    totalRecords > request.PageSize
                    )
                {
                    totalPages = (int)((totalRecords + (request.PageSize - 1)) / request.PageSize);

                    if (request.PageNumber <= 1)
                    {
                        request.PageNumber = 1;
                        q = q.Take(request.PageSize);
                    }
                    else
                    {
                        if (request.PageNumber > totalPages)
                        {
                            request.PageNumber = totalPages;
                        }

                        q = q.Skip((request.PageNumber - 1) * request.PageSize).Take(request.PageSize);
                    }

                    petAlerts = await dbConnection.SelectAsync <PetAlertTableModel>(q).ConfigureAwait(false);
                }
                else
                {
                    totalPages = 1;
                    petAlerts  = await dbConnection.SelectAsync <PetAlertTableModel>(q).ConfigureAwait(false);
                }


                var petAlertsIds = petAlerts.Select(x => x.Id).ToList();

                var query = dbConnection.From <PetAlertTableModel>()
                            .LeftJoin <PetAlertTableModel, PetTableModel>((pa, p) => pa.PetId == p.Id)
                            .LeftJoin <PetAlertTableModel, OwnerTableModel>((pa, o) => pa.OwnerTableModelId == o.Id)
                            .LeftJoin <PetAlertTableModel, PetImageTableModel>((pa, pi) => pa.PetId == pi.PetTableModelId && pi.IsProfileImage)
                            .Where(pa => Sql.In(pa.Id, petAlertsIds))
                            .OrderByDescending(pa => pa.CreatedOn);

                records = await dbConnection.SelectMultiAsync <PetAlertTableModel, PetTableModel, OwnerTableModel, PetImageTableModel>(query)
                          .ConfigureAwait(false);

                // --- PetAlertImages ---
                var imagesQuery = dbConnection.From <PetAlertTableModel>()
                                  .Join <PetAlertTableModel, PetAlertImageTableModel>((pa, pai) => pa.Id == pai.PetAlertTableModelId)
                                  .Where(pa => Sql.In(pa.Id, petAlertsIds));

                imagesResults = await dbConnection.SelectMultiAsync <PetAlertTableModel, PetAlertImageTableModel>(imagesQuery)
                                .ConfigureAwait(false);
            }

            response.TotalRecords = totalRecords;
            response.TotalPages   = totalPages;
            response.Result       = FormatAlertResults(records);

            if (imagesResults.Count > 0)
            {
                var groupedImages = imagesResults.GroupBy(x => x.Item1.Code).ToList();

                foreach (var groupedImage in groupedImages)
                {
                    var foundAlertImage = response.Result.Where(a => a.AlertCode == groupedImage.Key);
                    if (foundAlertImage != null)
                    {
                        response.Result.Find(r => r.AlertCode == groupedImage.Key).PetProfileImageUrl = groupedImage.FirstOrDefault(x => x.Item2.Id > 0).Item2.ImageUrl;
                    }
                }
            }

            return(response);
        }