diff --git a/ProjectLighthouse.Servers.Website/Pages/Debug/ActivityTestPage.cshtml b/ProjectLighthouse.Servers.Website/Pages/Debug/ActivityTestPage.cshtml new file mode 100644 index 00000000..40aad32e --- /dev/null +++ b/ProjectLighthouse.Servers.Website/Pages/Debug/ActivityTestPage.cshtml @@ -0,0 +1,85 @@ +@page "/debug/activity" +@using System.Globalization +@using LBPUnion.ProjectLighthouse.Types.Activity +@using LBPUnion.ProjectLighthouse.Types.Entities.Activity +@model LBPUnion.ProjectLighthouse.Servers.Website.Pages.Debug.ActivityTestPage + +@{ + Layout = "Layouts/BaseLayout"; + Model.Title = "Debug - Activity Test"; +} + + +
Group By Activity
+
+ +
Group By Actor
+
+
+ +@foreach (OuterActivityGroup activity in Model.ActivityGroups) +{ +

@activity.Key.GroupType, Timestamp: @activity.Key.Timestamp.ToString(CultureInfo.InvariantCulture)

+
+ + @if (activity.Key.UserId != -1) + { +

UserId: @activity.Key.UserId

+ } + @if ((activity.Key.TargetNewsId ?? -1) != -1) + { +

TargetNewsId?: @activity.Key.TargetNewsId (targetId=@activity.Key.TargetId)

+ } + @if ((activity.Key.TargetPlaylistId ?? -1) != -1) + { +

TargetPlaylistId?: @activity.Key.TargetPlaylistId (targetId=@activity.Key.TargetId)

+ } + @if ((activity.Key.TargetSlotId ?? -1) != -1) + { +

TargetSlotId?: @activity.Key.TargetSlotId (targetId=@activity.Key.TargetId)

+ } + @if ((activity.Key.TargetTeamPickSlotId ?? -1) != -1) + { +

TargetTeamPickSlot?: @activity.Key.TargetTeamPickSlotId (targetId=@activity.Key.TargetId)

+ } + @if ((activity.Key.TargetUserId ?? -1) != -1) + { +

TargetUserId?: @activity.Key.TargetUserId (targetId=@activity.Key.TargetId)

+ } +
+ + @foreach (IGrouping? eventGroup in activity.Groups) + { +
+
Nested Group Type: @eventGroup.Key.Type
+ + @foreach (ActivityDto gameEvent in eventGroup.ToList()) + { +
+ @gameEvent.Activity.Type, Event Id: @gameEvent.Activity.ActivityId +
+
+

Event Group Type: @gameEvent.GroupType

+

Event Target ID: @gameEvent.TargetId

+ @if (gameEvent.Activity is LevelActivityEntity level) + { +

SlotId: @level.SlotId

+

SlotVersion: @gameEvent.TargetSlotGameVersion

+ } + @if (gameEvent.Activity is ScoreActivityEntity score) + { +

ScoreId: @score.ScoreId

+

SlotId: @score.SlotId

+

SlotVersion: @gameEvent.TargetSlotGameVersion

+ } +
+ } +
+ } +
+
+
+

Total events: @activity.Groups.Sum(g => g.ToList().Count)

+
+
+} \ No newline at end of file diff --git a/ProjectLighthouse.Servers.Website/Pages/Debug/ActivityTestPage.cshtml.cs b/ProjectLighthouse.Servers.Website/Pages/Debug/ActivityTestPage.cshtml.cs new file mode 100644 index 00000000..dd24cef7 --- /dev/null +++ b/ProjectLighthouse.Servers.Website/Pages/Debug/ActivityTestPage.cshtml.cs @@ -0,0 +1,34 @@ +using LBPUnion.ProjectLighthouse.Database; +using LBPUnion.ProjectLighthouse.Extensions; +using LBPUnion.ProjectLighthouse.Servers.Website.Pages.Layouts; +using LBPUnion.ProjectLighthouse.Types.Activity; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; + +namespace LBPUnion.ProjectLighthouse.Servers.Website.Pages.Debug; + +public class ActivityTestPage : BaseLayout +{ + public ActivityTestPage(DatabaseContext database) : base(database) + { } + + public List ActivityGroups = []; + + public bool GroupByActor { get; set; } + + public async Task OnGet(bool groupByActor = false) + { + Console.WriteLine(groupByActor); + List? events = (await this.Database.Activities.ToActivityDto(true).ToActivityGroups(groupByActor).ToListAsync()) + .ToOuterActivityGroups(groupByActor); + + if (events == null) return this.Page(); + + this.GroupByActor = groupByActor; + + this.ActivityGroups = events; + return this.Page(); + } + + +} \ No newline at end of file diff --git a/ProjectLighthouse/Extensions/ActivityQueryExtensions.cs b/ProjectLighthouse/Extensions/ActivityQueryExtensions.cs index 135ffd4b..9627a712 100644 --- a/ProjectLighthouse/Extensions/ActivityQueryExtensions.cs +++ b/ProjectLighthouse/Extensions/ActivityQueryExtensions.cs @@ -41,16 +41,17 @@ public static class ActivityQueryExtensions { Timestamp = dto.Activity.Timestamp.Date, UserId = dto.Activity.UserId, - TargetNewsId = dto.TargetNewsId ?? 0, - TargetTeamPickSlotId = dto.TargetTeamPickId ?? 0, + TargetNewsId = dto.TargetNewsId ?? -1, + TargetTeamPickSlotId = dto.TargetTeamPickId ?? -1, }) : activityQuery.GroupBy(dto => new ActivityGroup { Timestamp = dto.Activity.Timestamp.Date, - TargetUserId = dto.TargetUserId ?? 0, - TargetSlotId = dto.TargetSlotId ?? 0, - TargetPlaylistId = dto.TargetPlaylistId ?? 0, - TargetNewsId = dto.TargetNewsId ?? 0, + UserId = -1, + TargetUserId = dto.TargetUserId ?? -1, + TargetSlotId = dto.TargetSlotId ?? -1, + TargetPlaylistId = dto.TargetPlaylistId ?? -1, + TargetNewsId = dto.TargetNewsId ?? -1, }); public static List ToOuterActivityGroups diff --git a/ProjectLighthouse/Types/Activity/ActivityDto.cs b/ProjectLighthouse/Types/Activity/ActivityDto.cs index 6e696d8f..4382eede 100644 --- a/ProjectLighthouse/Types/Activity/ActivityDto.cs +++ b/ProjectLighthouse/Types/Activity/ActivityDto.cs @@ -17,10 +17,10 @@ public class ActivityDto public int TargetId => this.GroupType switch { - ActivityGroupType.User => this.TargetUserId ?? 0, - ActivityGroupType.Level => this.TargetSlotId ?? 0, - ActivityGroupType.Playlist => this.TargetPlaylistId ?? 0, - ActivityGroupType.News => this.TargetNewsId ?? 0, + ActivityGroupType.User => this.TargetUserId ?? -1, + ActivityGroupType.Level => this.TargetSlotId ?? -1, + ActivityGroupType.Playlist => this.TargetPlaylistId ?? -1, + ActivityGroupType.News => this.TargetNewsId ?? -1, _ => this.Activity.UserId, }; diff --git a/ProjectLighthouse/Types/Activity/ActivityGroup.cs b/ProjectLighthouse/Types/Activity/ActivityGroup.cs index 8cd189ae..ea16fab5 100644 --- a/ProjectLighthouse/Types/Activity/ActivityGroup.cs +++ b/ProjectLighthouse/Types/Activity/ActivityGroup.cs @@ -19,21 +19,21 @@ public struct ActivityGroup this.GroupType switch { ActivityGroupType.User => this.TargetUserId ?? this.UserId, - ActivityGroupType.Level => this.TargetSlotId ?? 0, - ActivityGroupType.TeamPick => this.TargetTeamPickSlotId ?? 0, - ActivityGroupType.Playlist => this.TargetPlaylistId ?? 0, - ActivityGroupType.News => this.TargetNewsId ?? 0, + ActivityGroupType.Level => this.TargetSlotId ?? -1, + ActivityGroupType.TeamPick => this.TargetTeamPickSlotId ?? -1, + ActivityGroupType.Playlist => this.TargetPlaylistId ?? -1, + ActivityGroupType.News => this.TargetNewsId ?? -1, _ => this.UserId, }; public ActivityGroupType GroupType => - (this.TargetPlaylistId ?? 0) != 0 - ? ActivityGroupType.User - : (this.TargetNewsId ?? 0) != 0 + (this.TargetPlaylistId ?? -1) != -1 + ? ActivityGroupType.Playlist + : (this.TargetNewsId ?? -1) != -1 ? ActivityGroupType.News - : (this.TargetTeamPickSlotId ?? 0) != 0 + : (this.TargetTeamPickSlotId ?? -1) != -1 ? ActivityGroupType.TeamPick - : (this.TargetSlotId ?? 0) != 0 + : (this.TargetSlotId ?? -1) != -1 ? ActivityGroupType.Level : ActivityGroupType.User;