Skip to content

Commit 438d41f

Browse files
committed
feat: add CI workflow for build and test automation; refactor pre-commit hook and add utility interfaces for testing
1 parent abf6394 commit 438d41f

File tree

20 files changed

+734
-433
lines changed

20 files changed

+734
-433
lines changed

.github/workflows/ci.yml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
name: Build and Test
2+
3+
on:
4+
push:
5+
branches: [main]
6+
7+
jobs:
8+
build:
9+
runs-on: ubuntu-latest
10+
11+
steps:
12+
- uses: actions/checkout@v3
13+
- name: Setup .NET Core SDK
14+
uses: actions/setup-dotnet@v3
15+
with:
16+
dotnet-version: 9.0.100
17+
- name: Install dependencies
18+
run: dotnet restore
19+
- name: Build
20+
run: dotnet build --configuration Release
21+
- name: Test
22+
run: dotnet test --no-restore --verbosity normal
23+
- name: Publish
24+
run: dotnet publish --configuration Release --output ${{ github.workspace }}/publish
25+
- name: Upload Build Artifacts
26+
uses: actions/upload-artifact@v3
27+
with:
28+
name: app-build
29+
path: ${{ github.workspace }}/publish

.husky/pre-commit

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
echo "Husky.NET Started"
66
echo "Running Pre-Commit Hook"
77

8-
dotnet tool run dotnet-csharpier ./Source/Ecommerce.Application/ ./Source/Ecommerce.Domain/ ./Source/Ecommerce.Infrastructure/ ./Source/Ecommerce.Api/ ./Source/Ecommerce.Contracts/ ./Tests/UnitTests/Ecommerce.Api.UnitTests/ ./Tests/UnitTests/Ecommerce.Application.UnitTests/ ./Tests/UnitTests/Ecommerce.Domain.UnitTests/ ./Tests/UnitTests/Ecommerce.Infrastructure.UnitTests/
8+
dotnet format
99

1010

1111
echo "Husky.NET Finished"

Ecommerce_Platform.NET.sln

Lines changed: 38 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,21 @@ Microsoft Visual Studio Solution File, Format Version 12.00
33
# Visual Studio Version 17
44
VisualStudioVersion = 17.0.31903.59
55
MinimumVisualStudioVersion = 10.0.40219.1
6-
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Source", "Source", "{11B122B6-7F61-46ED-BA8F-171DB8CDEB73}"
6+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Source", "Source", "{822DD145-7FF0-4C65-A5BE-1EBAC64933DE}"
77
EndProject
8-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ecommerce.Api", "Source\Ecommerce.Api\Ecommerce.Api.csproj", "{BC89D3E0-95E6-46CC-B077-2C890F72DC15}"
8+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ecommerce.Api", "Source\Ecommerce.Api\Ecommerce.Api.csproj", "{9837F584-B985-4C56-86B2-2F6967FEABE2}"
99
EndProject
10-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ecommerce.Application", "Source\Ecommerce.Application\Ecommerce.Application.csproj", "{A1AA0CB4-50E2-4CC0-A6B2-FB635F513D14}"
10+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ecommerce.Application", "Source\Ecommerce.Application\Ecommerce.Application.csproj", "{06E2DA73-EA39-4681-8BF2-D6EDE5CD2797}"
1111
EndProject
12-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ecommerce.Contracts", "Source\Ecommerce.Contracts\Ecommerce.Contracts.csproj", "{1519C3D3-5D83-49BA-A891-B1833BF7099D}"
12+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ecommerce.Contracts", "Source\Ecommerce.Contracts\Ecommerce.Contracts.csproj", "{8C001B2B-21E9-4D4D-BE9C-7443B58EC07B}"
1313
EndProject
14-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ecommerce.Domain", "Source\Ecommerce.Domain\Ecommerce.Domain.csproj", "{DD12A4EE-71F1-4773-A1C4-2FE6E252237A}"
14+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ecommerce.Domain", "Source\Ecommerce.Domain\Ecommerce.Domain.csproj", "{0019F097-71A5-4A8B-8673-ED294ADF101A}"
1515
EndProject
16-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ecommerce.Infrastructure", "Source\Ecommerce.Infrastructure\Ecommerce.Infrastructure.csproj", "{81E2C429-1AB1-45EE-B8E5-50A25C8FE2E9}"
16+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ecommerce.Infrastructure", "Source\Ecommerce.Infrastructure\Ecommerce.Infrastructure.csproj", "{67F6F1B5-51EF-4519-87DB-16697D544D02}"
1717
EndProject
18-
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{166B64B0-8C04-4D59-8BB5-7ED5250506B1}"
18+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{15592CAE-0D6B-4FFE-A9DA-D72C0EB42BD7}"
1919
EndProject
20-
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UnitTests", "UnitTests", "{F1DEAA29-80A3-4C21-A890-7A1F4A94AC3C}"
21-
EndProject
22-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ecommerce.Api.UnitTests", "Tests\UnitTests\Ecommerce.Api.UnitTests\Ecommerce.Api.UnitTests.csproj", "{CD72AE02-09B5-4FC6-AA4A-508898BFB71A}"
23-
EndProject
24-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ecommerce.Application.UnitTests", "Tests\UnitTests\Ecommerce.Application.UnitTests\Ecommerce.Application.UnitTests.csproj", "{31754624-A161-4D4E-99B2-9699E4C75C11}"
25-
EndProject
26-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ecommerce.Domain.UnitTests", "Tests\UnitTests\Ecommerce.Domain.UnitTests\Ecommerce.Domain.UnitTests.csproj", "{DB0DD254-CCDE-4E7F-AF33-3235C9FA7001}"
27-
EndProject
28-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ecommerce.Infrastructure.UnitTests", "Tests\UnitTests\Ecommerce.Infrastructure.UnitTests\Ecommerce.Infrastructure.UnitTests.csproj", "{DED64E01-42C8-461B-8344-6BD65512F954}"
20+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ecommerce.UnitTests", "Tests\UnitTests\Ecommerce.UnitTests.csproj", "{991BEE77-9523-44D4-9CCD-A56180292637}"
2921
EndProject
3022
Global
3123
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -36,53 +28,37 @@ Global
3628
HideSolutionNode = FALSE
3729
EndGlobalSection
3830
GlobalSection(ProjectConfigurationPlatforms) = postSolution
39-
{BC89D3E0-95E6-46CC-B077-2C890F72DC15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
40-
{BC89D3E0-95E6-46CC-B077-2C890F72DC15}.Debug|Any CPU.Build.0 = Debug|Any CPU
41-
{BC89D3E0-95E6-46CC-B077-2C890F72DC15}.Release|Any CPU.ActiveCfg = Release|Any CPU
42-
{BC89D3E0-95E6-46CC-B077-2C890F72DC15}.Release|Any CPU.Build.0 = Release|Any CPU
43-
{A1AA0CB4-50E2-4CC0-A6B2-FB635F513D14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
44-
{A1AA0CB4-50E2-4CC0-A6B2-FB635F513D14}.Debug|Any CPU.Build.0 = Debug|Any CPU
45-
{A1AA0CB4-50E2-4CC0-A6B2-FB635F513D14}.Release|Any CPU.ActiveCfg = Release|Any CPU
46-
{A1AA0CB4-50E2-4CC0-A6B2-FB635F513D14}.Release|Any CPU.Build.0 = Release|Any CPU
47-
{1519C3D3-5D83-49BA-A891-B1833BF7099D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
48-
{1519C3D3-5D83-49BA-A891-B1833BF7099D}.Debug|Any CPU.Build.0 = Debug|Any CPU
49-
{1519C3D3-5D83-49BA-A891-B1833BF7099D}.Release|Any CPU.ActiveCfg = Release|Any CPU
50-
{1519C3D3-5D83-49BA-A891-B1833BF7099D}.Release|Any CPU.Build.0 = Release|Any CPU
51-
{DD12A4EE-71F1-4773-A1C4-2FE6E252237A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
52-
{DD12A4EE-71F1-4773-A1C4-2FE6E252237A}.Debug|Any CPU.Build.0 = Debug|Any CPU
53-
{DD12A4EE-71F1-4773-A1C4-2FE6E252237A}.Release|Any CPU.ActiveCfg = Release|Any CPU
54-
{DD12A4EE-71F1-4773-A1C4-2FE6E252237A}.Release|Any CPU.Build.0 = Release|Any CPU
55-
{81E2C429-1AB1-45EE-B8E5-50A25C8FE2E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
56-
{81E2C429-1AB1-45EE-B8E5-50A25C8FE2E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
57-
{81E2C429-1AB1-45EE-B8E5-50A25C8FE2E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
58-
{81E2C429-1AB1-45EE-B8E5-50A25C8FE2E9}.Release|Any CPU.Build.0 = Release|Any CPU
59-
{CD72AE02-09B5-4FC6-AA4A-508898BFB71A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
60-
{CD72AE02-09B5-4FC6-AA4A-508898BFB71A}.Debug|Any CPU.Build.0 = Debug|Any CPU
61-
{CD72AE02-09B5-4FC6-AA4A-508898BFB71A}.Release|Any CPU.ActiveCfg = Release|Any CPU
62-
{CD72AE02-09B5-4FC6-AA4A-508898BFB71A}.Release|Any CPU.Build.0 = Release|Any CPU
63-
{31754624-A161-4D4E-99B2-9699E4C75C11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
64-
{31754624-A161-4D4E-99B2-9699E4C75C11}.Debug|Any CPU.Build.0 = Debug|Any CPU
65-
{31754624-A161-4D4E-99B2-9699E4C75C11}.Release|Any CPU.ActiveCfg = Release|Any CPU
66-
{31754624-A161-4D4E-99B2-9699E4C75C11}.Release|Any CPU.Build.0 = Release|Any CPU
67-
{DB0DD254-CCDE-4E7F-AF33-3235C9FA7001}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
68-
{DB0DD254-CCDE-4E7F-AF33-3235C9FA7001}.Debug|Any CPU.Build.0 = Debug|Any CPU
69-
{DB0DD254-CCDE-4E7F-AF33-3235C9FA7001}.Release|Any CPU.ActiveCfg = Release|Any CPU
70-
{DB0DD254-CCDE-4E7F-AF33-3235C9FA7001}.Release|Any CPU.Build.0 = Release|Any CPU
71-
{DED64E01-42C8-461B-8344-6BD65512F954}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
72-
{DED64E01-42C8-461B-8344-6BD65512F954}.Debug|Any CPU.Build.0 = Debug|Any CPU
73-
{DED64E01-42C8-461B-8344-6BD65512F954}.Release|Any CPU.ActiveCfg = Release|Any CPU
74-
{DED64E01-42C8-461B-8344-6BD65512F954}.Release|Any CPU.Build.0 = Release|Any CPU
31+
{9837F584-B985-4C56-86B2-2F6967FEABE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
32+
{9837F584-B985-4C56-86B2-2F6967FEABE2}.Debug|Any CPU.Build.0 = Debug|Any CPU
33+
{9837F584-B985-4C56-86B2-2F6967FEABE2}.Release|Any CPU.ActiveCfg = Release|Any CPU
34+
{9837F584-B985-4C56-86B2-2F6967FEABE2}.Release|Any CPU.Build.0 = Release|Any CPU
35+
{06E2DA73-EA39-4681-8BF2-D6EDE5CD2797}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
36+
{06E2DA73-EA39-4681-8BF2-D6EDE5CD2797}.Debug|Any CPU.Build.0 = Debug|Any CPU
37+
{06E2DA73-EA39-4681-8BF2-D6EDE5CD2797}.Release|Any CPU.ActiveCfg = Release|Any CPU
38+
{06E2DA73-EA39-4681-8BF2-D6EDE5CD2797}.Release|Any CPU.Build.0 = Release|Any CPU
39+
{8C001B2B-21E9-4D4D-BE9C-7443B58EC07B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
40+
{8C001B2B-21E9-4D4D-BE9C-7443B58EC07B}.Debug|Any CPU.Build.0 = Debug|Any CPU
41+
{8C001B2B-21E9-4D4D-BE9C-7443B58EC07B}.Release|Any CPU.ActiveCfg = Release|Any CPU
42+
{8C001B2B-21E9-4D4D-BE9C-7443B58EC07B}.Release|Any CPU.Build.0 = Release|Any CPU
43+
{0019F097-71A5-4A8B-8673-ED294ADF101A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
44+
{0019F097-71A5-4A8B-8673-ED294ADF101A}.Debug|Any CPU.Build.0 = Debug|Any CPU
45+
{0019F097-71A5-4A8B-8673-ED294ADF101A}.Release|Any CPU.ActiveCfg = Release|Any CPU
46+
{0019F097-71A5-4A8B-8673-ED294ADF101A}.Release|Any CPU.Build.0 = Release|Any CPU
47+
{67F6F1B5-51EF-4519-87DB-16697D544D02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
48+
{67F6F1B5-51EF-4519-87DB-16697D544D02}.Debug|Any CPU.Build.0 = Debug|Any CPU
49+
{67F6F1B5-51EF-4519-87DB-16697D544D02}.Release|Any CPU.ActiveCfg = Release|Any CPU
50+
{67F6F1B5-51EF-4519-87DB-16697D544D02}.Release|Any CPU.Build.0 = Release|Any CPU
51+
{991BEE77-9523-44D4-9CCD-A56180292637}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
52+
{991BEE77-9523-44D4-9CCD-A56180292637}.Debug|Any CPU.Build.0 = Debug|Any CPU
53+
{991BEE77-9523-44D4-9CCD-A56180292637}.Release|Any CPU.ActiveCfg = Release|Any CPU
54+
{991BEE77-9523-44D4-9CCD-A56180292637}.Release|Any CPU.Build.0 = Release|Any CPU
7555
EndGlobalSection
7656
GlobalSection(NestedProjects) = preSolution
77-
{BC89D3E0-95E6-46CC-B077-2C890F72DC15} = {11B122B6-7F61-46ED-BA8F-171DB8CDEB73}
78-
{A1AA0CB4-50E2-4CC0-A6B2-FB635F513D14} = {11B122B6-7F61-46ED-BA8F-171DB8CDEB73}
79-
{1519C3D3-5D83-49BA-A891-B1833BF7099D} = {11B122B6-7F61-46ED-BA8F-171DB8CDEB73}
80-
{DD12A4EE-71F1-4773-A1C4-2FE6E252237A} = {11B122B6-7F61-46ED-BA8F-171DB8CDEB73}
81-
{81E2C429-1AB1-45EE-B8E5-50A25C8FE2E9} = {11B122B6-7F61-46ED-BA8F-171DB8CDEB73}
82-
{F1DEAA29-80A3-4C21-A890-7A1F4A94AC3C} = {166B64B0-8C04-4D59-8BB5-7ED5250506B1}
83-
{CD72AE02-09B5-4FC6-AA4A-508898BFB71A} = {F1DEAA29-80A3-4C21-A890-7A1F4A94AC3C}
84-
{31754624-A161-4D4E-99B2-9699E4C75C11} = {F1DEAA29-80A3-4C21-A890-7A1F4A94AC3C}
85-
{DB0DD254-CCDE-4E7F-AF33-3235C9FA7001} = {F1DEAA29-80A3-4C21-A890-7A1F4A94AC3C}
86-
{DED64E01-42C8-461B-8344-6BD65512F954} = {F1DEAA29-80A3-4C21-A890-7A1F4A94AC3C}
57+
{9837F584-B985-4C56-86B2-2F6967FEABE2} = {822DD145-7FF0-4C65-A5BE-1EBAC64933DE}
58+
{06E2DA73-EA39-4681-8BF2-D6EDE5CD2797} = {822DD145-7FF0-4C65-A5BE-1EBAC64933DE}
59+
{8C001B2B-21E9-4D4D-BE9C-7443B58EC07B} = {822DD145-7FF0-4C65-A5BE-1EBAC64933DE}
60+
{0019F097-71A5-4A8B-8673-ED294ADF101A} = {822DD145-7FF0-4C65-A5BE-1EBAC64933DE}
61+
{67F6F1B5-51EF-4519-87DB-16697D544D02} = {822DD145-7FF0-4C65-A5BE-1EBAC64933DE}
62+
{991BEE77-9523-44D4-9CCD-A56180292637} = {15592CAE-0D6B-4FFE-A9DA-D72C0EB42BD7}
8763
EndGlobalSection
8864
EndGlobal

Source/Ecommerce.Infrastructure/Persistence/EfCore/Configurations/OrderConfiguration.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,12 +113,12 @@ public void Configure(EntityTypeBuilder<Order> builder)
113113
oi => oi.Price,
114114
pb =>
115115
{
116-
pb.Property(p => p.Value).HasColumnName("PriceValue").IsRequired();
116+
pb.Property(p => p.Value).HasColumnName("PriceValue").IsRequired();
117117
// pb.Property(p => p.Currency)
118118
// .HasColumnName("PriceCurrency")
119119
// .IsRequired()
120120
// .HasConversion(c => c.ToString(), c => c.ConvertTo<Currency>() ?? Currency.None);
121-
}
121+
}
122122
);
123123
}
124124
);

Source/Ecommerce.Infrastructure/Persistence/EfCore/Configurations/ProductConfigurations.cs

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -98,23 +98,23 @@ public void Configure(EntityTypeBuilder<Product> builder)
9898
r => r.AuthorId,
9999
ab =>
100100
{
101-
ab.Property(a => a.Value) // Access the 'Value' property of AuthorId
102-
.HasConversion(a => a, a => UserId.Convert(a))
103-
.HasColumnName("AuthorId")
104-
.IsRequired();
105-
}
101+
ab.Property(a => a.Value) // Access the 'Value' property of AuthorId
102+
.HasConversion(a => a, a => UserId.Convert(a))
103+
.HasColumnName("AuthorId")
104+
.IsRequired();
105+
}
106106
);
107107

108108
rb.Property(r => r.Description).IsRequired().HasMaxLength(1000);
109109
rb.OwnsOne(
110110
r => r.Rating,
111111
rb =>
112112
{
113-
rb.Property(r => r.Value)
114-
.HasColumnName("Rating")
115-
.HasConversion(r => r, r => Rating.Create(r).Value)
116-
.IsRequired();
117-
}
113+
rb.Property(r => r.Value)
114+
.HasColumnName("Rating")
115+
.HasConversion(r => r, r => Rating.Create(r).Value)
116+
.IsRequired();
117+
}
118118
);
119119
rb.WithOwner().HasForeignKey("ProductId");
120120
}
@@ -133,64 +133,64 @@ public void Configure(EntityTypeBuilder<Product> builder)
133133
i => i.Thumbnail,
134134
tib =>
135135
{
136-
tib.HasIndex(t => t.ObjectIdentifier).IsUnique();
137-
tib.Property(t => t.Url);
138-
tib.Property(t => t.ObjectIdentifier);
139-
}
136+
tib.HasIndex(t => t.ObjectIdentifier).IsUnique();
137+
tib.Property(t => t.Url);
138+
tib.Property(t => t.ObjectIdentifier);
139+
}
140140
);
141141
ib.OwnsOne(
142142
i => i.LeftImage,
143143
lib =>
144144
{
145-
lib.HasIndex(l => l.ObjectIdentifier).IsUnique();
146-
lib.Property(l => l.Url);
147-
lib.Property(l => l.ObjectIdentifier);
148-
}
145+
lib.HasIndex(l => l.ObjectIdentifier).IsUnique();
146+
lib.Property(l => l.Url);
147+
lib.Property(l => l.ObjectIdentifier);
148+
}
149149
);
150150
ib.OwnsOne(
151151
i => i.RightImage,
152152
rib =>
153153
{
154-
rib.HasIndex(r => r.ObjectIdentifier).IsUnique();
155-
rib.Property(r => r.Url);
156-
rib.Property(r => r.ObjectIdentifier);
157-
}
154+
rib.HasIndex(r => r.ObjectIdentifier).IsUnique();
155+
rib.Property(r => r.Url);
156+
rib.Property(r => r.ObjectIdentifier);
157+
}
158158
);
159159
ib.OwnsOne(
160160
i => i.FrontImage,
161161
fib =>
162162
{
163-
fib.HasIndex(f => f.ObjectIdentifier).IsUnique();
164-
fib.Property(f => f.Url);
165-
fib.Property(f => f.ObjectIdentifier);
166-
}
163+
fib.HasIndex(f => f.ObjectIdentifier).IsUnique();
164+
fib.Property(f => f.Url);
165+
fib.Property(f => f.ObjectIdentifier);
166+
}
167167
);
168168
ib.OwnsOne(
169169
i => i.BackImage,
170170
bib =>
171171
{
172-
bib.HasIndex(b => b.ObjectIdentifier).IsUnique();
173-
bib.Property(b => b.Url);
174-
bib.Property(b => b.ObjectIdentifier);
175-
}
172+
bib.HasIndex(b => b.ObjectIdentifier).IsUnique();
173+
bib.Property(b => b.Url);
174+
bib.Property(b => b.ObjectIdentifier);
175+
}
176176
);
177177
ib.OwnsOne(
178178
i => i.TopImage,
179179
tib =>
180180
{
181-
tib.HasIndex(t => t.ObjectIdentifier).IsUnique();
182-
tib.Property(t => t.Url);
183-
tib.Property(t => t.ObjectIdentifier);
184-
}
181+
tib.HasIndex(t => t.ObjectIdentifier).IsUnique();
182+
tib.Property(t => t.Url);
183+
tib.Property(t => t.ObjectIdentifier);
184+
}
185185
);
186186
ib.OwnsOne(
187187
i => i.BottomImage,
188188
bib =>
189189
{
190-
bib.HasIndex(b => b.ObjectIdentifier).IsUnique();
191-
bib.Property(b => b.Url);
192-
bib.Property(b => b.ObjectIdentifier);
193-
}
190+
bib.HasIndex(b => b.ObjectIdentifier).IsUnique();
191+
bib.Property(b => b.Url);
192+
bib.Property(b => b.ObjectIdentifier);
193+
}
194194
);
195195

196196
ib.WithOwner().HasForeignKey("ProductId");

Source/Ecommerce.Infrastructure/Persistence/EfCore/Configurations/UserConfiguration.cs

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -115,28 +115,28 @@ public void Configure(EntityTypeBuilder<User> builder)
115115
c => c.Items,
116116
cib =>
117117
{
118-
cib.ToTable("UserCartItems");
119-
cib.WithOwner().HasForeignKey("CartId");
120-
cib.HasKey(nameof(CartItem.Id), "CartId");
121-
cib.Property(ci => ci.Id)
122-
.HasColumnName("CartItemId")
123-
.ValueGeneratedNever()
124-
.HasConversion(id => id.Value, value => CartItemId.Convert(value))
125-
.IsRequired();
126-
127-
cib.Property(ci => ci.Quantity).HasColumnName("Quantity").IsRequired();
128-
129-
cib.Property(p => p.ProductId)
130-
.HasConversion(pi => pi.Value, v => ProductId.Convert(v))
131-
.HasColumnName("ProductId")
132-
.IsRequired();
118+
cib.ToTable("UserCartItems");
119+
cib.WithOwner().HasForeignKey("CartId");
120+
cib.HasKey(nameof(CartItem.Id), "CartId");
121+
cib.Property(ci => ci.Id)
122+
.HasColumnName("CartItemId")
123+
.ValueGeneratedNever()
124+
.HasConversion(id => id.Value, value => CartItemId.Convert(value))
125+
.IsRequired();
126+
127+
cib.Property(ci => ci.Quantity).HasColumnName("Quantity").IsRequired();
128+
129+
cib.Property(p => p.ProductId)
130+
.HasConversion(pi => pi.Value, v => ProductId.Convert(v))
131+
.HasColumnName("ProductId")
132+
.IsRequired();
133133

134134
// relationship with Product entity
135-
cib.HasOne<Product>()
136-
.WithMany()
137-
.HasForeignKey("ProductId")
138-
.OnDelete(DeleteBehavior.Restrict);
139-
}
135+
cib.HasOne<Product>()
136+
.WithMany()
137+
.HasForeignKey("ProductId")
138+
.OnDelete(DeleteBehavior.Restrict);
139+
}
140140
);
141141

142142
cb.Navigation(c => c.Items).UsePropertyAccessMode(PropertyAccessMode.Field);
@@ -169,14 +169,14 @@ public void Configure(EntityTypeBuilder<User> builder)
169169
w => w.ProductIds,
170170
wpb =>
171171
{
172-
wpb.ToTable("WishlistProducts");
173-
wpb.WithOwner().HasForeignKey("WishlistId");
174-
wpb.HasKey(nameof(ProductId.Value), "WishlistId");
175-
wpb.Property(pi => pi.Value).HasColumnName("ProductId").IsRequired();
172+
wpb.ToTable("WishlistProducts");
173+
wpb.WithOwner().HasForeignKey("WishlistId");
174+
wpb.HasKey(nameof(ProductId.Value), "WishlistId");
175+
wpb.Property(pi => pi.Value).HasColumnName("ProductId").IsRequired();
176176

177177
// relationship with Product entity
178-
wpb.HasOne<Product>().WithMany().OnDelete(DeleteBehavior.Restrict);
179-
}
178+
wpb.HasOne<Product>().WithMany().OnDelete(DeleteBehavior.Restrict);
179+
}
180180
);
181181
}
182182
);

0 commit comments

Comments
 (0)