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 }); }
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 }); }
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); }