Skip to content

Commit

Permalink
feat: register tilda data sources as collection on startup (#5)
Browse files Browse the repository at this point in the history
* feat: register tilda data sources as collection on startup

* update naming
  • Loading branch information
SondreJDigdir authored Sep 16, 2024
1 parent d001fe7 commit 2e038f3
Show file tree
Hide file tree
Showing 16 changed files with 112 additions and 163 deletions.
5 changes: 1 addition & 4 deletions src/Dan.Plugin.Tilda/Interfaces/ITildaAlertMessage.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
using Nadobe.Common.Models;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Dan.Common.Models;
using Dan.Plugin.Tilda.Models;

namespace Dan.Plugin.Tilda.Interfaces
{
interface ITildaAlertMessage
public interface ITildaAlertMessage : ITildaEvidenceType
{
public Task<AlertMessageList> GetAlertMessagesAsync(EvidenceHarvesterRequest req, DateTime? fromDate, DateTime? toDate, string identifier);
}
Expand Down
5 changes: 1 addition & 4 deletions src/Dan.Plugin.Tilda/Interfaces/ITildaAuditCoordination.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Dan.Common.Models;
using Dan.Plugin.Tilda.Models;
using Nadobe.Common.Models;

namespace Dan.Plugin.Tilda.Interfaces
{
public interface ITildaAuditCoordination
public interface ITildaAuditCoordination : ITildaEvidenceType
{
public Task<AuditCoordinationList> GetAuditCoordinationAsync(EvidenceHarvesterRequest req, DateTime? fromDate, DateTime? toDate);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Dan.Common.Models;
using Dan.Plugin.Tilda.Models;
using Nadobe.Common.Models;

namespace Dan.Plugin.Tilda.Interfaces
{
public interface ITildaAuditCoordinationAll
public interface ITildaAuditCoordinationAll : ITildaEvidenceType
{
public Task<AuditCoordinationList> GetAuditCoordinationAllAsync(EvidenceHarvesterRequest req, string month, string year, string filter);
}
Expand Down
5 changes: 1 addition & 4 deletions src/Dan.Plugin.Tilda/Interfaces/ITildaAuditReports.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Dan.Common.Models;
using Dan.Plugin.Tilda.Models;
using Nadobe.Common.Models;

namespace Dan.Plugin.Tilda.Interfaces
{
public interface ITildaAuditReports
public interface ITildaAuditReports : ITildaEvidenceType
{

public Task<AuditReportList> GetAuditReportsAsync(EvidenceHarvesterRequest req, DateTime? fromDate, DateTime? toDate);
Expand Down
6 changes: 1 addition & 5 deletions src/Dan.Plugin.Tilda/Interfaces/ITildaAuditReportsAll.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Dan.Common.Models;
using Dan.Plugin.Tilda.Models;
using Nadobe.Common.Models;

namespace Dan.Plugin.Tilda.Interfaces
{
public interface ITildaAuditReportsAll
public interface ITildaAuditReportsAll : ITildaEvidenceType
{

public Task<AuditReportList> GetAuditReportsAllAsync(EvidenceHarvesterRequest req, string month, string year, string filter);
Expand Down
6 changes: 6 additions & 0 deletions src/Dan.Plugin.Tilda/Interfaces/ITildaDataSource.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace Dan.Plugin.Tilda.Interfaces;

public interface ITildaDataSource
{
bool TestOnly { get; }
}
5 changes: 5 additions & 0 deletions src/Dan.Plugin.Tilda/Interfaces/ITildaEvidenceType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
namespace Dan.Plugin.Tilda.Interfaces;

public interface ITildaEvidenceType
{
}
5 changes: 1 addition & 4 deletions src/Dan.Plugin.Tilda/Interfaces/ITildaNPDIDReports.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Dan.Common.Models;
using Dan.Plugin.Tilda.Models;
using Nadobe.Common.Models;

namespace Dan.Plugin.Tilda.Interfaces
{
public interface ITildaNPDIDAuditReports
public interface ITildaNPDIDAuditReports : ITildaEvidenceType
{
public Task<NPDIDAuditReportList> GetNPDIDAuditReportsAsync(EvidenceHarvesterRequest req, DateTime? fromDate, DateTime? toDate, string npdid);
}
Expand Down
7 changes: 1 addition & 6 deletions src/Dan.Plugin.Tilda/Interfaces/ITildaPdfReport.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,9 @@
using Dan.Common.Models;
using Dan.Plugin.Tilda.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Dan.Plugin.Tilda.Interfaces
{
internal interface ITildaPdfReport
internal interface ITildaPdfReport : ITildaEvidenceType
{
public Task<byte[]> GetPdfReport(EvidenceHarvesterRequest req, string reportIdentifier);
}
Expand Down
5 changes: 1 addition & 4 deletions src/Dan.Plugin.Tilda/Interfaces/ITildaTrendReports.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Dan.Common.Models;
using Dan.Plugin.Tilda.Models;
using Nadobe.Common.Models;

namespace Dan.Plugin.Tilda.Interfaces
{
public interface ITildaTrendReports
public interface ITildaTrendReports : ITildaEvidenceType
{
public Task<TrendReportList> GetDataTrendAsync(EvidenceHarvesterRequest req, DateTime? fromDate, DateTime? toDate);
}
Expand Down
6 changes: 1 addition & 5 deletions src/Dan.Plugin.Tilda/Interfaces/ITildaTrendReportsAll.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Dan.Common.Models;
using Dan.Plugin.Tilda.Models;
using Nadobe.Common.Models;

namespace Dan.Plugin.Tilda.Interfaces
{
public interface ITildaTrendReportsAll
public interface ITildaTrendReportsAll : ITildaEvidenceType
{
public Task<TrendReportList> GetDataTrendAllAsync(EvidenceHarvesterRequest req, string month, string year, string filter);
}
Expand Down
6 changes: 2 additions & 4 deletions src/Dan.Plugin.Tilda/Models/TildaDataSource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,13 @@
using System.Threading.Tasks;
using Dan.Common.Models;
using Dan.Plugin.Tilda.Config;
using Dan.Plugin.Tilda.Interfaces;
using Dan.Plugin.Tilda.Utils;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options;
using Nadobe.Common.Models;

namespace Dan.Plugin.Tilda.Models
{
public abstract class TildaDataSource
public abstract class TildaDataSource : ITildaDataSource
{
public abstract string OrganizationNumber { get; }

Expand Down
20 changes: 18 additions & 2 deletions src/Dan.Plugin.Tilda/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,16 @@
using Polly.Extensions.Http;
using Polly.Registry;
using System;
using System.Linq;
using System.Net.Http;
using System.Reflection;
using Dan.Plugin.Tilda.Interfaces;
using Dan.Plugin.Tilda.Utils;
using Settings = Dan.Plugin.Tilda.Config.Settings;

var host = new HostBuilder()
.ConfigureDanPluginDefaults()
.ConfigureAppConfiguration((context, configuration) =>
.ConfigureAppConfiguration((_, configuration) =>
{
configuration
.AddJsonFile("worker-logging.json", optional:true);
Expand All @@ -38,6 +42,18 @@
services.AddSingleton<IEntityRegistryService, EntityRegistryService>();
services.AddSingleton<IEvidenceSourceMetadata, Metadata>();

// Registers all implementations of ITildaDataSources under that interface, making it accessible with
// dependency injection by injecting IEnumerable<ITildaDataSource> in constructor
Assembly.GetAssembly(typeof(Program))!
.ExportedTypes
.Where(type =>
type is { IsClass: true, Namespace: "Dan.Plugin.Tilda.TildaSources", IsNestedPrivate: false } &&
typeof(ITildaDataSource).IsAssignableFrom(type))
.ToList()
.ForEach(type => services.AddTransient(typeof(ITildaDataSource), type));

services.AddSingleton<ITildaSourceProvider, TildaSourceProvider>();

var distributedCache = services.BuildServiceProvider().GetRequiredService<IDistributedCache>();

var policyRegistry = services.BuildServiceProvider().GetRequiredService<IPolicyRegistry<string>>();
Expand All @@ -59,7 +75,7 @@
var handler = new HttpClientHandler();
handler.ClientCertificates.Add(Settings.Certificate);
return handler;
});;
});

})
.Build();
Expand Down
41 changes: 22 additions & 19 deletions src/Dan.Plugin.Tilda/Tilda.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ public class Tilda
private List<string> P6Orgs;
private List<string> P9Orgs;

public Tilda(IHttpClientFactory httpClientFactory, IOptions<Settings> settings, IPolicyRegistry<string> policyRegistry, IEntityRegistryService entityRegistry, IEvidenceSourceMetadata metadata)
private readonly ITildaSourceProvider _tildaSourceProvider;

public Tilda(IHttpClientFactory httpClientFactory, IOptions<Settings> settings, IPolicyRegistry<string> policyRegistry, IEntityRegistryService entityRegistry, IEvidenceSourceMetadata metadata, ITildaSourceProvider tildaSourceProvider)
{
_policyRegistry = policyRegistry;
_client = httpClientFactory.CreateClient("SafeHttpClient");
Expand All @@ -47,6 +49,7 @@ public Tilda(IHttpClientFactory httpClientFactory, IOptions<Settings> settings,
_entityRegistryService = entityRegistry;
_entityRegistryService.AllowTestCcrLookup = _settings.IsLocalDevelopment || _settings.IsLocalDevelopment;
_metadata = metadata;
_tildaSourceProvider = tildaSourceProvider;
}

[Function("TildaMeldingTilAnnenMyndighetv1")]
Expand Down Expand Up @@ -200,7 +203,7 @@ private async Task<List<EvidenceValue>> GetEvidenceValuesTildaPdfReportV1(Eviden
try
{;
//Should always only return ONE source
var pdfTarget = SourcesHelper.GetRelevantSources<ITildaPdfReport>(filter, _client, _logger, _settings).FirstOrDefault();
var pdfTarget = _tildaSourceProvider.GetRelevantSources<ITildaPdfReport>(filter).FirstOrDefault();

if (pdfTarget == null)
{
Expand All @@ -226,7 +229,7 @@ private async Task<List<EvidenceValue>> GetEvidenceValuesMeldingTilAnnenMyndighe
var taskList = new List<Task<AlertMessageList>>();
try
{
foreach (ITildaAlertMessage a in SourcesHelper.GetRelevantSources<ITildaAlertMessage>(param.sourceFilter, _client, _logger, _settings))
foreach (ITildaAlertMessage a in _tildaSourceProvider.GetRelevantSources<ITildaAlertMessage>(param.sourceFilter))
{
taskList.Add(a.GetAlertMessagesAsync(req, param.fromDate, param.toDate, param.identifier));
}
Expand Down Expand Up @@ -274,20 +277,20 @@ private async Task<List<EvidenceValue>> GetEvidenceValuesTildaMetadata(EvidenceH
{
var ecb = new EvidenceBuilder(_metadata, "TildaMetadatav1");

var trend = SourcesHelper.GetAllSources<ITildaTrendReports>(_settings, _client, _logger, false).Select(x=>x.OrganizationNumber + ":" + x.ControlAgency);
var trendAll = SourcesHelper.GetAllSources<ITildaTrendReportsAll>(_settings, _client, _logger, false).Select(x => x.OrganizationNumber + ":" + x.ControlAgency);
var trend = _tildaSourceProvider.GetAllSources<ITildaTrendReports>().Select(x=>x.OrganizationNumber + ":" + x.ControlAgency);
var trendAll = _tildaSourceProvider.GetAllSources<ITildaTrendReportsAll>().Select(x => x.OrganizationNumber + ":" + x.ControlAgency);

var audit = SourcesHelper.GetAllSources<ITildaAuditReports>(_settings, _client, _logger, false).Select(x => x.OrganizationNumber + ":" + x.ControlAgency);
var auditAll = SourcesHelper.GetAllSources<ITildaAuditReportsAll>(_settings, _client, _logger, false).Select(x => x.OrganizationNumber + ":" + x.ControlAgency);
var audit = _tildaSourceProvider.GetAllSources<ITildaAuditReports>().Select(x => x.OrganizationNumber + ":" + x.ControlAgency);
var auditAll = _tildaSourceProvider.GetAllSources<ITildaAuditReportsAll>().Select(x => x.OrganizationNumber + ":" + x.ControlAgency);

var coordination = SourcesHelper.GetAllSources<ITildaAuditCoordination>(_settings, _client, _logger, false).Select(x => x.OrganizationNumber + ":" + x.ControlAgency);
var coordinationAll = SourcesHelper.GetAllSources<ITildaAuditCoordinationAll>(_settings, _client, _logger, false).Select(x => x.OrganizationNumber + ":" + x.ControlAgency);
var coordination = _tildaSourceProvider.GetAllSources<ITildaAuditCoordination>().Select(x => x.OrganizationNumber + ":" + x.ControlAgency);
var coordinationAll = _tildaSourceProvider.GetAllSources<ITildaAuditCoordinationAll>().Select(x => x.OrganizationNumber + ":" + x.ControlAgency);

var npdid = SourcesHelper.GetAllSources<ITildaNPDIDAuditReports>(_settings, _client, _logger, false).Select(x => x.OrganizationNumber + ":" + x.ControlAgency);
var npdid = _tildaSourceProvider.GetAllSources<ITildaNPDIDAuditReports>().Select(x => x.OrganizationNumber + ":" + x.ControlAgency);

var pdfReport = SourcesHelper.GetAllSources<ITildaPdfReport>(_settings, _client, _logger, false).Select(x => x.OrganizationNumber + ":" + x.ControlAgency);
var pdfReport = _tildaSourceProvider.GetAllSources<ITildaPdfReport>().Select(x => x.OrganizationNumber + ":" + x.ControlAgency);

var all = SourcesHelper.GetAllRegisteredSources(_settings).Select(x => x.OrganizationNumber + ":" + x.ControlAgency);
var all = _tildaSourceProvider.GetAllRegisteredSources().Select(x => x.OrganizationNumber + ":" + x.ControlAgency);



Expand Down Expand Up @@ -316,7 +319,7 @@ private async Task<List<EvidenceValue>> GetEvidenceValuesNpdid(EvidenceHarvester
var taskList = new List<Task<NPDIDAuditReportList>>();
try
{
foreach (ITildaNPDIDAuditReports a in SourcesHelper.GetRelevantSources<ITildaNPDIDAuditReports>(param.sourceFilter, _client, _logger, _settings))
foreach (ITildaNPDIDAuditReports a in _tildaSourceProvider.GetRelevantSources<ITildaNPDIDAuditReports>(param.sourceFilter))
{
taskList.Add(a.GetNPDIDAuditReportsAsync(req, param.fromDate, param.toDate, param.npdid));
}
Expand Down Expand Up @@ -494,7 +497,7 @@ private async Task<List<EvidenceValue>> GetEvidenceValuesTilsynskoordinering(Evi
var taskList = new List<Task<AuditCoordinationList>>();
try
{
foreach (ITildaAuditCoordination a in SourcesHelper.GetRelevantSources<ITildaAuditCoordination>(param.sourceFilter, _client, _logger, _settings))
foreach (ITildaAuditCoordination a in _tildaSourceProvider.GetRelevantSources<ITildaAuditCoordination>(param.sourceFilter))
{
taskList.Add(a.GetAuditCoordinationAsync(req, param.fromDate, param.toDate));
}
Expand Down Expand Up @@ -619,7 +622,7 @@ private async Task<List<EvidenceValue>> GetEvidenceValuesTrend(EvidenceHarvester
var taskList = new List<Task<TrendReportList>>();
try
{
foreach (ITildaTrendReports a in SourcesHelper.GetRelevantSources<ITildaTrendReports>(param.sourceFilter, _client, _logger, _settings))
foreach (ITildaTrendReports a in _tildaSourceProvider.GetRelevantSources<ITildaTrendReports>(param.sourceFilter))
{
taskList.Add( a.GetDataTrendAsync(req, param.fromDate, param.toDate));
}
Expand Down Expand Up @@ -664,7 +667,7 @@ private async Task<List<EvidenceValue>> GetEvidenceValuesTrend(EvidenceHarvester

private async Task<List<EvidenceValue>> GetEvidenceValuesTrendAll(EvidenceHarvesterRequest req, TildaParameters param)
{
var sourceList = SourcesHelper.GetRelevantSources<ITildaTrendReportsAll>(req.OrganizationNumber, _client, _logger, _settings);
var sourceList = _tildaSourceProvider.GetRelevantSources<ITildaTrendReportsAll>(req.OrganizationNumber);
TrendReportList result = null;
var brResults = new List<TildaRegistryEntry>();
var ecb = new EvidenceBuilder(_metadata, "TildaTrendrapportAllev1");
Expand Down Expand Up @@ -719,7 +722,7 @@ private async Task<List<EvidenceValue>> GetEvidenceValuesTrendAll(EvidenceHarves

private async Task<List<EvidenceValue>> GetEvidenceValuesTilsynskoordingeringAllASync(EvidenceHarvesterRequest req, TildaParameters param)
{
var sourceList = SourcesHelper.GetRelevantSources<ITildaAuditCoordinationAll>(req.OrganizationNumber, _client, _logger, _settings);
var sourceList = _tildaSourceProvider.GetRelevantSources<ITildaAuditCoordinationAll>(req.OrganizationNumber);
AuditCoordinationList result = null;
var brResults = new List<TildaRegistryEntry>();
var ecb = new EvidenceBuilder(_metadata, "TildaTilsynskoordineringAllev1");
Expand Down Expand Up @@ -771,7 +774,7 @@ private async Task<List<EvidenceValue>> GetEvidenceValuesTilsynskoordingeringAll
}
private async Task<List<EvidenceValue>> GetEvidenceValuesTilsynsRapportAllAsync(EvidenceHarvesterRequest req, TildaParameters param)
{
var sourceList = SourcesHelper.GetRelevantSources<ITildaAuditReportsAll>(req.OrganizationNumber, _client, _logger, _settings);
var sourceList = _tildaSourceProvider.GetRelevantSources<ITildaAuditReportsAll>(req.OrganizationNumber);
AuditReportList result = null;
var brResults = new List<TildaRegistryEntry>();
var ecb = new EvidenceBuilder(_metadata, "TildaTilsynsrapportAllev1");
Expand Down Expand Up @@ -830,7 +833,7 @@ private async Task<List<EvidenceValue>> GetEvidenceValuesTilsynsrapport(Evidence
var taskList = new List<Task<AuditReportList>>();
try
{
foreach (ITildaAuditReports a in SourcesHelper.GetRelevantSources<ITildaAuditReports>(param.sourceFilter, _client, _logger, _settings))
foreach (ITildaAuditReports a in _tildaSourceProvider.GetRelevantSources<ITildaAuditReports>(param.sourceFilter))
{
taskList.Add(a.GetAuditReportsAsync(req, param.fromDate, param.toDate));
}
Expand Down
Loading

0 comments on commit 2e038f3

Please sign in to comment.