Add activity debug page and fix some bugs

This commit is contained in:
Slendy 2024-11-05 02:09:49 -06:00
commit f2cfa6b093
No known key found for this signature in database
GPG key ID: 7288D68361B91428
5 changed files with 139 additions and 19 deletions

View file

@ -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";
}
<a href="?groupByActor=false">
<div class="ui @(!Model.GroupByActor ? "blue" : "") button">Group By Activity</div>
</a>
<a href="?groupByActor=true">
<div class="ui @(Model.GroupByActor ? "blue" : "") button">Group By Actor</div>
</a>
<div class="ui divider"></div>
@foreach (OuterActivityGroup activity in Model.ActivityGroups)
{
<h4 class="ui top attached header">@activity.Key.GroupType, Timestamp: @activity.Key.Timestamp.ToString(CultureInfo.InvariantCulture)</h4>
<div class="ui attached segment">
@if (activity.Key.UserId != -1)
{
<p>UserId: @activity.Key.UserId</p>
}
@if ((activity.Key.TargetNewsId ?? -1) != -1)
{
<p>TargetNewsId?: @activity.Key.TargetNewsId (targetId=@activity.Key.TargetId)</p>
}
@if ((activity.Key.TargetPlaylistId ?? -1) != -1)
{
<p>TargetPlaylistId?: @activity.Key.TargetPlaylistId (targetId=@activity.Key.TargetId)</p>
}
@if ((activity.Key.TargetSlotId ?? -1) != -1)
{
<p>TargetSlotId?: @activity.Key.TargetSlotId (targetId=@activity.Key.TargetId)</p>
}
@if ((activity.Key.TargetTeamPickSlotId ?? -1) != -1)
{
<p>TargetTeamPickSlot?: @activity.Key.TargetTeamPickSlotId (targetId=@activity.Key.TargetId)</p>
}
@if ((activity.Key.TargetUserId ?? -1) != -1)
{
<p>TargetUserId?: @activity.Key.TargetUserId (targetId=@activity.Key.TargetId)</p>
}
<div class="ui segments">
@foreach (IGrouping<InnerActivityGroup, ActivityDto>? eventGroup in activity.Groups)
{
<div class="ui segment">
<h5>Nested Group Type: @eventGroup.Key.Type</h5>
@foreach (ActivityDto gameEvent in eventGroup.ToList())
{
<h5 class="ui top attached header" style="text-align: start">
@gameEvent.Activity.Type, Event Id: @gameEvent.Activity.ActivityId
</h5>
<div class="ui attached segment">
<p>Event Group Type: @gameEvent.GroupType</p>
<p>Event Target ID: @gameEvent.TargetId</p>
@if (gameEvent.Activity is LevelActivityEntity level)
{
<p>SlotId: @level.SlotId</p>
<p>SlotVersion: @gameEvent.TargetSlotGameVersion</p>
}
@if (gameEvent.Activity is ScoreActivityEntity score)
{
<p>ScoreId: @score.ScoreId</p>
<p>SlotId: @score.SlotId</p>
<p>SlotVersion: @gameEvent.TargetSlotGameVersion</p>
}
</div>
}
</div>
}
</div>
</div>
<div class="ui bottom attached segment">
<p>Total events: @activity.Groups.Sum(g => g.ToList().Count)</p>
</div>
<div class="ui massive divider" style="background-color: #0e91f5"></div>
}

View file

@ -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<OuterActivityGroup> ActivityGroups = [];
public bool GroupByActor { get; set; }
public async Task<IActionResult> OnGet(bool groupByActor = false)
{
Console.WriteLine(groupByActor);
List<OuterActivityGroup>? 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();
}
}

View file

@ -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<OuterActivityGroup> ToOuterActivityGroups

View file

@ -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,
};

View file

@ -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;