From 1df7f56576f6a0a9bf5bc0d4eed1f7fa9f217902 Mon Sep 17 00:00:00 2001 From: Stian Forren Date: Thu, 18 Sep 2025 09:36:49 +0200 Subject: [PATCH 1/2] Updated and added new models for Post, Comment and Like --- .../DTOs/Posts/GetPosts/LikeDTO.cs | 22 ++++++++++++++ .../DTOs/Posts/GetPosts/PostDTOVol2.cs | 4 +-- exercise.wwwapi/DTOs/Posts/PostDTO.cs | 3 -- exercise.wwwapi/Data/ModelSeeder.cs | 30 +++++++++++++++---- exercise.wwwapi/Endpoints/PostEndpoints.cs | 7 ++--- exercise.wwwapi/Models/Like.cs | 20 +++++++++++++ exercise.wwwapi/Models/Post.cs | 4 +-- 7 files changed, 72 insertions(+), 18 deletions(-) create mode 100644 exercise.wwwapi/DTOs/Posts/GetPosts/LikeDTO.cs create mode 100644 exercise.wwwapi/Models/Like.cs diff --git a/exercise.wwwapi/DTOs/Posts/GetPosts/LikeDTO.cs b/exercise.wwwapi/DTOs/Posts/GetPosts/LikeDTO.cs new file mode 100644 index 0000000..e10f1a2 --- /dev/null +++ b/exercise.wwwapi/DTOs/Posts/GetPosts/LikeDTO.cs @@ -0,0 +1,22 @@ +using exercise.wwwapi.Models; + +namespace exercise.wwwapi.DTOs.Posts.GetPosts +{ + public class LikeDTO + { + public int Id { get; set; } + public int PostId { get; set; } + public int UserId { get; set; } + + public LikeDTO() + { + + } + public LikeDTO(Like model) + { + Id = model.Id; + PostId = model.PostId; + UserId = model.UserId; + } + } +} diff --git a/exercise.wwwapi/DTOs/Posts/GetPosts/PostDTOVol2.cs b/exercise.wwwapi/DTOs/Posts/GetPosts/PostDTOVol2.cs index a528f2d..4fd0b1f 100644 --- a/exercise.wwwapi/DTOs/Posts/GetPosts/PostDTOVol2.cs +++ b/exercise.wwwapi/DTOs/Posts/GetPosts/PostDTOVol2.cs @@ -10,9 +10,9 @@ public class PostDTOVol2 public string Firstname { get; set; } public string Lastname { get; set; } public string Body { get; set; } = string.Empty; - public int Likes { get; set; } public DateTime CreatedAt { get; set; } public List Comments { get; set; } = new List(); + public List Likes { get; set; } = new List(); public PostDTOVol2() { @@ -23,11 +23,11 @@ public PostDTOVol2(Post model) Id = model.Id; AuthorId = model.AuthorId; Body = model.Body; - Likes = model.Likes; CreatedAt = model.CreatedAt; Firstname = model.Author.Profile.FirstName; Lastname = model.Author.Profile.LastName; Comments = model.Comments.Select(c => new CommentDTO(c)).ToList(); + Likes = model.Likes.Select(l => new LikeDTO(l)).ToList(); } } } diff --git a/exercise.wwwapi/DTOs/Posts/PostDTO.cs b/exercise.wwwapi/DTOs/Posts/PostDTO.cs index a7435cf..0b3aaa3 100644 --- a/exercise.wwwapi/DTOs/Posts/PostDTO.cs +++ b/exercise.wwwapi/DTOs/Posts/PostDTO.cs @@ -13,9 +13,6 @@ public class PostDTO [JsonPropertyName("body")] public string Body { get; set; } - [JsonPropertyName("likes")] - public int Likes { get; set; } - [JsonPropertyName("created_at")] public DateTime CreatedAt { get; set; } } diff --git a/exercise.wwwapi/Data/ModelSeeder.cs b/exercise.wwwapi/Data/ModelSeeder.cs index 2fd0837..17fd539 100644 --- a/exercise.wwwapi/Data/ModelSeeder.cs +++ b/exercise.wwwapi/Data/ModelSeeder.cs @@ -26,6 +26,7 @@ public static void Seed(ModelBuilder modelBuilder) SeedProfiles(ref modelBuilder); SeedPosts(ref modelBuilder); SeedComments(ref modelBuilder); + SeedLikes(ref modelBuilder); SeedCourses(ref modelBuilder); SeedCohorts(ref modelBuilder); SeedModules(ref modelBuilder); @@ -180,7 +181,6 @@ private static void SeedPosts(ref ModelBuilder modelBuilder) Id = 1, AuthorId = 1, Body = "Post 1 Body", - Likes = 5, CreatedAt = _seedTime, }, new Post @@ -188,7 +188,6 @@ private static void SeedPosts(ref ModelBuilder modelBuilder) Id = 2, AuthorId = 2, Body = "Post 2 Body", - Likes = 3, CreatedAt = _seedTime, }, new Post @@ -196,7 +195,6 @@ private static void SeedPosts(ref ModelBuilder modelBuilder) Id = 3, AuthorId = 3, Body = "Post 3 Body", - Likes = 10, CreatedAt = _seedTime, }, new Post @@ -204,7 +202,6 @@ private static void SeedPosts(ref ModelBuilder modelBuilder) Id = 4, AuthorId = 4, Body = "Post 4 Body", - Likes = 7, CreatedAt = _seedTime, }, new Post @@ -212,7 +209,6 @@ private static void SeedPosts(ref ModelBuilder modelBuilder) Id = 5, AuthorId = 5, Body = "Post 5 Body", - Likes = 9, CreatedAt = _seedTime, } ); @@ -264,6 +260,30 @@ private static void SeedComments(ref ModelBuilder modelBuilder) ); } + private static void SeedLikes(ref ModelBuilder modelBuilder) + { + modelBuilder.Entity().HasData( + new Like + { + Id = 1, + PostId = 1, + UserId = 1 + }, + new Like + { + Id = 2, + PostId = 1, + UserId = 2 + }, + new Like + { + Id = 3, + PostId = 1, + UserId = 3 + } + ); + } + private static void SeedCourses(ref ModelBuilder modelBuilder) { modelBuilder.Entity().HasData( diff --git a/exercise.wwwapi/Endpoints/PostEndpoints.cs b/exercise.wwwapi/Endpoints/PostEndpoints.cs index 4a4d092..5e83573 100644 --- a/exercise.wwwapi/Endpoints/PostEndpoints.cs +++ b/exercise.wwwapi/Endpoints/PostEndpoints.cs @@ -57,7 +57,6 @@ public static async Task CreatePost( { AuthorId = userId.Value, Body = request.Body!, - Likes = 0, CreatedAt = DateTime.UtcNow }; @@ -74,7 +73,6 @@ public static async Task CreatePost( Id = post.Id, AuthorId = post.AuthorId, Body = post.Body, - Likes = post.Likes, CreatedAt = post.CreatedAt } } @@ -116,7 +114,8 @@ private static async Task GetAllPostsVol2(IRepository postReposit { var results = (await postRepository.GetAllAsync( p => p.Author.Profile, - p => p.Comments + p => p.Comments, + p => p.Likes )).ToList(); var postData = new PostsSuccessDTOVol2 @@ -194,7 +193,6 @@ public static async Task UpdatePost(IRepository postRepository, i Id = post.Id, AuthorId = post.AuthorId, Body = post.Body, - Likes = post.Likes, CreatedAt = post.CreatedAt } }; @@ -243,7 +241,6 @@ public static async Task DeletePost(IRepository postRepository, i Id = post.Id, AuthorId = post.AuthorId, Body = post.Body, - Likes = post.Likes, CreatedAt = post.CreatedAt } }; diff --git a/exercise.wwwapi/Models/Like.cs b/exercise.wwwapi/Models/Like.cs new file mode 100644 index 0000000..2326ca5 --- /dev/null +++ b/exercise.wwwapi/Models/Like.cs @@ -0,0 +1,20 @@ +using exercise.wwwapi.Models.UserInfo; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace exercise.wwwapi.Models +{ + public class Like + { + [Key] + [Column("id")] + public int Id { get; set; } + [Column("post_id")] + [ForeignKey(nameof(Post))] + public int PostId { get; set; } + public Post Post { get; set; } + [Column("user_id")] + public int UserId { get; set; } + public User User { get; set; } + } +} diff --git a/exercise.wwwapi/Models/Post.cs b/exercise.wwwapi/Models/Post.cs index a073b4d..8052ac9 100644 --- a/exercise.wwwapi/Models/Post.cs +++ b/exercise.wwwapi/Models/Post.cs @@ -20,13 +20,11 @@ public class Post [Column("body", TypeName = "varchar(1000)")] public string Body { get; set; } - [Column("likes")] - public int Likes { get; set; } - [Column("created_at")] public DateTime CreatedAt { get; set; } [JsonIgnore] public User Author { get; set; } public ICollection Comments { get; set; } = new List(); + public ICollection Likes { get; set; } = new List(); } \ No newline at end of file From b7fd782e5c3a9e24b00ab88b6904822747e3cd1e Mon Sep 17 00:00:00 2001 From: Stian Forren Date: Thu, 18 Sep 2025 10:04:31 +0200 Subject: [PATCH 2/2] did it --- exercise.wwwapi/Models/Like.cs | 2 ++ exercise.wwwapi/Models/Post.cs | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/exercise.wwwapi/Models/Like.cs b/exercise.wwwapi/Models/Like.cs index 2326ca5..02e930e 100644 --- a/exercise.wwwapi/Models/Like.cs +++ b/exercise.wwwapi/Models/Like.cs @@ -4,6 +4,7 @@ namespace exercise.wwwapi.Models { + [Table("Likes")] public class Like { [Key] @@ -14,6 +15,7 @@ public class Like public int PostId { get; set; } public Post Post { get; set; } [Column("user_id")] + [ForeignKey(nameof(User))] public int UserId { get; set; } public User User { get; set; } } diff --git a/exercise.wwwapi/Models/Post.cs b/exercise.wwwapi/Models/Post.cs index 8052ac9..0c24f85 100644 --- a/exercise.wwwapi/Models/Post.cs +++ b/exercise.wwwapi/Models/Post.cs @@ -20,10 +20,9 @@ public class Post [Column("body", TypeName = "varchar(1000)")] public string Body { get; set; } - [Column("created_at")] + [Column("created_at", TypeName = "date")] public DateTime CreatedAt { get; set; } - [JsonIgnore] public User Author { get; set; } public ICollection Comments { get; set; } = new List(); public ICollection Likes { get; set; } = new List();