mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
working on canvas sync
This commit is contained in:
@@ -123,18 +123,39 @@ public class CoursePlanner
|
|||||||
});
|
});
|
||||||
|
|
||||||
var modules = await Task.WhenAll(moduleTasks);
|
var modules = await Task.WhenAll(moduleTasks);
|
||||||
LocalCourse = LocalCourse with
|
LocalCourse = LocalCourse with { Modules = modules };
|
||||||
{
|
|
||||||
Modules = modules
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<LocalAssignment> ensureAssignmentInCanvas_returnUpdated(
|
private async Task<LocalAssignment> ensureAssignmentInCanvas_returnUpdated(
|
||||||
LocalAssignment localAssignment
|
LocalAssignment localAssignment
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// var canvasAssignment = await canvas.
|
if (
|
||||||
return localAssignment;
|
LocalCourse == null
|
||||||
|
|| LocalCourse.CanvasId == null
|
||||||
|
|| CanvasAssignments == null
|
||||||
|
|| CanvasModules == null
|
||||||
|
)
|
||||||
|
throw new Exception(
|
||||||
|
"cannot create canvas assignment if local course is null or other values not set"
|
||||||
|
);
|
||||||
|
ulong canvasId = LocalCourse.CanvasId ?? throw new Exception("no canvas id to create course");
|
||||||
|
var canvasAssignment = await canvas.CreateAssignment(
|
||||||
|
courseId: canvasId,
|
||||||
|
name: localAssignment.name,
|
||||||
|
submissionTypes: localAssignment.submission_types,
|
||||||
|
description: localAssignment.description,
|
||||||
|
dueAt: localAssignment.due_at,
|
||||||
|
lockAt: localAssignment.lock_at,
|
||||||
|
pointsPossible: localAssignment.points_possible
|
||||||
|
);
|
||||||
|
|
||||||
|
Console.WriteLine(JsonSerializer.Serialize(canvasAssignment));
|
||||||
|
|
||||||
|
return localAssignment with
|
||||||
|
{
|
||||||
|
canvasId = canvasAssignment.Id
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Clear()
|
public void Clear()
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ namespace CanvasModel.Assignments;
|
|||||||
|
|
||||||
public record CanvasAssignment
|
public record CanvasAssignment
|
||||||
(
|
(
|
||||||
|
|
||||||
[property: JsonPropertyName("id")]
|
[property: JsonPropertyName("id")]
|
||||||
ulong Id,
|
ulong Id,
|
||||||
|
|
||||||
|
|||||||
@@ -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; }
|
||||||
|
}
|
||||||
@@ -56,18 +56,42 @@ public class CanvasService : ICanvasService
|
|||||||
|
|
||||||
public async Task<IEnumerable<CanvasAssignment>> GetAssignments(ulong courseId)
|
public async Task<IEnumerable<CanvasAssignment>> GetAssignments(ulong courseId)
|
||||||
{
|
{
|
||||||
var url = $"courses/{courseId}/assignments ";
|
var url = $"courses/{courseId}/assignments";
|
||||||
var request = new RestRequest(url);
|
var request = new RestRequest(url);
|
||||||
var assignmentResponse = await PaginatedRequest<IEnumerable<CanvasAssignment>>(request);
|
var assignmentResponse = await PaginatedRequest<IEnumerable<CanvasAssignment>>(request);
|
||||||
return assignmentResponse.SelectMany(c => c);
|
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)
|
public async Task<IEnumerable<CanvasModule>> GetModules(ulong courseId)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ public class WebRequestor : IWebRequestor
|
|||||||
client.AddDefaultHeader("Authorization", $"Bearer {token}");
|
client.AddDefaultHeader("Authorization", $"Bearer {token}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public async Task<(T[]?, RestResponse)> GetManyAsync<T>(RestRequest request)
|
public async Task<(T[]?, RestResponse)> GetManyAsync<T>(RestRequest request)
|
||||||
{
|
{
|
||||||
var response = await client.ExecuteGetAsync(request);
|
var response = await client.ExecuteGetAsync(request);
|
||||||
@@ -55,8 +54,12 @@ public class WebRequestor : IWebRequestor
|
|||||||
System.Console.WriteLine(response.ResponseUri);
|
System.Console.WriteLine(response.ResponseUri);
|
||||||
System.Console.WriteLine(response.ErrorMessage);
|
System.Console.WriteLine(response.ErrorMessage);
|
||||||
System.Console.WriteLine("error with response");
|
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
|
||||||
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var data = JsonSerializer.Deserialize<T>(response.Content!);
|
var data = JsonSerializer.Deserialize<T>(response.Content!);
|
||||||
@@ -69,6 +72,12 @@ public class WebRequestor : IWebRequestor
|
|||||||
}
|
}
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
catch (System.NotSupportedException exception)
|
||||||
|
{
|
||||||
|
Console.WriteLine(response.Content);
|
||||||
|
throw exception;
|
||||||
|
}
|
||||||
|
}
|
||||||
catch (JsonException ex)
|
catch (JsonException ex)
|
||||||
{
|
{
|
||||||
System.Console.WriteLine(response.ResponseUri);
|
System.Console.WriteLine(response.ResponseUri);
|
||||||
|
|||||||
@@ -11,9 +11,15 @@ Authorization: Bearer {{$dotenv CANVAS_TOKEN}}
|
|||||||
|
|
||||||
###
|
###
|
||||||
POST https://snow.instructure.com/api/v1/courses/872095/assignments
|
POST https://snow.instructure.com/api/v1/courses/872095/assignments
|
||||||
|
Content-Type: application/json
|
||||||
Authorization: Bearer {{$dotenv CANVAS_TOKEN}}
|
Authorization: Bearer {{$dotenv CANVAS_TOKEN}}
|
||||||
|
|
||||||
{"assignment":{"name:":"New Assignment","description:":"This is a new assignment"}}
|
{
|
||||||
|
"assignment": {
|
||||||
|
"name:": "New Assignment",
|
||||||
|
"description:": "This is a new assignment"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
###
|
###
|
||||||
POST https://snow.instructure.com/api/v1/courses/705168/assignments
|
POST https://snow.instructure.com/api/v1/courses/705168/assignments
|
||||||
|
|||||||
Reference in New Issue
Block a user