diff --git a/Epsilon.Abstractions/Component/CompetenceComponentFetcher.cs b/Epsilon.Abstractions/Component/CompetenceComponentFetcher.cs index 0ee2a961..f8912077 100644 --- a/Epsilon.Abstractions/Component/CompetenceComponentFetcher.cs +++ b/Epsilon.Abstractions/Component/CompetenceComponentFetcher.cs @@ -2,7 +2,7 @@ namespace Epsilon.Abstractions.Component; public abstract class CompetenceComponentFetcher : ICompetenceComponentFetcher where TComponent : ICompetenceComponent { - public async Task FetchUnknown(DateTime startDate, DateTime endDate) => await Fetch(startDate, endDate); + public async Task FetchUnknown(string componentName, DateTime startDate, DateTime endDate) => await Fetch(componentName,startDate, endDate); - public abstract Task Fetch(DateTime startDate, DateTime endDate); + public abstract Task Fetch(string componentName, DateTime startDate, DateTime endDate); } \ No newline at end of file diff --git a/Epsilon.Abstractions/Component/CompetenceProfile.cs b/Epsilon.Abstractions/Component/CompetenceProfile.cs index a46d8379..696d5676 100644 --- a/Epsilon.Abstractions/Component/CompetenceProfile.cs +++ b/Epsilon.Abstractions/Component/CompetenceProfile.cs @@ -1,7 +1,6 @@ using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing; using Epsilon.Abstractions.Model; -using Epsilon.Canvas.Abstractions.Model; namespace Epsilon.Abstractions.Component; diff --git a/Epsilon.Abstractions/Component/ICompetenceComponentFetcher.cs b/Epsilon.Abstractions/Component/ICompetenceComponentFetcher.cs index dde1871c..185c1c20 100644 --- a/Epsilon.Abstractions/Component/ICompetenceComponentFetcher.cs +++ b/Epsilon.Abstractions/Component/ICompetenceComponentFetcher.cs @@ -2,11 +2,11 @@ public interface ICompetenceComponentFetcher { - public Task FetchUnknown(DateTime startDate, DateTime endDate); + public Task FetchUnknown(string componentName, DateTime startDate, DateTime endDate); } public interface ICompetenceComponentFetcher : ICompetenceComponentFetcher where TComponent : ICompetenceComponent { - public Task Fetch(DateTime startDate, DateTime endDate); + public Task Fetch(string componentName, DateTime startDate, DateTime endDate); } \ No newline at end of file diff --git a/Epsilon.Abstractions/Component/PersonaPage.cs b/Epsilon.Abstractions/Component/Page.cs similarity index 61% rename from Epsilon.Abstractions/Component/PersonaPage.cs rename to Epsilon.Abstractions/Component/Page.cs index 8c2d6c2b..14e2b728 100644 --- a/Epsilon.Abstractions/Component/PersonaPage.cs +++ b/Epsilon.Abstractions/Component/Page.cs @@ -4,15 +4,15 @@ namespace Epsilon.Abstractions.Component; -public record PersonaPage(string PersonaHtml) : IWordCompetenceComponent +public record Page(string Html) : IWordCompetenceComponent { public void AddToWordDocument(MainDocumentPart mainDocumentPart) { - var personaHtmlBuffer = Encoding.UTF8.GetPreamble().Concat(Encoding.UTF8.GetBytes($"{PersonaHtml}")).ToArray(); - using var personaHtmlStream = new MemoryStream(personaHtmlBuffer); + var htmlBuffer = Encoding.UTF8.GetPreamble().Concat(Encoding.UTF8.GetBytes($"{Html}")).ToArray(); + using var htmlStream = new MemoryStream(htmlBuffer); var formatImportPart = mainDocumentPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.Html); - formatImportPart.FeedData(personaHtmlStream); + formatImportPart.FeedData(htmlStream); mainDocumentPart.Document.AppendChild(new Body( new AltChunk diff --git a/Epsilon.Abstractions/Model/StudentSettings.cs b/Epsilon.Abstractions/Model/StudentSettings.cs new file mode 100644 index 00000000..848ee422 --- /dev/null +++ b/Epsilon.Abstractions/Model/StudentSettings.cs @@ -0,0 +1,3 @@ +namespace Epsilon.Abstractions.Model; + +public record StudentSettings(Dictionary PageMapping); \ No newline at end of file diff --git a/Epsilon.Abstractions/Service/ICompetenceComponentService.cs b/Epsilon.Abstractions/Service/ICompetenceComponentService.cs index 9a8fb590..d115ef0e 100644 --- a/Epsilon.Abstractions/Service/ICompetenceComponentService.cs +++ b/Epsilon.Abstractions/Service/ICompetenceComponentService.cs @@ -4,9 +4,9 @@ namespace Epsilon.Abstractions.Service; public interface ICompetenceComponentService { - IAsyncEnumerable GetComponents(DateTime startDate, DateTime endDate); + IAsyncEnumerable GetComponents(string name, DateTime startDate, DateTime endDate); - IAsyncEnumerable GetComponents(DateTime startDate, DateTime endDate) where TComponent : ICompetenceComponent; + IAsyncEnumerable GetComponents(string name, DateTime startDate, DateTime endDate) where TComponent : ICompetenceComponent; Task GetComponent(string name, DateTime startDate, DateTime endDate); diff --git a/Epsilon.Abstractions/Service/ICompetenceDocumentService.cs b/Epsilon.Abstractions/Service/ICompetenceDocumentService.cs index d2bee6e3..84549c37 100644 --- a/Epsilon.Abstractions/Service/ICompetenceDocumentService.cs +++ b/Epsilon.Abstractions/Service/ICompetenceDocumentService.cs @@ -2,5 +2,5 @@ namespace Epsilon.Abstractions.Service; public interface ICompetenceDocumentService { - Task WriteDocument(Stream stream, DateTime startDate, DateTime endDate); + Task WriteDocument(Stream stream, string name, DateTime startDate, DateTime endDate); } \ No newline at end of file diff --git a/Epsilon.Abstractions/Service/IFilterService.cs b/Epsilon.Abstractions/Service/IFilterService.cs index 5f11bac0..604629ed 100644 --- a/Epsilon.Abstractions/Service/IFilterService.cs +++ b/Epsilon.Abstractions/Service/IFilterService.cs @@ -1,4 +1,3 @@ -using Epsilon.Abstractions.Component; using Epsilon.Canvas.Abstractions.Model; namespace Epsilon.Abstractions.Service; diff --git a/Epsilon.Host.WebApi/Controllers/DocumentController.cs b/Epsilon.Host.WebApi/Controllers/DocumentController.cs index ac7bb37a..fe4282b9 100644 --- a/Epsilon.Host.WebApi/Controllers/DocumentController.cs +++ b/Epsilon.Host.WebApi/Controllers/DocumentController.cs @@ -15,10 +15,10 @@ public DocumentController(ICompetenceDocumentService competenceDocumentService) } [HttpGet("word")] - public async Task DownloadWordDocument(DateTime startDate, DateTime endDate) + public async Task DownloadWordDocument(string name, DateTime startDate, DateTime endDate) { var stream = new MemoryStream(); - await _competenceDocumentService.WriteDocument(stream, startDate, endDate); + await _competenceDocumentService.WriteDocument(stream, name, startDate, endDate); return File( stream, diff --git a/Epsilon.Host.WebApi/Program.cs b/Epsilon.Host.WebApi/Program.cs index 2cf9bb4b..69d4a4d1 100644 --- a/Epsilon.Host.WebApi/Program.cs +++ b/Epsilon.Host.WebApi/Program.cs @@ -30,13 +30,13 @@ builder.Services.AddScoped(static (services) => new CompetenceComponentService( new Dictionary { - { "persona_page", services.GetRequiredService>() }, + { "front_page", services.GetRequiredService>() }, { "competence_profile", services.GetRequiredService>() }, { "kpi_matrix", services.GetRequiredService>() }, } )); -builder.Services.AddScoped, PersonaPageComponentFetcher>(); +builder.Services.AddScoped, PageComponentFetcher>(); builder.Services.AddScoped, CompetenceProfileComponentFetcher>(); builder.Services.AddScoped, KpiMatrixComponentFetcher>(); diff --git a/Epsilon/Component/CompetenceProfileComponentFetcher.cs b/Epsilon/Component/CompetenceProfileComponentFetcher.cs index 012a0bab..63325d1a 100644 --- a/Epsilon/Component/CompetenceProfileComponentFetcher.cs +++ b/Epsilon/Component/CompetenceProfileComponentFetcher.cs @@ -51,7 +51,7 @@ IConfiguration configuration _configuration = configuration; } - public override async Task Fetch(DateTime startDate, DateTime endDate) + public override async Task Fetch(string componentName, DateTime startDate, DateTime endDate) { var studentId = _configuration["Canvas:StudentId"]; var outcomesQuery = GetAllUserCoursesSubmissionOutcomes.Replace("$studentIds", $"{studentId}", StringComparison.InvariantCulture); diff --git a/Epsilon/Component/KpiMatrixComponentFetcher.cs b/Epsilon/Component/KpiMatrixComponentFetcher.cs index 22161df9..2cd3c4b3 100644 --- a/Epsilon/Component/KpiMatrixComponentFetcher.cs +++ b/Epsilon/Component/KpiMatrixComponentFetcher.cs @@ -64,7 +64,7 @@ IConfiguration configuration _configuration = configuration; } - public override async Task Fetch(DateTime startDate, DateTime endDate) + public override async Task Fetch(string componentName, DateTime startDate, DateTime endDate) { var studentId = _configuration["Canvas:StudentId"]; var outcomesQuery = GetUserKpiMatrixOutcomes.Replace("$studentIds", $"{studentId}", StringComparison.InvariantCultureIgnoreCase); diff --git a/Epsilon/Component/PersonaPageComponentFetcher.cs b/Epsilon/Component/PageComponentFetcher.cs similarity index 68% rename from Epsilon/Component/PersonaPageComponentFetcher.cs rename to Epsilon/Component/PageComponentFetcher.cs index 889fddef..85ed33ff 100644 --- a/Epsilon/Component/PersonaPageComponentFetcher.cs +++ b/Epsilon/Component/PageComponentFetcher.cs @@ -6,36 +6,40 @@ namespace Epsilon.Component; -public class PersonaPageComponentFetcher : CompetenceComponentFetcher +public class PageComponentFetcher : CompetenceComponentFetcher { private readonly IPageHttpService _pageHttpService; private readonly IFileHttpService _fileHttpService; private readonly CanvasSettings _canvasSettings; + // private readonly StudentSettings _studentSettings; - public PersonaPageComponentFetcher( + public PageComponentFetcher( IPageHttpService pageHttpService, IFileHttpService fileHttpService, IOptions canvasSettings - ) + // IOptions studentSettings + ) { _pageHttpService = pageHttpService; _fileHttpService = fileHttpService; _canvasSettings = canvasSettings.Value; + // _studentSettings = studentSettings.Value; } - public override async Task Fetch(DateTime startDate, DateTime endDate) + public override async Task Fetch(string componentName, DateTime startDate, DateTime endDate) { var courseId = _canvasSettings.CourseId; - var personaHtml = await _pageHttpService.GetPageByName(courseId, "front_page"); + var htmlString = await _pageHttpService.GetPageByName(courseId, componentName); - var updatedPersonaHtml = await GetPersonaHtmlDocument(personaHtml); + var updatedPersonaHtml = await GetHtmlDocument(htmlString); - var personaPage = new PersonaPage(updatedPersonaHtml.Text); + var page = new Page(updatedPersonaHtml.Text); - return personaPage; + return page; } - private async Task GetPersonaHtmlDocument(string htmlString) + + private async Task GetHtmlDocument(string htmlString) { var htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(htmlString); @@ -62,5 +66,4 @@ private async Task GetPersonaHtmlDocument(string htmlString) return htmlDoc; } - } \ No newline at end of file diff --git a/Epsilon/Service/CompetenceComponentService.cs b/Epsilon/Service/CompetenceComponentService.cs index bc86b7f6..d4a66157 100644 --- a/Epsilon/Service/CompetenceComponentService.cs +++ b/Epsilon/Service/CompetenceComponentService.cs @@ -12,17 +12,17 @@ public CompetenceComponentService(IDictionary GetComponents(DateTime startDate, DateTime endDate) + public async IAsyncEnumerable GetComponents(string name, DateTime startDate, DateTime endDate) { foreach (var componentFetcher in _componentFetchers.Values) { - yield return await componentFetcher.FetchUnknown(startDate, endDate); + yield return await componentFetcher.FetchUnknown(name, startDate, endDate); } } - public async IAsyncEnumerable GetComponents(DateTime startDate, DateTime endDate) where TComponent : ICompetenceComponent + public async IAsyncEnumerable GetComponents(string name, DateTime startDate, DateTime endDate) where TComponent : ICompetenceComponent { - await foreach (var component in GetComponents(startDate, endDate)) + await foreach (var component in GetComponents(name,startDate, endDate)) { if (component is TComponent componentOfT) { @@ -35,7 +35,7 @@ public async IAsyncEnumerable GetComponents(DateTime sta { if (_componentFetchers.TryGetValue(name, out var fetcher)) { - return await fetcher.FetchUnknown(startDate, endDate); + return await fetcher.FetchUnknown(name, startDate, endDate); } return null; diff --git a/Epsilon/Service/CompetenceDocumentService.cs b/Epsilon/Service/CompetenceDocumentService.cs index ed5077ad..97b79045 100644 --- a/Epsilon/Service/CompetenceDocumentService.cs +++ b/Epsilon/Service/CompetenceDocumentService.cs @@ -15,11 +15,11 @@ public CompetenceDocumentService(ICompetenceComponentService competenceComponent _competenceComponentService = competenceComponentService; } - public async Task WriteDocument(Stream stream, DateTime startDate, DateTime endDate) + public async Task WriteDocument(Stream stream, string name, DateTime startDate, DateTime endDate) { var startPosition = stream.Position; - var components = await _competenceComponentService.GetComponents(startDate, endDate).ToListAsync(); + var components = await _competenceComponentService.GetComponents(name, startDate, endDate).ToListAsync(); using var document = WordprocessingDocument.Create(stream, WordprocessingDocumentType.Document); document.AddMainDocumentPart(); diff --git a/Epsilon/Service/FilterService.cs b/Epsilon/Service/FilterService.cs index 2e6bbc8e..b9b92c8c 100644 --- a/Epsilon/Service/FilterService.cs +++ b/Epsilon/Service/FilterService.cs @@ -1,4 +1,3 @@ -using DocumentFormat.OpenXml; using Epsilon.Abstractions.Service; using Epsilon.Canvas.Abstractions.Model; using Epsilon.Canvas.Abstractions.Model.GraphQl;