refactor(r#): ♻🎨 reset and re-Cleanup Code

This commit is contained in:
Collin M. Barrett 2021-11-01 17:30:24 -05:00
parent 17c7e9d84f
commit 46d99268b1
46 changed files with 269 additions and 289 deletions

View file

@ -9,7 +9,7 @@ namespace FilterLists.Archival.Api.Controllers
public class PingController : ControllerBase
{
/// <summary>
/// A sample endpoint.
/// A sample endpoint.
/// </summary>
/// <returns>Pong.</returns>
[HttpGet]

View file

@ -1,42 +1,42 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<Nullable>enable</Nullable>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<PublishReadyToRunShowWarnings>true</PublishReadyToRunShowWarnings>
<RuntimeIdentifiers>alpine.3.12-x64;win10-x64</RuntimeIdentifiers>
</PropertyGroup>
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<Nullable>enable</Nullable>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<PublishReadyToRunShowWarnings>true</PublishReadyToRunShowWarnings>
<RuntimeIdentifiers>alpine.3.12-x64;win10-x64</RuntimeIdentifiers>
</PropertyGroup>
<PropertyGroup>
<Authors>Collin M. Barrett</Authors>
<Company>FilterLists</Company>
<Product>FilterLists Archival</Product>
<Description>The independent, comprehensive directory of filter and host lists for advertisements, trackers, malware, and annoyances.</Description>
<Copyright>Copyright (c) 2021 Collin M. Barrett</Copyright>
<RepositoryUrl>https://github.com/collinbarrett/FilterLists</RepositoryUrl>
<PackageProjectUrl>https://filterlists.com</PackageProjectUrl>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerfileContext>..\..</DockerfileContext>
<DockerComposeProjectPath>..\..\..\docker-compose\docker-compose.dcproj</DockerComposeProjectPath>
</PropertyGroup>
<PropertyGroup>
<Authors>Collin M. Barrett</Authors>
<Company>FilterLists</Company>
<Product>FilterLists Archival</Product>
<Description>The independent, comprehensive directory of filter and host lists for advertisements, trackers, malware, and annoyances.</Description>
<Copyright>Copyright (c) 2021 Collin M. Barrett</Copyright>
<RepositoryUrl>https://github.com/collinbarrett/FilterLists</RepositoryUrl>
<PackageProjectUrl>https://filterlists.com</PackageProjectUrl>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerfileContext>..\..</DockerfileContext>
<DockerComposeProjectPath>..\..\..\docker-compose\docker-compose.dcproj</DockerComposeProjectPath>
</PropertyGroup>
<ItemGroup>
<RuntimeHostConfigurationOption Include="System.Globalization.Invariant" Value="true" />
</ItemGroup>
<ItemGroup>
<RuntimeHostConfigurationOption Include="System.Globalization.Invariant" Value="true" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.11.1" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.2.3" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.11.1" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.2.3" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\FilterLists.Archival.Application\FilterLists.Archival.Application.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\FilterLists.Archival.Application\FilterLists.Archival.Application.csproj" />
</ItemGroup>
<ItemGroup>
<TrimmerRootAssembly Include="mscorlib" />
</ItemGroup>
<ItemGroup>
<TrimmerRootAssembly Include="mscorlib" />
</ItemGroup>
</Project>

View file

@ -17,10 +17,11 @@ public static void AddSwaggerGen(this IServiceCollection services)
o.SwaggerDoc("v1", new OpenApiInfo
{
Title = "FilterLists Archival API",
Description = "An ASP.NET Core API archiving and serving copies of FilterLists for mirrors and analysis.",
Description =
"An ASP.NET Core API archiving and serving copies of FilterLists for mirrors and analysis.",
Version = "v1",
//TermsOfService = "",
Contact = new OpenApiContact {Name = "FilterLists", Url = new Uri("https://filterlists.com")},
Contact = new OpenApiContact { Name = "FilterLists", Url = new Uri("https://filterlists.com") },
License = new OpenApiLicense
{
Name = "MIT License",
@ -42,9 +43,9 @@ public static void UseSwagger(this IApplicationBuilder app)
o.PreSerializeFilters.Add((swaggerDoc, httpReq) => swaggerDoc.Servers = new List<OpenApiServer>
{
#if DEBUG
new OpenApiServer {Url = $"{httpReq.Scheme}://{httpReq.Host.Value}:8080/api/archival"}
new() { Url = $"{httpReq.Scheme}://{httpReq.Host.Value}:8080/api/archival" }
#else
new OpenApiServer {Url = $"https://{httpReq.Host.Value}/api/archival"}
new() { Url = $"https://{httpReq.Host.Value}/api/archival" }
#endif
});
});

View file

@ -42,7 +42,8 @@ public async Task<Unit> Handle(Command request, CancellationToken cancellationTo
spacing = TimeSpan.FromSeconds((double)86400 / lists.Count);
#endif
_logger.LogInformation("Enqueuing archival of {ArchiveCount} lists spaced {Spacing} seconds apart.", archiveCount, spacing.Seconds);
_logger.LogInformation("Enqueuing archival of {ArchiveCount} lists spaced {Spacing} seconds apart.",
archiveCount, spacing.Seconds);
for (var i = 0; i < archiveCount; i++)
{

View file

@ -35,7 +35,7 @@ private static void ScheduleArchival()
JobStorage.Current?.GetMonitoringApi()?.PurgeJobs();
new EnqueueArchiveAllLists.Command().EnqueueBackgroundJob();
#else
new EnqueueArchiveAllLists.Command().AddOrUpdateRecurringJob(Hangfire.Cron.Daily);
new EnqueueArchiveAllLists.Command().AddOrUpdateRecurringJob(Cron.Daily);
#endif
}
}

View file

@ -10,36 +10,36 @@ public sealed class ListFileExtension : ValueObject
private static readonly IDictionary<string, (bool IsPlainText, bool IsMeaningfulToConsumer)> Info =
new Dictionary<string, (bool, bool)>
{
{string.Empty, (true, false)},
{".txt", (true, false)},
{".7z", (false, false)},
{".action", (true, true)}, // Privoxy
{".all", (true, false)},
{".aspx", (true, false)},
{".bat", (true, true)},
{".blacklist", (true, false)},
{".cidr", (true, true)},
{".conf", (true, true)}, // dnsmasq / Unbound / BIND
{".csv", (true, true)},
{".dat", (true, true)}, // Halite for Windows
{".deny", (true, true)},
{".gz", (false, false)},
{".hosts", (true, true)},
{".ips", (true, false)},
{".ipset", (true, true)}, // Firehol
{".json", (true, true)},
{".list", (true, false)},
{".lsrules", (true, true)}, // Little Snitch
{".md", (true, true)},
{".netset", (true, true)}, // Firehol
{".p2p", (true, true)}, // Peer Guardian
{".php", (true, false)},
{".raw", (true, false)},
{".rpz", (true, true)}, // Response Policy Zone
{".tpl", (true, true)}, // Internet Explorer
{".uBl", (true, false)},
{".zip", (false, false)},
{".zone", (true, false)}
{ string.Empty, (true, false) },
{ ".txt", (true, false) },
{ ".7z", (false, false) },
{ ".action", (true, true) }, // Privoxy
{ ".all", (true, false) },
{ ".aspx", (true, false) },
{ ".bat", (true, true) },
{ ".blacklist", (true, false) },
{ ".cidr", (true, true) },
{ ".conf", (true, true) }, // dnsmasq / Unbound / BIND
{ ".csv", (true, true) },
{ ".dat", (true, true) }, // Halite for Windows
{ ".deny", (true, true) },
{ ".gz", (false, false) },
{ ".hosts", (true, true) },
{ ".ips", (true, false) },
{ ".ipset", (true, true) }, // Firehol
{ ".json", (true, true) },
{ ".list", (true, false) },
{ ".lsrules", (true, true) }, // Little Snitch
{ ".md", (true, true) },
{ ".netset", (true, true) }, // Firehol
{ ".p2p", (true, true) }, // Peer Guardian
{ ".php", (true, false) },
{ ".raw", (true, false) },
{ ".rpz", (true, true) }, // Response Policy Zone
{ ".tpl", (true, true) }, // Internet Explorer
{ ".uBl", (true, false) },
{ ".zip", (false, false) },
{ ".zone", (true, false) }
};
private ListFileExtension(string value)
@ -60,7 +60,7 @@ public static ListFileExtension FromUri(Uri uri)
protected override IEnumerable<object> GetEqualityComponents()
{
return new[] {Value};
return new[] { Value };
}
}
}

View file

@ -22,7 +22,8 @@ internal sealed class HttpContentClient : IHttpContentClient
public HttpContentClient(HttpClient httpClient, ILogger<HttpContentClient> logger)
{
_httpClient = httpClient;
_httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36");
_httpClient.DefaultRequestHeaders.Add("User-Agent",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36");
_logger = logger;
}

View file

@ -75,7 +75,8 @@ public void Commit()
{
var fileNames = _writtenFiles.Select(f => f.Name).ToList();
var signature = new Signature(_options.UserName, _options.UserEmail, DateTime.UtcNow);
var message = $"feat(archives): archive {fileNames.Count} file(s){Environment.NewLine}{string.Join(Environment.NewLine, fileNames)}";
var message =
$"feat(archives): archive {fileNames.Count} file(s){Environment.NewLine}{string.Join(Environment.NewLine, fileNames)}";
Commands.Stage(_repo, fileNames);
try
{

View file

@ -19,7 +19,7 @@ public static void AddSchedulingServices(this IServiceCollection services, IConf
public static void UseScheduling(this IApplicationBuilder app)
{
app.UseHangfireServer(new BackgroundJobServerOptions {WorkerCount = Environment.ProcessorCount});
app.UseHangfireServer(new BackgroundJobServerOptions { WorkerCount = Environment.ProcessorCount });
}
}
}

View file

@ -32,7 +32,7 @@ public static IGlobalConfiguration UseMediatR(this IGlobalConfiguration globalCo
{
/// https://codeopinion.com/background-commands-mediatr-hangfire/
GlobalConfiguration.Configuration.UseSerializerSettings(
new JsonSerializerSettings {TypeNameHandling = TypeNameHandling.Objects});
new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects });
return globalConfiguration;
}
}

View file

@ -31,7 +31,7 @@ protected async Task<IActionResult> CacheGetOrCreateAsync<TResponse>(
entry.AbsoluteExpirationRelativeToNow = absoluteExpirationRelativeToNow;
return actionAsync();
});
return result is null ? NotFound() : (IActionResult)Ok(result);
return result is null ? NotFound() : Ok(result);
}
}
}

View file

@ -19,7 +19,7 @@ public LanguagesController(IMemoryCache cache, IMediator mediator) : base(cache)
}
/// <summary>
/// Gets the languages targeted by FilterLists.
/// Gets the languages targeted by FilterLists.
/// </summary>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>The languages targeted by FilterLists.</returns>

View file

@ -19,7 +19,7 @@ public LicensesController(IMemoryCache cache, IMediator mediator) : base(cache)
}
/// <summary>
/// Gets the licenses applied to FilterLists.
/// Gets the licenses applied to FilterLists.
/// </summary>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>The licenses applied to FilterLists.</returns>

View file

@ -20,7 +20,7 @@ public ListsController(IMemoryCache cache, IMediator mediator) : base(cache)
}
/// <summary>
/// Gets the FilterLists..
/// Gets the FilterLists..
/// </summary>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>The FilterLists.</returns>
@ -33,7 +33,7 @@ public async Task<IActionResult> Get(CancellationToken cancellationToken)
}
/// <summary>
/// Gets the details of the FilterList.
/// Gets the details of the FilterList.
/// </summary>
/// <param name="id">The identifier of the FilterList.</param>
/// <param name="cancellationToken">The cancellation token.</param>
@ -43,7 +43,8 @@ public async Task<IActionResult> Get(CancellationToken cancellationToken)
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<IActionResult> GetDetails(int id, CancellationToken cancellationToken)
{
return await CacheGetOrCreateAsync(() => _mediator.Send(new GetListDetails.Query(id), cancellationToken), id);
return await CacheGetOrCreateAsync(() => _mediator.Send(new GetListDetails.Query(id), cancellationToken),
id);
}
}
}

View file

@ -19,7 +19,7 @@ public MaintainersController(IMemoryCache cache, IMediator mediator) : base(cach
}
/// <summary>
/// Gets the maintainers of FilterLists.
/// Gets the maintainers of FilterLists.
/// </summary>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>The maintainers of FilterLists.</returns>

View file

@ -19,7 +19,7 @@ public SoftwareController(IMemoryCache cache, IMediator mediator) : base(cache)
}
/// <summary>
/// Gets the software that subscribes to FilterLists.
/// Gets the software that subscribes to FilterLists.
/// </summary>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>The software that subscribes to FilterLists.</returns>

View file

@ -19,7 +19,7 @@ public SyntaxesController(IMemoryCache cache, IMediator mediator) : base(cache)
}
/// <summary>
/// Gets the syntaxes of FilterLists.
/// Gets the syntaxes of FilterLists.
/// </summary>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>The syntaxes of FilterLists.</returns>

View file

@ -19,7 +19,7 @@ public TagsController(IMemoryCache cache, IMediator mediator) : base(cache)
}
/// <summary>
/// Gets the tags of FilterLists.
/// Gets the tags of FilterLists.
/// </summary>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>The tags of FilterLists.</returns>

View file

@ -1,43 +1,44 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<Nullable>enable</Nullable>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<PublishReadyToRunShowWarnings>true</PublishReadyToRunShowWarnings>
<RuntimeIdentifiers>linux-musl-x64;win10-x64</RuntimeIdentifiers>
</PropertyGroup>
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<Nullable>enable</Nullable>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<PublishReadyToRunShowWarnings>true</PublishReadyToRunShowWarnings>
<RuntimeIdentifiers>linux-musl-x64;win10-x64</RuntimeIdentifiers>
</PropertyGroup>
<PropertyGroup>
<Authors>Collin M. Barrett</Authors>
<Company>FilterLists</Company>
<Product>FilterLists Directory</Product>
<Description>The independent, comprehensive directory of filter and host lists for advertisements, trackers, malware, and annoyances.</Description>
<Copyright>Copyright (c) 2021 Collin M. Barrett</Copyright>
<RepositoryUrl>https://github.com/collinbarrett/FilterLists</RepositoryUrl>
<PackageProjectUrl>https://filterlists.com</PackageProjectUrl>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerfileContext>..\..</DockerfileContext>
<DockerComposeProjectPath>..\..\..\docker-compose\docker-compose.dcproj</DockerComposeProjectPath>
</PropertyGroup>
<PropertyGroup>
<Authors>Collin M. Barrett</Authors>
<Company>FilterLists</Company>
<Product>FilterLists Directory</Product>
<Description>The independent, comprehensive directory of filter and host lists for advertisements, trackers, malware, and annoyances.</Description>
<Copyright>Copyright (c) 2021 Collin M. Barrett</Copyright>
<RepositoryUrl>https://github.com/collinbarrett/FilterLists</RepositoryUrl>
<PackageProjectUrl>https://filterlists.com</PackageProjectUrl>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerfileContext>..\..</DockerfileContext>
<DockerComposeProjectPath>..\..\..\docker-compose\docker-compose.dcproj</DockerComposeProjectPath>
</PropertyGroup>
<ItemGroup>
<RuntimeHostConfigurationOption Include="System.Globalization.Invariant" Value="true" />
</ItemGroup>
<ItemGroup>
<RuntimeHostConfigurationOption Include="System.Globalization.Invariant" Value="true" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.10">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.11.1" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.2.3" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.10">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.11.1" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.2.3" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\FilterLists.Directory.Application\FilterLists.Directory.Application.csproj" />
<ProjectReference Include="..\FilterLists.Directory.Infrastructure.Migrations\FilterLists.Directory.Infrastructure.Migrations.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\FilterLists.Directory.Application\FilterLists.Directory.Application.csproj" />
<ProjectReference
Include="..\FilterLists.Directory.Infrastructure.Migrations\FilterLists.Directory.Infrastructure.Migrations.csproj" />
</ItemGroup>
</Project>

View file

@ -20,7 +20,7 @@ public static void AddSwaggerGen(this IServiceCollection services)
Description = "An ASP.NET Core API serving the core FilterList information.",
Version = "v1",
//TermsOfService = "",
Contact = new OpenApiContact {Name = "FilterLists", Url = new Uri("https://filterlists.com")},
Contact = new OpenApiContact { Name = "FilterLists", Url = new Uri("https://filterlists.com") },
License = new OpenApiLicense
{
Name = "MIT License",
@ -42,9 +42,9 @@ public static void UseSwagger(this IApplicationBuilder app)
o.PreSerializeFilters.Add((swaggerDoc, httpReq) => swaggerDoc.Servers = new List<OpenApiServer>
{
#if DEBUG
new OpenApiServer {Url = $"{httpReq.Scheme}://{httpReq.Host.Value}:8080/api/directory"}
new() { Url = $"{httpReq.Scheme}://{httpReq.Host.Value}:8080/api/directory" }
#else
new OpenApiServer {Url = $"https://{httpReq.Host.Value}/api/directory"}
new() { Url = $"https://{httpReq.Host.Value}/api/directory" }
#endif
});
});

View file

@ -1,5 +1,4 @@
using AutoMapper;
using FilterLists.Directory.Infrastructure;
using FilterLists.Directory.Infrastructure;
using MediatR;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;

View file

@ -1,28 +1,28 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<PropertyGroup>
<Authors>Collin M. Barrett</Authors>
<Company>FilterLists</Company>
<Product>FilterLists Directory</Product>
<Description>The independent, comprehensive directory of filter and host lists for advertisements, trackers, malware, and annoyances.</Description>
<Copyright>Copyright (c) 2021 Collin M. Barrett</Copyright>
<RepositoryUrl>https://github.com/collinbarrett/FilterLists</RepositoryUrl>
<PackageProjectUrl>https://filterlists.com</PackageProjectUrl>
</PropertyGroup>
<PropertyGroup>
<Authors>Collin M. Barrett</Authors>
<Company>FilterLists</Company>
<Product>FilterLists Directory</Product>
<Description>The independent, comprehensive directory of filter and host lists for advertisements, trackers, malware, and annoyances.</Description>
<Copyright>Copyright (c) 2021 Collin M. Barrett</Copyright>
<RepositoryUrl>https://github.com/collinbarrett/FilterLists</RepositoryUrl>
<PackageProjectUrl>https://filterlists.com</PackageProjectUrl>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="8.1.1" />
<PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="9.0.0" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="8.1.1" />
<PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="9.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\FilterLists.Directory.Api.Contracts\FilterLists.Directory.Api.Contracts.csproj" />
<ProjectReference Include="..\FilterLists.Directory.Infrastructure\FilterLists.Directory.Infrastructure.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\FilterLists.Directory.Api.Contracts\FilterLists.Directory.Api.Contracts.csproj" />
<ProjectReference Include="..\FilterLists.Directory.Infrastructure\FilterLists.Directory.Infrastructure.csproj" />
</ItemGroup>
</Project>

View file

@ -47,7 +47,8 @@ public LanguageVmProfile()
CreateMap<Language, LanguageVm>()
.ForMember(l => l.FilterListIds,
o => o.MapFrom(l =>
l.FilterListLanguages.Select(fll => fll.FilterListId).OrderBy(flid => flid).AsEnumerable()));
l.FilterListLanguages.Select(fll => fll.FilterListId).OrderBy(flid => flid)
.AsEnumerable()));
}
}

View file

@ -63,25 +63,32 @@ public ListDetailsVmProfile()
fl.ViewUrls.OrderBy(u => u.SegmentNumber).ThenBy(u => u.Primariness).AsEnumerable()))
.ForMember(fl => fl.MaintainerIds,
o => o.MapFrom(fl =>
fl.FilterListMaintainers.Select(flm => flm.MaintainerId).OrderBy(mid => mid).AsEnumerable()))
fl.FilterListMaintainers.Select(flm => flm.MaintainerId).OrderBy(mid => mid)
.AsEnumerable()))
.ForMember(fl => fl.UpstreamFilterListIds,
o => o.MapFrom(fl =>
fl.UpstreamFilterLists.Select(ufl => ufl.UpstreamFilterListId).OrderBy(flid => flid).AsEnumerable()))
fl.UpstreamFilterLists.Select(ufl => ufl.UpstreamFilterListId).OrderBy(flid => flid)
.AsEnumerable()))
.ForMember(fl => fl.ForkFilterListIds,
o => o.MapFrom(fl =>
fl.ForkFilterLists.Select(ffl => ffl.ForkFilterListId).OrderBy(flid => flid).AsEnumerable()))
fl.ForkFilterLists.Select(ffl => ffl.ForkFilterListId).OrderBy(flid => flid)
.AsEnumerable()))
.ForMember(fl => fl.IncludedInFilterListIds,
o => o.MapFrom(fl =>
fl.IncludedInFilterLists.Select(iifl => iifl.IncludedInFilterListId).OrderBy(flid => flid).AsEnumerable()))
fl.IncludedInFilterLists.Select(iifl => iifl.IncludedInFilterListId).OrderBy(flid => flid)
.AsEnumerable()))
.ForMember(fl => fl.IncludesFilterListIds,
o => o.MapFrom(fl =>
fl.IncludesFilterLists.Select(ifl => ifl.IncludesFilterListId).OrderBy(flid => flid).AsEnumerable()))
fl.IncludesFilterLists.Select(ifl => ifl.IncludesFilterListId).OrderBy(flid => flid)
.AsEnumerable()))
.ForMember(fl => fl.DependencyFilterListIds,
o => o.MapFrom(fl =>
fl.DependencyFilterLists.Select(dfl => dfl.DependencyFilterListId).OrderBy(flid => flid).AsEnumerable()))
fl.DependencyFilterLists.Select(dfl => dfl.DependencyFilterListId).OrderBy(flid => flid)
.AsEnumerable()))
.ForMember(fl => fl.DependentFilterListIds,
o => o.MapFrom(fl =>
fl.DependentFilterLists.Select(dfl => dfl.DependentFilterListId).OrderBy(flid => flid).AsEnumerable()));
fl.DependentFilterLists.Select(dfl => dfl.DependentFilterListId).OrderBy(flid => flid)
.AsEnumerable()));
}
}

View file

@ -56,7 +56,8 @@ public ListVmProfile()
fl.FilterListTags.Select(flt => flt.TagId).OrderBy(tid => tid).AsEnumerable()))
.ForMember(fl => fl.MaintainerIds,
o => o.MapFrom(fl =>
fl.FilterListMaintainers.Select(flm => flm.MaintainerId).OrderBy(mid => mid).AsEnumerable()));
fl.FilterListMaintainers.Select(flm => flm.MaintainerId).OrderBy(mid => mid)
.AsEnumerable()));
}
}
}

View file

@ -47,7 +47,8 @@ public MaintainerVmProfile()
CreateMap<Maintainer, MaintainerVm>()
.ForMember(m => m.FilterListIds,
o => o.MapFrom(m =>
m.FilterListMaintainers.Select(flm => flm.FilterListId).OrderBy(flid => flid).AsEnumerable()));
m.FilterListMaintainers.Select(flm => flm.FilterListId).OrderBy(flid => flid)
.AsEnumerable()));
}
}

View file

@ -1,34 +1,35 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<RuntimeIdentifiers>linux-musl-x64;win10-x64</RuntimeIdentifiers>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<RuntimeIdentifiers>linux-musl-x64;win10-x64</RuntimeIdentifiers>
</PropertyGroup>
<PropertyGroup>
<Authors>Collin M. Barrett</Authors>
<Company>FilterLists</Company>
<Product>FilterLists Directory</Product>
<Description>The independent, comprehensive directory of filter and host lists for advertisements, trackers, malware, and annoyances.</Description>
<Copyright>Copyright (c) 2021 Collin M. Barrett</Copyright>
<RepositoryUrl>https://github.com/collinbarrett/FilterLists</RepositoryUrl>
<PackageProjectUrl>https://filterlists.com</PackageProjectUrl>
</PropertyGroup>
<PropertyGroup>
<Authors>Collin M. Barrett</Authors>
<Company>FilterLists</Company>
<Product>FilterLists Directory</Product>
<Description>The independent, comprehensive directory of filter and host lists for advertisements, trackers, malware, and annoyances.</Description>
<Copyright>Copyright (c) 2021 Collin M. Barrett</Copyright>
<RepositoryUrl>https://github.com/collinbarrett/FilterLists</RepositoryUrl>
<PackageProjectUrl>https://filterlists.com</PackageProjectUrl>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\FilterLists.Directory.Infrastructure.Migrations\FilterLists.Directory.Infrastructure.Migrations.csproj" />
<ProjectReference Include="..\FilterLists.Directory.Infrastructure\FilterLists.Directory.Infrastructure.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference
Include="..\FilterLists.Directory.Infrastructure.Migrations\FilterLists.Directory.Infrastructure.Migrations.csproj" />
<ProjectReference Include="..\FilterLists.Directory.Infrastructure\FilterLists.Directory.Infrastructure.csproj" />
</ItemGroup>
</Project>

View file

@ -1,27 +1,28 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<PropertyGroup>
<Authors>Collin M. Barrett</Authors>
<Company>FilterLists</Company>
<Product>FilterLists Directory</Product>
<Description>The independent, comprehensive directory of filter and host lists for advertisements, trackers, malware, and annoyances.</Description>
<Copyright>Copyright (c) 2021 Collin M. Barrett</Copyright>
<RepositoryUrl>https://github.com/collinbarrett/FilterLists</RepositoryUrl>
<PackageProjectUrl>https://filterlists.com</PackageProjectUrl>
</PropertyGroup>
<PropertyGroup>
<Authors>Collin M. Barrett</Authors>
<Company>FilterLists</Company>
<Product>FilterLists Directory</Product>
<Description>The independent, comprehensive directory of filter and host lists for advertisements, trackers, malware, and annoyances.</Description>
<Copyright>Copyright (c) 2021 Collin M. Barrett</Copyright>
<RepositoryUrl>https://github.com/collinbarrett/FilterLists</RepositoryUrl>
<PackageProjectUrl>https://filterlists.com</PackageProjectUrl>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="5.0.0" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="5.0.10" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="5.0.0" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="5.0.10" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\SharedKernel\FilterLists.SharedKernel.Logging\FilterLists.SharedKernel.Logging.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference
Include="..\..\SharedKernel\FilterLists.SharedKernel.Logging\FilterLists.SharedKernel.Logging.csproj" />
</ItemGroup>
</Project>

View file

@ -6,9 +6,9 @@ namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities
public class Dependent
{
public int DependencyFilterListId { get; set; }
public FilterList DependencyFilterList { get; private set; } = null!;
public FilterList DependencyFilterList { get; } = null!;
public int DependentFilterListId { get; set; }
public FilterList DependentFilterList { get; private set; } = null!;
public FilterList DependentFilterList { get; } = null!;
}
internal class DependentTypeConfiguration : IEntityTypeConfiguration<Dependent>
@ -16,7 +16,7 @@ internal class DependentTypeConfiguration : IEntityTypeConfiguration<Dependent>
public virtual void Configure(EntityTypeBuilder<Dependent> builder)
{
builder.ToTable(nameof(Dependent) + "s");
builder.HasKey(d => new {d.DependencyFilterListId, d.DependentFilterListId});
builder.HasKey(d => new { d.DependencyFilterListId, d.DependentFilterListId });
builder.HasOne(d => d.DependencyFilterList)
.WithMany(fl => fl.DependentFilterLists)
.HasForeignKey(d => d.DependencyFilterListId);

View file

@ -13,10 +13,10 @@ public class FilterList
public string? Description { get; set; }
public int? LicenseId { get; set; }
public License? License { get; set; }
public IReadOnlyCollection<FilterListSyntax> FilterListSyntaxes { get; private set; } = new HashSet<FilterListSyntax>();
public IReadOnlyCollection<FilterListLanguage> FilterListLanguages { get; private set; } = new HashSet<FilterListLanguage>();
public IReadOnlyCollection<FilterListTag> FilterListTags { get; private set; } = new HashSet<FilterListTag>();
public IReadOnlyCollection<FilterListViewUrl> ViewUrls { get; private set; } = new HashSet<FilterListViewUrl>();
public IReadOnlyCollection<FilterListSyntax> FilterListSyntaxes { get; } = new HashSet<FilterListSyntax>();
public IReadOnlyCollection<FilterListLanguage> FilterListLanguages { get; } = new HashSet<FilterListLanguage>();
public IReadOnlyCollection<FilterListTag> FilterListTags { get; } = new HashSet<FilterListTag>();
public IReadOnlyCollection<FilterListViewUrl> ViewUrls { get; } = new HashSet<FilterListViewUrl>();
public Uri? HomeUrl { get; set; }
public Uri? OnionUrl { get; set; }
public Uri? PolicyUrl { get; set; }
@ -26,13 +26,16 @@ public class FilterList
public Uri? ChatUrl { get; set; }
public string? EmailAddress { get; set; }
public Uri? DonateUrl { get; set; }
public IReadOnlyCollection<FilterListMaintainer> FilterListMaintainers { get; private set; } = new HashSet<FilterListMaintainer>();
public IReadOnlyCollection<Fork> UpstreamFilterLists { get; private set; } = new HashSet<Fork>();
public IReadOnlyCollection<Fork> ForkFilterLists { get; private set; } = new HashSet<Fork>();
public IReadOnlyCollection<Merge> IncludedInFilterLists { get; private set; } = new HashSet<Merge>();
public IReadOnlyCollection<Merge> IncludesFilterLists { get; private set; } = new HashSet<Merge>();
public IReadOnlyCollection<Dependent> DependencyFilterLists { get; private set; } = new HashSet<Dependent>();
public IReadOnlyCollection<Dependent> DependentFilterLists { get; private set; } = new HashSet<Dependent>();
public IReadOnlyCollection<FilterListMaintainer> FilterListMaintainers { get; } =
new HashSet<FilterListMaintainer>();
public IReadOnlyCollection<Fork> UpstreamFilterLists { get; } = new HashSet<Fork>();
public IReadOnlyCollection<Fork> ForkFilterLists { get; } = new HashSet<Fork>();
public IReadOnlyCollection<Merge> IncludedInFilterLists { get; } = new HashSet<Merge>();
public IReadOnlyCollection<Merge> IncludesFilterLists { get; } = new HashSet<Merge>();
public IReadOnlyCollection<Dependent> DependencyFilterLists { get; } = new HashSet<Dependent>();
public IReadOnlyCollection<Dependent> DependentFilterLists { get; } = new HashSet<Dependent>();
}
internal class FilterListTypeConfiguration : IEntityTypeConfiguration<FilterList>

View file

@ -6,9 +6,9 @@ namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities
public class FilterListLanguage
{
public int FilterListId { get; set; }
public FilterList FilterList { get; private set; } = null!;
public FilterList FilterList { get; } = null!;
public string Iso6391 { get; set; } = null!;
public Language Language { get; private set; } = null!;
public Language Language { get; } = null!;
}
internal class FilterListLanguageTypeConfiguration : IEntityTypeConfiguration<FilterListLanguage>
@ -16,7 +16,7 @@ internal class FilterListLanguageTypeConfiguration : IEntityTypeConfiguration<Fi
public virtual void Configure(EntityTypeBuilder<FilterListLanguage> builder)
{
builder.ToTable(nameof(FilterListLanguage) + "s");
builder.HasKey(fll => new {fll.FilterListId, fll.Iso6391});
builder.HasKey(fll => new { fll.FilterListId, fll.Iso6391 });
builder.HasDataJsonFile<FilterListLanguage>();
}
}

View file

@ -6,9 +6,9 @@ namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities
public class FilterListMaintainer
{
public int FilterListId { get; set; }
public FilterList FilterList { get; private set; } = null!;
public FilterList FilterList { get; } = null!;
public int MaintainerId { get; set; }
public Maintainer Maintainer { get; private set; } = null!;
public Maintainer Maintainer { get; } = null!;
}
internal class FilterListMaintainerTypeConfiguration : IEntityTypeConfiguration<FilterListMaintainer>
@ -16,7 +16,7 @@ internal class FilterListMaintainerTypeConfiguration : IEntityTypeConfiguration<
public virtual void Configure(EntityTypeBuilder<FilterListMaintainer> builder)
{
builder.ToTable(nameof(FilterListMaintainer) + "s");
builder.HasKey(flm => new {flm.FilterListId, flm.MaintainerId});
builder.HasKey(flm => new { flm.FilterListId, flm.MaintainerId });
builder.HasDataJsonFile<FilterListMaintainer>();
}
}

View file

@ -6,9 +6,9 @@ namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities
public class FilterListSyntax
{
public int FilterListId { get; set; }
public FilterList FilterList { get; private set; } = null!;
public FilterList FilterList { get; } = null!;
public int SyntaxId { get; set; }
public Syntax Syntax { get; private set; } = null!;
public Syntax Syntax { get; } = null!;
}
internal class FilterListSyntaxTypeConfiguration : IEntityTypeConfiguration<FilterListSyntax>
@ -16,7 +16,7 @@ internal class FilterListSyntaxTypeConfiguration : IEntityTypeConfiguration<Filt
public virtual void Configure(EntityTypeBuilder<FilterListSyntax> builder)
{
builder.ToTable(nameof(FilterListSyntax) + "es");
builder.HasKey(fls => new {fls.FilterListId, fls.SyntaxId});
builder.HasKey(fls => new { fls.FilterListId, fls.SyntaxId });
builder.HasDataJsonFile<FilterListSyntax>();
}
}

View file

@ -6,9 +6,9 @@ namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities
public class FilterListTag
{
public int FilterListId { get; set; }
public FilterList FilterList { get; private set; } = null!;
public FilterList FilterList { get; } = null!;
public int TagId { get; set; }
public Tag Tag { get; private set; } = null!;
public Tag Tag { get; } = null!;
}
internal class FilterListTagTypeConfiguration : IEntityTypeConfiguration<FilterListTag>
@ -16,7 +16,7 @@ internal class FilterListTagTypeConfiguration : IEntityTypeConfiguration<FilterL
public virtual void Configure(EntityTypeBuilder<FilterListTag> builder)
{
builder.ToTable(nameof(FilterListTag) + "s");
builder.HasKey(flt => new {flt.FilterListId, flt.TagId});
builder.HasKey(flt => new { flt.FilterListId, flt.TagId });
builder.HasDataJsonFile<FilterListTag>();
}
}

View file

@ -21,7 +21,7 @@ public virtual void Configure(EntityTypeBuilder<FilterListViewUrl> builder)
builder.ToTable(nameof(FilterListViewUrl) + "s");
builder.Property(u => u.SegmentNumber).HasDefaultValue(1);
builder.Property(u => u.Primariness).HasDefaultValue(1);
builder.HasIndex(u => new {u.FilterListId, u.SegmentNumber, u.Primariness}).IsUnique();
builder.HasIndex(u => new { u.FilterListId, u.SegmentNumber, u.Primariness }).IsUnique();
builder.HasDataJsonFile<FilterListViewUrl>();
}
}

View file

@ -6,9 +6,9 @@ namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities
public class Fork
{
public int UpstreamFilterListId { get; set; }
public FilterList UpstreamFilterList { get; private set; } = null!;
public FilterList UpstreamFilterList { get; } = null!;
public int ForkFilterListId { get; set; }
public FilterList ForkFilterList { get; private set; } = null!;
public FilterList ForkFilterList { get; } = null!;
}
internal class ForkTypeConfiguration : IEntityTypeConfiguration<Fork>
@ -16,7 +16,7 @@ internal class ForkTypeConfiguration : IEntityTypeConfiguration<Fork>
public virtual void Configure(EntityTypeBuilder<Fork> builder)
{
builder.ToTable(nameof(Fork) + "s");
builder.HasKey(f => new {f.UpstreamFilterListId, f.ForkFilterListId});
builder.HasKey(f => new { f.UpstreamFilterListId, f.ForkFilterListId });
builder.HasOne(f => f.UpstreamFilterList)
.WithMany(fl => fl.ForkFilterLists)
.HasForeignKey(f => f.UpstreamFilterListId);

View file

@ -8,7 +8,7 @@ public class Language
{
public string Iso6391 { get; set; } = null!;
public string Name { get; set; } = null!;
public IReadOnlyCollection<FilterListLanguage> FilterListLanguages { get; private set; } = new HashSet<FilterListLanguage>();
public IReadOnlyCollection<FilterListLanguage> FilterListLanguages { get; } = new HashSet<FilterListLanguage>();
}
internal class LanguageTypeConfiguration : IEntityTypeConfiguration<Language>

View file

@ -13,7 +13,7 @@ public class License
public bool PermitsModification { get; set; }
public bool PermitsDistribution { get; set; }
public bool PermitsCommercialUse { get; set; }
public IReadOnlyCollection<FilterList> FilterLists { get; private set; } = new HashSet<FilterList>();
public IReadOnlyCollection<FilterList> FilterLists { get; } = new HashSet<FilterList>();
}
internal class LicenseTypeConfiguration : IEntityTypeConfiguration<License>

View file

@ -12,7 +12,9 @@ public class Maintainer
public Uri? Url { get; set; }
public string? EmailAddress { get; set; }
public string? TwitterHandle { get; set; }
public IReadOnlyCollection<FilterListMaintainer> FilterListMaintainers { get; private set; } = new HashSet<FilterListMaintainer>();
public IReadOnlyCollection<FilterListMaintainer> FilterListMaintainers { get; } =
new HashSet<FilterListMaintainer>();
}
internal class MaintainerTypeConfiguration : IEntityTypeConfiguration<Maintainer>

View file

@ -6,9 +6,9 @@ namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities
public class Merge
{
public int IncludedInFilterListId { get; set; }
public FilterList IncludedInFilterList { get; private set; } = null!;
public FilterList IncludedInFilterList { get; } = null!;
public int IncludesFilterListId { get; set; }
public FilterList IncludesFilterList { get; private set; } = null!;
public FilterList IncludesFilterList { get; } = null!;
}
internal class MergeTypeConfiguration : IEntityTypeConfiguration<Merge>
@ -16,7 +16,7 @@ internal class MergeTypeConfiguration : IEntityTypeConfiguration<Merge>
public virtual void Configure(EntityTypeBuilder<Merge> builder)
{
builder.ToTable(nameof(Merge) + "s");
builder.HasKey(m => new {m.IncludedInFilterListId, m.IncludesFilterListId});
builder.HasKey(m => new { m.IncludedInFilterListId, m.IncludesFilterListId });
builder.HasOne(m => m.IncludedInFilterList)
.WithMany(fl => fl.IncludesFilterLists)
.HasForeignKey(m => m.IncludedInFilterListId);

View file

@ -13,7 +13,7 @@ public class Software
public Uri? HomeUrl { get; set; }
public Uri? DownloadUrl { get; set; }
public bool SupportsAbpUrlScheme { get; set; }
public IReadOnlyCollection<SoftwareSyntax> SoftwareSyntaxes { get; private set; } = new HashSet<SoftwareSyntax>();
public IReadOnlyCollection<SoftwareSyntax> SoftwareSyntaxes { get; } = new HashSet<SoftwareSyntax>();
}
internal class SoftwareTypeConfiguration : IEntityTypeConfiguration<Software>

View file

@ -6,9 +6,9 @@ namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities
public class SoftwareSyntax
{
public int SoftwareId { get; set; }
public Software Software { get; private set; } = null!;
public Software Software { get; } = null!;
public int SyntaxId { get; set; }
public Syntax Syntax { get; private set; } = null!;
public Syntax Syntax { get; } = null!;
}
internal class SoftwareSyntaxTypeConfiguration : IEntityTypeConfiguration<SoftwareSyntax>
@ -16,7 +16,7 @@ internal class SoftwareSyntaxTypeConfiguration : IEntityTypeConfiguration<Softwa
public virtual void Configure(EntityTypeBuilder<SoftwareSyntax> builder)
{
builder.ToTable(nameof(SoftwareSyntax) + "es");
builder.HasKey(ss => new {ss.SoftwareId, ss.SyntaxId});
builder.HasKey(ss => new { ss.SoftwareId, ss.SyntaxId });
builder.HasDataJsonFile<SoftwareSyntax>();
}
}

View file

@ -11,8 +11,8 @@ public class Syntax
public string Name { get; set; } = null!;
public string? Description { get; set; }
public Uri? Url { get; set; }
public IReadOnlyCollection<FilterListSyntax> FilterListSyntaxes { get; private set; } = new HashSet<FilterListSyntax>();
public IReadOnlyCollection<SoftwareSyntax> SoftwareSyntaxes { get; private set; } = new HashSet<SoftwareSyntax>();
public IReadOnlyCollection<FilterListSyntax> FilterListSyntaxes { get; } = new HashSet<FilterListSyntax>();
public IReadOnlyCollection<SoftwareSyntax> SoftwareSyntaxes { get; } = new HashSet<SoftwareSyntax>();
}
internal class SyntaxTypeConfiguration : IEntityTypeConfiguration<Syntax>

View file

@ -9,7 +9,7 @@ public class Tag
public int Id { get; set; }
public string Name { get; set; } = null!;
public string? Description { get; set; }
public IReadOnlyCollection<FilterListTag> FilterListTags { get; private set; } = new HashSet<FilterListTag>();
public IReadOnlyCollection<FilterListTag> FilterListTags { get; } = new HashSet<FilterListTag>();
}
internal class TagTypeConfiguration : IEntityTypeConfiguration<Tag>

View file

@ -32,7 +32,7 @@ public static void HasDataJsonFile<TEntity>(this EntityTypeBuilder entityTypeBui
var entitiesJson = File.ReadAllText(path);
var entities = JsonSerializer.Deserialize<IEnumerable<TEntity>>(entitiesJson,
new JsonSerializerOptions {PropertyNamingPolicy = JsonNamingPolicy.CamelCase});
new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
if (entities != null)
{

View file

@ -1,42 +0,0 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeStyle/CodeCleanup/Profiles/=FilterLists_0020Cleanup/@EntryIndexedValue">&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;Profile name="FilterLists Cleanup"&gt;&lt;CSReorderTypeMembers&gt;True&lt;/CSReorderTypeMembers&gt;&lt;XMLReformatCode&gt;True&lt;/XMLReformatCode&gt;&lt;CSCodeStyleAttributes ArrangeTypeAccessModifier="True" ArrangeTypeMemberAccessModifier="True" SortModifiers="True" RemoveRedundantParentheses="True" AddMissingParentheses="True" ArrangeBraces="True" ArrangeAttributes="True" ArrangeArgumentsStyle="True" ArrangeCodeBodyStyle="True" ArrangeVarStyle="True" ArrangeTrailingCommas="True" /&gt;&lt;RemoveCodeRedundanciesVB&gt;True&lt;/RemoveCodeRedundanciesVB&gt;&lt;Xaml.RedundantFreezeAttribute&gt;True&lt;/Xaml.RedundantFreezeAttribute&gt;&lt;Xaml.RemoveRedundantModifiersAttribute&gt;True&lt;/Xaml.RemoveRedundantModifiersAttribute&gt;&lt;Xaml.RemoveRedundantNameAttribute&gt;True&lt;/Xaml.RemoveRedundantNameAttribute&gt;&lt;Xaml.RemoveRedundantResource&gt;True&lt;/Xaml.RemoveRedundantResource&gt;&lt;Xaml.RemoveRedundantCollectionProperty&gt;True&lt;/Xaml.RemoveRedundantCollectionProperty&gt;&lt;Xaml.RemoveRedundantAttachedPropertySetter&gt;True&lt;/Xaml.RemoveRedundantAttachedPropertySetter&gt;&lt;Xaml.RemoveRedundantStyledValue&gt;True&lt;/Xaml.RemoveRedundantStyledValue&gt;&lt;Xaml.RemoveRedundantNamespaceAlias&gt;True&lt;/Xaml.RemoveRedundantNamespaceAlias&gt;&lt;Xaml.RemoveForbiddenResourceName&gt;True&lt;/Xaml.RemoveForbiddenResourceName&gt;&lt;Xaml.RemoveRedundantGridDefinitionsAttribute&gt;True&lt;/Xaml.RemoveRedundantGridDefinitionsAttribute&gt;&lt;Xaml.RemoveRedundantGridSpanAttribut&gt;True&lt;/Xaml.RemoveRedundantGridSpanAttribut&gt;&lt;Xaml.RemoveRedundantUpdateSourceTriggerAttribute&gt;True&lt;/Xaml.RemoveRedundantUpdateSourceTriggerAttribute&gt;&lt;Xaml.RemoveRedundantBindingModeAttribute&gt;True&lt;/Xaml.RemoveRedundantBindingModeAttribute&gt;&lt;FormatAttributeQuoteDescriptor&gt;True&lt;/FormatAttributeQuoteDescriptor&gt;&lt;CorrectVariableKindsDescriptor&gt;True&lt;/CorrectVariableKindsDescriptor&gt;&lt;VariablesToInnerScopesDescriptor&gt;True&lt;/VariablesToInnerScopesDescriptor&gt;&lt;StringToTemplatesDescriptor&gt;True&lt;/StringToTemplatesDescriptor&gt;&lt;RemoveRedundantQualifiersTs&gt;True&lt;/RemoveRedundantQualifiersTs&gt;&lt;OptimizeImportsTs&gt;True&lt;/OptimizeImportsTs&gt;&lt;OptimizeReferenceCommentsTs&gt;True&lt;/OptimizeReferenceCommentsTs&gt;&lt;PublicModifierStyleTs&gt;True&lt;/PublicModifierStyleTs&gt;&lt;ExplicitAnyTs&gt;True&lt;/ExplicitAnyTs&gt;&lt;TypeAnnotationStyleTs&gt;True&lt;/TypeAnnotationStyleTs&gt;&lt;RelativePathStyleTs&gt;True&lt;/RelativePathStyleTs&gt;&lt;AsInsteadOfCastTs&gt;True&lt;/AsInsteadOfCastTs&gt;&lt;CssAlphabetizeProperties&gt;True&lt;/CssAlphabetizeProperties&gt;&lt;JsInsertSemicolon&gt;True&lt;/JsInsertSemicolon&gt;&lt;JsReformatCode&gt;True&lt;/JsReformatCode&gt;&lt;JsFormatDocComments&gt;True&lt;/JsFormatDocComments&gt;&lt;HtmlReformatCode&gt;True&lt;/HtmlReformatCode&gt;&lt;AspOptimizeRegisterDirectives&gt;True&lt;/AspOptimizeRegisterDirectives&gt;&lt;VBOptimizeImports&gt;True&lt;/VBOptimizeImports&gt;&lt;VBShortenReferences&gt;True&lt;/VBShortenReferences&gt;&lt;RemoveCodeRedundancies&gt;True&lt;/RemoveCodeRedundancies&gt;&lt;CSUseAutoProperty&gt;True&lt;/CSUseAutoProperty&gt;&lt;CSMakeFieldReadonly&gt;True&lt;/CSMakeFieldReadonly&gt;&lt;CSArrangeQualifiers&gt;True&lt;/CSArrangeQualifiers&gt;&lt;CSFixBuiltinTypeReferences&gt;True&lt;/CSFixBuiltinTypeReferences&gt;&lt;CssReformatCode&gt;True&lt;/CssReformatCode&gt;&lt;VBReformatCode&gt;True&lt;/VBReformatCode&gt;&lt;VBFormatDocComments&gt;True&lt;/VBFormatDocComments&gt;&lt;CSOptimizeUsings&gt;&lt;OptimizeUsings&gt;True&lt;/OptimizeUsings&gt;&lt;EmbraceInRegion&gt;False&lt;/EmbraceInRegion&gt;&lt;RegionName&gt;&lt;/RegionName&gt;&lt;/CSOptimizeUsings&gt;&lt;CSShortenReferences&gt;True&lt;/CSShortenReferences&gt;&lt;CSReformatCode&gt;True&lt;/CSReformatCode&gt;&lt;CSharpFormatDocComments&gt;True&lt;/CSharpFormatDocComments&gt;&lt;/Profile&gt;</s:String>
<s:String x:Key="/Default/CodeStyle/CodeCleanup/SilentCleanupProfile/@EntryValue">FilterLists Cleanup</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_SIMPLE_EMBEDDED_STATEMENT_ON_SAME_LINE/@EntryValue">NEVER</s:String>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_AFTER_TYPECAST_PARENTHESES/@EntryValue">False</s:Boolean>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_AFTER_DECLARATION_LPAR/@EntryValue">True</s:Boolean>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_CHAINED_BINARY_EXPRESSIONS/@EntryValue">CHOP_IF_LONG</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_CHAINED_METHOD_CALLS/@EntryValue">CHOP_IF_LONG</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_PARAMETERS_STYLE/@EntryValue">CHOP_IF_LONG</s:String>
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=AutoRecoverer/@EntryIndexedValue">DO_NOTHING</s:String>
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=Format/@EntryIndexedValue">DO_NOTHING</s:String>
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=ShowAnnotations/@EntryIndexedValue">DO_NOTHING</s:String>
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=SolExp_002DTrack/@EntryIndexedValue">DO_NOTHING</s:String>
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=StartPage_002DIsDownloadRefreshEnabled/@EntryIndexedValue">DO_NOTHING</s:String>
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=StartPage_002DOnEnvironmentStatup/@EntryIndexedValue">DO_NOTHING</s:String>
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=SyncSettings/@EntryIndexedValue">DO_NOTHING</s:String>
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=TextEditor_002DCodeLens/@EntryIndexedValue">DO_NOTHING</s:String>
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=TextEditor_002DTrackChanges_002D2/@EntryIndexedValue">DO_NOTHING</s:String>
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=VCS/@EntryIndexedValue">DO_NOTHING</s:String>
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchBehaviour/=XAML_0020Designer/@EntryIndexedValue">DO_NOTHING</s:String>
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchConflictResolutionMode/=AutoRecoverer/@EntryIndexedValue">DO_NOTHING</s:String>
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchConflictResolutionMode/=Format/@EntryIndexedValue">DO_NOTHING</s:String>
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchConflictResolutionMode/=ShowAnnotations/@EntryIndexedValue">DO_NOTHING</s:String>
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchConflictResolutionMode/=SolExp_002DTrack/@EntryIndexedValue">DO_NOTHING</s:String>
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchConflictResolutionMode/=StartPage_002DIsDownloadRefreshEnabled/@EntryIndexedValue">DO_NOTHING</s:String>
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchConflictResolutionMode/=StartPage_002DOnEnvironmentStatup/@EntryIndexedValue">DO_NOTHING</s:String>
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchConflictResolutionMode/=SyncSettings/@EntryIndexedValue">DO_NOTHING</s:String>
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchConflictResolutionMode/=TextEditor_002DCodeLens/@EntryIndexedValue">DO_NOTHING</s:String>
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchConflictResolutionMode/=TextEditor_002DTrackChanges_002D2/@EntryIndexedValue">DO_NOTHING</s:String>
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchConflictResolutionMode/=VCS/@EntryIndexedValue">DO_NOTHING</s:String>
<s:String x:Key="/Default/Environment/PerformanceGuide/SwitchConflictResolutionMode/=XAML_0020Designer/@EntryIndexedValue">DO_NOTHING</s:String>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Enqueuing/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Hangfire/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Mediat/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Primariness/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Privoxy/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Syntaxes/@EntryIndexedValue">True</s:Boolean>
</wpf:ResourceDictionary>