JiraIssue에 대해 Trilium 노트 발급 기능 추가.
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Reflection.Metadata;
|
||||
using TriliumMind.Data.Entities;
|
||||
using TriliumMind.Models;
|
||||
|
||||
@@ -26,7 +27,6 @@ public static class JiraIssueMapper
|
||||
NeedNotify = 0
|
||||
};
|
||||
}
|
||||
|
||||
private static string CleanDisplayName(string? displayName)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(displayName))
|
||||
|
||||
@@ -5,6 +5,7 @@ using System.Collections.Generic;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Net.Http.Json;
|
||||
using System.Text;
|
||||
using TriliumMind.Data.Entities;
|
||||
using TriliumMind.Models;
|
||||
|
||||
namespace TriliumMind.Services;
|
||||
@@ -18,7 +19,73 @@ public class TriliumService
|
||||
_log = Log.ForContext<TriliumService>();
|
||||
_configs = configs;
|
||||
}
|
||||
public async Task<string> FettchPageContentsAsync(Issue issue)
|
||||
|
||||
public async Task<IEnumerable<JiraIssue>> PublishNotesAsync(IEnumerable<JiraIssue> jiraIssues)
|
||||
{
|
||||
var issuesToPatch = new List<JiraIssue>();
|
||||
var issuesToPost = new List<JiraIssue>();
|
||||
foreach (var jiraIssue in jiraIssues)
|
||||
{
|
||||
if(jiraIssue.Published > DateTimeOffset.MinValue)
|
||||
issuesToPatch.Add(jiraIssue);
|
||||
else
|
||||
issuesToPost.Add(jiraIssue);
|
||||
break;
|
||||
}
|
||||
|
||||
// Post note does not support attribute, so additional work is required.
|
||||
var postedNotes = await PostNotesAsync(issuesToPost);
|
||||
//issuesToPatch.AddRange(postedIssues);
|
||||
//var patchedIssues = await PatchNotesAsync(issuesToPatch);
|
||||
|
||||
return issuesToPatch;
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<TriliumNote>> PostNotesAsync(IEnumerable<JiraIssue> jiraIssues)
|
||||
{
|
||||
var baseUrl = _configs.AppSettings.Trilium.EtapiBaseUrl;
|
||||
var token = _configs.AppSettings.Trilium.EtapiToken;
|
||||
var apiUrl = $"{baseUrl}/create-note";
|
||||
|
||||
var triliumNotes = new List<TriliumNote>();
|
||||
var lastRequestTime = DateTimeOffset.MinValue;
|
||||
foreach (var jiraIssue in jiraIssues)
|
||||
{
|
||||
var timeSinceLastRequest = DateTimeOffset.UtcNow - lastRequestTime;
|
||||
if (timeSinceLastRequest < TimeSpan.FromSeconds(1))
|
||||
{
|
||||
var delayTime = TimeSpan.FromSeconds(1) - timeSinceLastRequest;
|
||||
await Task.Delay(delayTime);
|
||||
}
|
||||
|
||||
var note = new TriliumNote(jiraIssue, GetParentPageId(jiraIssue.Status));
|
||||
var request = new HttpRequestMessage(HttpMethod.Post, apiUrl);
|
||||
request.Headers.TryAddWithoutValidation("Authorization", token);
|
||||
|
||||
request.Content = note.ToNoteContent();
|
||||
using var client = new HttpClient();
|
||||
var response = await client.SendAsync(request);
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
// Deserialize to TriliumResponse
|
||||
var triliumResponse = await response.Content.ReadFromJsonAsync<TriliumResponse>();
|
||||
lastRequestTime = DateTimeOffset.UtcNow;
|
||||
note.ObjectId = triliumResponse?.note.noteId;
|
||||
note.Published = lastRequestTime;
|
||||
note.TriliumNoteData = triliumResponse;
|
||||
triliumNotes.Add(note);
|
||||
}
|
||||
|
||||
return triliumNotes;
|
||||
}
|
||||
|
||||
public Task<IEnumerable<JiraIssue>> PatchNotesAsync(IEnumerable<JiraIssue> jiraIssues)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
// Update attributes
|
||||
}
|
||||
|
||||
public async Task<string> FetchPageContentsAsync(Issue issue)
|
||||
{
|
||||
var baseUrl = _configs.AppSettings.Trilium.EtapiBaseUrl;
|
||||
var pageId = "QxxFqCNAtIOy";
|
||||
@@ -34,4 +101,26 @@ public class TriliumService
|
||||
// Return new page ID after creating a new page
|
||||
return "";
|
||||
}
|
||||
|
||||
private string GetParentPageId(string issueStatus)
|
||||
{
|
||||
var readyPageId = _configs.AppSettings.Trilium.JiraOpenedIssuePageId;
|
||||
var workingPageId = _configs.AppSettings.Trilium.JiraWorkingIssuePageId;
|
||||
var resolvedPageId = _configs.AppSettings.Trilium.JiraResolvedIssuePageId;
|
||||
string pageId = string.Empty;
|
||||
if (issueStatus.Equals("Open", StringComparison.OrdinalIgnoreCase)
|
||||
|| issueStatus.Equals("Reopend", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
pageId = readyPageId;
|
||||
}
|
||||
else if (issueStatus.Equals("In progress", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
pageId = workingPageId;
|
||||
}
|
||||
else
|
||||
{
|
||||
pageId = resolvedPageId;
|
||||
}
|
||||
return pageId;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user