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)))); } }
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); }
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)); } }
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 } } }
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)); } }
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)); } }
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)); } }
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)); } }
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))); } }
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)); } }
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))); } }
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)); } }
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))); } }
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))); } }
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))); } }
public IActionResult CreateReply([FromBody] JObject reply) { using (var context = new RevojiDataContext()) { DBReply dBReply = new DBReply(reply); context.Add(dBReply); context.Save(); return(Ok()); } }
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))); } }
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))); } }
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))); } }
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))); } }
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)); } }
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)); } }
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)); } }