public IHttpActionResult CheckRelationshipStatus(FriendRelationships rel) { if (ModelState.IsValid) { var existingRelationship = db.FriendRelationships.FirstOrDefault(x => (x.FromUsername.Equals(rel.FromUsername) && x.ToUsername.Equals(rel.ToUsername)) || (x.ToUsername.Equals(rel.FromUsername) && x.FromUsername.Equals(rel.ToUsername))); if (existingRelationship != null) { return Json(new { success = true, isFriend = true }); } } return BadRequest(); }
public async Task<IHttpActionResult> AddFriend(FriendRelationships friendRelationships) { if (!ModelState.IsValid) { return BadRequest(ModelState); } else { //always set accepted to false - confirmation pending from other user friendRelationships.HasAccepted = false; //check that the username the request is coming from exists var checkFromUser = db.Users.FirstOrDefault(x => x.UserName == friendRelationships.FromUsername); if (checkFromUser != null) { //check that the username the request is for exists var checkToUser = db.Users.FirstOrDefault(x => x.UserName == friendRelationships.ToUsername); if (checkToUser != null) { //check for any matching relationship already present (could be reversed so that is also checked) var existingRelationship = db.FriendRelationships.Where(x => (x.FromUsername.Equals(friendRelationships.FromUsername) && x.ToUsername.Equals(friendRelationships.ToUsername)) || (x.ToUsername.Equals(friendRelationships.FromUsername) && x.FromUsername.Equals(friendRelationships.ToUsername))).ToList(); if (existingRelationship.Count > 0) { //existing relationship between the two users exists return BadRequest("A relationship already exists between these users"); } else { //else add the relationship to the database db.FriendRelationships.Add(friendRelationships); db.SaveChanges(); //send a push notification to the requested user's device await PostNotification("gcm", "friend request", checkFromUser.Email, checkToUser.Email); return Json(new { success = true }); } } return BadRequest("Incorrect To or From Username"); } return BadRequest("Incorrect To or From Username"); } }
public async Task<IHttpActionResult> Follow(FriendRelationships friendRelationships) { if (!ModelState.IsValid) { return BadRequest(ModelState); } else { //always set accepted to false - confirmation pending from other user friendRelationships.HasAccepted = false; //check that the username the request is coming from exists var checkFromUser = db.Users.FirstOrDefault(x => x.UserName == friendRelationships.FromUsername); var checkToUser = db.Users.FirstOrDefault(x => x.UserName == friendRelationships.ToUsername); if (checkFromUser != null && checkToUser != null) { bool existingFollowing = false; foreach(ApplicationUser user in checkFromUser.Following) { if(user.UserName.Equals(checkToUser.UserName, StringComparison.OrdinalIgnoreCase)) { existingFollowing = true; break; } } if (existingFollowing == true) { return Json(new { success = false, cause = "You are already following " + checkToUser.UserName }); } else { checkFromUser.Following.Add(checkToUser); checkToUser.Followers.Add(checkFromUser); try { db.SaveChanges(); } catch (Exception) { } //send a push notification to the requested user's device await PostNotification("gcm", String.Format("{0} is now following you", checkFromUser.UserName), checkFromUser.Email, checkToUser.Email); var myMessage = new SendGridMessage(); myMessage.From = new MailAddress("*****@*****.**"); myMessage.AddTo(string.Format(@"{0} <{1}>", checkToUser.UserName, checkToUser.Email)); myMessage.Subject = string.Format("{0} is now following you", checkFromUser.UserName); myMessage.Html = "<p>New Follower</p>"; myMessage.Text = "New Follower plain text!"; var apiKey = System.Environment.GetEnvironmentVariable("SENDGRID_APIKEY"); var transportWeb = new Web(apiKey); // Send the email. await transportWeb.DeliverAsync(myMessage); return Json(new { success = true }); } } } return BadRequest("Incorrect To or From Username"); }
public IHttpActionResult Unfollow(FriendRelationships friendRelationships) { if (!ModelState.IsValid) { return BadRequest(ModelState); } else { friendRelationships.HasAccepted = false; //check that the username the request is coming from exists var checkFromUser = db.Users.FirstOrDefault(x => x.UserName == friendRelationships.FromUsername); var checkToUser = db.Users.FirstOrDefault(x => x.UserName == friendRelationships.ToUsername); if (checkFromUser != null && checkToUser != null) { var friend = checkFromUser.Following.FirstOrDefault(x => x.UserName.Equals(checkToUser.UserName, StringComparison.OrdinalIgnoreCase)); var altFriend = checkToUser.Followers.FirstOrDefault(x => x.UserName.Equals(checkFromUser.UserName, StringComparison.OrdinalIgnoreCase)); if (friend != null && altFriend != null) { checkFromUser.Following.Remove(friend); checkToUser.Followers.Remove(altFriend); try { db.SaveChanges(); return Json(new { success = true, cause = "You unfollowed " + checkToUser.UserName }); } catch (Exception) { } } else { return Json(new { success = false, cause = "You are not following " + checkToUser.UserName }); } } } return BadRequest("Incorrect To or From Username"); }