Skip to content

Commit ae60108

Browse files
Add UC SQLite dependency and configure a default SQLite connection string when developing locally
1 parent d33af3a commit ae60108

File tree

4 files changed

+70
-2
lines changed

4 files changed

+70
-2
lines changed

Directory.Packages.props

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
<GlobalPackageReference Include="Umbraco.JsonSchema.Extensions" Version="0.3.0" PrivateAssets="all" />
1111
</ItemGroup>
1212
<ItemGroup>
13-
<PackageVersion Include="Umbraco.Commerce.Cms.Startup" Version="[15.0.0-rc1, 16)" />
14-
<PackageVersion Include="Umbraco.Deploy.Infrastructure" Version="[15.0.0, 16)" />
13+
<PackageVersion Include="Umbraco.Commerce.Cms.Startup" Version="[15.0.0, 15.999.999)" />
14+
<PackageVersion Include="Umbraco.Commerce.Persistance.Sqlite" Version="[15.0.0, 15.999.999)" />
15+
<PackageVersion Include="Umbraco.Deploy.Infrastructure" Version="[15.0.1, 16)" />
1516
</ItemGroup>
1617
</Project>

src/Umbraco.Commerce.Deploy/Composing/UmbracoCommerceDeployComposer.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,27 @@
22
using Umbraco.Cms.Core.Composing;
33
using Umbraco.Cms.Core.DependencyInjection;
44
using Microsoft.Extensions.DependencyInjection;
5+
using Microsoft.Extensions.Options;
6+
using Umbraco.Commerce.Cms;
7+
using Umbraco.Commerce.Core.Data;
8+
using Umbraco.Commerce.Extensions;
9+
using Umbraco.Extensions;
510

611
namespace Umbraco.Commerce.Deploy.Composing
712
{
13+
[ComposeAfter(typeof(UmbracoCommerceComposer))]
814
public class UmbracoCommerceDeployComposer : IComposer
915
{
1016
public void Compose(IUmbracoBuilder builder)
1117
{
1218
builder.Services.AddOptions<UmbracoCommerceDeploySettings>()
1319
.Bind(builder.Config.GetSection("Umbraco:Commerce:Deploy"));
1420

21+
// Ensure SQLite support for local development
22+
builder.WithUmbracoCommerceBuilder().AddSQLite();
23+
24+
builder.Services.AddUnique<IConfigureOptions<ConnectionStringConfig>, ConfigureUmbracoCommerceConnectionString>();
25+
1526
builder.Services.AddSingleton<UmbracoCommerceDeploySettingsAccessor>();
1627

1728
builder.Components()
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
using System;
2+
using Microsoft.Extensions.Configuration;
3+
using Microsoft.Extensions.Options;
4+
using Umbraco.Commerce.Core.Data;
5+
using Umbraco.Deploy.Core.Configuration.DeployConfiguration;
6+
using Umbraco.Extensions;
7+
using UcConstants = Umbraco.Commerce.Core.Constants;
8+
using UmbConstants = Umbraco.Cms.Core.Constants;
9+
10+
namespace Umbraco.Commerce.Deploy.Configuration;
11+
12+
public class ConfigureUmbracoCommerceConnectionString(IConfiguration configuration, IOptionsMonitor<DeploySettings> deploySettings) : IConfigureNamedOptions<ConnectionStringConfig>
13+
{
14+
public void Configure(ConnectionStringConfig connectionStringConfig)
15+
=> Configure(Options.DefaultName, connectionStringConfig);
16+
17+
public void Configure(string? name, ConnectionStringConfig connectionStringConfig)
18+
{
19+
// Default to using Umbraco Commerce connection name
20+
if (name == Options.DefaultName)
21+
{
22+
name = UcConstants.System.ConnectionStringName;
23+
}
24+
25+
// Skip non-empty connection string and only configure Umbraco Commerce connection name
26+
if ((connectionStringConfig != null
27+
&& !string.IsNullOrWhiteSpace(connectionStringConfig.ConnectionString)
28+
&& !string.IsNullOrWhiteSpace(connectionStringConfig.ProviderName))
29+
|| name != UcConstants.System.ConnectionStringName)
30+
{
31+
return;
32+
}
33+
34+
// Get Umbraco connection string
35+
_ = configuration.GetUmbracoConnectionString(UmbConstants.System.UmbracoConnectionName, out var providerName);
36+
var umbDbProviderName = providerName;
37+
38+
// If Umbraco is configured to use SQLIte, then configure Umbraco Commerce to use it's own SQLite database
39+
if (umbDbProviderName != null && umbDbProviderName.Contains("SQLite", StringComparison.InvariantCultureIgnoreCase))
40+
{
41+
var dataDirectory = AppDomain.CurrentDomain.GetData("DataDirectory")?.ToString();
42+
var ucDbConnectionString = $"Data Source={dataDirectory}/Umbraco.Commerce.sqlite.db;Mode=ReadWrite;Foreign Keys=True;Pooling=True;Cache=Private";
43+
var ucDbProviderName = Persistence.Sqlite.Constants.ProviderName;
44+
45+
// Update configuration
46+
configuration[$"ConnectionStrings:{name}"] = ucDbConnectionString;
47+
configuration[$"ConnectionStrings:{name}{ConnectionStringConfig.ProviderNamePostfix}"] = ucDbProviderName;
48+
49+
// Update options
50+
connectionStringConfig.Name = name;
51+
connectionStringConfig.ConnectionString = ucDbConnectionString;
52+
connectionStringConfig.ProviderName = ucDbProviderName;
53+
}
54+
}
55+
}

src/Umbraco.Commerce.Deploy/Umbraco.Commerce.Deploy.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
<ItemGroup>
1111
<PackageReference Include="Umbraco.Commerce.Cms.Startup" />
12+
<PackageReference Include="Umbraco.Commerce.Persistence.Sqlite" />
1213
<PackageReference Include="Umbraco.Deploy.Infrastructure" />
1314
</ItemGroup>
1415

0 commit comments

Comments
 (0)