From ed1963c67b360c28fc47efb48eb51701b8b88d30 Mon Sep 17 00:00:00 2001 From: Alex Mickelson Date: Sat, 15 Jul 2023 23:19:39 -0600 Subject: [PATCH] referencing courses directly from canvas --- .csharpierrc.json | 5 + .vscode/extensions.json | 3 +- .vscode/settings.json | 1 - .../Features/ConfigurationTests.cs | 2 +- Management.Test/Features/ModuleTests.cs | 72 +++++------ Management.Web/Pages/Calendar.razor | 2 +- Management.Web/Pages/Counter.razor | 18 --- Management.Web/Pages/Drag.razor | 43 ------- Management.Web/Pages/Index.razor | 115 +++++++++++++----- Management.Web/Program.cs | 6 +- .../Module/Assignment/AssignmentCard.razor | 2 +- .../Module/Assignment/NewAssignment.razor | 6 +- .../Shared/Module/ModuleDetail.razor | 4 +- Management.Web/Shared/Module/Modules.razor | 21 +--- Management.Web/Shared/Module/NewModule.razor | 4 +- Management.Web/Shared/Semester/Day.razor | 1 + Management.Web/Shared/Spinner.razor | 4 + Management.Web/Shared/Spinner.razor.css | 56 +++++++++ Management.Web/Utils/StorageManagement.cs | 72 +++++++++++ ...igrationManagement.cs => CoursePlanner.cs} | 9 +- .../Configuration/IConfigurationManagement.cs | 8 -- Management/Features/Modules/IModuleManager.cs | 6 - Management/Features/Modules/ModuleManager.cs | 22 ---- Management/Models/LocalAssignment.cs | 46 ++++--- Management/Services/CanvasService.cs | 68 +++++++---- Management/Services/WebRequestor.cs | 11 +- requests/semester.http | 12 +- 27 files changed, 370 insertions(+), 249 deletions(-) create mode 100644 .csharpierrc.json delete mode 100644 Management.Web/Pages/Counter.razor delete mode 100644 Management.Web/Pages/Drag.razor create mode 100644 Management.Web/Shared/Spinner.razor create mode 100644 Management.Web/Shared/Spinner.razor.css create mode 100644 Management.Web/Utils/StorageManagement.cs rename Management/Features/Configuration/{ConfigrationManagement.cs => CoursePlanner.cs} (67%) delete mode 100644 Management/Features/Configuration/IConfigurationManagement.cs delete mode 100644 Management/Features/Modules/IModuleManager.cs delete mode 100644 Management/Features/Modules/ModuleManager.cs diff --git a/.csharpierrc.json b/.csharpierrc.json new file mode 100644 index 0000000..321cc8b --- /dev/null +++ b/.csharpierrc.json @@ -0,0 +1,5 @@ +{ + "printWidth": 100, + "useTabs": false, + "tabWidth": 2 +} \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json index aba32f6..c29d353 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,5 +1,6 @@ { "recommendations": [ - "alexkrechik.cucumberautocomplete" + "alexkrechik.cucumberautocomplete", + "csharpier.csharpier-vscode" ] } \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 5c9dc78..5bc9f86 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,5 @@ { "cucumberautocomplete.steps": [ "./Management.Gherkin/**/*.cs" - ] } \ No newline at end of file diff --git a/Management.Test/Features/ConfigurationTests.cs b/Management.Test/Features/ConfigurationTests.cs index c19ba80..2a78ab9 100644 --- a/Management.Test/Features/ConfigurationTests.cs +++ b/Management.Test/Features/ConfigurationTests.cs @@ -14,7 +14,7 @@ public class ConfigurationTests EndAt: endAt ); var daysOfWeek = new DayOfWeek[] { DayOfWeek.Monday }; - var management = new ConfigurationManagement(); + var management = new CoursePlanner(); management.SetConfiguration(canvasTerm, daysOfWeek); var config = management.SemesterCalendar; diff --git a/Management.Test/Features/ModuleTests.cs b/Management.Test/Features/ModuleTests.cs index 6785c80..8991d9e 100644 --- a/Management.Test/Features/ModuleTests.cs +++ b/Management.Test/Features/ModuleTests.cs @@ -1,40 +1,40 @@ -public class ModuleTests -{ - [Test] - public void CanAddModule() - { - var manager = new ModuleManager(); - var module = new CourseModule("First Module", new LocalAssignment[] { }); - manager.AddModule(module); +// public class ModuleTests +// { +// [Test] +// public void CanAddModule() +// { +// var manager = new ModuleManager(); +// var module = new CourseModule("First Module", new LocalAssignment[] { }); +// manager.AddModule(module); - manager.Modules.Count().Should().Be(1); - manager.Modules.First().Should().Be(module); - } +// manager.Modules.Count().Should().Be(1); +// manager.Modules.First().Should().Be(module); +// } - [Test] - public void CanAddAssignmentToCorrectModule() - { - var manager = new ModuleManager(); - manager.AddModule(new CourseModule("First Module", new LocalAssignment[] { })); - manager.AddModule(new CourseModule("Second Module", new LocalAssignment[] { })); - manager.AddModule(new CourseModule("Third Module", new LocalAssignment[] { })); - manager.AddModule(new CourseModule("Fourth Module", new LocalAssignment[] { })); +// [Test] +// public void CanAddAssignmentToCorrectModule() +// { +// var manager = new ModuleManager(); +// manager.AddModule(new CourseModule("First Module", new LocalAssignment[] { })); +// manager.AddModule(new CourseModule("Second Module", new LocalAssignment[] { })); +// manager.AddModule(new CourseModule("Third Module", new LocalAssignment[] { })); +// manager.AddModule(new CourseModule("Fourth Module", new LocalAssignment[] { })); - var assignment = new LocalAssignment - { - name = "testname", - description = "testDescription", - published = false, - lock_at_due_date = true, - rubric = new RubricItem[] { }, - lock_at = null, - due_at = DateTime.Now, - points_possible = 10, - submission_types = new SubmissionType[] { SubmissionType.online_text_entry } - }; +// var assignment = new LocalAssignment +// { +// name = "testname", +// description = "testDescription", +// published = false, +// lock_at_due_date = true, +// rubric = new RubricItem[] { }, +// lock_at = null, +// due_at = DateTime.Now, +// points_possible = 10, +// submission_types = new SubmissionType[] { SubmissionType.online_text_entry } +// }; - manager.AddAssignment(3, assignment); - manager.Modules.Count().Should().Be(4); - manager.Modules.ElementAt(3).Assignments.Count().Should().Be(1); - } -} \ No newline at end of file +// manager.AddAssignment(3, assignment); +// manager.Modules.Count().Should().Be(4); +// manager.Modules.ElementAt(3).Assignments.Count().Should().Be(1); +// } +// } \ No newline at end of file diff --git a/Management.Web/Pages/Calendar.razor b/Management.Web/Pages/Calendar.razor index 9f8e2e9..9d0c47c 100644 --- a/Management.Web/Pages/Calendar.razor +++ b/Management.Web/Pages/Calendar.razor @@ -3,7 +3,7 @@ @using Management.Web.Shared.Module @using Management.Web.Shared.Semester -@inject IConfigurationManagement configurationManagement +@inject CoursePlanner configurationManagement @code { diff --git a/Management.Web/Pages/Counter.razor b/Management.Web/Pages/Counter.razor deleted file mode 100644 index b21f052..0000000 --- a/Management.Web/Pages/Counter.razor +++ /dev/null @@ -1,18 +0,0 @@ -@page "/counter" - -Counter - -

Counter

- -

Current count: @currentCount

- - - -@code { - private int currentCount = 0; - - private void IncrementCount() - { - currentCount++; - } -} diff --git a/Management.Web/Pages/Drag.razor b/Management.Web/Pages/Drag.razor deleted file mode 100644 index 41da2a5..0000000 --- a/Management.Web/Pages/Drag.razor +++ /dev/null @@ -1,43 +0,0 @@ -@page "/drag" -@inject IJSRuntime JSRuntime - -@code { - private string dragClass = "bg-light"; - - void OnDragStart() - { - Console.WriteLine("on drag start"); - } - - async Task OnDrop() - { - Console.WriteLine("on drop"); - dragClass="bg-light"; - } - - async Task OnDragEnter() { - dragClass="bg-dark"; - } - async Task OnDragLeave() { - dragClass="bg-light"; - } -} - -
- Drag me! -
- -
- Drop here! -
diff --git a/Management.Web/Pages/Index.razor b/Management.Web/Pages/Index.razor index f939ca7..294e915 100644 --- a/Management.Web/Pages/Index.razor +++ b/Management.Web/Pages/Index.razor @@ -1,23 +1,42 @@ @page "/" @using CanvasModel.EnrollmentTerms @using Management.Web.Shared.Semester +@using CanvasModel.Courses @using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage -@inject ICanvasService canvasService -@inject IConfigurationManagement configurationManagement +@inject CanvasService canvasService +@inject CoursePlanner configurationManagement @inject ProtectedLocalStorage BrowserStorage - - @code { private string semesterConfigurationKey = "semesterCalendarConfiguration"; private IEnumerable? terms { get; set; } = null; - private ulong? selectedTermId { get; set; } + private bool loadingCourses = false; + private IEnumerable? courses {get; set;} = null; + + private ulong? _selectedTermId { get; set; } + private ulong? selectedTermId { + get => _selectedTermId; + set + { + _selectedTermId = value; + updateCourses(); + } + } private EnrollmentTermModel? selectedTerm { get => terms?.FirstOrDefault(t => t.Id == selectedTermId); } + + private ulong? selectedCourseId { + get => configurationManagement.Course?.Id; + set + { + configurationManagement.Course = courses?.First(c => c.Id == value); + } + } + private List days { get; set; } = new(); private bool saved { get; set; } = false; @@ -33,16 +52,35 @@ if(firstRender) { var storedConfiguration = await BrowserStorage.GetAsync(semesterConfigurationKey); - if (storedConfiguration.Success) { + if (storedConfiguration.Success) + { Console.WriteLine(JsonSerializer.Serialize(storedConfiguration.Value)); configurationManagement.SemesterCalendar = storedConfiguration.Value; - } else { + } + else + { Console.WriteLine("no stored configuration"); } StateHasChanged(); } } + private async Task updateCourses() + { + if(selectedTermId != null) + { + loadingCourses = true; + + courses = await canvasService.GetCourses((ulong)selectedTermId); + System.Console.WriteLine(courses); + System.Console.WriteLine(selectedTermId); + loadingCourses = false; + } + else + courses = null; + + StateHasChanged(); + } private void readTermFromConfig() { if (terms == null || configurationManagement.SemesterCalendar == null) return; @@ -83,42 +121,59 @@ @if (terms != null) {
-
- -
+
- +
} @if (selectedTerm is not null) { -
Select Days Of Week
+
Select Days Of Week
@foreach (DayOfWeek day in (DayOfWeek[])Enum.GetValues(typeof(DayOfWeek))) - { -
- -
- } + { +
+ +
+ } + @if(loadingCourses) + { + + }
+ + @if(courses != null) + { +
+
+ + +
+
+ } +
diff --git a/Management.Web/Shared/Module/NewModule.razor b/Management.Web/Shared/Module/NewModule.razor index 2d7555d..86ca6e0 100644 --- a/Management.Web/Shared/Module/NewModule.razor +++ b/Management.Web/Shared/Module/NewModule.razor @@ -1,4 +1,4 @@ -@inject IModuleManager moduleManager +@inject CoursePlanner configurationManagement @code { @@ -12,7 +12,7 @@ private async Task submitHandler() { var module = new CourseModule(Name: Name, Assignments: new LocalAssignment[] { }); - moduleManager.AddModule(module); + configurationManagement.Modules = configurationManagement.Modules.Append(module); Name = ""; await OnSubmit.InvokeAsync(); } diff --git a/Management.Web/Shared/Semester/Day.razor b/Management.Web/Shared/Semester/Day.razor index cf5aca8..d9f0e22 100644 --- a/Management.Web/Shared/Semester/Day.razor +++ b/Management.Web/Shared/Semester/Day.razor @@ -1,4 +1,5 @@ @inject AssignmentDragContainer dragContainer +@inject CoursePlanner configurationManagement @code { diff --git a/Management.Web/Shared/Spinner.razor b/Management.Web/Shared/Spinner.razor new file mode 100644 index 0000000..93cdbd2 --- /dev/null +++ b/Management.Web/Shared/Spinner.razor @@ -0,0 +1,4 @@ + +
+ +
\ No newline at end of file diff --git a/Management.Web/Shared/Spinner.razor.css b/Management.Web/Shared/Spinner.razor.css new file mode 100644 index 0000000..c0d6049 --- /dev/null +++ b/Management.Web/Shared/Spinner.razor.css @@ -0,0 +1,56 @@ +.loader { + width: 48px; + height: 48px; + border-radius: 50%; + display: inline-block; + position: relative; + border: 3px solid; + border-color: #6c757d #6c757d transparent transparent; + box-sizing: border-box; + animation: rotation 2s linear infinite; +} +.loader::after, +.loader::before { + content: ''; + box-sizing: border-box; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + margin: auto; + border: 3px solid; + border-color: transparent transparent #092565 #092565; + width: 40px; + height: 40px; + border-radius: 50%; + box-sizing: border-box; + animation: rotationBack 1s linear infinite; + transform-origin: center center; +} +/* #092565 */ +/* #3a0647 */ +.loader::before { + width: 32px; + height: 32px; + border-color: #6c757d #6c757d transparent transparent; + animation: rotation 3s linear infinite; +} + +@keyframes rotation { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +@keyframes rotationBack { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(-360deg); + } +} + \ No newline at end of file diff --git a/Management.Web/Utils/StorageManagement.cs b/Management.Web/Utils/StorageManagement.cs new file mode 100644 index 0000000..30fd8cc --- /dev/null +++ b/Management.Web/Utils/StorageManagement.cs @@ -0,0 +1,72 @@ +using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage; + +public class StorageManagement +{ + private string moduleStorageKey = "module storage key"; + private string assignmentStorageKey = "assignment storage key"; + private string courseIdKey = "course id storage key"; + + private CoursePlanner planner { get; } + private ProtectedLocalStorage storage { get; } + private CanvasService canvas { get; } + + public StorageManagement( + CoursePlanner configurationManagement, + ProtectedLocalStorage BrowserStorage, + CanvasService canvasService + ) + { + planner = configurationManagement; + storage = BrowserStorage; + canvas = canvasService; + } + + public async Task LoadStoredConfig() + { + // var storedModules = await storage.GetAsync>(moduleStorageKey); + // if (storedModules.Success) + // { + // planner.Modules = + // storedModules.Value + // ?? throw new Exception("stored modules was null, it shouldn't have been"); + // } + // else + // { + // Console.WriteLine("no stored modules"); + // } + + // var storedAssignments = await storage.GetAsync>(assignmentStorageKey); + // if (storedAssignments.Success) + // { + // planner.Modules = + // storedAssignments.Value + // ?? throw new Exception("stored assignments are null, it shouldn't have been"); + // } + // else + // { + // Console.WriteLine("no stored assignments"); + // } + + var storedCourseId = await storage.GetAsync(courseIdKey); + if (storedCourseId.Success) + { + // var courses = + planner.Course = await canvas.GetCourse(storedCourseId.Value); + } + else + { + Console.WriteLine("no stored assignments"); + } + } + + public async Task Save() + { + // await storage.SetAsync(moduleStorageKey, planner.Modules); + // await storage.SetAsync(assignmentStorageKey, planner.Assignments); + + if (planner.Course != null) + await storage.SetAsync(courseIdKey, planner.Course.Id); + else + await storage.DeleteAsync(courseIdKey); + } +} diff --git a/Management/Features/Configuration/ConfigrationManagement.cs b/Management/Features/Configuration/CoursePlanner.cs similarity index 67% rename from Management/Features/Configuration/ConfigrationManagement.cs rename to Management/Features/Configuration/CoursePlanner.cs index f7b1acc..82a062d 100644 --- a/Management/Features/Configuration/ConfigrationManagement.cs +++ b/Management/Features/Configuration/CoursePlanner.cs @@ -1,6 +1,7 @@ using CanvasModel.EnrollmentTerms; +using CanvasModel.Courses; -public class ConfigurationManagement : IConfigurationManagement +public class CoursePlanner { public void SetConfiguration( EnrollmentTermModel canvasTerm, @@ -18,8 +19,8 @@ public class ConfigurationManagement : IConfigurationManagement } public SemesterCalendarConfig? SemesterCalendar { get; set; } = null; - public IModuleManager ModuleManager {get; private set;} = new ModuleManager(); - - + public IEnumerable Modules { get; set; } = new CourseModule[] { }; + public IEnumerable Assignments { get; set; } = new LocalAssignment[] { }; + public CourseModel? Course { get; set; } = null; } \ No newline at end of file diff --git a/Management/Features/Configuration/IConfigurationManagement.cs b/Management/Features/Configuration/IConfigurationManagement.cs deleted file mode 100644 index fd1ce17..0000000 --- a/Management/Features/Configuration/IConfigurationManagement.cs +++ /dev/null @@ -1,8 +0,0 @@ -using CanvasModel.EnrollmentTerms; - -public interface IConfigurationManagement -{ - SemesterCalendarConfig? SemesterCalendar { get; set; } - - void SetConfiguration(EnrollmentTermModel canvasTerm, DayOfWeek[] daysOfWeek); -} diff --git a/Management/Features/Modules/IModuleManager.cs b/Management/Features/Modules/IModuleManager.cs deleted file mode 100644 index ba2458b..0000000 --- a/Management/Features/Modules/IModuleManager.cs +++ /dev/null @@ -1,6 +0,0 @@ -public interface IModuleManager -{ - IEnumerable Modules { get; set; } - public void AddModule(CourseModule newModule); - public void AddAssignment(int moduleIndex, LocalAssignment assignment); -} diff --git a/Management/Features/Modules/ModuleManager.cs b/Management/Features/Modules/ModuleManager.cs deleted file mode 100644 index c613f83..0000000 --- a/Management/Features/Modules/ModuleManager.cs +++ /dev/null @@ -1,22 +0,0 @@ -public class ModuleManager : IModuleManager -{ - public IEnumerable Modules { get; set; } = new CourseModule[] { }; - - public void AddAssignment(int moduleIndex, LocalAssignment assignment) - { - var newAssignments = Modules.ElementAt(moduleIndex).Assignments.Append(assignment); - var newModule = Modules.ElementAt(moduleIndex) with { Assignments = newAssignments }; - if (newModule == null) - throw new Exception($"cannot get module at index {moduleIndex}"); - - Modules = Modules - .Take(moduleIndex) - .Append(newModule) - .Concat(Modules.Skip(moduleIndex + 1)); - } - - public void AddModule(CourseModule newModule) - { - Modules = Modules.Append(newModule); - } -} \ No newline at end of file diff --git a/Management/Models/LocalAssignment.cs b/Management/Models/LocalAssignment.cs index 816c07b..2b55b90 100644 --- a/Management/Models/LocalAssignment.cs +++ b/Management/Models/LocalAssignment.cs @@ -1,31 +1,29 @@ -public record RubricItem( - int Points, - string Label -); +public record RubricItem(int Points, string Label); public enum SubmissionType { - online_quiz, - none, - on_paper, - discussion_topic, - external_tool, - online_upload, - online_text_entry, - online_url, - media_recording, - student_annotation, + online_quiz, + none, + on_paper, + discussion_topic, + external_tool, + online_upload, + online_text_entry, + online_url, + media_recording, + student_annotation, } public record LocalAssignment { - public string name { get; init; } = ""; - public string description { get; init; } = ""; - public bool published { get; init; } - public bool lock_at_due_date { get; init; } - public IEnumerable rubric { get; init; } = new RubricItem[] { }; - public DateTime? lock_at { get; init; } - public DateTime due_at { get; init; } - public int points_possible { get; init; } - public IEnumerable submission_types { get; init; } = new SubmissionType[] { }; -} \ No newline at end of file + public string id { get; init; } = ""; + public string name { get; init; } = ""; + public string description { get; init; } = ""; + public bool published { get; init; } + public bool lock_at_due_date { get; init; } + public IEnumerable rubric { get; init; } = new RubricItem[] { }; + public DateTime? lock_at { get; init; } + public DateTime due_at { get; init; } + public int points_possible { get; init; } + public IEnumerable submission_types { get; init; } = new SubmissionType[] { }; +} diff --git a/Management/Services/CanvasService.cs b/Management/Services/CanvasService.cs index 8bb8e1e..8b17d16 100644 --- a/Management/Services/CanvasService.cs +++ b/Management/Services/CanvasService.cs @@ -13,6 +13,7 @@ public class CanvasService : ICanvasService private const string BaseUrl = "https://snow.instructure.com/api/v1/"; private readonly IWebRequestor webRequestor; private string courseid { get; } + public CanvasService(IWebRequestor webRequestor) { courseid = "774898"; @@ -25,20 +26,40 @@ public class CanvasService : ICanvasService var request = new RestRequest(url); var termResponses = await PaginatedRequest(request); - var terms = termResponses - .Select(r => r.EnrollmentTerms) - .SelectMany(s => s).ToArray(); + var terms = termResponses.Select(r => r.EnrollmentTerms).SelectMany(s => s).ToArray(); return terms; } + public async Task> GetCourses(ulong termId) + { + var url = $"courses"; + var request = new RestRequest(url); + var coursesResponse = await PaginatedRequest>(request); + return coursesResponse.SelectMany(c => c).Where(c => c.EnrollmentTermId == termId).ToArray(); + } + + public async Task GetCourse(ulong courseId) + { + var url = $"course/${courseId}"; + var request = new RestRequest(url); + var response = await webRequestor.GetAsync(request); + + if (response.Data == null) + { + System.Console.WriteLine(response.Content); + System.Console.WriteLine(response.ResponseUri); + throw new Exception("error getting course from canvas"); + } + return response.Data; + } + private async Task> PaginatedRequest(RestRequest request) { var requestCount = 1; request.AddQueryParameter("per_page", "100"); RestResponse response = await webRequestor.GetAsync(request); - var returnData = response.Data != null - ? new T[] { response.Data } - : new T[] { }; + + var returnData = response.Data != null ? new T[] { response.Data } : new T[] { }; var nextUrl = getNextUrl(response.Headers); while (nextUrl is not null) @@ -56,34 +77,33 @@ public class CanvasService : ICanvasService return returnData; } - - private static string? getNextUrl(IEnumerable? headers) => headers? - .ToList() - .Find(h => h.Name == "Link")? - .Value? - .ToString()? - .Split(",") + private static string? getNextUrl(IEnumerable? headers) => + headers + ?.ToList() + .Find(h => h.Name == "Link") + ?.Value?.ToString() + ?.Split(",") .Where(url => url.Contains("rel=\"next\"")) - .FirstOrDefault()? - .Split(";") - .FirstOrDefault()? - .TrimEnd('>') + .FirstOrDefault() + ?.Split(";") + .FirstOrDefault() + ?.TrimEnd('>') .TrimStart('<') .Replace(" ", "") .Replace(BaseUrl, ""); - public async Task> GetCurrentTermsFor(DateTime? _queryDate = null) + public async Task> GetCurrentTermsFor( + DateTime? _queryDate = null + ) { DateTime queryDate = _queryDate ?? DateTime.Now; var terms = await GetTerms(); - var currentTerms = terms.Where(t => - t.EndAt != null - && t.EndAt > queryDate - && t.EndAt < queryDate.AddYears(1) - ).Take(3); + var currentTerms = terms + .Where(t => t.EndAt != null && t.EndAt > queryDate && t.EndAt < queryDate.AddYears(1)) + .Take(3); return currentTerms; } -} \ No newline at end of file +} diff --git a/Management/Services/WebRequestor.cs b/Management/Services/WebRequestor.cs index 7d2d344..b354094 100644 --- a/Management/Services/WebRequestor.cs +++ b/Management/Services/WebRequestor.cs @@ -5,21 +5,24 @@ public class WebRequestor : IWebRequestor private const string BaseUrl = "https://snow.instructure.com/api/v1/"; private string token; private RestClient client; - private string courseid { get; } + public WebRequestor() { - token = Environment.GetEnvironmentVariable("CANVAS_TOKEN") ?? throw new Exception("CANVAS_TOKEN not in environment"); + token = + Environment.GetEnvironmentVariable("CANVAS_TOKEN") + ?? throw new Exception("CANVAS_TOKEN not in environment"); client = new RestClient(BaseUrl); client.AddDefaultHeader("Authorization", $"Bearer {token}"); - courseid = "774898"; } + public async Task> GetManyAsync(RestRequest request) { return await client.ExecuteGetAsync(request); } + public async Task> GetAsync(RestRequest request) { return await client.ExecuteGetAsync(request); } -} \ No newline at end of file +} diff --git a/requests/semester.http b/requests/semester.http index 0b041cb..873609b 100644 --- a/requests/semester.http +++ b/requests/semester.http @@ -4,6 +4,16 @@ GET https://snow.instructure.com/api/v1/account_calendars Authorization: Bearer {{$dotenv CANVAS_TOKEN}} ### -GET https://snow.instructure.com/api/v1/accounts/10/terms +GET https://snow.instructure.com/api/v1/accounts/10/terms?per_page=100 Authorization: Bearer {{$dotenv CANVAS_TOKEN}} +### + +GET https://snow.instructure.com/api/v1/courses?enrollment_term_id=751 +Authorization: Bearer {{$dotenv CANVAS_TOKEN}} + + +### + +GET https://snow.instructure.com/api/v1/courses?enrollment_term_id=751&per_page=100 +Authorization: Bearer {{$dotenv CANVAS_TOKEN}} \ No newline at end of file