public ActivityResponse Search(ActivitySearchRequest model) { List <ActivitiesDto> result; if (string.IsNullOrEmpty(model.Search)) { result = _bookingDbContext.Activities.OrderBy(a => a.Name).Skip(model.Start).Take(model.Limit) .Select(a => _mapper.Map <ActivitiesDto>(a)).ToList(); return(new ActivityResponse(200, result)); } result = _bookingDbContext.Activities.Where(a => EF.Functions.Like(a.Name, "%" + model.Search.ToLower() + "%")) .OrderBy(a => a.Name) .Skip(model.Start).Take(model.Limit) .Select(a => _mapper.Map <ActivitiesDto>(a)).ToList(); return(new ActivityResponse(200, result)); }
/// <summary> /// Checks whether the activity search request is valid. /// </summary> /// <param name="ActivitySearchRequest">Activity search request part of the client's request message.</param> /// <param name="MessageBuilder">Client's network message builder.</param> /// <param name="RequestMessage">Full request message from client.</param> /// <param name="ErrorResponse">If the function fails, this is filled with error response message that is ready to be sent to the client.</param> /// <returns>true if the search request is valid, false otherwise.</returns> public static bool ValidateActivitySearchRequest(ActivitySearchRequest ActivitySearchRequest, ProxMessageBuilder MessageBuilder, ProxProtocolMessage RequestMessage, out ProxProtocolMessage ErrorResponse) { log.Trace("()"); bool res = false; ErrorResponse = null; string details = null; int responseResultLimit = ProxMessageProcessor.ActivitySearchMaxResponseRecords; int totalResultLimit = ProxMessageProcessor.ActivitySearchMaxTotalRecords; bool maxResponseRecordCountValid = (1 <= ActivitySearchRequest.MaxResponseRecordCount) && (ActivitySearchRequest.MaxResponseRecordCount <= responseResultLimit); if (!maxResponseRecordCountValid) { log.Debug("Invalid maxResponseRecordCount value '{0}'.", ActivitySearchRequest.MaxResponseRecordCount); details = "maxResponseRecordCount"; } if (details == null) { bool maxTotalRecordCountValid = (1 <= ActivitySearchRequest.MaxTotalRecordCount) && (ActivitySearchRequest.MaxTotalRecordCount <= totalResultLimit) && (ActivitySearchRequest.MaxResponseRecordCount <= ActivitySearchRequest.MaxTotalRecordCount); if (!maxTotalRecordCountValid) { log.Debug("Invalid maxTotalRecordCount value '{0}'.", ActivitySearchRequest.MaxTotalRecordCount); details = "maxTotalRecordCount"; } } if ((details == null) && (ActivitySearchRequest.OwnerNetworkId.Length > 0)) { bool ownerNetworkIdValid = ActivitySearchRequest.OwnerNetworkId.Length == ProtocolHelper.NetworkIdentifierLength; if (!ownerNetworkIdValid) { log.Debug("Invalid owner network ID length '{0}'.", ActivitySearchRequest.OwnerNetworkId.Length); details = "ownerNetworkId"; } } if ((details == null) && (ActivitySearchRequest.Type != null)) { bool typeValid = Encoding.UTF8.GetByteCount(ActivitySearchRequest.Type) <= ProxMessageBuilder.MaxActivitySearchTypeLengthBytes; if (!typeValid) { log.Debug("Invalid type value length '{0}'.", ActivitySearchRequest.Type.Length); details = "type"; } } if ((details == null) && ((ActivitySearchRequest.StartNotAfter != 0) || (ActivitySearchRequest.ExpirationNotBefore != 0))) { DateTime?startNotAfter = null; DateTime?expirationNotBefore = null; if (ActivitySearchRequest.StartNotAfter != 0) { startNotAfter = ProtocolHelper.UnixTimestampMsToDateTime(ActivitySearchRequest.StartNotAfter); bool startNotAfterValid = startNotAfter != null; if (!startNotAfterValid) { log.Debug("Start not after {0} is not a valid timestamp value.", ActivitySearchRequest.StartNotAfter); details = "startNotAfter"; } } if ((details == null) && (ActivitySearchRequest.ExpirationNotBefore != 0)) { expirationNotBefore = ProtocolHelper.UnixTimestampMsToDateTime(ActivitySearchRequest.ExpirationNotBefore); bool expirationNotBeforeValid = expirationNotBefore != null; if (!expirationNotBeforeValid) { log.Debug("Expiration not before {0} is not a valid timestamp value.", ActivitySearchRequest.ExpirationNotBefore); details = "expirationNotBefore"; } else if (ActivitySearchRequest.StartNotAfter != 0) { expirationNotBeforeValid = ActivitySearchRequest.StartNotAfter <= ActivitySearchRequest.ExpirationNotBefore; if (!expirationNotBeforeValid) { log.Debug("Expiration not before {0} is smaller than start not after {1}.", ActivitySearchRequest.StartNotAfter, ActivitySearchRequest.ExpirationNotBefore); details = "expirationNotBefore"; } } } } if ((details == null) && (ActivitySearchRequest.Latitude != GpsLocation.NoLocationLocationType)) { GpsLocation locLat = new GpsLocation(ActivitySearchRequest.Latitude, 0); GpsLocation locLong = new GpsLocation(0, ActivitySearchRequest.Longitude); if (!locLat.IsValid()) { log.Debug("Latitude '{0}' is not a valid GPS latitude value.", ActivitySearchRequest.Latitude); details = "latitude"; } else if (!locLong.IsValid()) { log.Debug("Longitude '{0}' is not a valid GPS longitude value.", ActivitySearchRequest.Longitude); details = "longitude"; } } if ((details == null) && (ActivitySearchRequest.Latitude != GpsLocation.NoLocationLocationType)) { bool radiusValid = ActivitySearchRequest.Radius > 0; if (!radiusValid) { log.Debug("Invalid radius value '{0}'.", ActivitySearchRequest.Radius); details = "radius"; } } if ((details == null) && (ActivitySearchRequest.ExtraData != null)) { bool validLength = (Encoding.UTF8.GetByteCount(ActivitySearchRequest.ExtraData) <= ProxMessageBuilder.MaxActivitySearchExtraDataLengthBytes); bool extraDataValid = RegexTypeValidator.ValidateRegex(ActivitySearchRequest.ExtraData); if (!validLength || !extraDataValid) { log.Debug("Invalid extraData regular expression filter."); details = "extraData"; } } if (details == null) { res = true; } else { ErrorResponse = MessageBuilder.CreateErrorInvalidValueResponse(RequestMessage, details); } log.Trace("(-):{0}", res); return(res); }
public IActionResult Search([FromQuery] ActivitySearchRequest model) { var response = _activityService.Search(model); return(StatusCode(response.StatusCode, response)); }