PlotDirector/PlotLine/Services/StoryIntelligenceGlobalProgressService.cs

45 lines
1.8 KiB
C#

using PlotLine.Data;
using PlotLine.ViewModels;
namespace PlotLine.Services;
public interface IStoryIntelligenceGlobalProgressService
{
Task<StoryIntelligenceGlobalProgressViewModel> GetForCurrentUserAsync();
}
public sealed class StoryIntelligenceGlobalProgressService(
ICurrentUserService currentUser,
IStoryIntelligenceResultRepository runs) : IStoryIntelligenceGlobalProgressService
{
public async Task<StoryIntelligenceGlobalProgressViewModel> GetForCurrentUserAsync()
{
if (currentUser.UserId is not int userId)
{
return new StoryIntelligenceGlobalProgressViewModel();
}
var summaries = await runs.ListActiveBookRunSummariesForUserAsync(userId);
return new StoryIntelligenceGlobalProgressViewModel
{
Books = summaries.Select(summary => new StoryIntelligenceGlobalProgressBookViewModel
{
ProjectID = summary.ProjectID,
BookID = summary.BookID,
BookTitle = string.IsNullOrWhiteSpace(summary.BookDisplayTitle) ? "Book" : summary.BookDisplayTitle,
RunCount = summary.RunCount,
PendingRunCount = summary.PendingRunCount,
RunningRunCount = summary.RunningRunCount,
CompletedRunCount = summary.CompletedRunCount,
FailedRunCount = summary.FailedRunCount,
TotalDetectedScenes = summary.TotalDetectedScenes,
CompletedScenes = summary.CompletedScenes,
FailedScenes = summary.FailedScenes,
TotalDurationMs = summary.TotalDurationMs,
UpdatedUtc = summary.UpdatedUtc
})
.ToList()
};
}
}