Skip to content

Commit ad3e844

Browse files
author
Claude
committed
Merge branch 'release/16.0.0'
2 parents 6a809b0 + 0db5f0a commit ad3e844

File tree

37 files changed

+682
-4185
lines changed

37 files changed

+682
-4185
lines changed

Directory.Build.props

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project>
22
<PropertyGroup>
3-
<TargetFramework>net8.0</TargetFramework>
3+
<TargetFramework>net9.0</TargetFramework>
44
<Company>Umbraco HQ</Company>
55
<Authors>Umbraco</Authors>
66
<Copyright>Copyright © Umbraco $([System.DateTime]::Today.ToString('yyyy'))</Copyright>
@@ -33,8 +33,8 @@
3333
<!-- Package validation -->
3434
<PropertyGroup>
3535
<GenerateCompatibilitySuppressionFile>false</GenerateCompatibilitySuppressionFile>
36-
<EnablePackageValidation>true</EnablePackageValidation>
37-
<PackageValidationBaselineVersion>14.0.0</PackageValidationBaselineVersion>
36+
<EnablePackageValidation>false</EnablePackageValidation>
37+
<PackageValidationBaselineVersion>16.0.0</PackageValidationBaselineVersion>
3838
<EnableStrictModeForCompatibleFrameworksInPackage>true</EnableStrictModeForCompatibleFrameworksInPackage>
3939
<EnableStrictModeForCompatibleTfms>true</EnableStrictModeForCompatibleTfms>
4040
</PropertyGroup>

Directory.Packages.props

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
1-
<Project>
2-
<PropertyGroup>
3-
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
4-
</PropertyGroup>
5-
<ItemGroup>
6-
<GlobalPackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" />
7-
<GlobalPackageReference Include="Nerdbank.GitVersioning" Version="3.5.119" />
8-
<GlobalPackageReference Include="Umbraco.Code" Version="2.2.0" />
9-
<GlobalPackageReference Include="Umbraco.GitVersioning.Extensions" Version="0.2.0" />
10-
<GlobalPackageReference Include="Umbraco.JsonSchema.Extensions" Version="0.3.0" PrivateAssets="all" />
11-
</ItemGroup>
12-
<ItemGroup>
13-
<PackageVersion Include="Umbraco.Commerce.Cms.Startup" Version="[14.1.0, 15)" />
14-
<PackageVersion Include="Umbraco.Deploy.Infrastructure" Version="[14.1.0, 15)" />
15-
</ItemGroup>
16-
</Project>
1+
<Project>
2+
<PropertyGroup>
3+
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
4+
</PropertyGroup>
5+
<ItemGroup>
6+
<GlobalPackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" />
7+
<GlobalPackageReference Include="Nerdbank.GitVersioning" Version="3.7.115" />
8+
<GlobalPackageReference Include="Umbraco.Code" Version="2.3.0" />
9+
<GlobalPackageReference Include="Umbraco.GitVersioning.Extensions" Version="0.2.0" />
10+
<GlobalPackageReference Include="Umbraco.JsonSchema.Extensions" Version="0.3.0" PrivateAssets="all" />
11+
</ItemGroup>
12+
<ItemGroup>
13+
<PackageVersion Include="Umbraco.Commerce.Cms.Startup" Version="[16.0.0, 16.999.999)" />
14+
<PackageVersion Include="Umbraco.Commerce.Persistence.Sqlite" Version="[16.0.0, 16.999.999)" />
15+
<PackageVersion Include="Umbraco.Deploy.Infrastructure" Version="[16.0.0, 16.999.999)" />
16+
</ItemGroup>
17+
</Project>

NuGet.config

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,29 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<configuration>
33
<packageSources>
4-
<add key="nuget.org" value="https://www.nuget.org/api/v2/" />
4+
<clear />
5+
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
56
<add key="Umbraco Prereleases" value="https://www.myget.org/F/umbracoprereleases/api/v3/index.json" />
67
<add key="Umbraco Nightly" value="https://www.myget.org/F/umbraconightly/api/v3/index.json" />
8+
<add key="Umbraco Cloud Bundle" value="https://www.myget.org/F/uc-bundle/api/v3/index.json" />
79
</packageSources>
810
<packageSourceMapping>
911
<packageSource key="nuget.org">
12+
<package pattern="Umbraco" />
13+
<package pattern="Umbraco.*" />
1014
<package pattern="*" />
11-
<package pattern="Umbraco.Commerce.*" />
15+
</packageSource>
16+
<packageSource key="Umbraco Cloud Bundle">
17+
<package pattern="Umbraco" />
18+
<package pattern="Umbraco.*" />
19+
</packageSource>
20+
<packageSource key="Umbraco Prereleases">
21+
<package pattern="Umbraco" />
22+
<package pattern="Umbraco.*" />
1223
</packageSource>
1324
<packageSource key="Umbraco Nightly">
14-
<package pattern="Umbraco.Commerce.*" />
25+
<package pattern="Umbraco" />
26+
<package pattern="Umbraco.*" />
1527
</packageSource>
1628
</packageSourceMapping>
17-
</configuration>
29+
</configuration>

global.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"sdk": {
3-
"version": "8.0.100-rc.2.23502.2",
3+
"version": "9.0.100",
44
"rollForward": "latestFeature"
55
}
66
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*.lock.json

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

Lines changed: 158 additions & 241 deletions
Large diffs are not rendered by default.

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>, ConfigureUmbracoCommerceDeployConnectionString>();
25+
1526
builder.Services.AddSingleton<UmbracoCommerceDeploySettingsAccessor>();
1627

1728
builder.Components()
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using System;
2+
using Microsoft.Extensions.Configuration;
3+
using Microsoft.Extensions.Options;
4+
using Umbraco.Commerce.Cms.Data;
5+
using Umbraco.Commerce.Core.Data;
6+
using UmbConstants = Umbraco.Cms.Core.Constants;
7+
8+
namespace Umbraco.Commerce.Deploy.Configuration;
9+
10+
public class ConfigureUmbracoCommerceDeployConnectionString(IConfiguration configuration) : UmbracoConnectionStringConfigurator(configuration)
11+
{
12+
public override void Configure(ConnectionStringConfig options)
13+
=> Configure(Options.DefaultName, options);
14+
15+
public override void Configure(string? name, ConnectionStringConfig options)
16+
{
17+
// Perform the default configuration
18+
base.Configure(name, options);
19+
20+
// Only configure if we are using the default Umbraco connection string
21+
if (options.Name != UmbConstants.System.UmbracoConnectionName)
22+
{
23+
return;
24+
}
25+
26+
// If Umbraco is configured to use SQLIte, then configure Umbraco Commerce to use it's own SQLite database
27+
if (options.ProviderName.Contains("SQLite", StringComparison.InvariantCultureIgnoreCase))
28+
{
29+
var dataDirectory = AppDomain.CurrentDomain.GetData("DataDirectory")?.ToString();
30+
var ucDbConnectionString = $"Data Source={dataDirectory}/Umbraco.Commerce.sqlite.db;Mode=ReadWrite;Foreign Keys=True;Pooling=True;Cache=Private";
31+
var ucDbProviderName = Persistence.Sqlite.Constants.ProviderName;
32+
33+
// Update configuration
34+
configuration[$"ConnectionStrings:{name}"] = ucDbConnectionString;
35+
configuration[$"ConnectionStrings:{name}{ConnectionStringConfig.ProviderNamePostfix}"] = ucDbProviderName;
36+
37+
// Update options
38+
options.Name = name;
39+
options.ConnectionString = ucDbConnectionString;
40+
options.ProviderName = ucDbProviderName;
41+
}
42+
}
43+
}

src/Umbraco.Commerce.Deploy/Connectors/ServiceConnectors/UmbracoCommerceCountryServiceConnector.cs

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using Umbraco.Commerce.Deploy.Configuration;
1010
using Umbraco.Cms.Core;
1111
using Umbraco.Cms.Core.Deploy;
12+
using Umbraco.Commerce.Extensions;
1213

1314
namespace Umbraco.Commerce.Deploy.Connectors.ServiceConnectors
1415
{
@@ -39,12 +40,12 @@ public override string GetEntityName(CountryReadOnly entity)
3940
=> entity.Name;
4041

4142
public override Task<CountryReadOnly?> GetEntityAsync(Guid id, CancellationToken cancellationToken = default)
42-
=> Task.FromResult((CountryReadOnly?)_umbracoCommerceApi.GetCountry(id));
43+
=> _umbracoCommerceApi.GetCountryAsync(id);
4344

4445
public override IAsyncEnumerable<CountryReadOnly> GetEntitiesAsync(
4546
Guid storeId,
4647
CancellationToken cancellationToken = default)
47-
=> _umbracoCommerceApi.GetCountries(storeId).ToAsyncEnumerable();
48+
=> _umbracoCommerceApi.GetCountriesAsync(storeId).AsAsyncEnumerable();
4849

4950
public override Task<CountryArtifact?> GetArtifactAsync(GuidUdi? udi, CountryReadOnly? entity, CancellationToken cancellationToken = default)
5051
{
@@ -135,84 +136,80 @@ public override async Task ProcessAsync(
135136
}
136137
}
137138

138-
private Task Pass2Async(ArtifactDeployState<CountryArtifact, CountryReadOnly> state, IDeployContext context, CancellationToken cancellationToken = default) =>
139-
_umbracoCommerceApi.Uow.ExecuteAsync(
140-
(uow, ct) =>
139+
private async Task Pass2Async(ArtifactDeployState<CountryArtifact, CountryReadOnly> state, IDeployContext context, CancellationToken cancellationToken = default) =>
140+
await _umbracoCommerceApi.Uow.ExecuteAsync(
141+
async (uow, ct) =>
141142
{
142143
CountryArtifact artifact = state.Artifact;
143144

144145
artifact.Udi.EnsureType(UmbracoCommerceConstants.UdiEntityType.Country);
145146
artifact.StoreUdi.EnsureType(UmbracoCommerceConstants.UdiEntityType.Store);
146147

147-
Country? entity = state.Entity?.AsWritable(uow) ?? Country.Create(
148+
Country? entity = state.Entity != null ? await state.Entity.AsWritableAsync(uow) : await Country.CreateAsync(
148149
uow,
149150
artifact.Udi.Guid,
150151
artifact.StoreUdi.Guid,
151152
artifact.Code,
152153
artifact.Name);
153154

154-
entity.SetName(artifact.Name)
155-
.SetCode(artifact.Code)
156-
.SetSortOrder(artifact.SortOrder);
155+
await entity.SetNameAsync(artifact.Name)
156+
.SetCodeAsync(artifact.Code)
157+
.SetSortOrderAsync(artifact.SortOrder);
157158

158-
_umbracoCommerceApi.SaveCountry(entity);
159+
await _umbracoCommerceApi.SaveCountryAsync(entity, ct);
159160

160161
state.Entity = entity;
161162

162163
uow.Complete();
163-
164-
return Task.CompletedTask;
165164
},
166165
cancellationToken);
167166

168-
private Task Pass4Async(ArtifactDeployState<CountryArtifact, CountryReadOnly> state, IDeployContext context, CancellationToken cancellationToken = default) =>
169-
_umbracoCommerceApi.Uow.ExecuteAsync(
170-
(uow, ct) =>
167+
private async Task Pass4Async(ArtifactDeployState<CountryArtifact, CountryReadOnly> state, IDeployContext context, CancellationToken cancellationToken = default) =>
168+
await _umbracoCommerceApi.Uow.ExecuteAsync(
169+
async (uow, ct) =>
171170
{
172171
CountryArtifact artifact = state.Artifact;
173172

174173
if (state.Entity != null)
175174
{
176-
Country? entity = _umbracoCommerceApi.GetCountry(state.Entity.Id).AsWritable(uow);
175+
Country? entity = await _umbracoCommerceApi.GetCountryAsync(state.Entity.Id).AsWritableAsync(uow);
177176

178177
if (artifact.TaxCalculationMethodUdi != null)
179178
{
180179
artifact.TaxCalculationMethodUdi.EnsureType(UmbracoCommerceConstants.UdiEntityType.TaxCalculationMethod);
181180
// TODO: Check the tax calculation method exists?
182181
}
183182

184-
entity.SetTaxCalculationMethod(artifact.TaxCalculationMethodUdi?.Guid);
183+
await entity.SetTaxCalculationMethodAsync(artifact.TaxCalculationMethodUdi?.Guid);
185184

186185
if (artifact.DefaultCurrencyUdi != null)
187186
{
188187
artifact.DefaultCurrencyUdi.EnsureType(UmbracoCommerceConstants.UdiEntityType.Currency);
189188
// TODO: Check the currency exists?
190189
}
191190

192-
entity.SetDefaultCurrency(artifact.DefaultCurrencyUdi?.Guid);
191+
await entity.SetDefaultCurrencyAsync(artifact.DefaultCurrencyUdi?.Guid);
193192

194193
if (artifact.DefaultPaymentMethodUdi != null)
195194
{
196195
artifact.DefaultPaymentMethodUdi.EnsureType(UmbracoCommerceConstants.UdiEntityType.PaymentMethod);
197196
// TODO: Check the payment method exists?
198197
}
199198

200-
entity.SetDefaultPaymentMethod(artifact.DefaultPaymentMethodUdi?.Guid);
199+
await entity.SetDefaultPaymentMethodAsync(artifact.DefaultPaymentMethodUdi?.Guid);
201200

202201
if (artifact.DefaultShippingMethodUdi != null)
203202
{
204203
artifact.DefaultShippingMethodUdi.EnsureType(UmbracoCommerceConstants.UdiEntityType.ShippingMethod);
205204
// TODO: Check the payment method exists?
206205
}
207206

208-
entity.SetDefaultShippingMethod(artifact.DefaultShippingMethodUdi?.Guid);
207+
await entity.SetDefaultShippingMethodAsync(artifact.DefaultShippingMethodUdi?.Guid);
209208

210-
_umbracoCommerceApi.SaveCountry(entity);
209+
await _umbracoCommerceApi.SaveCountryAsync(entity, ct);
211210
}
212211

213212
uow.Complete();
214-
215-
return Task.CompletedTask;
216213
},
217214
cancellationToken);
218215
}

0 commit comments

Comments
 (0)