mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-26 07:38:33 -06:00
i liked syncing more before i cared about order
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user