예제 #1
0
        public List <Rating> GetRatings(string pageName, string pageAccessToken, int count, List <long> blockedUserIds, int?seedPull = null, int?minimumStars = null)
        {
            // get fields returned
            string fields = "created_time%2Creviewer%2Creview_text%2Chas_rating%2Chas_review%2Crating" + (seedPull.HasValue ? "&limit=" + seedPull.Value.ToString() : "");

            string endpoint = Endpoints.ACCOUNT_MEDIAS.Replace("{pageName}", pageName).Replace("{fields}", fields).Replace("{pageAccessToken}", pageAccessToken);

            List <Rating> ratings = new List <Rating>();

            HttpResponse <string> response = Unirest.get(endpoint).asString();

            // if http response is success, we will continue, if not, we cannot do much more so we will just say no more available
            // and return whatever we currently have
            if (response.Code == 200)
            {
                RatingResponse ratingResponse = JsonConvert.DeserializeObject <RatingResponse>(response.Body);

                if (ratingResponse.data != null)
                {
                    // get data from unblocked FB users only
                    var relevantData = ratingResponse.data.Where(i => i.HasRating && i.HasReview).Where(i => i.Reviewer != null && !blockedUserIds.Contains(i.Reviewer.Id));

                    if (minimumStars.HasValue)
                    {
                        return(relevantData.Where(i => i.RatingValue >= minimumStars.Value).OrderByDescending(i => i.CreateDate).Take(count).ToList());
                    }
                    else
                    {
                        return(relevantData.OrderByDescending(i => i.CreateDate).Take(count).ToList());
                    }
                }
            }

            return(ratings);
        }
예제 #2
0
        public void getMicroRating(double cat, double lat, double lon, string country)
        {
            string url    = String.Format("{0}/{1}?cat={2}&countryCode={3}&lat={4}&lon={5}", ConfigurationManager.AppSettings["Server"], ConfigurationManager.AppSettings["MicroRating"], cat, country, lat, lon);
            string result = iaziClientsync.getApiResponse(url, token);

            ratingResponse = JsonConvert.DeserializeObject <RatingResponse>(result);
        }
예제 #3
0
        private static Response RateCourseResponse(RatingRequest ratingRequest)
        {
            DatabaseManager database = new DatabaseManager();

            (MySqlDataReader reader, var Connection) = database.RunQuery($"UPDATE course_details SET rating=(rating * ratingCount +{ratingRequest.Rating})/(ratingCount+1) , ratingCount=ratingCount+1 WHERE courseid='{ratingRequest.CourseID}'");
            RatingResponse ack = new RatingResponse()
            {
                Status = "FAIL", Reason = "Failed to rate course."
            };
            Response resp = new Response()
            {
                Type = ResponseType.RateCourse, Status = "OK", Content = ack
            };

            if (reader != null)
            {
                ack.Reason = "Course Rated Successfully.";
                ack.Status = "OK";
                Connection.Close();
                (reader, Connection) = database.RunQuery($"SELECT rating FROM course_details WHERE courseid='{ratingRequest.CourseID}'");
                if (reader != null)
                {
                    reader.Read();
                    ack.NewRating = float.Parse(reader.GetString(0));
                }
            }
            Connection.Close();
            return(resp);
        }
예제 #4
0
        public IActionResult GetRatingForBook([FromBody] RatingRequest request)
        {
            var bookIds   = request?.BookIds ?? Array.Empty <int>();
            var avgRating = _context.BookRatings
                            .Where(rating => bookIds.Contains(rating.BookId))
                            .GroupBy(b => b.BookId)
                            .Select(grp =>
                                    new AvgRatingDto
            {
                BookId    = grp.Key,
                AvgRating = Math.Round(grp.Select(r => r.Rating).Average(), 1)
            }).ToArray();
            var result = new RatingResponse {
                Ratings = avgRating
            };

            return(Ok(result));
        }
예제 #5
0
        public async Task <IActionResult> ProcessReviewApiAction(string requestedAction, string id)
        {
            Response.Headers.Add("Cache-Control", "no-cache");
            string        responseString   = string.Empty;
            string        vtexCookie       = HttpContext.Request.Headers[HEADER_VTEX_COOKIE];
            ValidatedUser validatedUser    = null;
            bool          userValidated    = false;
            bool          keyAndTokenValid = false;
            string        vtexAppKey       = HttpContext.Request.Headers[HEADER_VTEX_APP_KEY];
            string        vtexAppToken     = HttpContext.Request.Headers[HEADER_VTEX_APP_TOKEN];

            if (!string.IsNullOrEmpty(vtexCookie))
            {
                validatedUser = await this._productReviewsService.ValidateUserToken(vtexCookie);

                if (validatedUser != null)
                {
                    if (validatedUser.AuthStatus.Equals(AUTH_SUCCESS))
                    {
                        userValidated = true;
                    }
                }
            }

            if (!string.IsNullOrEmpty(vtexAppKey) && !string.IsNullOrEmpty(vtexAppToken))
            {
                string baseUrl = HttpContext.Request.Headers[FORWARDED_HOST];
                keyAndTokenValid = await this._productReviewsService.ValidateKeyAndToken(vtexAppKey, vtexAppToken, baseUrl);
            }

            if (string.IsNullOrEmpty(requestedAction))
            {
                return(BadRequest("Missing parameter"));
            }

            if ("post".Equals(HttpContext.Request.Method, StringComparison.OrdinalIgnoreCase))
            {
                string bodyAsText = await new System.IO.StreamReader(HttpContext.Request.Body).ReadToEndAsync();
                switch (requestedAction)
                {
                case REVIEW:
                    if (!userValidated && !keyAndTokenValid)
                    {
                        return(Unauthorized("Invalid User"));
                    }

                    Review newReview          = JsonConvert.DeserializeObject <Review>(bodyAsText);
                    bool   hasShopperReviewed = await _productReviewsService.HasShopperReviewed(validatedUser.User, newReview.ProductId);

                    if (hasShopperReviewed)
                    {
                        return(Json("Duplicate Review"));
                    }

                    bool hasShopperPurchased = await _productReviewsService.ShopperHasPurchasedProduct(validatedUser.User, newReview.ProductId);

                    Review reviewToSave = new Review
                    {
                        ProductId         = newReview.ProductId,
                        Rating            = newReview.Rating,
                        ShopperId         = validatedUser.User,
                        Title             = newReview.Title,
                        Text              = newReview.Text,
                        VerifiedPurchaser = hasShopperPurchased
                    };

                    var reviewResponse = await this._productReviewsService.NewReview(reviewToSave);

                    return(Json(reviewResponse.Id));

                    break;

                case REVIEWS:
                    if (!keyAndTokenValid)
                    {
                        return(Unauthorized());
                    }

                    IList <Review> reviews = JsonConvert.DeserializeObject <IList <Review> >(bodyAsText);
                    List <int>     ids     = new List <int>();
                    foreach (Review review in reviews)
                    {
                        var reviewsResponse = await this._productReviewsService.NewReview(review);

                        ids.Add(reviewsResponse.Id);
                    }

                    return(Json(ids));

                    break;
                }
            }
            else if ("delete".Equals(HttpContext.Request.Method, StringComparison.OrdinalIgnoreCase))
            {
                int[] ids;
                switch (requestedAction)
                {
                case REVIEW:
                    if (!userValidated && !keyAndTokenValid)
                    {
                        return(Json("Invalid User"));
                    }

                    if (string.IsNullOrEmpty(id))
                    {
                        return(BadRequest("Missing parameter."));
                    }

                    ids    = new int[1];
                    ids[0] = int.Parse(id);
                    return(Json(await this._productReviewsService.DeleteReview(ids)));

                    break;

                case REVIEWS:
                    if (!keyAndTokenValid)
                    {
                        return(Unauthorized());
                    }

                    string bodyAsText = await new System.IO.StreamReader(HttpContext.Request.Body).ReadToEndAsync();
                    ids = JsonConvert.DeserializeObject <int[]>(bodyAsText);
                    return(Json(await this._productReviewsService.DeleteReview(ids)));

                    break;
                }
            }
            else if ("patch".Equals(HttpContext.Request.Method, StringComparison.OrdinalIgnoreCase))
            {
                switch (requestedAction)
                {
                case REVIEW:
                    if (!userValidated && !keyAndTokenValid)
                    {
                        return(Json("Invalid User"));
                    }

                    string bodyAsText = await new System.IO.StreamReader(HttpContext.Request.Body).ReadToEndAsync();
                    Review review     = JsonConvert.DeserializeObject <Review>(bodyAsText);
                    return(Json(await this._productReviewsService.EditReview(review)));

                    break;
                }
            }
            else if ("get".Equals(HttpContext.Request.Method, StringComparison.OrdinalIgnoreCase))
            {
                var queryString = HttpContext.Request.Query;
                var searchTerm  = queryString["search_term"];
                var fromParam   = queryString["from"];
                var toParam     = queryString["to"];
                var orderBy     = queryString["order_by"];
                var status      = queryString["status"];
                var productId   = queryString["product_id"];
                switch (requestedAction)
                {
                case REVIEW:
                    if (string.IsNullOrEmpty(id))
                    {
                        return(BadRequest("Missing parameter."));
                    }

                    Review review = await this._productReviewsService.GetReview(int.Parse(id));

                    return(Json(review));

                    break;

                case REVIEWS:
                    IList <Review> reviews;
                    if (string.IsNullOrEmpty(fromParam))
                    {
                        fromParam = "0";
                    }

                    if (string.IsNullOrEmpty(toParam))
                    {
                        toParam = "3";
                    }

                    int            from         = int.Parse(fromParam);
                    int            to           = int.Parse(toParam);
                    IList <Review> searchResult = null;
                    int            totalCount   = 0;

                    if (!string.IsNullOrEmpty(productId))
                    {
                        searchResult = await _productReviewsService.GetReviewsByProductId(productId);
                    }
                    else
                    {
                        searchResult = await _productReviewsService.GetReviews();
                    }

                    IList <Review> searchData = await _productReviewsService.FilterReviews(searchResult, searchTerm, orderBy, status);

                    totalCount = searchData.Count;
                    searchData = await _productReviewsService.LimitReviews(searchData, from, to);

                    SearchResponse searchResponse = new SearchResponse
                    {
                        Data = new DataElement {
                            data = searchData
                        },
                        Range = new SearchRange {
                            From = from, To = to, Total = totalCount
                        }
                    };

                    return(Json(searchResponse));

                    break;

                case RATING:
                    decimal average = await _productReviewsService.GetAverageRatingByProductId(id);

                    searchResult = await _productReviewsService.GetReviewsByProductId(id);

                    totalCount = searchResult.Count;
                    RatingResponse ratingResponse = new RatingResponse
                    {
                        Average    = average,
                        TotalCount = totalCount
                    };

                    return(Json(ratingResponse));
                }
            }

            return(Json(responseString));
        }
예제 #6
0
        private BookCatalog BuildBookCatalogVm(IEnumerable <Book> books, PriceResponse prices, RatingResponse ratings)
        {
            var priceMap  = prices.Prices.ToDictionary(p => p.BookId);
            var ratingMap = ratings.Ratings.ToDictionary(p => p.BookId);

            var catalogItems = books.Select(b =>
                                            new BookCatalogItem
            {
                Id          = b.Id,
                Isbn        = b.Isbn,
                Title       = b.Title,
                ReleaseDate = b.ReleaseDate,
                Price       = priceMap.TryGetValue(b.Id, out Price price) ? price.Amount : 0m,
                Rating      = ratingMap.TryGetValue(b.Id, out BookRating rating) ? rating.AvgRating : 0
            }).ToArray();