commit pre-purge

This commit is contained in:
2023-01-04 20:26:15 -07:00
parent c28230691e
commit b9824a7327
16 changed files with 229 additions and 75 deletions

View File

@@ -1,4 +1,68 @@
using CanvasModel.Courses;
using CanvasModel.EnrollmentTerms;
using RestSharp;
public class CanvasService
{
private const string BaseUrl = "https://snow.instructure.com/api/v1/";
private readonly IWebRequestor webRequestor;
private RestClient client;
private string courseid { get; }
public CanvasService(IWebRequestor webRequestor)
{
courseid = "774898";
this.webRequestor = webRequestor;
}
public async Task<IEnumerable<EnrollmentTermModel>> GetTerms()
{
var url = $"accounts/10/terms";
var request = new RestRequest(url);
var terms = await PaginatedRequest<EnrollmentTermModel>(request);
return terms;
}
private async Task<IEnumerable<T>> PaginatedRequest<T>(RestRequest request)
{
var requestCount = 1;
request.AddQueryParameter("per_page", "100");
IEnumerable<T> returnData = new T[] { };
RestResponse<T[]> response = await webRequestor.GetAsync<T>(request);
returnData = returnData.Concat(response.Data);
var nextUrl = getNextUrl(response);
while (nextUrl is not null)
{
requestCount += 1;
var nextRequest = new RestRequest(nextUrl);
var nextResponse = await webRequestor.GetAsync<T>(nextRequest);
if (nextResponse.Data is not null)
returnData = returnData.Concat(nextResponse.Data);
nextUrl = getNextUrl(nextResponse);
}
System.Console.WriteLine($"Requesting {typeof(T)} took {requestCount} requests");
return returnData;
}
private static string? getNextUrl<T>(RestResponse<T[]> response) => response.Headers?
.ToList()
.Find(h => h.Name == "Link")?
.Value?
.ToString()?
.Split(",")
.Where(url => url.Contains("rel=\"next\""))
.FirstOrDefault()?
.Split(";")
.FirstOrDefault()?
.TrimEnd('>')
.TrimStart('<')
.Replace(" ", "")
.Replace(BaseUrl, "");
}

View File

@@ -0,0 +1,7 @@
using RestSharp;
public interface IWebRequestor
{
Task<RestResponse<T[]>> GetManyAsync<T>(RestRequest request);
Task<RestResponse<T>> GetAsync<T>(RestRequest request);
}

View File

@@ -0,0 +1,26 @@
using RestSharp;
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(RestClient client)
{
// token = Environment.GetEnvironmentVariable("CANVAS_TOKEN");
// client = new RestClient(BaseUrl);
// client.AddDefaultHeader("Authorization", $"Bearer {token}");
this.client = client;
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);
}
}