Пример #1
0
        public override async Task <Reviewable> GetReviewableByIDAsync(string id)
        {
            Reviewable          reviewable = null;
            HttpResponseMessage response   = await client.GetAsync(getUrlForId(id));

            if (response.IsSuccessStatusCode)
            {
                var reviewableString = await response.Content.ReadAsStringAsync();

                OMDBJSONResponse reviewableJSON = JsonConvert.DeserializeObject <OMDBJSONResponse>(reviewableString);

                reviewable               = new Reviewable();
                reviewable.Title         = reviewableJSON.title;
                reviewable.Type          = reviewableJSON.type;
                reviewable.TitleImageUrl = reviewableJSON.poster;
                reviewable.TpId          = reviewableJSON.imdbID;
                reviewable.TpName        = getThirdPartyName();
                reviewable.Description   = reviewableJSON.plot;

                using (var context = new RevojiDataContext())
                {
                    var rev = context.Reviewables.Where(r => r.TpId == reviewable.TpId && r.TpName == getThirdPartyName()).FirstOrDefault();
                    if (rev != null)
                    {
                        reviewable.ID = rev.Id;
                    }
                }
            }

            return(reviewable);
        }
        public IActionResult ListByType(string type, string order = "DESC", int pageStart = 0, int pageLimit = 20)
        {
            //what would you order?
            // title (alphabetically), company name (alphabetically),

            using (var context = new RevojiDataContext())
            {
                var reviewables = context.Reviewables.Where(r => r.Type == type);

                IQueryable <DBReviewable> orderedReviews;
                if (order == "DESC")
                {
                    orderedReviews = reviewables.OrderByDescending(r => r.Title)
                                     .Skip(pageStart)
                                     .Take(pageLimit);
                }
                else if (order == "ASC")
                {
                    orderedReviews = reviewables.OrderBy(r => r.Title)
                                     .Skip(pageStart)
                                     .Take(pageLimit);
                }
                else
                {
                    return(BadRequest("Bad order direction parameter given. Must be either DESC or ASC."));
                }

                return(Ok(orderedReviews.Select(r => new Reviewable(r))));
            }
        }
Пример #3
0
        private IQueryable <DBReview> filterReviewsForUsers(RevojiDataContext context)
        {
            string dbApiUserPreferences = context.AppUsers
                                          .Where(au => au.Id == ApiUser.ID)
                                          .FirstOrDefault()
                                          .Preferences;
            AppUserPreferences ApiUserPreferences = null;

            if (!string.IsNullOrEmpty(dbApiUserPreferences))
            {
                ApiUserPreferences = JsonConvert.DeserializeObject <AppUserPreferences>(dbApiUserPreferences);
            }

            var users = from user in context.AppUsers
                        let p = !string.IsNullOrEmpty(user.Preferences) ? JsonConvert.DeserializeObject <AppUserPreferences>(user.Preferences) : null
                                where p != null && ApiUser.ID != user.Id &&
                                ApiUser.Age >= p.AgeRangeMin &&
                                ApiUser.Age <= p.AgeRangeMax &&
                                isEqualWithTolerance(ApiUserPreferences.Personality, p.Personality) &&
                                isEqualWithTolerance(ApiUserPreferences.PoliticalAffiliation, p.PoliticalAffiliation) &&
                                isEqualWithTolerance(ApiUserPreferences.PoliticalOpinion, p.PoliticalOpinion) &&
                                isEqualWithTolerance(ApiUserPreferences.Religiosity, p.Religiosity) &&
                                ApiUserPreferences.Location.Intersect(p.Location).Any()
                                select user.Id;

            var reviews = context.Reviews
                          .Where(r => users.Contains(r.AppUserId))
                          .Include(r => r.DBAppUser)
                          .Include(r => r.DBReviewable);

            return(reviews);
        }
Пример #4
0
        public IActionResult Create([FromBody] JObject review)
        {
            using (var context = new RevojiDataContext())
            {
                DBReview dbReview = new DBReview(review);

                if (dbReview.DBReviewable == null)
                {
                    return(BadRequest(new { ErrorMessage = "Reviewable not populated." }));
                }

                // If there is no reviewable in the db that the review refers to then create one
                if (dbReview.ReviewableId == 0 &&
                    dbReview.DBReviewable.TpId != null &&
                    !context.Reviewables.Any(r => r.TpId == dbReview.DBReviewable.TpId))
                {
                    //DBReviewable dBReviewable = new DBReviewable(reviewable);
                    context.Add(dbReview.DBReviewable);
                    context.Save();

                    dbReview.ReviewableId = dbReview.DBReviewable.Id;
                }

                dbReview.DBAppUser    = null;
                dbReview.DBReviewable = null;

                context.Add(dbReview);
                context.Save();

                var result = new Review(dbReview);
                return(Ok(result));
            }
        }
        public IActionResult uploadProfilePicture([FromForm] IFormFile file)
        {
            using (var context = new RevojiDataContext())
            {
                DBAppUser dbAppUser = context.Get <DBAppUser>(ApiUser.ID);
                if (dbAppUser == null)
                {
                    return(new NotFoundResult());
                }

                var result = AWSFileUploader.UploadObject(file, "profile_pictures").Result;

                if (!result.Success)
                {
                    return(new BadRequestResult());
                }

                var content = JsonConvert.DeserializeObject <AppUserContent>(dbAppUser.Content);
                content.Avatar = result.Url;

                dbAppUser.Content = JsonConvert.SerializeObject(content);
                context.Save();

                return(Ok(result));
            }
        }
Пример #6
0
        public IActionResult Create([FromBody] JObject appUser)
        {
            using (var context = new RevojiDataContext())
            {
                try
                {
                    DBAppUser dbAppUser = new DBAppUser(appUser);

                    if (context.AppUsers.Any(user => user.Handle == dbAppUser.Handle))
                    {
                        return(BadRequest("duplicate_user_handle"));
                    }

                    if (context.AppUsers.Any(user => user.Email == dbAppUser.Email))
                    {
                        return(BadRequest("duplicate_user_email"));
                    }

                    if (string.IsNullOrEmpty(dbAppUser.Password))// TODO: handle things like #chars, capital/lower case, symbols?
                    {
                        return(BadRequest("password_not_set"));
                    }

                    context.Add(dbAppUser);
                    context.Save();

                    return(Ok(new AppUserDetail(dbAppUser)));
                }
                catch (DbUpdateException e)
                {
                    return(BadRequest("invalid_error")); //TODO: should be an object
                }
            }
        }
Пример #7
0
 public IActionResult ListByReviewable(string tpId, string tpName, int beforeId, int afterId, int limit = 20)
 {
     using (var context = new RevojiDataContext())
     {
         var reviews = context.Reviews.Where(r => r.DBReviewable.TpId == tpId && r.DBReviewable.TpName == tpName);
         return(applyReviewFilter(reviews, beforeId, afterId, limit));
     }
 }
Пример #8
0
 public IActionResult ListByUser(int id, int beforeId, int afterId, int limit = 20)
 {
     using (var context = new RevojiDataContext())
     {
         var reviews = context.Reviews.Where(r => r.AppUserId == id);
         return(applyReviewFilter(reviews, beforeId, afterId, limit));
     }
 }
Пример #9
0
 public IActionResult ListNotifications(int beforeId, int afterId, int limit = 20)
 {
     using (var context = new RevojiDataContext())
     {
         var query = context.Notifications.Where(b => b.AppUserId == ApiUser.ID);
         return(applyNotificationFilter(query, beforeId, afterId, limit));
     }
 }
Пример #10
0
 public IActionResult ListBookmarks(int beforeId, int afterId, int limit = 20)
 {
     using (var context = new RevojiDataContext())
     {
         var query = context.Bookmarks.Where(b => b.AppUserId != ApiUser.ID);
         return(applyBookmarkFilter(query, beforeId, afterId, limit));
     }
 }
Пример #11
0
        public IActionResult CanReply(int id, int reviewableId)
        {
            using (var context = new RevojiDataContext())
            {
                var review = context.Reviews.Where(r => r.AppUserId == id && r.ReviewableId == reviewableId).Include(r => r.DBReplies).FirstOrDefault();

                return(Ok(review == null || (!review.DBReplies.Any(r => r.AppUserId == ApiUser.ID) && review.AppUserId != ApiUser.ID)));
            }
        }
Пример #12
0
        public IActionResult ListRepliesByCreated(string order = "DESC", int pageStart = 0, int pageLimit = 20)
        {
            using (var context = new RevojiDataContext())
            {
                var replies = context.Replies.Include(r => r.DBAppUser).Include(r => r.DBReview).Include(r => r.DBReview.DBReviewable).Include(r => r.DBReview.DBAppUser);

                return(applyReplyFilter(replies, order, pageStart, pageLimit));
            }
        }
Пример #13
0
        public IActionResult ListLikesByCreated(string order = "DESC", int pageStart = 0, int pageLimit = 20)
        {
            using (var context = new RevojiDataContext())
            {
                var likes = context.Likes.Where(l => l.AppUserId == ApiUser.ID);

                return(applyLikeFilter(likes, order, pageStart, pageLimit));
            }
        }
        public IActionResult CanReview(string tpId, string tpName)
        {
            using (var context = new RevojiDataContext())
            {
                var reviewable = context.Reviewables.Where(r => r.TpId == tpId && r.TpName == tpName).Include(r => r.DBReviews).FirstOrDefault();

                return(Ok(reviewable == null || !reviewable.DBReviews.Any(r => r.AppUserId == ApiUser.ID)));
            }
        }
Пример #15
0
 public IActionResult isBlocking(int id)
 {
     using (var context = new RevojiDataContext())
     {
         var user        = context.AppUsers.Where(au => au.Id == id).FirstOrDefault();
         var currentUser = context.AppUsers.Where(au => au.Id == ApiUser.ID).Include(a => a.Blockings).FirstOrDefault();
         var isBlocking  = currentUser.Blockings.Any(f => f.BlockedAppUserId == user.Id);
         return(Ok(isBlocking));
     }
 }
Пример #16
0
 public IActionResult Get(int id)
 {
     using (var context = new RevojiDataContext())
     {
         DBAppUser dbAppUser = context.Get <DBAppUser>(id);
         if (dbAppUser == null)
         {
             return(new NotFoundResult());
         }
         return(Ok(new AppUserDetail(dbAppUser)));
     }
 }
Пример #17
0
 public IActionResult Get(string handle)
 {
     using (var context = new RevojiDataContext())
     {
         DBAppUser dbAppUser = context.AppUsers.FirstOrDefault(user => user.Handle == handle);
         if (dbAppUser == null)
         {
             return(new NotFoundResult());
         }
         return(Ok(new AppUserDetail(dbAppUser)));
     }
 }
Пример #18
0
        public IActionResult CreateLike([FromBody] JObject like)
        {
            using (var context = new RevojiDataContext())
            {
                DBLike dBLike = new DBLike(like);

                context.Add(dBLike);
                context.Save();

                return(Ok(new Like(dBLike)));
            }
        }
Пример #19
0
        public IActionResult CreateReply([FromBody] JObject reply)
        {
            using (var context = new RevojiDataContext())
            {
                DBReply dBReply = new DBReply(reply);

                context.Add(dBReply);
                context.Save();

                return(Ok());
            }
        }
Пример #20
0
 public static AppUserDetail UserFromHandle(string handle)
 {
     using (var ctx = new RevojiDataContext())
     {
         var user = ctx.AppUsers.Where(au => au.Handle == handle).FirstOrDefault();
         if (user != null)
         {
             return(new AppUserDetail(user));
         }
         return(null);
     }
 }
        public IActionResult Create([FromBody] ReviewableDetail reviewable)
        {
            using (var context = new RevojiDataContext())
            {
                DBReviewable dbReviewable = new DBReviewable();
                reviewable.UpdateDB(dbReviewable);

                context.Add(dbReviewable);
                context.Save();

                return(Ok(new Reviewable(dbReviewable)));
            }
        }
Пример #22
0
        public IActionResult GetPreferences(int id)
        {
            using (var context = new RevojiDataContext())
            {
                DBAppUser dbAppUser = context.Get <DBAppUser>(id);
                if (dbAppUser == null || string.IsNullOrEmpty(dbAppUser.Preferences) || dbAppUser.Content == "{}")
                {
                    return(Ok());
                }

                return(Ok(JsonConvert.DeserializeObject <AppUserPreferences>(dbAppUser.Preferences)));
            }
        }
Пример #23
0
        public IActionResult CreateBookmark([FromBody] JObject bookmark)
        {
            using (var context = new RevojiDataContext())
            {
                DBBookmark dBBookmark = new DBBookmark(bookmark);
                dBBookmark.Created = DateTime.Now;

                context.Add(dBBookmark);
                context.Save();

                return(Ok(new Bookmark(dBBookmark)));
            }
        }
Пример #24
0
        public IActionResult BlockUser(int blockedId)
        {
            using (var context = new RevojiDataContext())
            {
                DBBlocking dBBlocking = new DBBlocking();
                dBBlocking.BlockedAppUserId = blockedId;//TODO: check if user actually exists
                dBBlocking.BlockerAppUserId = ApiUser.ID;

                context.Add(dBBlocking);
                context.Save();

                return(Ok(new AppUserBlocking(dBBlocking)));
            }
        }
Пример #25
0
        public IActionResult AddFollowing(int followingId)
        {
            using (var context = new RevojiDataContext())
            {
                DBFollowing dbFollowing = new DBFollowing();
                dbFollowing.FollowingAppUserId = followingId;
                dbFollowing.FollowerAppUserId  = ApiUser.ID;

                context.Add(dbFollowing);
                context.Save();

                return(Ok(new AppUserFollowing(dbFollowing)));
            }
        }
        public IActionResult GetReviewCount(int id) //Why?
        {
            using (var context = new RevojiDataContext())
            {
                // Could this be gotten from stored procedure?
                int count = context.Reviews
                            .Where(r => r.ReviewableId == id)
                            .Count();

                var stats = new ReviewableStats(count);

                return(Ok(stats));
            }
        }
Пример #27
0
        public IActionResult ListByReview(int id,
                                          string order  = "DESC",
                                          int pageStart = 0,
                                          int pageLimit = 20)
        {
            using (var context = new RevojiDataContext())
            {
                var replies = context.Replies
                              .Where(r => r.ReviewId == id)
                              .Include(r => r.DBAppUser);

                return(applyReplyFilter(replies, order, pageStart, pageLimit));
            }
        }
        public IActionResult GetCounts(int id)
        {
            using (var context = new RevojiDataContext())
            {
                DBAppUser dbAppUser = context.Get <DBAppUser>(id);
                if (dbAppUser == null)
                {
                    return(new NotFoundResult());
                }

                AppUserStats stats = new AppUserStats(id);

                return(Ok(stats));
            }
        }
        public IActionResult Stats(int id)
        {
            using (var context = new RevojiDataContext())
            {
                var likes = context.Likes.Where(l => l.ReviewId == id);

                var replyCount    = context.Replies.Where(r => r.ReviewId == id).Count();
                int agreeCount    = likes.Select(l => new Like(l)).Where(l => l.agreeType == "great").Count();
                int disagreeCount = likes.Select(l => new Like(l)).Where(l => l.agreeType == "bad").Count();

                var stats = new ReviewStats(replyCount, agreeCount, disagreeCount);

                return(Ok(stats));
            }
        }
Пример #30
0
        public IActionResult GetInfo(int id)
        {
            using (var context = new RevojiDataContext())
            {
                DBReviewable dbReviewable = context.Get <DBReviewable>(id);
                if (dbReviewable == null)
                {
                    return(Ok());
                }

                var reviewable = new ReviewableDetail(dbReviewable);

                return(Ok(reviewable.Info));
            }
        }