working on canvas sync

This commit is contained in:
2023-07-31 12:18:10 -06:00
parent 2cca727b4d
commit 1511763f14
6 changed files with 92 additions and 24 deletions

View File

@@ -0,0 +1,9 @@
public record CanvasAssignmentCreationRequest
{
public string? name { get; set; }
public IEnumerable<string> submission_types { get; set; } = Enumerable.Empty<string>();
public string? description { get; set; }
public DateTime? lock_at { get; set; }
public DateTime? due_at { get; set; }
public int? points_possible { get; set; }
}

View File

@@ -56,18 +56,42 @@ public class CanvasService : ICanvasService
public async Task<IEnumerable<CanvasAssignment>> GetAssignments(ulong courseId)
{
var url = $"courses/{courseId}/assignments ";
var url = $"courses/{courseId}/assignments";
var request = new RestRequest(url);
var assignmentResponse = await PaginatedRequest<IEnumerable<CanvasAssignment>>(request);
return assignmentResponse.SelectMany(c => c);
}
// public async Task<CanvasAssignment> CreateAssignment(
// )
// {
// }
public async Task<CanvasAssignment> CreateAssignment(
ulong courseId,
string name,
IEnumerable<SubmissionType> submissionTypes,
string? description,
DateTime? dueAt,
DateTime? lockAt,
int? pointsPossible
)
{
System.Console.WriteLine($"creating assignment: {name}");
var url = $"courses/{courseId}/assignments";
var request = new RestRequest(url);
var body = new CanvasAssignmentCreationRequest()
{
name = name,
submission_types = submissionTypes.Select(t => t.ToString()),
description = description,
due_at = dueAt,
lock_at = lockAt,
points_possible = pointsPossible
};
request.AddHeader("Content-Type", "application/json");
var bodyObj = new { assignment = body };
request.AddBody(bodyObj);
var (canvasAssignment, response) = await webRequestor.PostAsync<CanvasAssignment>(request);
if (canvasAssignment == null)
throw new Exception("created canvas assignment was null");
return canvasAssignment;
}
public async Task<IEnumerable<CanvasModule>> GetModules(ulong courseId)
{

View File

@@ -15,7 +15,6 @@ public class WebRequestor : IWebRequestor
client.AddDefaultHeader("Authorization", $"Bearer {token}");
}
public async Task<(T[]?, RestResponse)> GetManyAsync<T>(RestRequest request)
{
var response = await client.ExecuteGetAsync(request);
@@ -55,19 +54,29 @@ public class WebRequestor : IWebRequestor
System.Console.WriteLine(response.ResponseUri);
System.Console.WriteLine(response.ErrorMessage);
System.Console.WriteLine("error with response");
throw new Exception("error with response");
// Console.WriteLine(JsonSerializer.Serialize(response));
Console.WriteLine(JsonSerializer.Serialize(response.Request?.Parameters));
throw new Exception($"error with response to {response.ResponseUri} {response.StatusCode}");
}
try
{
var data = JsonSerializer.Deserialize<T>(response.Content!);
if (data == null)
try
{
System.Console.WriteLine(response.Content);
System.Console.WriteLine(response.ResponseUri);
System.Console.WriteLine("could not parse response, got empty object");
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)
{
Console.WriteLine(response.Content);
throw exception;
}
return data;
}
catch (JsonException ex)
{