public RecommendResponse Recommend(RecommendRequest request)
        {
            Dictionary <int, int> recomended = _pool.DictionaryOfIntByInt.Get();

            _context.Interests.Recommend(
                request.Id,
                recomended,
                _context,
                request.Country.IsActive ? _storage.Countries.Get(request.Country.Country) : (short)0,
                request.City.IsActive ? _storage.Cities.Get(request.City.City) : (short)0);

            var comparer = _pool.RecommendComparer.Get();

            comparer.Init(
                _context,
                recomended,
                _context.Birth.Get(request.Id).Seconds);

            var response = _pool.RecommendResponse.Get();

            response.Limit = request.Limit;
            response.Ids.AddRange(recomended.Keys.TakeMax(comparer, request.Limit));

            _pool.DictionaryOfIntByInt.Return(recomended);
            _pool.RecommendComparer.Return(comparer);

            return(response);
        }
        private bool CountryEq(RecommendRequest request, StringValues value)
        {
            if (String.IsNullOrEmpty(value))
            {
                return(false);
            }

            request.Country.IsActive = true;
            request.Country.Country  = value;
            return(true);
        }
        public IHttpActionResult Recommend(RecommendRequest request)
        {
            DateTime appointmentTime;

            if (DateTime.TryParse(request.ApointmentTime, out appointmentTime))
            {
                return(Ok(request.CallerName + " made an appointment for " + request.PatientName + " at "
                          + appointmentTime.Hour + " O'Clock on " +
                          appointmentTime.DayOfWeek + " " + appointmentTime.Month + " " + appointmentTime.Day));
            }
            else
            {
                return(BadRequest("Could not parse date time"));
            }
        }
        public IHttpActionResult Recommend(RecommendRequest request)
        {
            try
            {
                if (request == null)
                {
                    return(BadRequest("The request body is null"));
                }

                if (string.IsNullOrEmpty(request.ApointmentTime))
                {
                    return(BadRequest("No apointment set"));
                }

                if (string.IsNullOrEmpty(request.CallerName))
                {
                    return(BadRequest("No caller name set"));
                }

                if (string.IsNullOrEmpty(request.PatientName))
                {
                    return(BadRequest("No patient name set"));
                }

                DateTime appointmentTime;

                if (DateTime.TryParse(request.ApointmentTime, out appointmentTime))
                {
                    using (MySqlRepository repository = new MySqlRepository())
                    {
                        var results = repository.GetVaccines(request.CallerName);
                        return(Ok(results));
                    }
                }
                else
                {
                    return(BadRequest("Could not parse date time"));
                }
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
        public bool Process(int id, HttpResponse httpResponse, IQueryCollection query)
        {
            if (DataConfig.DataUpdates)
            {
                return(false);
            }

            RecommendRequest request = _pool.RecommendRequest.Get();

            request.Id = id;

            foreach (var filter in query)
            {
                bool res = true;
                switch (filter.Key)
                {
                case "query_id":
                    break;

                case "limit":
                    uint limit;
                    if (!uint.TryParse(filter.Value, out limit))
                    {
                        res = false;
                    }
                    else
                    {
                        if (limit == 0)
                        {
                            res = false;
                        }
                        request.Limit = (int)limit;
                    }
                    break;

                case "country":
                    res = CountryEq(request, filter.Value);
                    break;

                case "city":
                    res = CityEq(request, filter.Value);
                    break;

                default:
                    res = false;
                    break;
                }

                if (!res)
                {
                    Free(request);
                    return(false);
                }
            }

            var result = _processor.Recommend(request);

            httpResponse.StatusCode  = 200;
            httpResponse.ContentType = "application/json";

            var buffer        = _pool.WriteBuffer.Get();
            int contentLength = 0;

            using (var bufferStream = new MemoryStream(buffer))
            {
                _printer.Write(result, bufferStream);
                httpResponse.ContentLength = contentLength = (int)bufferStream.Position;
            }

            httpResponse.Body.Write(buffer, 0, contentLength);
            _pool.WriteBuffer.Return(buffer);

            _pool.RecommendResponse.Return(result);
            Free(request);
            return(true);
        }
 private void Free(RecommendRequest request)
 {
     _pool.RecommendRequest.Return(request);
 }