public async Task <IHttpActionResult> GetEvaluation(int profid, int bookid)
        {
            BookUserLike bookUserLike = await db.BookUserLike.FindAsync(bookid, profid);

            if (bookUserLike == null)
            {
                return(NotFound());
            }
            return(Ok(bookUserLike));
        }
        public async Task <IHttpActionResult> UpDateRate(int bookid, int profid, BookUserLike bookUserLike)
        {
            if (bookid.Equals(0) && profid.Equals(0))
            {
                return(BadRequest());
            }
            if (bookid.Equals(0) || profid.Equals(0))
            {
//check if model state contains only Foreign Ids
                var pid = bookUserLike.Profile.F_Id;
                var bid = bookUserLike.Book.F_Id;
                if (pid != null && bid != null)
                {
                    bookUserLike.BookId    = _booksController.GetBookId(bid);
                    bookUserLike.ProfileId = _profilesController.GetProfileId(pid);
                    //update also the parameters
                    bookid = bookUserLike.BookId;
                    profid = bookUserLike.ProfileId;
                    bookUserLike.Profile = null;
                    bookUserLike.Book    = null;
                }
                else
                {
                    return(BadRequest(ModelState));
                }
            }
            if (bookid != bookUserLike.BookId)
            {
                return(BadRequest());
            }
            if (profid != bookUserLike.ProfileId)
            {
                return(BadRequest());
            }
            db.Entry(bookUserLike).State = EntityState.Modified;
            try
            {
                await db.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!BookUserLikeExists(bookid) || !BookUserLikeExists(profid))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }
            return(StatusCode(HttpStatusCode.NoContent));
        }
        public async Task <IHttpActionResult> PostBookUserLike(BookUserLike bookUserLike)
        {
            if (bookUserLike.BookId.Equals(0) && bookUserLike.ProfileId.Equals(0))
            {
//check if model state contains only Foreign Ids
                var pid = bookUserLike.Profile.F_Id;
                var bid = bookUserLike.Book.F_Id;
                if (pid != null && bid != null)
                {
                    bookUserLike.BookId    = _booksController.GetBookId(bid);
                    bookUserLike.ProfileId = _profilesController.GetProfileId(pid);
                    bookUserLike.Profile   = null;
                    bookUserLike.Book      = null;
                }
                else
                {
                    return(BadRequest(ModelState));
                }
            }
            db.BookUserLike.Add(bookUserLike);
            try
            {
                await db.SaveChangesAsync();
            }
            catch (DbUpdateException exception)
            {
                var msg = exception.Message;
                if (BookUserLikeExists(bookUserLike.BookId))
                {
                    return(Conflict());
                }
                else
                {
                    throw;
                }
            }
            return(CreatedAtRoute("DefaultApi", new { id = bookUserLike.BookId }, bookUserLike));
        }
        private List <BookUserLike> GetRecommendations(int id)
        {
            var pathToDataFile =
                Path.Combine(System.Web.HttpRuntime.AppDomainAppPath, "data/ratings.txt");
            //create the reccomend engine
            var recommender = CreateRecommender(pathToDataFile);

            //fetch results for specific user 7results
            var recommendedItems = recommender.Recommend(id, 7);
            var recomendList     = new List <BookUserLike>();

            foreach (var ritem in recommendedItems)
            {
                var userlike = new BookUserLike
                {
                    BookId    = (int)ritem.GetItemID(),
                    ProfileId = id,
                    Value     = (int)Math.Round(ritem.GetValue(), MidpointRounding.AwayFromZero),
                    Scale     = 5
                };
                recomendList.Add(userlike);
            }
            return(recomendList);
        }