From cf3c3a0f9e3beb73b3d7a8f1f49dfe76b458a60b Mon Sep 17 00:00:00 2001 From: "branislav.radivojevic" Date: Mon, 28 Nov 2022 23:35:55 +0100 Subject: Prva iteracije recommended algoritma --- Backend/Api/Api/Controllers/PostController.cs | 7 +++ Backend/Api/Api/Interfaces/IPostService.cs | 1 + Backend/Api/Api/Models/Post.cs | 6 +++ Backend/Api/Api/Services/PostService.cs | 63 +++++++++++++++++++++++++++ 4 files changed, 77 insertions(+) (limited to 'Backend/Api') diff --git a/Backend/Api/Api/Controllers/PostController.cs b/Backend/Api/Api/Controllers/PostController.cs index 88c1c99..6970d28 100644 --- a/Backend/Api/Api/Controllers/PostController.cs +++ b/Backend/Api/Api/Controllers/PostController.cs @@ -171,5 +171,12 @@ namespace Api.Controllers return Ok(await _postService.Get10Best()); } + [HttpGet("posts/recommended")] + [Authorize(Roles = "User")] + public async Task>> Recommended() + { + var userid = await _userService.UserIdFromJwt(); + return Ok(await _postService.Recommended(userid)); + } } } diff --git a/Backend/Api/Api/Interfaces/IPostService.cs b/Backend/Api/Api/Interfaces/IPostService.cs index a9adb05..96786bd 100644 --- a/Backend/Api/Api/Interfaces/IPostService.cs +++ b/Backend/Api/Api/Interfaces/IPostService.cs @@ -26,5 +26,6 @@ namespace Api.Interfaces Task> Get10MostViewed(); Task> Get10Newest(); + Task> Recommended(string userid); } } \ No newline at end of file diff --git a/Backend/Api/Api/Models/Post.cs b/Backend/Api/Api/Models/Post.cs index 78b4705..dd007ec 100644 --- a/Backend/Api/Api/Models/Post.cs +++ b/Backend/Api/Api/Models/Post.cs @@ -108,4 +108,10 @@ namespace Api.Models public int totalposts { get; set; } public List posts { get; set; } } + + public class TagR + { + public int counter { get; set; } + public string tag { get; set; } + } } diff --git a/Backend/Api/Api/Services/PostService.cs b/Backend/Api/Api/Services/PostService.cs index c57cfec..855b231 100644 --- a/Backend/Api/Api/Services/PostService.cs +++ b/Backend/Api/Api/Services/PostService.cs @@ -467,5 +467,68 @@ namespace Api.Services List newest = temp.OrderByDescending(o => o.createdAt).Take(10).ToList(); return newest; } + + public async Task> Recommended(string userid) // momgodb bloat bleh + { + List posts = await UserHistory(userid); + //TODO-LIMIT RECOMMENDED FOR POSTS FROM THIS MONTH ONLY + List tags = new List(); + foreach (var post in posts) + { + if (post.tags != null) + { + + foreach (var tagitem in post.tags) + { + if (!tags.Any(x => x.tag == tagitem)) + { + var newtag = new TagR(); + newtag.tag = tagitem; + newtag.counter = 1; + tags.Add(newtag); + } + else + { + var replace = tags.Find(x => x.tag == tagitem); + tags.Remove(replace); + replace.counter += 1; + tags.Add(replace); + } + } + } + } + var top5tags = tags.OrderByDescending(x => x.counter).Take(5).ToList(); + + var all = await _posts.Find(_ => true).ToListAsync(); + var recent30 = new List(); + var fiveoftop5tags = new List(); + foreach (var elem in all) + { + if ((DateTime.Now - elem.createdAt).TotalDays < 30) + recent30.Add(await postToPostSend(elem)); + } + recent30 = recent30.OrderByDescending(x => x.createdAt).ToList(); + foreach (var tag in top5tags) + { + var five = new List(); + foreach (var elem in recent30) + { + if (elem.tags != null) + { + if (elem.tags.Any(x => x == tag.tag)) + five.Add(elem); + } + } + five = five.Take(5).ToList(); + foreach(var elem in five) + { + fiveoftop5tags.Add(elem); + } + } + + var taggedposts = new List(); + taggedposts = fiveoftop5tags.Distinct().OrderByDescending(x => x.createdAt).ToList(); + return taggedposts; + } } } -- cgit v1.2.3