53 lines
2.1 KiB
C#
53 lines
2.1 KiB
C#
using PlotLine.Data;
|
|
using PlotLine.ViewModels;
|
|
|
|
namespace PlotLine.Services;
|
|
|
|
public interface IStoryIntelligenceGlobalProgressService
|
|
{
|
|
Task<StoryIntelligenceGlobalProgressViewModel> GetForCurrentUserAsync();
|
|
Task<StoryIntelligenceGlobalProgressViewModel> GetForUserAsync(int userId);
|
|
}
|
|
|
|
public sealed class StoryIntelligenceGlobalProgressService(
|
|
ICurrentUserService currentUser,
|
|
IStoryIntelligenceResultRepository runs) : IStoryIntelligenceGlobalProgressService
|
|
{
|
|
public async Task<StoryIntelligenceGlobalProgressViewModel> GetForCurrentUserAsync()
|
|
{
|
|
if (currentUser.UserId is not int userId)
|
|
{
|
|
return new StoryIntelligenceGlobalProgressViewModel();
|
|
}
|
|
|
|
return await GetForUserAsync(userId);
|
|
}
|
|
|
|
public async Task<StoryIntelligenceGlobalProgressViewModel> GetForUserAsync(int userId)
|
|
{
|
|
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,
|
|
TotalExpectedScenes = summary.TotalExpectedScenes,
|
|
CompletedScenes = summary.CompletedScenes,
|
|
FailedScenes = summary.FailedScenes,
|
|
ActiveScenes = summary.ActiveScenes,
|
|
Status = summary.Status,
|
|
TotalDurationMs = summary.TotalDurationMs,
|
|
UpdatedUtc = summary.UpdatedUtc
|
|
})
|
|
.ToList()
|
|
};
|
|
}
|
|
}
|