aboutsummaryrefslogtreecommitdiff
path: root/Backend
diff options
context:
space:
mode:
authorbranislav.radivojevic <wafflemynxyt@gmail.com>2022-12-05 20:15:57 +0100
committerbranislav.radivojevic <wafflemynxyt@gmail.com>2022-12-05 20:15:57 +0100
commit3b2580391137e284068c04afd0a03c27602f925d (patch)
tree15607bec141668a78a7e42a6139ea7bbc319b471 /Backend
parentaae690368dc3f60d18c3564cd4c1603820defec1 (diff)
osnovna statistika korisnika
Diffstat (limited to 'Backend')
-rw-r--r--Backend/Api/Api/Controllers/UserController.cs23
-rw-r--r--Backend/Api/Api/Interfaces/IPostService.cs1
-rw-r--r--Backend/Api/Api/Models/User.cs15
-rw-r--r--Backend/Api/Api/Services/PostService.cs37
-rw-r--r--Backend/Api/Api/Services/UserService.cs1
5 files changed, 77 insertions, 0 deletions
diff --git a/Backend/Api/Api/Controllers/UserController.cs b/Backend/Api/Api/Controllers/UserController.cs
index 4d7905a..97f2f8b 100644
--- a/Backend/Api/Api/Controllers/UserController.cs
+++ b/Backend/Api/Api/Controllers/UserController.cs
@@ -123,5 +123,28 @@ namespace Api.Controllers
{
return Ok(await _userService.GetMyFollowers());
}
+
+ [HttpGet("profile/stats")]
+ [Authorize(Roles = "User")]
+ public async Task<ActionResult<UserStats>> SelfStats()
+ {
+ var id = await _userService.UserIdFromJwt();
+ var tosend = await _postService.UserStats(id);
+ if (tosend != null)
+ return Ok(tosend);
+ return BadRequest();
+ }
+ [HttpGet("{username}/profile/stats")]
+ [Authorize(Roles = "User")]
+ public async Task<ActionResult<UserStats>> GetStats(string username)
+ {
+ var rez = await _userService.GetUserData(username);
+ if (rez == null)
+ return BadRequest();
+ var tosend = await _postService.UserStats(rez._id);
+ if (tosend != null)
+ return Ok(tosend);
+ return BadRequest();
+ }
}
}
diff --git a/Backend/Api/Api/Interfaces/IPostService.cs b/Backend/Api/Api/Interfaces/IPostService.cs
index 84d32ef..c854601 100644
--- a/Backend/Api/Api/Interfaces/IPostService.cs
+++ b/Backend/Api/Api/Interfaces/IPostService.cs
@@ -30,5 +30,6 @@ namespace Api.Interfaces
Task<Boolean> addRemoveFavourite(string postId);
Task<List<Trending>> TrendingTags();
Task<List<PostSend>> BestPostForAllLocationsInRadius(Coords coords, double radius);
+ Task<UserStats> UserStats(string userid);
}
} \ No newline at end of file
diff --git a/Backend/Api/Api/Models/User.cs b/Backend/Api/Api/Models/User.cs
index 6c777e7..cf16dbe 100644
--- a/Backend/Api/Api/Models/User.cs
+++ b/Backend/Api/Api/Models/User.cs
@@ -72,4 +72,19 @@ namespace Api.Models
}
+
+ public class UserStats
+ {
+ public int totalViews { get; set; }
+ public int numberOfPosts { get; set; }
+ public int numberOfRatingsOnPosts { get; set; }
+ public double averagePostRatingOnPosts {get; set; }
+ public List<MonthlyViews> monthlyViews { get; set; }
+ }
+
+ public class MonthlyViews
+ {
+ public int month { get; set; }
+ public int views { get; set; }
+ }
}
diff --git a/Backend/Api/Api/Services/PostService.cs b/Backend/Api/Api/Services/PostService.cs
index 6f7c455..6d28206 100644
--- a/Backend/Api/Api/Services/PostService.cs
+++ b/Backend/Api/Api/Services/PostService.cs
@@ -651,6 +651,43 @@ namespace Api.Services
}
return tosend;
}
+
+ public async Task<UserStats> UserStats(string userid)
+ {
+ var posts = await GetUsersPosts(userid);
+ var stats = new UserStats();
+ double ratingsum = 0;
+ stats.averagePostRatingOnPosts = 0;
+ stats.numberOfRatingsOnPosts = 0;
+ stats.numberOfPosts = 0;
+ stats.totalViews = 0;
+ stats.monthlyViews = new List<MonthlyViews>();
+
+
+ if(posts != null)
+ {
+ for(int i = 1; i <= 12; i++)
+ {
+ var novi = new MonthlyViews();
+ novi.month = i;
+ novi.views = 0;
+ stats.monthlyViews.Add(novi);
+ }
+
+ foreach (var post in posts)
+ {
+ var month = post.createdAt.Month;
+ stats.monthlyViews.FirstOrDefault(x => x.month == month).views += post.views;
+ stats.totalViews += post.views;
+ stats.numberOfRatingsOnPosts += post.ratingscount;
+ stats.numberOfPosts++;
+ ratingsum += post.ratings * post.ratingscount;
+ }
+ if(stats.numberOfRatingsOnPosts > 0) //don't forget to check div by 0 jesus
+ stats.averagePostRatingOnPosts = ratingsum / stats.numberOfRatingsOnPosts;
+ }
+ return stats;
+ }
}
}
diff --git a/Backend/Api/Api/Services/UserService.cs b/Backend/Api/Api/Services/UserService.cs
index ec67729..666dd98 100644
--- a/Backend/Api/Api/Services/UserService.cs
+++ b/Backend/Api/Api/Services/UserService.cs
@@ -663,6 +663,7 @@ namespace Api.Services
return null;
}
+
}
}