Try Catch on Serialize

Better Relation Data
This commit is contained in:
2024-11-13 14:09:12 -07:00
parent 3fa7998ff6
commit 0505330ac5
17 changed files with 322 additions and 76 deletions

View File

@ -7,6 +7,7 @@ using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Text.Json;
using System.Text.Json.Serialization;
@ -71,7 +72,7 @@ public class ProcessData : IProcessData
_ = Directory.CreateDirectory(destinationDirectory);
ReadOnlyDictionary<int, Record> keyValuePairs = GetWorkItems(workItems, keepRelations);
ReadOnlyCollection<string> bugUserStoryTaskWorkItemTypes = new(new string[] { "Bug", "User Story", "Task" });
ReadOnlyDictionary<int, string> collection = MoveCurrentAndGetExpectedDirectories(taskWorkItemType, destinationDirectory, bugUserStoryTaskWorkItemTypes, keyValuePairs);
ReadOnlyDictionary<int, string> collection = MoveCurrentAndGetExpectedDirectoriesAndFileCopy(taskWorkItemType, destinationDirectory, json, bugUserStoryTaskWorkItemTypes, keyValuePairs);
WriteFiles(fileRead, fileInfoCollection, taskWorkItemType, destinationDirectory, keyValuePairs, collection);
}
@ -85,12 +86,12 @@ public class ProcessData : IProcessData
return results;
}
private static ReadOnlyDictionary<int, string> MoveCurrentAndGetExpectedDirectories(string taskWorkItemType, string destinationDirectory, ReadOnlyCollection<string> bugUserStoryTaskWorkItemTypes, ReadOnlyDictionary<int, Record> keyValuePairs)
private static ReadOnlyDictionary<int, string> MoveCurrentAndGetExpectedDirectoriesAndFileCopy(string taskWorkItemType, string destinationDirectory, string json, ReadOnlyCollection<string> bugUserStoryTaskWorkItemTypes, ReadOnlyDictionary<int, Record> keyValuePairs)
{
ReadOnlyDictionary<int, string> results;
string? directory;
ReadOnlyDictionary<int, string> collection = GetCurrentDirectories(destinationDirectory, bugUserStoryTaskWorkItemTypes);
results = GetExpectedDirectories(taskWorkItemType, destinationDirectory, bugUserStoryTaskWorkItemTypes, keyValuePairs);
results = GetExpectedDirectoriesAndFileCopy(taskWorkItemType, destinationDirectory, json, bugUserStoryTaskWorkItemTypes, keyValuePairs);
foreach (KeyValuePair<int, string> keyValuePair in collection)
{
if (!results.TryGetValue(keyValuePair.Key, out directory))
@ -109,12 +110,18 @@ public class ProcessData : IProcessData
private static FileInfo GetFileInfoAndMaybeWriteFile(string directory, WorkItem workItem)
{
FileInfo result;
string json;
json = JsonSerializer.Serialize(workItem, WorkItemSourceGenerationContext.Default.WorkItem);
string json = JsonSerializer.Serialize(workItem, WorkItemSourceGenerationContext.Default.WorkItem);
string singletonDirectory = Path.Combine(directory, $"{workItem.Id}");
if (!Directory.Exists(singletonDirectory))
_ = Directory.CreateDirectory(singletonDirectory);
result = new(Path.Combine(singletonDirectory, ".json"));
if (Directory.Exists(singletonDirectory))
{
List<string> files = Directory.GetFiles(singletonDirectory, "*", SearchOption.AllDirectories).ToList();
string checkFile = Path.Combine(singletonDirectory, ".json");
if (files.Remove(checkFile))
File.Delete(checkFile);
if (files.Count == 0)
Directory.Delete(singletonDirectory);
}
result = new(Path.Combine(directory, $"{workItem.Id}.json"));
string old = result.Exists ? File.ReadAllText(result.FullName) : string.Empty;
if (old != json)
File.WriteAllText(result.FullName, json);
@ -126,7 +133,6 @@ public class ProcessData : IProcessData
string? directory;
FileInfo fileInfo;
WorkItem workItem;
Record? parent;
foreach (KeyValuePair<int, Record> keyValuePair in keyValuePairs)
{
workItem = keyValuePair.Value.WorkItem;
@ -139,8 +145,6 @@ public class ProcessData : IProcessData
fileInfo = GetFileInfoAndMaybeWriteFile(directory, workItem);
if (!fileRead.IsEAFHosted)
fileInfoCollection.Add(fileInfo);
if (workItem.WorkItemType != taskWorkItemType && workItem.Parent is not null && keyValuePairs.TryGetValue(workItem.Parent.Value, out parent))
_ = GetFileInfoAndMaybeWriteFile(Path.Combine(directory, ".parent"), parent.WorkItem);
}
}
@ -163,9 +167,9 @@ public class ProcessData : IProcessData
try
{
childRecords = Record.GetKeyValuePairs(keyValuePairs, keyValuePair.Value, "Child", nests, keepRelations); // Forward
// records = Record.GetKeyValuePairs(keyValuePairs, keyValuePair.Value, "Predecessor", nests, keepRelations); // Reverse
relatedRecords = Record.GetKeyValuePairs(keyValuePairs, keyValuePair.Value, "Related", nests, keepRelations); // Related
successorRecords = Record.GetKeyValuePairs(keyValuePairs, keyValuePair.Value, "Successor", nests, keepRelations); // Forward
// predecessorRecords = Record.GetKeyValuePairs(keyValuePairs, keyValuePair.Value, "Predecessor", nests, keepRelations); // Reverse
record = Record.Get(keyValuePair.Value, parentWorkItem, childRecords, relatedRecords, successorRecords, keepRelations);
}
catch (Exception)
@ -205,14 +209,32 @@ public class ProcessData : IProcessData
return new(results);
}
private static ReadOnlyDictionary<int, string> GetExpectedDirectories(string taskWorkItemType, string destinationDirectory, ReadOnlyCollection<string> bugUserStoryTaskWorkItemTypes, ReadOnlyDictionary<int, Record> keyValuePairs)
private static void FileCopy(string destinationDirectory, string json, List<string> distinct)
{
string old;
string checkFile;
foreach (string iterationPath in distinct)
{
checkFile = Path.Combine(destinationDirectory, iterationPath, "[].json");
old = File.Exists(checkFile) ? File.ReadAllText(checkFile) : string.Empty;
if (old != json)
File.WriteAllText(checkFile, json);
}
}
private static ReadOnlyDictionary<int, string> GetExpectedDirectoriesAndFileCopy(string taskWorkItemType, string destinationDirectory, string json, ReadOnlyCollection<string> bugUserStoryTaskWorkItemTypes, ReadOnlyDictionary<int, Record> keyValuePairs)
{
Dictionary<int, string> results = new();
string directory;
WorkItem workItem;
string iterationPath;
List<string> distinct = new();
foreach (KeyValuePair<int, Record> keyValuePair in keyValuePairs)
{
workItem = keyValuePair.Value.WorkItem;
iterationPath = workItem.IterationPath.Replace(" ", "-");
if (!distinct.Contains(iterationPath))
distinct.Add(iterationPath);
if (!bugUserStoryTaskWorkItemTypes.Contains(workItem.WorkItemType))
continue;
if (workItem.WorkItemType == taskWorkItemType && workItem.Parent is not null)
@ -220,6 +242,8 @@ public class ProcessData : IProcessData
directory = GetDirectory(destinationDirectory, workItem);
results.Add(workItem.Id, directory);
}
if (distinct.Count > 0)
FileCopy(destinationDirectory, json, distinct);
return new(results);
}