diff --git a/RMuseum/Controllers/ContributionStatsController.cs b/RMuseum/Controllers/ContributionStatsController.cs
index 75fe0dc9..7bf0992e 100644
--- a/RMuseum/Controllers/ContributionStatsController.cs
+++ b/RMuseum/Controllers/ContributionStatsController.cs
@@ -242,6 +242,81 @@ namespace RMuseum.Controllers
return Ok(result);
}
+ ///
+ /// approved related songs daily
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("suggestedsongs/daily")]
+ [AllowAnonymous]
+ [ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(IEnumerable))]
+ [ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
+ public async Task GetApprovedRelatedSongsGroupedByDateAsync([FromQuery] PagingParameterModel paging, Guid? userId = null)
+ {
+ var cacheKey = $"suggestedsongs/daily/{DateTime.Now.Date}/{paging.PageSize}/{paging.PageNumber}/{userId ?? Guid.Empty}";
+ if (!_memoryCache.TryGetValue(cacheKey, out (PaginationMetadata PagingMeta, GroupedByDateViewModel[] Tracks) pagedResult))
+ {
+ var res = await _service.GetApprovedRelatedSongsGroupedByDateAsync(paging, userId);
+ if (!string.IsNullOrEmpty(res.ExceptionString))
+ return BadRequest(res.ExceptionString);
+ pagedResult = res.Result;
+ }
+ // Paging Header
+ HttpContext.Response.Headers.Append("paging-headers", JsonConvert.SerializeObject(pagedResult.PagingMeta));
+
+ return Ok(pagedResult.Tracks);
+ }
+
+ ///
+ /// approved related songs grouped by user
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("suggestedsongs/by/user")]
+ [AllowAnonymous]
+ [ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(IEnumerable))]
+ [ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
+ public async Task GetApprovedRelatedSongsGroupedByUserAsync([FromQuery] PagingParameterModel paging, DateTime? day, Guid? userId)
+ {
+ var cacheKey = $"suggestedsongs/by/user/{(day ?? DateTime.Now).Date}/{paging.PageSize}/{paging.PageNumber}/{userId ?? Guid.Empty}";
+ if (!_memoryCache.TryGetValue(cacheKey, out (PaginationMetadata PagingMeta, GroupedByUserViewModel[] Tracks) pagedResult))
+ {
+ var res = await _service.GetApprovedRelatedSongsGroupedByUserAsync(paging, day, userId);
+ if (!string.IsNullOrEmpty(res.ExceptionString))
+ return BadRequest(res.ExceptionString);
+ pagedResult = res.Result;
+ }
+
+ // Paging Header
+ HttpContext.Response.Headers.Append("paging-headers", JsonConvert.SerializeObject(pagedResult.PagingMeta));
+
+ return Ok(pagedResult.Tracks);
+ }
+
+ ///
+ /// summed up stats of approved related songs
+ ///
+ ///
+ [HttpGet("suggestedsongs")]
+ [AllowAnonymous]
+ [ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(SummedUpViewModel))]
+ [ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
+ public async Task GetApprovedRelatedSongsSummedUpStatsAsync()
+ {
+ if (!_memoryCache.TryGetValue($"suggestedsongs/{DateTime.Now.Date}", out SummedUpViewModel result))
+ {
+ var res = await _service.GetApprovedRelatedSongsSummedUpStatsAsync();
+ if (!string.IsNullOrEmpty(res.ExceptionString))
+ return BadRequest(res.ExceptionString);
+ result = res.Result;
+ }
+ return Ok(result);
+ }
+
+
///
diff --git a/RMuseum/RMuseum.xml b/RMuseum/RMuseum.xml
index 3c31840f..93cd02b4 100644
--- a/RMuseum/RMuseum.xml
+++ b/RMuseum/RMuseum.xml
@@ -831,6 +831,29 @@
+
+
+ approved related songs daily
+
+
+
+
+
+
+
+ approved related songs grouped by user
+
+
+
+
+
+
+
+
+ summed up stats of approved related songs
+
+
+
service