Skip to content

Commit

Permalink
chore: refactor code for required properties and finalized .net 9 update
Browse files Browse the repository at this point in the history
  • Loading branch information
chgl committed Jan 26, 2025
1 parent 68907dd commit 0dc8add
Show file tree
Hide file tree
Showing 19 changed files with 114 additions and 192 deletions.
2 changes: 1 addition & 1 deletion src/Vfps.Benchmarks/Vfps.Benchmarks.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.13.12" />
<PackageReference Include="BenchmarkDotNet" Version="0.14.0" />
</ItemGroup>

<ItemGroup>
Expand Down
16 changes: 8 additions & 8 deletions src/Vfps.IntegrationTests/Vfps.IntegrationTests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,20 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="coverlet.msbuild" Version="6.0.2">
<PackageReference Include="coverlet.msbuild" Version="6.0.4">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="FluentAssertions" Version="7.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
<PackageReference Include="Testcontainers" Version="4.0.0" />
<PackageReference Include="Testcontainers.PostgreSql" Version="4.0.0" />
<PackageReference Include="xunit" Version="2.9.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<PackageReference Include="FluentAssertions" Version="8.0.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageReference Include="Testcontainers" Version="4.1.0" />
<PackageReference Include="Testcontainers.PostgreSql" Version="4.1.0" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.1">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="6.0.2">
<PackageReference Include="coverlet.collector" Version="6.0.4">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
Expand Down
12 changes: 6 additions & 6 deletions src/Vfps.StressTests/Vfps.StressTests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
<PackageReference Include="xunit" Version="2.9.0" />
<PackageReference Include="NBomber" Version="5.7.0" />
<PackageReference Include="FluentAssertions" Version="7.0.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="NBomber" Version="5.8.2" />
<PackageReference Include="FluentAssertions" Version="8.0.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.1">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="6.0.2">
<PackageReference Include="coverlet.collector" Version="6.0.4">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
Expand Down
2 changes: 1 addition & 1 deletion src/Vfps.Tests/ControllerTests/FhirControllerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ public async Task CreatePseudonym_WithExistingNamespaceRequested_ShouldSucceed()
.BeOfType<Parameters>()
.Which;

var pseudonymValue = parameterResponse.GetSingleValue<FhirString>("pseudonymValue").Value;
var pseudonymValue = parameterResponse.GetSingleValue<FhirString>("pseudonymValue")!.Value;

pseudonymValue.Should().NotBeNull().And.NotBeEquivalentTo("test");
}
Expand Down
20 changes: 10 additions & 10 deletions src/Vfps.Tests/Vfps.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,27 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="coverlet.msbuild" Version="6.0.2">
<PackageReference Include="coverlet.msbuild" Version="6.0.4">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="EntityFrameworkCore.Exceptions.Sqlite" Version="8.1.2" />
<PackageReference Include="EntityFrameworkCore.Exceptions.Sqlite" Version="8.1.3" />
<PackageReference Include="FakeItEasy" Version="8.3.0" />
<PackageReference Include="FakeItEasy.Analyzer.CSharp" Version="6.1.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="9.0.0" />
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="9.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.0" />
<PackageReference Include="FluentAssertions" Version="7.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
<PackageReference Include="xunit" Version="2.9.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="9.0.1" />
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="9.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.1" />
<PackageReference Include="FluentAssertions" Version="8.0.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.1">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="6.0.2">
<PackageReference Include="coverlet.collector" Version="6.0.4">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
Expand Down
12 changes: 3 additions & 9 deletions src/Vfps.Tests/WebAppTests/HttpEndpointTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,9 @@

namespace Vfps.Tests.WebAppTests;

public class HttpEndpointTests : IClassFixture<IntegrationTestFactory<Program, PseudonymContext>>
public class HttpEndpointTests(IntegrationTestFactory<Program, PseudonymContext> factory)
: IClassFixture<IntegrationTestFactory<Program, PseudonymContext>>
{
private readonly IntegrationTestFactory<Program, PseudonymContext> factory;

public HttpEndpointTests(IntegrationTestFactory<Program, PseudonymContext> factory)
{
this.factory = factory;
}

[Theory]
[InlineData("/readyz")]
[InlineData("/livez")]
Expand Down Expand Up @@ -80,7 +74,7 @@ public async Task CreatePseudonym_ShouldSucceed()

var parameterResponse = response.Should().BeOfType<Parameters>().Which;

var pseudonymValue = parameterResponse.GetSingleValue<FhirString>("pseudonymValue").Value;
var pseudonymValue = parameterResponse.GetSingleValue<FhirString>("pseudonymValue")!.Value;

pseudonymValue.Should().NotBeNull().And.NotBeEquivalentTo("test");
}
Expand Down
3 changes: 2 additions & 1 deletion src/Vfps.Tests/WebAppTests/TestFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using Microsoft.AspNetCore.TestHost;
using Microsoft.Data.Sqlite;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.Extensions.DependencyInjection;

namespace Vfps.Tests.WebAppTests;
Expand Down Expand Up @@ -36,7 +37,7 @@ public static void RemoveDbContext<T>(this IServiceCollection services)
where T : DbContext
{
var descriptor = services.SingleOrDefault(d =>
d.ServiceType == typeof(DbContextOptions<T>)
d.ServiceType == typeof(IDbContextOptionsConfiguration<T>)
);
if (descriptor != null)
services.Remove(descriptor);
Expand Down
24 changes: 8 additions & 16 deletions src/Vfps/Data/CachingNamespaceRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,14 @@

namespace Vfps.Data;

public class CachingNamespaceRepository : INamespaceRepository
public class CachingNamespaceRepository(
PseudonymContext context,
IMemoryCache memoryCache,
CacheConfig cacheConfig
) : INamespaceRepository
{
public CachingNamespaceRepository(
PseudonymContext context,
IMemoryCache memoryCache,
CacheConfig cacheConfig
)
{
MemoryCache = memoryCache;
CacheConfig = cacheConfig;
NamespaceRepository = new NamespaceRepository(context);
}

private IMemoryCache MemoryCache { get; }
private CacheConfig CacheConfig { get; }
private NamespaceRepository NamespaceRepository { get; }
private CacheConfig CacheConfig { get; } = cacheConfig;
private NamespaceRepository NamespaceRepository { get; } = new NamespaceRepository(context);

/// <inheritdoc/>
public async Task<Namespace> CreateAsync(
Expand All @@ -38,7 +30,7 @@ CancellationToken cancellationToken
{
var cacheKey = $"namespaces.{namespaceName}";

return await MemoryCache.GetOrCreateAsync(
return await memoryCache.GetOrCreateAsync(
cacheKey,
async entry =>
{
Expand Down
27 changes: 9 additions & 18 deletions src/Vfps/Data/CachingPseudonymRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,16 @@

namespace Vfps.Data;

public class CachingPseudonymRepository : IPseudonymRepository
public class CachingPseudonymRepository(
PseudonymContext context,
IMemoryCache memoryCache,
CacheConfig cacheConfig
) : IPseudonymRepository
{
public CachingPseudonymRepository(
PseudonymContext context,
IMemoryCache memoryCache,
CacheConfig cacheConfig
)
{
MemoryCache = memoryCache;
CacheConfig = cacheConfig;
Context = context;

Repository = new PseudonymRepository(context);
}

public IMemoryCache MemoryCache { get; }
public CacheConfig CacheConfig { get; }
public PseudonymContext Context { get; }
public PseudonymRepository Repository { get; }
public IMemoryCache MemoryCache { get; } = memoryCache;
public CacheConfig CacheConfig { get; } = cacheConfig;
public PseudonymContext Context { get; } = context;
public PseudonymRepository Repository { get; } = new PseudonymRepository(context);

public async Task<Pseudonym?> CreateIfNotExist(Pseudonym pseudonym)
{
Expand Down
4 changes: 2 additions & 2 deletions src/Vfps/Data/Models/Namespace.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ namespace Vfps.Data.Models;
public class Namespace : TracksCreationAndUpdates
{
[Key]
public string Name { get; set; }
public required string Name { get; set; }
public string? Description { get; set; }
public PseudonymGenerationMethod PseudonymGenerationMethod { get; set; }
public uint PseudonymLength { get; set; }
public string? PseudonymPrefix { get; set; } = string.Empty;
public string? PseudonymSuffix { get; set; } = string.Empty;

public ICollection<Pseudonym> Pseudonyms { get; set; }
public ICollection<Pseudonym> Pseudonyms { get; set; } = [];
}
6 changes: 3 additions & 3 deletions src/Vfps/Data/Models/Pseudonym.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ namespace Vfps.Data.Models;

public class Pseudonym : TracksCreationAndUpdates
{
public string OriginalValue { get; set; }
public string PseudonymValue { get; set; }
public string NamespaceName { get; set; }
public required string OriginalValue { get; set; }
public required string PseudonymValue { get; set; }
public required string NamespaceName { get; set; }
}
15 changes: 4 additions & 11 deletions src/Vfps/Data/NamespaceRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,16 @@

namespace Vfps.Data;

public class NamespaceRepository : INamespaceRepository
public class NamespaceRepository(PseudonymContext context) : INamespaceRepository
{
public NamespaceRepository(PseudonymContext context)
{
Context = context;
}

private PseudonymContext Context { get; }

/// <inheritdoc/>
public async Task<Namespace> CreateAsync(
Namespace @namespace,
CancellationToken cancellationToken
)
{
Context.Add(@namespace);
await Context.SaveChangesAsync(cancellationToken);
context.Add(@namespace);
await context.SaveChangesAsync(cancellationToken);
return @namespace;
}

Expand All @@ -28,6 +21,6 @@ CancellationToken cancellationToken
CancellationToken cancellationToken
)
{
return await Context.Namespaces.FindAsync(namespaceName, cancellationToken);
return await context.Namespaces.FindAsync(namespaceName, cancellationToken);
}
}
5 changes: 1 addition & 4 deletions src/Vfps/Data/PseudonymContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,8 @@

namespace Vfps.Data;

public class PseudonymContext : DbContext
public class PseudonymContext(DbContextOptions<PseudonymContext> options) : DbContext(options)
{
public PseudonymContext(DbContextOptions<PseudonymContext> options)
: base(options) { }

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseExceptionProcessor();
Expand Down
25 changes: 7 additions & 18 deletions src/Vfps/Fhir/FhirController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,23 +13,12 @@ namespace Vfps.Fhir;
[Route("v1/fhir")]
[Produces("application/fhir+json")]
[Consumes("application/fhir+json", "application/json")]
public class FhirController : ControllerBase
public class FhirController(
ILogger<FhirController> logger,
INamespaceRepository namespaceRepository,
IPseudonymRepository pseudonymRepository
) : ControllerBase
{
private readonly ILogger<FhirController> logger;

public FhirController(
ILogger<FhirController> logger,
INamespaceRepository namespaceRepository,
IPseudonymRepository pseudonymRepository
)
{
this.logger = logger;
NamespaceRepository = namespaceRepository;
PseudonymRepository = pseudonymRepository;
}

private INamespaceRepository NamespaceRepository { get; }
private IPseudonymRepository PseudonymRepository { get; }
private PseudonymizationMethodsLookup Lookup { get; } = new PseudonymizationMethodsLookup();

/// <summary>
Expand Down Expand Up @@ -81,7 +70,7 @@ public async Task<ObjectResult> CreatePseudonym(
return BadRequest(outcome);
}

var @namespace = await NamespaceRepository.FindAsync(namespaceName, cancellationToken);
var @namespace = await namespaceRepository.FindAsync(namespaceName, cancellationToken);
if (@namespace is null)
{
var outcome = new OperationOutcome();
Expand Down Expand Up @@ -119,7 +108,7 @@ public async Task<ObjectResult> CreatePseudonym(
PseudonymValue = pseudonymValue,
};

Data.Models.Pseudonym? upsertedPseudonym = await PseudonymRepository.CreateIfNotExist(
Data.Models.Pseudonym? upsertedPseudonym = await pseudonymRepository.CreateIfNotExist(
pseudonym
);

Expand Down
Loading

0 comments on commit 0dc8add

Please sign in to comment.