mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-26 07:38:33 -06:00
referencing courses directly from canvas
This commit is contained in:
@@ -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<RedundantEnrollmentTermsResponse>(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<IEnumerable<CourseModel>> GetCourses(ulong termId)
|
||||
{
|
||||
var url = $"courses";
|
||||
var request = new RestRequest(url);
|
||||
var coursesResponse = await PaginatedRequest<IEnumerable<CourseModel>>(request);
|
||||
return coursesResponse.SelectMany(c => c).Where(c => c.EnrollmentTermId == termId).ToArray();
|
||||
}
|
||||
|
||||
public async Task<CourseModel> GetCourse(ulong courseId)
|
||||
{
|
||||
var url = $"course/${courseId}";
|
||||
var request = new RestRequest(url);
|
||||
var response = await webRequestor.GetAsync<CourseModel>(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<IEnumerable<T>> PaginatedRequest<T>(RestRequest request)
|
||||
{
|
||||
var requestCount = 1;
|
||||
request.AddQueryParameter("per_page", "100");
|
||||
RestResponse<T> response = await webRequestor.GetAsync<T>(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<HeaderParameter>? headers) => headers?
|
||||
.ToList()
|
||||
.Find(h => h.Name == "Link")?
|
||||
.Value?
|
||||
.ToString()?
|
||||
.Split(",")
|
||||
private static string? getNextUrl(IEnumerable<HeaderParameter>? 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<IEnumerable<EnrollmentTermModel>> GetCurrentTermsFor(DateTime? _queryDate = null)
|
||||
public async Task<IEnumerable<EnrollmentTermModel>> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<RestResponse<T[]>> GetManyAsync<T>(RestRequest request)
|
||||
{
|
||||
return await client.ExecuteGetAsync<T[]>(request);
|
||||
}
|
||||
|
||||
public async Task<RestResponse<T>> GetAsync<T>(RestRequest request)
|
||||
{
|
||||
return await client.ExecuteGetAsync<T>(request);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user