Initial commit.
This commit is contained in:
59
Services/JiraService.cs
Normal file
59
Services/JiraService.cs
Normal file
@@ -0,0 +1,59 @@
|
||||
using Serilog;
|
||||
using Microsoft.Extensions.Options;
|
||||
using System.Text.Json;
|
||||
using TriliumMind.Models;
|
||||
|
||||
namespace TriliumMind.Services;
|
||||
|
||||
public class JiraService
|
||||
{
|
||||
private readonly AppConfigs _configs;
|
||||
private readonly Serilog.ILogger _log;
|
||||
|
||||
public JiraService(AppConfigs configs)
|
||||
{
|
||||
_configs = configs;
|
||||
_log = Log.ForContext<JiraService>();
|
||||
}
|
||||
|
||||
public async Task<JiraResponse> FetchJiraIssuesAsync(
|
||||
DateTimeOffset lastFetchTime, string targetProject,int startAt, CancellationToken ct)
|
||||
{
|
||||
var uri = $"{_configs.AppSettings.Jira.ApiBaseUrl}/"
|
||||
+ $"search?jql=project={targetProject} "
|
||||
+ $"AND updated >= \"{lastFetchTime.ToString("yyyy-MM-dd HH:mm")}\" "
|
||||
+ $"&fields={_configs.AppSettings.Jira.SearchFields}"
|
||||
+ $"&startAt={startAt}&maxResults=50";
|
||||
var request = new HttpRequestMessage(HttpMethod.Get, uri);
|
||||
request.Headers.Add("Accept", "application/json");
|
||||
request.Headers.Add("Authorization", $"Bearer {_configs.AppSettings.Jira.AccessToken}");
|
||||
Log.Debug("Fetch Jira issues ready. Fetch the issues updated after {last_fetch_time} in Project {target_project}.",
|
||||
lastFetchTime.ToString("yyyy-MM-dd HH:mm"), targetProject);
|
||||
|
||||
using var client = new HttpClient();
|
||||
var response = await client.SendAsync(request, ct).ConfigureAwait(false);
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
var jsonResponse = await response.Content.ReadAsStringAsync(ct).ConfigureAwait(false);
|
||||
var jiraResponse = JsonSerializer.Deserialize<JiraResponse>(jsonResponse);
|
||||
|
||||
return jiraResponse;
|
||||
}
|
||||
|
||||
public async Task<Issue> FetchJiraIssueAsync(string targetIssueKey, CancellationToken ct)
|
||||
{
|
||||
var uri = $"{_configs.AppSettings.Jira.ApiBaseUrl}/issue/{targetIssueKey}";
|
||||
var request = new HttpRequestMessage(HttpMethod.Get, uri);
|
||||
request.Headers.Add("Accept", "application/json");
|
||||
request.Headers.Add("Authorization", $"Bearer {_configs.AppSettings.Jira.AccessToken}");
|
||||
Log.Debug("Fetch a Jira issue({issue_key}) ready.", targetIssueKey);
|
||||
|
||||
using var client = new HttpClient();
|
||||
var response = await client.SendAsync(request, ct).ConfigureAwait(false);
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
var jsonResponse = await response.Content.ReadAsStringAsync(ct).ConfigureAwait(false);
|
||||
var issue = JsonSerializer.Deserialize<Issue>(jsonResponse);
|
||||
return issue;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user