Skip to content

Commit c9737f6

Browse files
Upgrade code
1 parent cb20824 commit c9737f6

File tree

1 file changed

+56
-50
lines changed

1 file changed

+56
-50
lines changed

csharp/Platform.Bot/Triggers/LastCommitActivityTrigger.cs

Lines changed: 56 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System.Collections.Generic;
88
using System.Linq;
99
using System.Text;
10+
using System.Text.RegularExpressions;
1011
using System.Threading.Tasks;
1112

1213
namespace Platform.Bot.Triggers
@@ -18,78 +19,83 @@ internal class LastCommitActivityTrigger : ITrigger<TContext>
1819

1920
public LastCommitActivityTrigger(GitHubStorage storage) => _githubStorage = storage;
2021

21-
public bool Condition(TContext issue) => "last 3 months commit activity" == issue.Title.ToLower();
22+
public async Task<bool> Condition(TContext issue)
23+
{
24+
return "last 3 months commit activity" == issue.Title.ToLower();
25+
}
2226

23-
public void Action(TContext issue)
27+
public async Task Action(TContext issue)
2428
{
2529
var organizationName = issue.Repository.Owner.Login;
26-
var allMembers = _githubStorage.GetOrganizationMembers(organizationName);
27-
var usersAndRepositoriesTheyCommited = new ConcurrentDictionary<User, HashSet<Repository>>();
28-
allMembers.All(user =>
29-
{
30-
usersAndRepositoriesTheyCommited.TryAdd(user, new HashSet<Repository>());
31-
return true;
32-
});
33-
var allRepositories = _githubStorage.GetAllRepositories(organizationName).Result;
34-
var allTasks = new Queue<Task>();
35-
foreach (var repository in allRepositories)
30+
31+
var allMembers = await _githubStorage.GetAllOrganizationMembers(organizationName);
32+
var allRepositories = await _githubStorage.GetAllRepositories(organizationName);
33+
if (!allRepositories.Any())
3634
{
37-
var repositoryCommitsTask = _githubStorage.GetCommits(repository.Id, new CommitRequest{Since = DateTime.Now.AddMonths(-3)});
38-
repositoryCommitsTask.ContinueWith(task =>
35+
return;
36+
}
37+
38+
var commitsPerUserInLast3Months = await allRepositories
39+
.Where(repository => _githubStorage.Client.Repository.Branch.GetAll(repository.Id).Result.Any())
40+
.Select(repository => _githubStorage.GetCommits(repository.Id, new CommitRequest { Since = DateTime.Now.AddMonths(-3) }).Result)
41+
.SelectMany(x => x)
42+
.Where(commit => allMembers.Find(user => user.Id == commit.Author.Id) != null)
43+
.Aggregate(Task.FromResult(new Dictionary<User, List<GitHubCommit>>()), async (dictionaryTask, commit) =>
3944
{
40-
task.Result.All(commit =>
45+
var dictionary = await dictionaryTask;
46+
var member = allMembers.Find(user => user.Id == commit.Author.Id)!;
47+
if (dictionary.ContainsKey(member))
4148
{
42-
allMembers.All(user =>
43-
{
44-
if (commit.Author?.Id == user.Id)
45-
{
46-
usersAndRepositoriesTheyCommited[user].Add(repository);
47-
}
48-
return true;
49-
});
50-
return true;
51-
});
49+
dictionary[member].Add(commit);
50+
}
51+
else
52+
{
53+
dictionary.Add(member, new List<GitHubCommit> { commit });
54+
}
55+
return dictionary;
5256
});
53-
allTasks.Enqueue(repositoryCommitsTask);
54-
}
55-
Task.WaitAll(allTasks.ToArray());
56-
var activeUsersAndRepositoriesTheyCommited = usersAndRepositoriesTheyCommited.Where(userAndRepositoriesCommited => userAndRepositoriesCommited.Value.Count > 0).ToDictionary(pair => pair.Key, pair => pair.Value);
5757
StringBuilder messageSb = new();
58-
AddTldrMessageToSb(activeUsersAndRepositoriesTheyCommited, messageSb);
59-
AddUsersAndRepositoriesTheyCommitedToSb(activeUsersAndRepositoriesTheyCommited, messageSb);
58+
var tldrMessage = GetTldrMessage(commitsPerUserInLast3Months.Select(pair => pair.Key).ToList());
59+
messageSb.Append(tldrMessage);
60+
messageSb.AppendLine("---");
61+
var detailedMessage = await GetDetailedMessage(commitsPerUserInLast3Months);
62+
messageSb.Append(detailedMessage);
6063
var message = messageSb.ToString();
61-
var comment = _githubStorage.CreateIssueComment(issue.Repository.Id, issue.Number, message);
62-
comment.Wait();
64+
await _githubStorage.CreateIssueComment(issue.Repository.Id, issue.Number, message);
6365
Console.WriteLine($"Issue {issue.Title} is processed: {issue.Url}");
64-
_githubStorage.CloseIssue(issue);
66+
await _githubStorage.Client.Issue.Update(issue.Repository.Owner.Login, issue.Repository.Name, issue.Number, new IssueUpdate() { State = ItemState.Closed });
6567
}
6668

67-
private void AddTldrMessageToSb(IDictionary<User, HashSet<Repository>> usersAndRepositoriesCommited, StringBuilder sb)
69+
private string GetTldrMessage(List<User> users)
6870
{
69-
sb.AppendLine("## TLDR:");
70-
usersAndRepositoriesCommited.Keys.All(user =>
71+
StringBuilder stringBuilder = new StringBuilder();
72+
stringBuilder.AppendLine("# TLDR:");
73+
users.All(user =>
7174
{
72-
sb.AppendLine($"[{user.Login}]({user.Url})");
75+
stringBuilder.AppendLine($"- [{user.Login}]({user.Url})");
7376
return true;
7477
});
75-
sb.AppendLine();
76-
sb.AppendLine("---");
77-
sb.AppendLine();
78+
return stringBuilder.ToString();
7879
}
7980

80-
private void AddUsersAndRepositoriesTheyCommitedToSb(IDictionary<User, HashSet<Repository>> usersAndRepositoriesCommited, StringBuilder sb)
81+
private async Task<string> GetDetailedMessage(IDictionary<User, List<GitHubCommit>> commitsPerUser)
8182
{
82-
foreach (var userAndCommitedRepositories in usersAndRepositoriesCommited)
83+
StringBuilder stringBuilder = new StringBuilder();
84+
foreach (var userAndCommitedRepositories in commitsPerUser)
8385
{
8486
var user = userAndCommitedRepositories.Key;
85-
var repositoriesUserCommited = userAndCommitedRepositories.Value;
86-
sb.AppendLine($"**[{user.Login}]({user.Url})**");
87-
repositoriesUserCommited.All(repository => {
88-
sb.AppendLine($"- [{repository.Name}]({repository.Url})");
89-
return true;
90-
});
91-
sb.AppendLine("---");
87+
var commits = userAndCommitedRepositories.Value;
88+
stringBuilder.AppendLine($"## [{user.Login}]({user.Url})");
89+
commits
90+
.ForEach(commit =>
91+
{
92+
Regex regex = new Regex(@"\n*");
93+
var commitMessage = commit.Commit.Message;
94+
var commitMesasgeWithoutNewLines = regex.Replace(commitMessage, " ");
95+
stringBuilder.AppendLine($"- [{commitMesasgeWithoutNewLines}]({commit.Url})");
96+
});
9297
}
98+
return stringBuilder.ToString();
9399
}
94100
}
95101
}

0 commit comments

Comments
 (0)