diff --git a/MadWorld/Directory.Packages.props b/MadWorld/Directory.Packages.props
index 3c2f2f2..7f2adef 100644
--- a/MadWorld/Directory.Packages.props
+++ b/MadWorld/Directory.Packages.props
@@ -36,6 +36,8 @@
+
+
diff --git a/MadWorld/MadWorld.Architecture.Tests/DependencyTests.cs b/MadWorld/MadWorld.Architecture.Tests/DependencyTests.cs
new file mode 100644
index 0000000..7bfcf8d
--- /dev/null
+++ b/MadWorld/MadWorld.Architecture.Tests/DependencyTests.cs
@@ -0,0 +1,61 @@
+using ArchUnitNET.Domain.Extensions;
+using ArchUnitNET.Fluent;
+using ArchUnitNET.Loader;
+using ArchUnitNET.xUnit;
+using MadWorld.Backend.API.Anonymous;
+using MadWorld.Backend.API.Authorized;
+using MadWorld.Backend.API.Shared;
+using MadWorld.Backend.Application;
+using MadWorld.Backend.Domain;
+using MadWorld.Backend.Infrastructure;
+
+//add a using directive to ArchUnitNET.Fluent.ArchRuleDefinition to easily define ArchRules
+using static ArchUnitNET.Fluent.ArchRuleDefinition;
+
+namespace MadWorld.Architecture.Tests;
+
+public class DependencyTests
+{
+ private static readonly ArchUnitNET.Domain.Architecture Architecture = new ArchLoader().LoadAssemblies(
+ typeof(DomainMarker).Assembly,
+ typeof(AnonymousMarker).Assembly,
+ typeof(AuthorizedMarker).Assembly,
+ typeof(SharedMarker).Assembly,
+ typeof(ApplicationMarker).Assembly,
+ typeof(InfrastructureMarker).Assembly)
+ .Build();
+
+ private static readonly string DomainNamespace = typeof(DomainMarker).Namespace!;
+ private static readonly string AnonymousNamespace = typeof(AnonymousMarker).Namespace!;
+ private static readonly string AuthorizedNamespace = typeof(AuthorizedMarker).Namespace!;
+ private static readonly string SharedNamespace = typeof(SharedMarker).Namespace!;
+ private static readonly string ApplicationNamespace = typeof(ApplicationMarker).Namespace!;
+ private static readonly string InfrastructureNamespace = typeof(InfrastructureMarker).Namespace!;
+
+ [Fact]
+ public void ApplicationDependsNotOnInfrastructure()
+ {
+ var rule = Types().That().ResideInNamespace($"{ApplicationNamespace}.*", true)
+ .Should().NotDependOnAny($"{InfrastructureNamespace}.*", true);
+
+ rule.Check(Architecture);
+ }
+
+ [Fact]
+ public void DomainDependsNotOnBackendProject()
+ {
+ var backendProjects = new List()
+ {
+ $"{AnonymousNamespace}.*",
+ $"{AuthorizedNamespace}.*",
+ $"{SharedNamespace}.*",
+ $"{ApplicationNamespace}.*",
+ $"{InfrastructureNamespace}.*",
+ };
+
+ var rule = Types().That().ResideInNamespace($"{DomainNamespace}.*", true)
+ .Should().NotDependOnAny(backendProjects, true);
+
+ rule.Check(Architecture);
+ }
+}
\ No newline at end of file
diff --git a/MadWorld/MadWorld.Architecture.Tests/MadWorld.Architecture.Tests.csproj b/MadWorld/MadWorld.Architecture.Tests/MadWorld.Architecture.Tests.csproj
new file mode 100644
index 0000000..bdbbbe9
--- /dev/null
+++ b/MadWorld/MadWorld.Architecture.Tests/MadWorld.Architecture.Tests.csproj
@@ -0,0 +1,34 @@
+
+
+
+ net7.0
+ enable
+ enable
+
+ false
+ true
+
+
+
+
+
+
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+
+
+
+
+
+
+
+
+
diff --git a/MadWorld/MadWorld.Architecture.Tests/Usings.cs b/MadWorld/MadWorld.Architecture.Tests/Usings.cs
new file mode 100644
index 0000000..8c927eb
--- /dev/null
+++ b/MadWorld/MadWorld.Architecture.Tests/Usings.cs
@@ -0,0 +1 @@
+global using Xunit;
\ No newline at end of file
diff --git a/MadWorld/MadWorld.Backend.API.Anonymous/AnonymousMarker.cs b/MadWorld/MadWorld.Backend.API.Anonymous/AnonymousMarker.cs
new file mode 100644
index 0000000..88d6015
--- /dev/null
+++ b/MadWorld/MadWorld.Backend.API.Anonymous/AnonymousMarker.cs
@@ -0,0 +1,6 @@
+namespace MadWorld.Backend.API.Anonymous;
+
+public interface AnonymousMarker
+{
+
+}
\ No newline at end of file
diff --git a/MadWorld/MadWorld.Backend.API.Authorized/AuthorizedMarker.cs b/MadWorld/MadWorld.Backend.API.Authorized/AuthorizedMarker.cs
new file mode 100644
index 0000000..efff188
--- /dev/null
+++ b/MadWorld/MadWorld.Backend.API.Authorized/AuthorizedMarker.cs
@@ -0,0 +1,6 @@
+namespace MadWorld.Backend.API.Authorized;
+
+public interface AuthorizedMarker
+{
+
+}
\ No newline at end of file
diff --git a/MadWorld/MadWorld.Backend.API.Shared/SharedMarker.cs b/MadWorld/MadWorld.Backend.API.Shared/SharedMarker.cs
new file mode 100644
index 0000000..8df1ebc
--- /dev/null
+++ b/MadWorld/MadWorld.Backend.API.Shared/SharedMarker.cs
@@ -0,0 +1,6 @@
+namespace MadWorld.Backend.API.Shared;
+
+public interface SharedMarker
+{
+
+}
\ No newline at end of file
diff --git a/MadWorld/MadWorld.Backend.Application/ApplicationMarker.cs b/MadWorld/MadWorld.Backend.Application/ApplicationMarker.cs
new file mode 100644
index 0000000..fc8760a
--- /dev/null
+++ b/MadWorld/MadWorld.Backend.Application/ApplicationMarker.cs
@@ -0,0 +1,6 @@
+namespace MadWorld.Backend.Application;
+
+public interface ApplicationMarker
+{
+
+}
\ No newline at end of file
diff --git a/MadWorld/MadWorld.Backend.Domain/DomainMarker.cs b/MadWorld/MadWorld.Backend.Domain/DomainMarker.cs
new file mode 100644
index 0000000..7d8e112
--- /dev/null
+++ b/MadWorld/MadWorld.Backend.Domain/DomainMarker.cs
@@ -0,0 +1,6 @@
+namespace MadWorld.Backend.Domain;
+
+public interface DomainMarker
+{
+
+}
\ No newline at end of file
diff --git a/MadWorld/MadWorld.Backend.Infrastructure/InfrastructureMarker.cs b/MadWorld/MadWorld.Backend.Infrastructure/InfrastructureMarker.cs
new file mode 100644
index 0000000..1f6cf80
--- /dev/null
+++ b/MadWorld/MadWorld.Backend.Infrastructure/InfrastructureMarker.cs
@@ -0,0 +1,6 @@
+namespace MadWorld.Backend.Infrastructure;
+
+public interface InfrastructureMarker
+{
+
+}
\ No newline at end of file
diff --git a/MadWorld/MadWorld.sln b/MadWorld/MadWorld.sln
index e18fe5e..06943a3 100644
--- a/MadWorld/MadWorld.sln
+++ b/MadWorld/MadWorld.sln
@@ -124,6 +124,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MadWorld.Frontend.UI.Admin.
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MadWorld.Backend.Domain.Unittests", "MadWorld.Backend.Domain.Unittests\MadWorld.Backend.Domain.Unittests.csproj", "{F28F0DEE-738E-499B-8234-6034C891B155}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ArchitectureTest", "ArchitectureTest", "{67EF329C-BD74-4980-854A-624B3CC41864}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MadWorld.Architecture.Tests", "MadWorld.Architecture.Tests\MadWorld.Architecture.Tests.csproj", "{9F93E72F-BB54-4779-8C70-805704302C46}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -161,6 +165,8 @@ Global
{C3BA6B58-C4C3-411C-95A2-A66B1EA682AF} = {8BBC9D54-C485-4FD7-99C4-0747D2837C71}
{00E588A9-3052-4DB5-8742-D673D397760C} = {C3BA6B58-C4C3-411C-95A2-A66B1EA682AF}
{F28F0DEE-738E-499B-8234-6034C891B155} = {DF837823-254A-44E6-9F46-133C31114CE5}
+ {67EF329C-BD74-4980-854A-624B3CC41864} = {5470C4F1-9CEA-4F86-8041-64C444941FDA}
+ {9F93E72F-BB54-4779-8C70-805704302C46} = {67EF329C-BD74-4980-854A-624B3CC41864}
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{ED8A1D3F-49F6-43AF-A8F7-AADAC4D7E84C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -247,5 +253,9 @@ Global
{F28F0DEE-738E-499B-8234-6034C891B155}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F28F0DEE-738E-499B-8234-6034C891B155}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F28F0DEE-738E-499B-8234-6034C891B155}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9F93E72F-BB54-4779-8C70-805704302C46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9F93E72F-BB54-4779-8C70-805704302C46}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9F93E72F-BB54-4779-8C70-805704302C46}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9F93E72F-BB54-4779-8C70-805704302C46}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal