From ebd729276cdbe9212230e04c5716ba8cc54cb443 Mon Sep 17 00:00:00 2001 From: "branislav.radivojevic" Date: Mon, 5 Dec 2022 16:45:48 +0100 Subject: pretraga po tagovima i imenu lokacije, trending --- Backend/Api/Api/Controllers/PostController.cs | 7 +++ Backend/Api/Api/Interfaces/IPostService.cs | 1 + Backend/Api/Api/Models/Post.cs | 7 +++ Backend/Api/Api/Services/PostService.cs | 75 ++++++++++++++++++++++++++- 4 files changed, 88 insertions(+), 2 deletions(-) (limited to 'Backend/Api') diff --git a/Backend/Api/Api/Controllers/PostController.cs b/Backend/Api/Api/Controllers/PostController.cs index 01a1c64..61a4f48 100644 --- a/Backend/Api/Api/Controllers/PostController.cs +++ b/Backend/Api/Api/Controllers/PostController.cs @@ -192,5 +192,12 @@ namespace Api.Controllers { return Ok(await _postService.addRemoveFavourite(id)); } + + [HttpGet("trending")] + [Authorize(Roles = "User")] + public async Task>> Trending() + { + return Ok(await _postService.TrendingTags()); + } } } diff --git a/Backend/Api/Api/Interfaces/IPostService.cs b/Backend/Api/Api/Interfaces/IPostService.cs index d5f489e..69846b0 100644 --- a/Backend/Api/Api/Interfaces/IPostService.cs +++ b/Backend/Api/Api/Interfaces/IPostService.cs @@ -28,5 +28,6 @@ namespace Api.Interfaces Task> Get10Newest(); Task> Recommended(string userid); Task addRemoveFavourite(string postId); + Task> TrendingTags(); } } \ No newline at end of file diff --git a/Backend/Api/Api/Models/Post.cs b/Backend/Api/Api/Models/Post.cs index 22ed62e..9c0c429 100644 --- a/Backend/Api/Api/Models/Post.cs +++ b/Backend/Api/Api/Models/Post.cs @@ -115,5 +115,12 @@ namespace Api.Models { public int counter { get; set; } public string tag { get; set; } + public int? views { get; set; } + } + + public class Trending + { + public TagR tagr { get; set; } + public PostSendPage page { get; set; } } } diff --git a/Backend/Api/Api/Services/PostService.cs b/Backend/Api/Api/Services/PostService.cs index fd42d08..777389b 100644 --- a/Backend/Api/Api/Services/PostService.cs +++ b/Backend/Api/Api/Services/PostService.cs @@ -15,6 +15,7 @@ namespace Api.Services private readonly IFileService _fileService; private readonly ILocationService _locationService; private readonly IMongoCollection _users; + private readonly IMongoCollection _locations; public PostService(IDatabaseConnection settings, IMongoClient mongoClient, IHttpContextAccessor httpContext, IFileService fileService,ILocationService locationService) { var database = mongoClient.GetDatabase(settings.DatabaseName); @@ -23,6 +24,7 @@ namespace Api.Services _httpContext = httpContext; _fileService = fileService; _locationService = locationService; + _locations = database.GetCollection(settings.LocationCollectionName); } public async Task addPost(PostReceive post) @@ -347,7 +349,27 @@ namespace Api.Services var lista = new List(); var ls = new List(); var xd = new List(); - lista = await _posts.Find(x => x.locationId == locid).ToListAsync(); + if(ObjectId.TryParse(locid, out _)) + lista = await _posts.Find(x => x.locationId == locid).ToListAsync(); + else + { + lista = await _posts.Find(x => x.tags != null && x.tags.Any(y => y.ToLower().Contains(locid.ToLower()))).ToListAsync(); + if (lista.Count==0) + { + var locs = await _locations.Find(x => x.city.ToLower().Contains(locid.ToLower()) || x.name.ToLower().Contains(locid.ToLower())).ToListAsync(); + foreach(var loc in locs) + { + var posts =await _posts.Find(x => x.locationId == loc._id).ToListAsync(); + if(posts != null) + { + foreach(var p in posts) + { + lista.Add(p); + } + } + } + } + } if (lista != null) { foreach (var elem in lista) @@ -472,7 +494,7 @@ namespace Api.Services public async Task> Recommended(string userid) // momgodb bloat bleh { List posts = await UserHistory(userid); - //TODO-LIMIT RECOMMENDED FOR POSTS FROM THIS MONTH ONLY + //TODO-LIMIT RECOMMENDED FOR POSTS FROM THIS MONTH List tags = new List(); foreach (var post in posts) { @@ -555,6 +577,55 @@ namespace Api.Services return result; } + + public async Task> TrendingTags() + { + var all = await _posts.Find(_ => true).ToListAsync(); + var posts = new List(); + foreach (var elem in all) + { + if ((DateTime.Now - elem.createdAt).TotalDays < 7) + posts.Add(await postToPostSend(elem)); + } + 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; + newtag.views = post.views; + tags.Add(newtag); + } + else + { + var replace = tags.Find(x => x.tag == tagitem); + tags.Remove(replace); + replace.counter += 1; + replace.views += post.views; + tags.Add(replace); + } + } + } + } + var top10tags = tags.OrderByDescending(x => x.views).Take(10).ToList(); + + var tosend = new List(); + foreach(var trending in top10tags) + { + var novi = new Trending(); + novi.tagr = trending; + novi.page = await SearchPosts(trending.tag, 0, 1, 5); + tosend.Add(novi); + } + + return tosend; + } } } -- cgit v1.2.3