Skip to content

Commit 208a31b

Browse files
Add locations support
1 parent 09e11c9 commit 208a31b

File tree

6 files changed

+146
-3
lines changed

6 files changed

+146
-3
lines changed

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ BenchmarkDotNet.Artifacts/
6060
# .NET
6161
project.lock.json
6262
project.fragment.lock.json
63-
artifacts/
6463

6564
# Tye
6665
.tye/
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System.Collections.Generic;
2+
using Umbraco.Cms.Core;
3+
using Umbraco.Cms.Core.Deploy;
4+
using Umbraco.Commerce.Core.Models;
5+
6+
namespace Umbraco.Commerce.Deploy.Artifacts
7+
{
8+
public class LocationArtifact : StoreEntityArtifactBase
9+
{
10+
public LocationArtifact(GuidUdi udi, GuidUdi storeUdi, IEnumerable<ArtifactDependency> dependencies = null)
11+
: base(udi, storeUdi, dependencies)
12+
{ }
13+
14+
public string AddressLine1 { get; set; }
15+
public string AddressLine2 { get; set; }
16+
public string City { get; set; }
17+
public string Region { get; set; }
18+
public string CountryIsoCode { get; set; }
19+
public string ZipCode { get; set; }
20+
public LocationType Type { get; set; }
21+
public int SortOrder { get; set; }
22+
}
23+
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public void Terminate()
4242
private void RegisterUdiTypes()
4343
{
4444
UdiParser.RegisterUdiType(UmbracoCommerceConstants.UdiEntityType.Store, UdiType.GuidUdi);
45+
UdiParser.RegisterUdiType(UmbracoCommerceConstants.UdiEntityType.Location, UdiType.GuidUdi);
4546
UdiParser.RegisterUdiType(UmbracoCommerceConstants.UdiEntityType.OrderStatus, UdiType.GuidUdi);
4647
UdiParser.RegisterUdiType(UmbracoCommerceConstants.UdiEntityType.ShippingMethod, UdiType.GuidUdi);
4748
UdiParser.RegisterUdiType(UmbracoCommerceConstants.UdiEntityType.PaymentMethod, UdiType.GuidUdi);
@@ -169,6 +170,7 @@ private void InitializeDiskRefreshers()
169170
{
170171
// Add in settings entities as valid Disk entities that can be written out
171172
_diskEntityService.RegisterDiskEntityType(UmbracoCommerceConstants.UdiEntityType.Store);
173+
_diskEntityService.RegisterDiskEntityType(UmbracoCommerceConstants.UdiEntityType.Location);
172174
_diskEntityService.RegisterDiskEntityType(UmbracoCommerceConstants.UdiEntityType.OrderStatus);
173175
_diskEntityService.RegisterDiskEntityType(UmbracoCommerceConstants.UdiEntityType.ShippingMethod);
174176
_diskEntityService.RegisterDiskEntityType(UmbracoCommerceConstants.UdiEntityType.PaymentMethod);
@@ -186,6 +188,10 @@ private void InitializeDiskRefreshers()
186188
EventHub.NotificationEvents.OnStoreSaved((e) => _diskEntityService.WriteArtifacts(new[] { GetEntityArtifact(e.Store) }));
187189
EventHub.NotificationEvents.OnStoreDeleted((e) => _diskEntityService.DeleteArtifacts(new[] { GetEntityArtifact(e.Store) }));
188190

191+
// Location
192+
EventHub.NotificationEvents.OnLocationSaved((e) => _diskEntityService.WriteArtifacts(new[] { GetEntityArtifact(e.Location) }));
193+
EventHub.NotificationEvents.OnLocationDeleted((e) => _diskEntityService.DeleteArtifacts(new[] { GetEntityArtifact(e.Location) }));
194+
189195
// OrderStatus
190196
EventHub.NotificationEvents.OnOrderStatusSaved((e) => _diskEntityService.WriteArtifacts(new[] { GetEntityArtifact(e.OrderStatus) }));
191197
EventHub.NotificationEvents.OnOrderStatusDeleted((e) => _diskEntityService.DeleteArtifacts(new[] { GetEntityArtifact(e.OrderStatus) }));
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using Umbraco.Commerce.Core.Api;
4+
using Umbraco.Commerce.Core.Models;
5+
using Umbraco.Commerce.Deploy.Artifacts;
6+
using Umbraco.Commerce.Deploy.Configuration;
7+
using Umbraco.Cms.Core;
8+
using Umbraco.Cms.Core.Deploy;
9+
10+
namespace Umbraco.Commerce.Deploy.Connectors.ServiceConnectors
11+
{
12+
[UdiDefinition(UmbracoCommerceConstants.UdiEntityType.Location, UdiType.GuidUdi)]
13+
public class UmbracoCommerceLocationServiceConnector : UmbracoCommerceStoreEntityServiceConnectorBase<LocationArtifact, LocationReadOnly, Location, LocationState>
14+
{
15+
public override int[] ProcessPasses => new[]
16+
{
17+
2
18+
};
19+
20+
public override string[] ValidOpenSelectors => new[]
21+
{
22+
"this",
23+
"this-and-descendants",
24+
"descendants"
25+
};
26+
27+
public override string AllEntitiesRangeName => "All Umbraco Commerce Locations";
28+
29+
public override string UdiEntityType => UmbracoCommerceConstants.UdiEntityType.Location;
30+
31+
public UmbracoCommerceLocationServiceConnector(IUmbracoCommerceApi umbracoCommerceApi, UmbracoCommerceDeploySettingsAccessor settingsAccessor)
32+
: base(umbracoCommerceApi, settingsAccessor)
33+
{ }
34+
35+
public override string GetEntityName(LocationReadOnly entity)
36+
=> entity.Name;
37+
38+
public override LocationReadOnly GetEntity(Guid id)
39+
=> _umbracoCommerceApi.GetLocation(id);
40+
41+
public override IEnumerable<LocationReadOnly> GetEntities(Guid storeId)
42+
=> _umbracoCommerceApi.GetLocations(storeId);
43+
44+
public override LocationArtifact GetArtifact(GuidUdi udi, LocationReadOnly entity)
45+
{
46+
if (entity == null)
47+
return null;
48+
49+
var storeUdi = new GuidUdi(UmbracoCommerceConstants.UdiEntityType.Store, entity.StoreId);
50+
51+
var dependencies = new ArtifactDependencyCollection
52+
{
53+
new UmbracoCommerceArtifactDependency(storeUdi)
54+
};
55+
56+
return new LocationArtifact(udi, storeUdi, dependencies)
57+
{
58+
Name = entity.Name,
59+
Alias = entity.Alias,
60+
AddressLine1 = entity.AddressLine1,
61+
AddressLine2 = entity.AddressLine2,
62+
City = entity.City,
63+
Region = entity.Region,
64+
CountryIsoCode = entity.CountryIsoCode,
65+
ZipCode = entity.ZipCode,
66+
Type = entity.Type,
67+
SortOrder = entity.SortOrder
68+
};
69+
}
70+
71+
public override void Process(ArtifactDeployState<LocationArtifact, LocationReadOnly> state, IDeployContext context, int pass)
72+
{
73+
state.NextPass = GetNextPass(ProcessPasses, pass);
74+
75+
switch (pass)
76+
{
77+
case 2:
78+
Pass2(state, context);
79+
break;
80+
default:
81+
throw new ArgumentOutOfRangeException(nameof(pass));
82+
}
83+
}
84+
85+
private void Pass2(ArtifactDeployState<LocationArtifact, LocationReadOnly> state, IDeployContext context)
86+
{
87+
_umbracoCommerceApi.Uow.Execute(uow =>
88+
{
89+
var artifact = state.Artifact;
90+
91+
artifact.Udi.EnsureType(UmbracoCommerceConstants.UdiEntityType.Location);
92+
artifact.StoreUdi.EnsureType(UmbracoCommerceConstants.UdiEntityType.Store);
93+
94+
var entity = state.Entity?.AsWritable(uow) ?? Location.Create(uow, artifact.Udi.Guid, artifact.StoreUdi.Guid, artifact.Alias, artifact.Name);
95+
96+
entity.SetName(artifact.Name, artifact.Alias)
97+
.SetType(artifact.Type)
98+
.SetAddress(new Address(artifact.AddressLine1, artifact.AddressLine2, artifact.City, artifact.Region, artifact.CountryIsoCode, artifact.ZipCode))
99+
.SetSortOrder(artifact.SortOrder);
100+
101+
_umbracoCommerceApi.SaveLocation(entity);
102+
103+
uow.Complete();
104+
});
105+
}
106+
}
107+
}

src/Umbraco.Commerce.Deploy/UmbracoCommerceConstants.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace Umbraco.Commerce.Deploy
1+
namespace Umbraco.Commerce.Deploy
22
{
33
public static class UmbracoCommerceConstants
44
{
@@ -12,6 +12,8 @@ public static class UdiEntityType
1212

1313
public const string Currency = "umbraco-commerce-currency";
1414

15+
public const string Location = "umbraco-commerce-location";
16+
1517
public const string OrderStatus = "umbraco-commerce-order-status";
1618

1719
public const string ShippingMethod = "umbraco-commerce-shipping-method";

src/Umbraco.Commerce.Deploy/UmbracoCommerceUdiGetterExtensions.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using Umbraco.Commerce.Core.Models;
1+
using Umbraco.Commerce.Core.Models;
22
using Umbraco.Cms.Core;
33

44
namespace Umbraco.Commerce.Deploy
@@ -16,6 +16,9 @@ public static GuidUdi GetUdi(this EntityBase entity)
1616
if (entity is RegionReadOnly region)
1717
return region.GetUdi();
1818

19+
if (entity is LocationReadOnly location)
20+
return location.GetUdi();
21+
1922
if (entity is OrderStatusReadOnly orderStatus)
2023
return orderStatus.GetUdi();
2124

@@ -64,6 +67,9 @@ public static GuidUdi GetUdi(this CountryReadOnly entity)
6467
public static GuidUdi GetUdi(this RegionReadOnly entity)
6568
=> new GuidUdi(UmbracoCommerceConstants.UdiEntityType.Region, entity.Id);
6669

70+
public static GuidUdi GetUdi(this LocationReadOnly entity)
71+
=> new GuidUdi(UmbracoCommerceConstants.UdiEntityType.Location, entity.Id);
72+
6773
public static GuidUdi GetUdi(this OrderStatusReadOnly entity)
6874
=> new GuidUdi(UmbracoCommerceConstants.UdiEntityType.OrderStatus, entity.Id);
6975

0 commit comments

Comments
 (0)