Skip to content

Commit aa792ca

Browse files
committed
added tracker support when adding issues.
1 parent 41b6220 commit aa792ca

File tree

6 files changed

+62
-0
lines changed

6 files changed

+62
-0
lines changed

RedmineTelegramBot.Core/Conversation.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ private enum State
2121
AddIssueSetIssueProjectId,
2222
AddIssueSetIssueSubject,
2323
AddIssueSetIssueDescription,
24+
AddIssueSetTrackerId,
2425
}
2526

2627
private readonly ITelegramBotClient _telegramBotClient;
@@ -87,6 +88,13 @@ public async Task Process(Message message)
8788
if (_state == State.AddIssueSetIssueDescription)
8889
{
8990
_createIssueModel.issue.description = message.Text;
91+
await ChangeState(message, State.AddIssueSetTrackerId);
92+
return;
93+
}
94+
95+
if (_state == State.AddIssueSetTrackerId)
96+
{
97+
_createIssueModel.issue.tracker_id = int.Parse(message.Text);
9098
await AddIssue(message);
9199
await ChangeState(message, State.Command);
92100
return;
@@ -111,6 +119,11 @@ private async Task ChangeState(Message message, State state)
111119
{
112120
await ReplyMessage(message, "Issue Description:\n");
113121
}
122+
else if (state == State.AddIssueSetTrackerId)
123+
{
124+
await ReplyWithTrackerList(message);
125+
await ReplyMessage(message, "Tracker Id:\n");
126+
}
114127
else if (state == State.SearchProjects)
115128
{
116129
await ReplyMessage(message, "Search pattern (type * for all):\n");
@@ -155,6 +168,14 @@ private async Task ReplyWithProjectList(Message message, string searchPattern)
155168
await ChangeState(message, State.Command);
156169
}
157170

171+
private async Task ReplyWithTrackerList(Message message)
172+
{
173+
var trackers = await _redmineApiClient.GetTrackers();
174+
var trackersStr = string.Join("\n", trackers.OrderBy(r => r.Id).Select(r => $"{r.Id}) {r.Name}"));
175+
176+
await ReplyMessage(message, $"Trackers:\n{trackersStr}");
177+
}
178+
158179
private async Task AddIssue(Message message)
159180
{
160181
var response = await _redmineApiClient.AddIssue(_createIssueModel);

RedmineTelegramBot.Core/IRedmineApiClient.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,7 @@ public interface IRedmineApiClient
1212
Task<IEnumerable<RedmineProjectModel>> GetProjects();
1313

1414
Task<RedmineResponseModel> AddIssue(AddIssueModel issue);
15+
16+
Task<IEnumerable<RedmineTrackerModel>> GetTrackers();
1517
}
1618
}

RedmineTelegramBot.Core/Models/AddIssueModel.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ public class IssueModel {
2121
public string subject { get; set; }
2222

2323
public string description { get; set; }
24+
25+
public int tracker_id { get; set; }
2426
}
2527
}
2628
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace RedmineTelegramBot.Core.Models
8+
{
9+
public class RedmineGetTrackersResultModel
10+
{
11+
public List<RedmineTrackerModel> Trackers { get; set; }
12+
}
13+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace RedmineTelegramBot.Core.Models
8+
{
9+
public class RedmineTrackerModel
10+
{
11+
public int Id { get; set; }
12+
13+
public string Name { get; set; }
14+
}
15+
}

RedmineTelegramBot.Core/RedmineApiClient.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,5 +47,14 @@ public Task<RedmineResponseModel> AddIssue(AddIssueModel issue)
4747

4848
return client.PostAsync<RedmineResponseModel>(request);
4949
}
50+
51+
public async Task<IEnumerable<RedmineTrackerModel>> GetTrackers()
52+
{
53+
var client = _restClientFactory.CreateRestClient();
54+
var request = new RestRequest($"/trackers.json");
55+
var result = await client.GetAsync<RedmineGetTrackersResultModel>(request);
56+
57+
return result.Trackers;
58+
}
5059
}
5160
}

0 commit comments

Comments
 (0)