Files
ClaudeDo/src/ClaudeDo.Worker/Report/WeekReportPromptBuilder.cs
T

58 lines
2.0 KiB
C#

using System.Globalization;
using System.Text;
namespace ClaudeDo.Worker.Report;
public static class WeekReportPromptBuilder
{
public static string Build(
DateOnly start, DateOnly end,
IReadOnlyList<RepoActivity> activity,
IReadOnlyDictionary<DateOnly, List<string>> notesByDay)
{
var sb = new StringBuilder();
sb.AppendLine(ClaudeDo.Data.PromptFiles.Render(
ClaudeDo.Data.PromptKind.WeeklyReport,
new Dictionary<string, string>
{
["start"] = start.ToString("dd.MM.yyyy", CultureInfo.InvariantCulture),
["end"] = end.ToString("dd.MM.yyyy", CultureInfo.InvariantCulture),
}));
sb.AppendLine();
var days = new SortedDictionary<DateOnly, List<(string Repo, DayActivity Day)>>();
foreach (var repo in activity)
foreach (var day in repo.Days)
{
if (!days.TryGetValue(day.Date, out var list))
days[day.Date] = list = new();
list.Add((repo.RepoPath, day));
}
foreach (var d in notesByDay.Keys)
if (!days.ContainsKey(d)) days[d] = new();
sb.AppendLine("== Activity (from session history) ==");
foreach (var (date, repos) in days)
{
sb.AppendLine($"### {date:yyyy-MM-dd}");
foreach (var (repoPath, day) in repos)
{
sb.AppendLine($"Repo: {repoPath}");
foreach (var p in day.Prompts) sb.AppendLine($" Prompt: {p}");
foreach (var s in day.Summaries) sb.AppendLine($" Summary: {s}");
}
sb.AppendLine();
}
sb.AppendLine("== Developer notes ==");
foreach (var (date, _) in days)
{
if (!notesByDay.TryGetValue(date, out var notes) || notes.Count == 0) continue;
sb.AppendLine($"### {date:yyyy-MM-dd}");
foreach (var n in notes) sb.AppendLine($" - {n}");
}
return sb.ToString();
}
}