// Creates relationship between post and user that says if user liked or disliked post public void CreateLikedDislikedRelationship(Liked liked = null, Disliked disliked = null) { // These queries will create Like or Dislike relationship between user and post // But if there is already like or dislike relationship between same user and post // It will be deleted and new one will be created (if disliked and there is like relationship, like will be deleted and only disliked will exist) // Also because of merge there will always be one like or one dislike relationship if (liked != null) { var query = client.Cypher .Match("(post:Post)", "(user:User)") .OptionalMatch("(user)-[d:DISLIKED]->(post)") .With("post,user,d") .Where((Post post) => post.id == liked.post.id) .AndWhere((User user) => user.username == liked.user.username) .Merge("(user)-[l:LIKED]->(post)") .OnCreate() .Set("l.time = {time}") .WithParam("time", liked.time) .DetachDelete("d"); query.ExecuteWithoutResults(); } else { var query = client.Cypher .Match("(post:Post)", "(user:User)") .OptionalMatch("(user)-[l:LIKED]->(post)") .With("post,user,l") .Where((Post post) => post.id == disliked.post.id) .AndWhere((User user) => user.username == disliked.user.username) .Merge("(user)-[d:DISLIKED]->(post)") .OnCreate() .Set("d.time = {time}") .WithParam("time", disliked.time) .DetachDelete("l"); query.ExecuteWithoutResults(); } }
public override string ToString() { return($" {LovedText}/{Loved.Serialize()}/{LikedText}/{Liked.Serialize()}/{DislikedText}/{Disliked.Serialize()}" + $"/{HatedText}/{Hated.Serialize()}/{NeutralText}/{Neutral.Serialize()}/ "); }