public IEnumerable GetChatUsers(string username) { using (var db = new SocialNetworkEntities()) { var users = db.UserProfiles .Where(u => u.ChatMessages.Select(m => m.Friednship).Select(f => f.FirstUser.Username).ToList().Contains(username) || u.ChatMessages.Select(m => m.Friednship).Select(f => f.SecondUser.Username).ToList().Contains(username)) .Distinct() .OrderBy(u => u.Username) .Select(u => new { Username = u.Username }) .ToList(); return users; } }
public IEnumerable GetPostsByUser(string username) { using (var db = new SocialNetworkEntities()) { var posts = db.Posts .Where(p => p.UserProfiles.Select(u => u.Username).ToList().Contains(username)) .Select(p => new { PostedOn = p.PostingDate, Content = p.Content, Usernames = p.UserProfiles.Select(u => u.Username).ToList() }) .ToList(); return posts; } }
public IEnumerable GetUsersAfterCertainDate(int year) { using (var db = new SocialNetworkEntities()) { var users = db.UserProfiles .Where(u => u.RegistrationDate.Year >= year) .Select(u => new { u.Username, u.FirstName, u.LastName, NumberOfImages = u.Images.Count }) .ToList(); return users; } }
public IEnumerable GetFriendships(int page = 1, int pageSize = 25) { using (var db = new SocialNetworkEntities()) { var friendships = db.Friendships .OrderBy(f => f.DateApproved) .Skip(pageSize * page) .Take(pageSize) .Select(f => new { FirstUserUsername = f.FirstUser.Username, FirstUserImage = f.FirstUser.Images.FirstOrDefault().URL, SecondUserUsername = f.SecondUser.Username, SecondUserImage = f.SecondUser.Images.FirstOrDefault().URL, }) .ToList(); return friendships; } }
public static void Import(SocialNetworkEntities db, IEnumerable<SocialNetworkXML.Models.Friendship> friendships) { var userNamesAdded = new HashSet<string>(); var counter = 0; foreach (var friendship in friendships) { // FirstUser var firstUser = new UserProfile(); if (userNamesAdded.Contains(friendship.FirstUser.Username)) { firstUser = db.UserProfiles.Where(u => u.Username == friendship.FirstUser.Username).First(); } else { firstUser = new UserProfile() { Username = friendship.FirstUser.Username, FirstName = friendship.FirstUser.FirstName, LastName = friendship.FirstUser.LastName, RegistrationDate = friendship.FirstUser.RegisteredOn, }; userNamesAdded.Add(firstUser.Username); var images = new HashSet<Image>(); foreach (var image in friendship.FirstUser.Images) { images.Add(new Image() { URL = image.ImageUrl, FileExtension = image.FileExtension, }); } firstUser.Images = images; } // Second user var secondUser = new UserProfile(); if (userNamesAdded.Contains(friendship.SecondUser.Username)) { secondUser = db.UserProfiles.Where(u => u.Username == friendship.SecondUser.Username).First(); } else { secondUser = new UserProfile() { Username = friendship.SecondUser.Username, FirstName = friendship.SecondUser.FirstName, LastName = friendship.SecondUser.LastName, RegistrationDate = friendship.SecondUser.RegisteredOn, }; userNamesAdded.Add(secondUser.Username); var imagesOfSecondUser = new HashSet<Image>(); foreach (var image in friendship.SecondUser.Images) { imagesOfSecondUser.Add(new Image() { URL = image.ImageUrl, FileExtension = image.FileExtension, }); } secondUser.Images = imagesOfSecondUser; } // Friendship var friendshipToAdd = new Friendship() { IsApproved = friendship.Approved, DateApproved = friendship.FriendsSince, FirstUser = firstUser, SecondUser = secondUser, }; db.Friendships.Add(friendshipToAdd); // Messages foreach (var message in friendship.Messages) { var author = new UserProfile(); if (firstUser.Username == message.Author) { author = firstUser; } else { author = secondUser; } var messageToAdd = new ChatMessage() { Content = message.Content, DateTimeOfSending = message.SentOn, DateTimeOfSeeing = message.SeenOn, Author = author, Friednship = friendshipToAdd, }; db.ChatMessages.Add(messageToAdd); if (counter == 100) { db.SaveChanges(); db.Dispose(); db = new SocialNetworkEntities(); db.Configuration.AutoDetectChangesEnabled = false; db.Configuration.ValidateOnSaveEnabled = false; counter = 0; Console.Write("."); } counter++; } db.SaveChanges(); } }
public SocialNetworkService(SocialNetworkEntities db) { this.context = db; }