pivoting to local yaml files for state

This commit is contained in:
2023-07-18 23:02:48 -06:00
parent d691f817b7
commit 04274bd6c5
15 changed files with 343 additions and 273 deletions

View File

@@ -8,6 +8,7 @@
<ItemGroup>
<PackageReference Include="RestSharp" Version="108.0.3" />
<PackageReference Include="YamlDotNet" Version="13.1.1" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,9 @@
namespace LocalModels;
public record LocalCourse
{
public IEnumerable<LocalModule> Modules { get; init; } = Enumerable.Empty<LocalModule>();
public string Name { get; init; } = string.Empty;
public IEnumerable<DayOfWeek> DaysOfWeek { get; init; } = Enumerable.Empty<DayOfWeek>();
public ulong? CanvasId { get; init; }
}

View File

@@ -0,0 +1,6 @@
namespace LocalModels;
public record LocalModule
{
public string Name { get; init; } = string.Empty;
}

View File

@@ -0,0 +1,46 @@
using LocalModels;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;
public class YamlManager
{
public string CourseToYaml(LocalCourse course)
{
var serializer = new SerializerBuilder()
.Build();
var yaml = serializer.Serialize(course);
System.Console.WriteLine(yaml);
return yaml;
}
public LocalCourse ParseCourse(string rawCourse)
{
var deserializer = new DeserializerBuilder()
.Build();
var person = deserializer.Deserialize<LocalCourse>(rawCourse);
return person;
}
public async Task SaveCourse(LocalCourse course)
{
var courseString = CourseToYaml(course);
await File.WriteAllTextAsync($"../storage/{course.Name}.yml", courseString);
}
public async Task<IEnumerable<LocalCourse>> LoadSavedCourses()
{
string path = "../storage/";
if (!Directory.Exists(path))
throw new Exception("storage folder not found");
var fileNames = Directory.GetFiles(path);
var courses = await Task.WhenAll(
fileNames.Select(async n => ParseCourse(await File.ReadAllTextAsync($"../storage/{n}")))
);
return courses;
}
}