초기화 방식 변경, JiraIssue관련 논리 추가.

This commit is contained in:
2025-12-11 14:34:54 +09:00
parent 057481803f
commit e17889748a

View File

@@ -31,15 +31,6 @@ public class AppDbService
{ {
_log.Information("Database already exists"); _log.Information("Database already exists");
} }
// Migration
var pendingMigrations = await _db.Database.GetPendingMigrationsAsync();
if (pendingMigrations.Any())
{
_log.Information("Applying pending migrations...");
await _db.Database.MigrateAsync();
_log.Information("Migrations applied successfully");
}
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -48,6 +39,7 @@ public class AppDbService
} }
} }
#region Table: Configs
public async Task<Dictionary<string, string>> LoadConfigAsync() public async Task<Dictionary<string, string>> LoadConfigAsync()
{ {
try try
@@ -100,6 +92,105 @@ public class AppDbService
throw; throw;
} }
} }
#endregion Table: Configs
public async Task UpsertJiraIssueAsync(JiraIssue issue, CancellationToken ct = default)
{
try
{
var existing = await _db.JiraIssues.FindAsync([issue.Key], ct);
if (existing == null)
{
_db.JiraIssues.Add(issue);
_log.Debug("Inserting new Jira issue: {key}", issue.Key);
}
else
{
if (issue.Updated > existing.Updated)
{
existing.Summary = issue.Summary;
existing.Parent = issue.Parent;
existing.Type = issue.Type;
existing.Status = issue.Status;
existing.Assignee = issue.Assignee;
existing.Manager = issue.Manager;
existing.Due = issue.Due;
existing.Updated = issue.Updated;
existing.ObjectId = issue.ObjectId;
existing.NeedNotify = issue.NeedNotify;
_db.JiraIssues.Update(existing);
_log.Debug("Updating existing Jira issue: {key}", issue.Key);
}
else
{
_log.Debug("Skipping Jira issue (not newer): {key}", issue.Key);
}
}
await _db.SaveChangesAsync(ct);
}
catch (Exception ex)
{
_log.Error(ex, "Failed to upsert Jira issue: {key}", issue.Key);
throw;
}
}
public async Task UpsertJiraIssuesBatchAsync(IEnumerable<JiraIssue> issues, CancellationToken ct = default)
{
try
{
var issueList = issues.ToList();
if (!issueList.Any())
return;
var keys = issueList.Select(i => i.Key).ToList();
var existingIssues = await _db.JiraIssues
.Where(ji => keys.Contains(ji.Key))
.ToDictionaryAsync(ji => ji.Key, ct);
int insertCount = 0, updateCount = 0, skipCount = 0;
foreach (var issue in issueList)
{
if (!existingIssues.TryGetValue(issue.Key, out var existing))
{
_db.JiraIssues.Add(issue);
insertCount++;
}
else if (issue.Updated > existing.Updated)
{
existing.Summary = issue.Summary;
existing.Parent = issue.Parent;
existing.Type = issue.Type;
existing.Status = issue.Status;
existing.Assignee = issue.Assignee;
existing.Manager = issue.Manager;
existing.Due = issue.Due;
existing.Updated = issue.Updated;
existing.ObjectId = issue.ObjectId;
existing.NeedNotify = issue.NeedNotify;
_db.JiraIssues.Update(existing);
updateCount++;
}
else
{
skipCount++;
}
}
await _db.SaveChangesAsync(ct);
_log.Information("Batch completed: {insert} inserted, {update} updated, {skip} skipped out of {total} issues",
insertCount, updateCount, skipCount, issueList.Count);
}
catch (Exception ex)
{
_log.Error(ex, "Failed to batch upsert Jira issues");
throw;
}
}
} }