public User GetUser(Guid userId) { using (var ctx = new DB.CodingIdeasEntities()) { var user = ctx.Users.Include(x => x.UserSkills.Select(y => y.ProgrammingLanguage)).Where(x => x.Id == userId).FirstOrDefault(); if (user == null) { throw new UserNotFoundException(); } var skills = ctx.UserSkills .Where(x => x.UserId == userId) .ToList() .Select(x => new UserSkill() { ProgrammingLanguage = new ProgrammingLanguage() { Id = x.ProgrammingLanguageId, Name = x.ProgrammingLanguage.Name }, Proficiency = (byte)x.Proficiency }) .ToList(); return(new User() { Id = user.Id, DateOfBirth = user.DOB, Email = user.Email, FirstName = user.FirstName, LastName = user.LastName, Password = user.Password, Skills = skills, Username = user.Username }); } }
public IEnumerable <Post> GetPosts(int pageNumber) { if (pageNumber <= 0) { throw new InvalidPageNumberException(); } using (var ctx = new DB.CodingIdeasEntities()) { var posts = (from p in ctx.Posts join r in ctx.RatableEntities on p.Id equals r.Id join u in ctx.Users on r.UserId equals u.Id orderby r.PublishDate descending select new { AuthorId = r.UserId, Id = p.Id, Content = p.Content, PublishDate = r.PublishDate, Title = p.Title, AuthorUsername = u.Username }) .Skip((pageNumber - 1) * PostsPerPage) .Take(PostsPerPage) .ToList() .Select(x => new Post() { AuthorId = x.AuthorId, Id = x.Id, Content = x.Content, PublishDate = x.PublishDate, Title = x.Title, AuthorUsername = x.AuthorUsername }); foreach (var post in posts) { yield return(post); } } }
private void ValidateComment(Comment comment, CommentProperties props) { if (comment.Content == null || props.HasFlag(CommentProperties.Content) && string.IsNullOrWhiteSpace(comment.Content)) { throw new InvalidContentException(); } if (props.HasFlag(CommentProperties.PublishDate) && comment.PublishDate > DateTime.Now) { throw new InvalidPublishDateException("The publish date cannot be in the future."); } using (var ctx = new DB.CodingIdeasEntities()) { var post = ctx.Posts.Where(x => x.Id == comment.PostId).FirstOrDefault(); if (props.HasFlag(CommentProperties.PostId) && post == null) { throw new PostNotFoundException(); } if (props.HasFlag(CommentProperties.PublishDate) && comment.PublishDate < ctx.RatableEntities.Where(x => x.Id == comment.PostId).FirstOrDefault().PublishDate) { throw new InvalidPublishDateException("The comment cannot be published before the post."); } if (props.HasFlag(CommentProperties.AuthorId) && comment.AuthorId != null && ctx.Users.Where(x => x.Id == comment.AuthorId).FirstOrDefault() == null) { throw new UserNotFoundException(); } } }
public Guid GetUserId(string login, string passwordHash) { using (var ctx = new DB.CodingIdeasEntities()) { var user = ctx.Users.Where(x => (x.Email == login || x.Username == login) && x.Password == passwordHash).FirstOrDefault(); if (user == null) { throw new UserNotFoundException(); } return(user.Id); } }
public void AddRating(Guid userId, Guid entityId, sbyte rating) { ValidateRating(userId, entityId, rating); using (var ctx = new DB.CodingIdeasEntities()) { ctx.RatedEntities.Add(new DB.RatedEntity() { UserId = userId, EntityId = entityId, Rating = rating }); ctx.SaveChanges(); } }
public void UpdateUser(Guid oldUserId, User @new, UserProperties propertiesToChange) { ValidateUser(@new, propertiesToChange); using (var ctx = new DB.CodingIdeasEntities()) { if (ctx.Users.Where(x => x.Username == @new.Username && x.Password == @new.Password).Count() != 0) { throw new InvalidCredentialsException(); } var r = ctx.Users.Include(x => x.UserSkills).Where(x => x.Id == oldUserId).FirstOrDefault(); if (r == null) { throw new UserNotFoundException(); } if (propertiesToChange.HasFlag(UserProperties.DateOfBirth)) { r.DOB = @new.DateOfBirth; } if (propertiesToChange.HasFlag(UserProperties.Email)) { r.Email = @new.Email; } if (propertiesToChange.HasFlag(UserProperties.FirstName)) { r.FirstName = @new.FirstName; } if (propertiesToChange.HasFlag(UserProperties.LastName)) { r.LastName = @new.LastName; } if (propertiesToChange.HasFlag(UserProperties.Password)) { r.Password = @new.Password; } if (propertiesToChange.HasFlag(UserProperties.Username)) { r.Username = @new.Username; } if (propertiesToChange.HasFlag(UserProperties.Skills)) { r.UserSkills.Clear(); foreach (var s in @new.Skills) { r.UserSkills.Add(new DB.UserSkill() { ProgrammingLanguageId = s.ProgrammingLanguage.Id, Proficiency = s.Proficiency, UserId = r.Id }); } } ctx.SaveChanges(); } }
public void RemoveUser(Guid userId) { using (var ctx = new DB.CodingIdeasEntities()) { var user = ctx.Users.Where(x => x.Id == userId).FirstOrDefault(); if (user == null) { throw new UserNotFoundException(); } ctx.Users.Remove(user); ctx.SaveChanges(); } }
public IEnumerable <ProgrammingLanguage> GetProgrammingLanguages() { using (var ctx = new DB.CodingIdeasEntities()) { foreach (var lang in ctx.ProgrammingLanguages) { yield return(new ProgrammingLanguage() { Id = lang.Id, Name = lang.Name }); } } }
public void RemoveProgrammingLanguage(Guid languageId) { using (var ctx = new DB.CodingIdeasEntities()) { var lang = ctx.ProgrammingLanguages.Where(x => x.Id == languageId).FirstOrDefault(); if (lang == null) { throw new ProgrammingLanguageNotFoundException(); } ctx.ProgrammingLanguages.Remove(lang); ctx.SaveChanges(); } }
public void RemoveComment(Guid commentId) { using (var ctx = new DB.CodingIdeasEntities()) { var entity = ctx.RatableEntities.Where(x => x.Id == commentId).FirstOrDefault(); if (entity == null) { throw new CommentNotFoundException(); } ctx.RatableEntities.Remove(entity); ctx.SaveChanges(); } }
public void UpdateRating(Guid userId, Guid entityId, sbyte newRating) { ValidateRating(userId, entityId, newRating); using (var ctx = new DB.CodingIdeasEntities()) { var r = ctx.RatedEntities.Where(x => x.UserId == userId && x.EntityId == entityId).FirstOrDefault(); if (r == null) { throw new RatingNotFoundException(); } r.Rating = newRating; ctx.SaveChanges(); } }
public void UpdateSkill(Guid userId, Guid languageId, byte proficiency) { ValidateSkill(userId, languageId, proficiency); using (var ctx = new DB.CodingIdeasEntities()) { var s = ctx.UserSkills.Where(x => x.UserId == userId && x.ProgrammingLanguageId == languageId).FirstOrDefault(); if (s == null) { throw new UserSkillNotFoundException(); } s.Proficiency = proficiency; ctx.SaveChanges(); } }
private void ValidateSavePost(Guid userId, Guid postToSaveId) { using (var ctx = new DB.CodingIdeasEntities()) { if (ctx.Users.Where(x => x.Id == userId).FirstOrDefault() == null) { throw new UserNotFoundException(); } if (ctx.Posts.Where(x => x.Id == postToSaveId).FirstOrDefault() == null) { throw new PostNotFoundException(); } } }
public sbyte GetRatingByUser(Guid userId, Guid entityId) { using (var ctx = new DB.CodingIdeasEntities()) { var rating = ctx.RatedEntities .Where(x => x.UserId == userId && x.EntityId == entityId) .FirstOrDefault(); if (rating == null) { return(0); } return((sbyte)rating.Rating); } }
public void AddSkill(Guid userId, Guid languageId, byte proficiency) { ValidateSkill(userId, languageId, proficiency); using (var ctx = new DB.CodingIdeasEntities()) { ctx.UserSkills.Add(new DB.UserSkill() { UserId = userId, ProgrammingLanguageId = languageId, Proficiency = proficiency }); ctx.SaveChanges(); } }
public void AddProgrammingLanguage(ProgrammingLanguage language) { ValidateProgrammingLanguage(language, ProgrammingLanguageProperties.All); var langModel = new DB.ProgrammingLanguage() { Id = language.Id, Name = language.Name }; using (var ctx = new DB.CodingIdeasEntities()) { ctx.ProgrammingLanguages.Add(langModel); ctx.SaveChanges(); } }
public int GetTotalRating(Guid entityId) { using (var ctx = new DB.CodingIdeasEntities()) { var allRatings = from r in ctx.RatedEntities where r.EntityId == entityId select(int) r.Rating; if (allRatings.Count() == 0) { return(0); } return(allRatings.AsEnumerable().Aggregate((x, y) => x + y)); } }
public void UpdateComment(Guid oldCommentId, string newContent) { ValidateComment(new Comment() { Content = newContent }, CommentProperties.Content); using (var ctx = new DB.CodingIdeasEntities()) { var c = ctx.Comments.Where(x => x.Id == oldCommentId).FirstOrDefault(); if (c == null) { throw new CommentNotFoundException(); } c.Content = newContent; ctx.SaveChanges(); } }
public void UpdateProgrammingLanguage(Guid oldLanguageId, string newName) { ValidateProgrammingLanguage(new ProgrammingLanguage() { Name = newName }, ProgrammingLanguageProperties.All); using (var ctx = new DB.CodingIdeasEntities()) { var l = ctx.ProgrammingLanguages.Where(x => x.Id == oldLanguageId).FirstOrDefault(); if (l == null) { throw new ProgrammingLanguageNotFoundException(); } l.Name = newName; ctx.SaveChanges(); } }
public void RemovePost(Guid postId) { using (var ctx = new DB.CodingIdeasEntities()) { var post = ctx.Posts.Include(x => x.Comments).Where(x => x.Id == postId).FirstOrDefault(); if (post == null) { throw new PostNotFoundException(); } foreach (var c in post.Comments.ToList()) { ctx.Comments.Remove(c); } ctx.Posts.Remove(post); ctx.SaveChanges(); } }
private void ValidateSkill(Guid userId, Guid languageId, byte proficiency) { if (proficiency < 1 || proficiency > 5) { throw new InvalidProficiencyException(); } using (var ctx = new DB.CodingIdeasEntities()) { if (ctx.Users.Where(x => x.Id == userId).FirstOrDefault() == null) { throw new UserNotFoundException(); } if (ctx.ProgrammingLanguages.Where(x => x.Id == languageId).FirstOrDefault() == null) { throw new ProgrammingLanguageNotFoundException(); } } }
private void ValidateRating(Guid userId, Guid entityId, sbyte rating) { if (rating != -1 && rating != 1) { throw new InvalidRatingException(); } using (var ctx = new DB.CodingIdeasEntities()) { if (ctx.Users.Where(x => x.Id == userId).FirstOrDefault() == null) { throw new UserNotFoundException(); } if (ctx.RatableEntities.Where(x => x.Id == entityId).FirstOrDefault() == null) { throw new RatableEntityNotFoundException(); } } }
public IEnumerable <dynamic> GetMostActivePosters(int howMany) { using (var ctx = new DB.CodingIdeasEntities()) { var posters = ctx.Posts .Include(x => x.RatableEntity) .Include(x => x.RatableEntity.User) .GroupBy(x => x.RatableEntity.UserId) .Where(x => x.Key != null) .OrderByDescending(x => x.Count()) .Take(howMany) .Select(x => new { UserId = x.Key.Value, NumberOfPosts = x.Count(), Username = x.FirstOrDefault().RatableEntity.User.Username }); foreach (var p in posters) { yield return(p); } } }
public void Unsave(Guid userId, Guid postId) { using (var ctx = new DB.CodingIdeasEntities()) { var user = ctx.Users.Include(x => x.SavedPosts).Where(x => x.Id == userId).FirstOrDefault(); if (user == null) { throw new UserNotFoundException(); } var savedPost = user.SavedPosts.Where(x => x.Id == postId).FirstOrDefault(); if (savedPost == null) { throw new SavedPostNotFoundException(); } user.SavedPosts.Remove(savedPost); ctx.SaveChanges(); } }
public void Save(Guid userId, Guid postToSaveId) { ValidateSavePost(userId, postToSaveId); using (var ctx = new DB.CodingIdeasEntities()) { var post = ctx.Posts.Where(x => x.Id == postToSaveId).FirstOrDefault(); var user = ctx.Users.Where(x => x.Id == userId).FirstOrDefault(); if (user == null) { throw new UserNotFoundException(); } if (post == null) { throw new SavedPostNotFoundException(); } user.SavedPosts.Add(post); ctx.SaveChanges(); } }
public Post GetPost(Guid postId) { using (var ctx = new DB.CodingIdeasEntities()) { var post = ctx.Posts.Include(x => x.RatableEntity).Include(x => x.RatableEntity.User).Where(x => x.Id == postId).FirstOrDefault(); if (post == null) { throw new PostNotFoundException(); } return(new Post() { Id = post.Id, AuthorId = post.RatableEntity.UserId, Content = post.Content, PublishDate = post.RatableEntity.PublishDate, Title = post.Title, AuthorUsername = post.RatableEntity.User.Username }); } }
public void RemoveSkill(Guid userId, Guid languageId) { using (var ctx = new DB.CodingIdeasEntities()) { if (ctx.Users.Where(x => x.Id == userId).FirstOrDefault() == null) { throw new UserNotFoundException(); } if (ctx.ProgrammingLanguages.Where(x => x.Id == languageId).FirstOrDefault() == null) { throw new ProgrammingLanguageNotFoundException(); } var skill = ctx.UserSkills.Where(x => x.UserId == userId && x.ProgrammingLanguageId == languageId).FirstOrDefault(); if (skill == null) { throw new UserSkillNotFoundException(); } ctx.UserSkills.Remove(skill); ctx.SaveChanges(); } }
public void UpdatePost(Guid oldPostId, Post @new, PostProperties propertiesToChange) { ValidatePost(@new, propertiesToChange); using (var ctx = new DB.CodingIdeasEntities()) { var p = ctx.Posts.Where(x => x.Id == oldPostId).FirstOrDefault(); if (p == null) { throw new PostNotFoundException(); } if (propertiesToChange.HasFlag(PostProperties.Content)) { p.Content = @new.Content; } if (propertiesToChange.HasFlag(PostProperties.Title)) { p.Title = @new.Title; } ctx.SaveChanges(); } }
public void RemoveRating(Guid userId, Guid entityId) { using (var ctx = new DB.CodingIdeasEntities()) { if (ctx.Users.Where(x => x.Id == userId).FirstOrDefault() == null) { throw new UserNotFoundException(); } if (ctx.RatableEntities.Where(x => x.Id == entityId).FirstOrDefault() == null) { throw new RatableEntityNotFoundException(); } var rating = ctx.RatedEntities.Where(x => x.EntityId == entityId && x.UserId == userId).FirstOrDefault(); if (rating == null) { throw new RatingNotFoundException(); } ctx.RatedEntities.Remove(rating); ctx.SaveChanges(); } }
public IEnumerable <Comment> GetComments(Guid postId, int pageNumber) { if (pageNumber <= 0) { throw new InvalidPageNumberException(); } using (var ctx = new DB.CodingIdeasEntities()) { if (ctx.Posts.Where(x => x.Id == postId).FirstOrDefault() == null) { throw new PostNotFoundException(); } using (var conn = new SqlConnection(ctx.Database.Connection.ConnectionString)) { string selectSql = $@"SELECT C.[{Constants.Comment_Id}], C.[{Constants.Comment_Content}], R.[{Constants.RatableEntity_UserId}], U.[{Constants.User_Username}], R.[{Constants.RatableEntity_PublishDate}] FROM [{Constants.Schema}].[{Constants.Comment}] as C, [{Constants.Schema}].[{Constants.RatableEntity}] as R, [{Constants.Schema}].[{Constants.User}] as U WHERE R.[{Constants.RatableEntity_Id}] = C.[{Constants.Comment_Id}] AND C.[{Constants.Comment_PostId}] = '{postId}' AND R.[{Constants.RatableEntity_UserId}] = U.[{Constants.User_Id}] ORDER BY R.[{Constants.RatableEntity_PublishDate}] DESC"; using (var adapter = new SqlDataAdapter(selectSql, conn)) { var table = new DataTable(); adapter.Fill(CommentsPerPage * (pageNumber - 1), CommentsPerPage, table); var comments = table.AsEnumerable() .Select(x => new Comment() { Id = Guid.Parse(x[0].ToString()), PostId = postId, Content = x[1].ToString(), AuthorId = x[2].ToString() == "" ? (Guid?)null : Guid.Parse(x[2].ToString()), PublishDate = DateTime.Parse(x[4].ToString()), AuthorUsername = x[3].ToString() }); foreach (var c in comments) { yield return(c); } } } } }