Skip to content

Commit faed5d6

Browse files
committed
Align persistence providers with new base abstractions
1 parent ca5ec46 commit faed5d6

File tree

5 files changed

+33
-60
lines changed

5 files changed

+33
-60
lines changed

src/ServiceControl.Persistence.Sql.Core/EntityConfigurations/TrialLicenseConfiguration.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ public void Configure(EntityTypeBuilder<TrialLicenseEntity> builder)
1414

1515
// Ensure only one row exists by using a fixed primary key
1616
builder.Property(e => e.Id)
17-
.HasDefaultValue(1)
1817
.ValueGeneratedNever();
1918

2019
builder.Property(e => e.TrialEndDate)
Lines changed: 27 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,51 @@
11
namespace ServiceControl.Persistence.Sql.Core.Implementation;
22

3-
using DbContexts;
3+
using Entities;
44
using Microsoft.EntityFrameworkCore;
5-
using Microsoft.Extensions.DependencyInjection;
65
using ServiceControl.Persistence;
76

8-
public class TrialLicenseDataProvider : ITrialLicenseDataProvider
7+
public class TrialLicenseDataProvider : DataStoreBase, ITrialLicenseDataProvider
98
{
10-
readonly IServiceProvider serviceProvider;
119
const int SingletonId = 1;
1210

13-
public TrialLicenseDataProvider(IServiceProvider serviceProvider)
11+
public TrialLicenseDataProvider(IServiceProvider serviceProvider) : base(serviceProvider)
1412
{
15-
this.serviceProvider = serviceProvider;
1613
}
1714

18-
public async Task<DateOnly?> GetTrialEndDate(CancellationToken cancellationToken)
15+
public Task<DateOnly?> GetTrialEndDate(CancellationToken cancellationToken)
1916
{
20-
using var scope = serviceProvider.CreateScope();
21-
var dbContext = scope.ServiceProvider.GetRequiredService<ServiceControlDbContextBase>();
22-
23-
var entity = await dbContext.TrialLicenses
24-
.AsNoTracking()
25-
.FirstOrDefaultAsync(t => t.Id == SingletonId, cancellationToken);
17+
return ExecuteWithDbContext(async dbContext =>
18+
{
19+
var entity = await dbContext.TrialLicenses
20+
.AsNoTracking()
21+
.FirstOrDefaultAsync(t => t.Id == SingletonId, cancellationToken);
2622

27-
return entity?.TrialEndDate;
23+
return entity?.TrialEndDate;
24+
});
2825
}
2926

30-
public async Task StoreTrialEndDate(DateOnly trialEndDate, CancellationToken cancellationToken)
27+
public Task StoreTrialEndDate(DateOnly trialEndDate, CancellationToken cancellationToken)
3128
{
32-
using var scope = serviceProvider.CreateScope();
33-
var dbContext = scope.ServiceProvider.GetRequiredService<ServiceControlDbContextBase>();
34-
35-
var existingEntity = await dbContext.TrialLicenses
36-
.FirstOrDefaultAsync(t => t.Id == SingletonId, cancellationToken);
37-
38-
if (existingEntity != null)
29+
return ExecuteWithDbContext(async dbContext =>
3930
{
40-
// Update existing
41-
existingEntity.TrialEndDate = trialEndDate;
42-
}
43-
else
44-
{
45-
// Insert new
46-
var newEntity = new Entities.TrialLicenseEntity
31+
var entity = new TrialLicenseEntity
4732
{
4833
Id = SingletonId,
4934
TrialEndDate = trialEndDate
5035
};
51-
await dbContext.TrialLicenses.AddAsync(newEntity, cancellationToken);
52-
}
5336

54-
await dbContext.SaveChangesAsync(cancellationToken);
37+
// Use EF's change tracking for upsert
38+
var existing = await dbContext.TrialLicenses.FindAsync([SingletonId], cancellationToken);
39+
if (existing == null)
40+
{
41+
dbContext.TrialLicenses.Add(entity);
42+
}
43+
else
44+
{
45+
dbContext.TrialLicenses.Update(entity);
46+
}
47+
48+
await dbContext.SaveChangesAsync(cancellationToken);
49+
});
5550
}
5651
}

src/ServiceControl.Persistence.Sql.MySQL/MySqlPersistence.cs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@ namespace ServiceControl.Persistence.Sql.MySQL;
22

33
using Core.Abstractions;
44
using Core.DbContexts;
5-
using Core.Implementation;
65
using Microsoft.EntityFrameworkCore;
76
using Microsoft.Extensions.DependencyInjection;
87
using ServiceControl.Persistence;
98

10-
class MySqlPersistence : IPersistence
9+
class MySqlPersistence : BasePersistence, IPersistence
1110
{
1211
readonly MySqlPersisterSettings settings;
1312

@@ -19,13 +18,7 @@ public MySqlPersistence(MySqlPersisterSettings settings)
1918
public void AddPersistence(IServiceCollection services)
2019
{
2120
ConfigureDbContext(services);
22-
23-
if (settings.MaintenanceMode)
24-
{
25-
return;
26-
}
27-
28-
services.AddSingleton<ITrialLicenseDataProvider, TrialLicenseDataProvider>();
21+
RegisterDataStores(services, settings.MaintenanceMode);
2922
}
3023

3124
public void AddInstaller(IServiceCollection services)

src/ServiceControl.Persistence.Sql.PostgreSQL/PostgreSqlPersistence.cs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@ namespace ServiceControl.Persistence.Sql.PostgreSQL;
22

33
using Core.Abstractions;
44
using Core.DbContexts;
5-
using Core.Implementation;
65
using Microsoft.EntityFrameworkCore;
76
using Microsoft.Extensions.DependencyInjection;
87
using ServiceControl.Persistence;
98

10-
class PostgreSqlPersistence : IPersistence
9+
class PostgreSqlPersistence : BasePersistence, IPersistence
1110
{
1211
readonly PostgreSqlPersisterSettings settings;
1312

@@ -19,13 +18,7 @@ public PostgreSqlPersistence(PostgreSqlPersisterSettings settings)
1918
public void AddPersistence(IServiceCollection services)
2019
{
2120
ConfigureDbContext(services);
22-
23-
if (settings.MaintenanceMode)
24-
{
25-
return;
26-
}
27-
28-
services.AddSingleton<ITrialLicenseDataProvider, TrialLicenseDataProvider>();
21+
RegisterDataStores(services, settings.MaintenanceMode);
2922
}
3023

3124
public void AddInstaller(IServiceCollection services)

src/ServiceControl.Persistence.Sql.SqlServer/SqlServerPersistence.cs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@ namespace ServiceControl.Persistence.Sql.SqlServer;
22

33
using Core.Abstractions;
44
using Core.DbContexts;
5-
using Core.Implementation;
65
using Microsoft.EntityFrameworkCore;
76
using Microsoft.Extensions.DependencyInjection;
87
using ServiceControl.Persistence;
98

10-
class SqlServerPersistence : IPersistence
9+
class SqlServerPersistence : BasePersistence, IPersistence
1110
{
1211
readonly SqlServerPersisterSettings settings;
1312

@@ -19,13 +18,7 @@ public SqlServerPersistence(SqlServerPersisterSettings settings)
1918
public void AddPersistence(IServiceCollection services)
2019
{
2120
ConfigureDbContext(services);
22-
23-
if (settings.MaintenanceMode)
24-
{
25-
return;
26-
}
27-
28-
services.AddSingleton<ITrialLicenseDataProvider, TrialLicenseDataProvider>();
21+
RegisterDataStores(services, settings.MaintenanceMode);
2922
}
3023

3124
public void AddInstaller(IServiceCollection services)

0 commit comments

Comments
 (0)