aboutsummaryrefslogtreecommitdiff
path: root/Backend
diff options
context:
space:
mode:
authorbranislav.radivojevic <wafflemynxyt@gmail.com>2022-12-05 16:45:48 +0100
committerbranislav.radivojevic <wafflemynxyt@gmail.com>2022-12-05 16:45:48 +0100
commitebd729276cdbe9212230e04c5716ba8cc54cb443 (patch)
tree8cc22b35119414e93732fbe6dfc5d97b0dc10ee6 /Backend
parentf3c3fcaeb4ece508e018286c59a57da1d9ea0469 (diff)
pretraga po tagovima i imenu lokacije, trending
Diffstat (limited to 'Backend')
-rw-r--r--Backend/Api/Api/Controllers/PostController.cs7
-rw-r--r--Backend/Api/Api/Interfaces/IPostService.cs1
-rw-r--r--Backend/Api/Api/Models/Post.cs7
-rw-r--r--Backend/Api/Api/Services/PostService.cs75
4 files changed, 88 insertions, 2 deletions
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<ActionResult<List<Trending>>> 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<List<PostSend>> Get10Newest();
Task<List<PostSend>> Recommended(string userid);
Task<Boolean> addRemoveFavourite(string postId);
+ Task<List<Trending>> 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<User> _users;
+ private readonly IMongoCollection<Location> _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<Location>(settings.LocationCollectionName);
}
public async Task<PostSend> addPost(PostReceive post)
@@ -347,7 +349,27 @@ namespace Api.Services
var lista = new List<Post>();
var ls = new List<PostSend>();
var xd = new List<PostSend>();
- 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<List<PostSend>> Recommended(string userid) // momgodb bloat bleh
{
List<PostSend> posts = await UserHistory(userid);
- //TODO-LIMIT RECOMMENDED FOR POSTS FROM THIS MONTH ONLY
+ //TODO-LIMIT RECOMMENDED FOR POSTS FROM THIS MONTH
List<TagR> tags = new List<TagR>();
foreach (var post in posts)
{
@@ -555,6 +577,55 @@ namespace Api.Services
return result;
}
+
+ public async Task<List<Trending>> TrendingTags()
+ {
+ var all = await _posts.Find(_ => true).ToListAsync();
+ var posts = new List<PostSend>();
+ foreach (var elem in all)
+ {
+ if ((DateTime.Now - elem.createdAt).TotalDays < 7)
+ posts.Add(await postToPostSend(elem));
+ }
+ List<TagR> tags = new List<TagR>();
+ 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<Trending>();
+ 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;
+ }
}
}