i liked syncing more before i cared about order

This commit is contained in:
2023-08-01 22:41:10 -06:00
parent 19bbfea099
commit 56c8128ace
16 changed files with 421 additions and 101 deletions

View File

@@ -52,12 +52,14 @@ public class CanvasAssignmentService
if (canvasAssignment == null)
throw new Exception("created canvas assignment was null");
await CreateRubric(courseId, localAssignment);
return localAssignment with
var updatedLocalAssignment = localAssignment with
{
canvasId = canvasAssignment.Id
};
await CreateRubric(courseId, updatedLocalAssignment);
return updatedLocalAssignment;
}
public async Task Update(ulong courseId, LocalAssignment localAssignment, string htmlDescription)

View File

@@ -4,6 +4,7 @@ using CanvasModel.Courses;
using CanvasModel.EnrollmentTerms;
using CanvasModel.Modules;
using RestSharp;
namespace Management.Services.Canvas;
public class CanvasService
@@ -75,6 +76,53 @@ public class CanvasService
await webRequestor.PostAsync(request);
}
public async Task UpdateModule(ulong courseId, ulong moduleId, string name, int position)
{
Console.WriteLine($"Updating Module: {name}");
var url = $"courses/{courseId}/modules/{moduleId}";
var body = new { module = new { name = name, position = position } };
var request = new RestRequest(url);
request.AddBody(body);
await webRequestor.PutAsync(request);
}
public async Task<IEnumerable<CanvasModuleItem>> GetModuleItems(ulong courseId, ulong moduleId)
{
var url = $"courses/{courseId}/modules/{moduleId}/items";
var request = new RestRequest(url);
var (items, response) = await webRequestor.GetAsync<IEnumerable<CanvasModuleItem>>(request);
if (items == null)
throw new Exception($"Error getting canvas module items for {url}");
return items;
}
public async Task<Dictionary<ulong, IEnumerable<CanvasModuleItem>>> GetAllModulesItems(
ulong courseId,
IEnumerable<CanvasModule> modules
)
{
var itemsTasks = modules.Select(
async (m) =>
{
var items = await GetModuleItems(courseId, m.Id);
return (m, items);
}
);
var output = new Dictionary<ulong, IEnumerable<CanvasModuleItem>>();
var itemTasksResult = await Task.WhenAll(itemsTasks);
foreach (var (module, items) in itemTasksResult)
{
if (module == null || items == null)
throw new Exception(
"i'm not sure how we got here, but module and items are null after looking up module items"
);
output[module.Id] = items;
}
return output;
}
public async Task<IEnumerable<EnrollmentTermModel>> GetCurrentTermsFor(
DateTime? _queryDate = null
)
@@ -90,4 +138,50 @@ public class CanvasService
return currentTerms;
}
public async Task UpdateModuleItem(
ulong canvasCourseId,
ulong canvasModuleId,
CanvasModuleItem item
)
{
Console.WriteLine($"updating module item {item.Title}");
var url = $"courses/{canvasCourseId}/modules/{canvasModuleId}/items/{item.Id}";
var body = new { module_item = new { title = item.Title, position = item.Position } };
var request = new RestRequest(url);
request.AddBody(body);
request.AddHeader("Content-Type", "application/json");
var (newItem, response) = await webRequestor.PutAsync<CanvasModuleItem>(request);
if (newItem == null)
throw new Exception("something went wrong updating module item");
}
public async Task CreateModuleItem(
ulong canvasCourseId,
ulong canvasModuleId,
string title,
string type,
ulong contentId
)
{
Console.WriteLine($"creating new module item {title}");
var url = $"courses/{canvasCourseId}/modules/{canvasModuleId}/items";
var body = new
{
module_item = new
{
title = title,
type = type.ToString(),
content_id = contentId,
}
};
var request = new RestRequest(url);
request.AddBody(body);
request.AddHeader("Content-Type", "application/json");
var (newItem, response) = await webRequestor.PostAsync<CanvasModuleItem>(request);
if (newItem == null)
throw new Exception("something went wrong updating module item");
}
}

View File

@@ -2,7 +2,7 @@ using RestSharp;
public class WebRequestor : IWebRequestor
{
private const string BaseUrl = "https://snow.instructure.com/api/v1/";
private string BaseUrl = Environment.GetEnvironmentVariable("CANVAS_URL") + "/api/v1/";
private string token;
private RestClient client;
@@ -49,13 +49,13 @@ public class WebRequestor : IWebRequestor
public async Task<RestResponse> PutAsync(RestRequest request)
{
var response = await client.ExecutePutAsync(request);
if (!response.IsSuccessful)
{
System.Console.WriteLine(response.Content);
System.Console.WriteLine(response.ResponseUri);
System.Console.WriteLine("error with response");
throw new Exception("error with response");
}
// if (!response.IsSuccessful)
// {
// System.Console.WriteLine(response.Content);
// System.Console.WriteLine(response.ResponseUri);
// System.Console.WriteLine("error with response");
// throw new Exception("error with response");
// }
return response;
}
@@ -79,23 +79,20 @@ public class WebRequestor : IWebRequestor
}
try
{
try
{
var data = JsonSerializer.Deserialize<T>(response.Content!);
var data = JsonSerializer.Deserialize<T>(response.Content!);
if (data == null)
{
System.Console.WriteLine(response.Content);
System.Console.WriteLine(response.ResponseUri);
System.Console.WriteLine("could not parse response, got empty object");
}
return data;
}
catch (System.NotSupportedException exception)
if (data == null)
{
Console.WriteLine(response.Content);
throw exception;
System.Console.WriteLine(response.Content);
System.Console.WriteLine(response.ResponseUri);
System.Console.WriteLine("could not parse response, got empty object");
}
return data;
}
catch (System.NotSupportedException exception)
{
Console.WriteLine(response.Content);
throw exception;
}
catch (JsonException ex)
{

View File

@@ -9,7 +9,6 @@ public class YamlManager
var serializer = new SerializerBuilder().Build();
var yaml = serializer.Serialize(course);
// System.Console.WriteLine(yaml);
return yaml;
}
@@ -17,8 +16,8 @@ public class YamlManager
{
var deserializer = new DeserializerBuilder().Build();
var person = deserializer.Deserialize<LocalCourse>(rawCourse);
return person;
var course = deserializer.Deserialize<LocalCourse>(rawCourse);
return course;
}
public async Task SaveCourseAsync(LocalCourse course)
@@ -44,7 +43,9 @@ public class YamlManager
var fileNames = Directory.GetFiles(path);
var courses = await Task.WhenAll(
fileNames.Select(async n => ParseCourse(await File.ReadAllTextAsync($"../storage/{n}")))
fileNames
.Where(name => name.EndsWith(".yml"))
.Select(async n => ParseCourse(await File.ReadAllTextAsync($"../storage/{n}")))
);
return courses;
}