Skip to content

Commit

Permalink
Added full distribution of projections
Browse files Browse the repository at this point in the history
  • Loading branch information
oskardudycz committed Jul 30, 2023
1 parent 2e6f306 commit a9b1880
Show file tree
Hide file tree
Showing 17 changed files with 241 additions and 9 deletions.
Expand Up @@ -12,7 +12,6 @@
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
<PackageReference Include="Marten.AspNetCore" Version="6.0.5" />
<PackageReference Include="Marten" Version="6.0.5" />
<PackageReference Include="Confluent.Kafka" Version="2.2.0" />
</ItemGroup>

<ItemGroup>
Expand Down
@@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Marten.CommandLine" Version="6.0.5" />
<PackageReference Include="Marten" Version="6.0.5" />
<PackageReference Include="Confluent.Kafka" Version="2.2.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Helpdesk\Helpdesk.csproj" />
</ItemGroup>
</Project>
39 changes: 39 additions & 0 deletions Sample/Helpdesk.ScaledUpProjections/Helpdesk.Kafka/Program.cs
@@ -0,0 +1,39 @@
using System.Text.Json.Serialization;
using Helpdesk;
using Helpdesk.Api.Core.Kafka;
using Marten.Events.Projections;
using Microsoft.AspNetCore.Http.Json;
using Microsoft.AspNetCore.SignalR;
using Oakton;

var builder = WebApplication.CreateBuilder(args);

builder.Services
.AddMartenForHelpdeskAsyncOnly(
builder.Configuration,
(options, _) =>
options.Projections.Add(new KafkaProducer(builder.Configuration), ProjectionLifecycle.Async)
);

builder.Services
.Configure<JsonOptions>(o => o.SerializerOptions.Converters.Add(new JsonStringEnumConverter()))
.Configure<Microsoft.AspNetCore.Mvc.JsonOptions>(o =>
o.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()))
.AddSignalR();

builder.Host.ApplyOaktonExtensions();

var app = builder.Build();

app.UseCors("ClientPermission");
app.MapHub<IncidentsHub>("/hubs/incidents");

return await app.RunOaktonCommands(args);

public class IncidentsHub: Hub
{
}

public partial class Program
{
}
@@ -0,0 +1,14 @@
{
"profiles": {
"Helpdesk.Kafka": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger/index.html",
"applicationUrl": "http://localhost:5250",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
@@ -0,0 +1,18 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"Incidents": "PORT = 5432; HOST = postgres; TIMEOUT = 15; POOLING = True; MINPOOLSIZE = 1; MAXPOOLSIZE = 100; COMMANDTIMEOUT = 20; DATABASE = 'postgres'; PASSWORD = 'Password12!'; USER ID = 'postgres'"
},
"KafkaProducer": {
"ProducerConfig": {
"BootstrapServers": "kafka:9092"
},
"Topic": "Incidents"
}
}
@@ -0,0 +1,21 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"Incidents": "PORT = 5432; HOST = localhost; TIMEOUT = 15; POOLING = True; MINPOOLSIZE = 1; MAXPOOLSIZE = 100; COMMANDTIMEOUT = 20; DATABASE = 'postgres'; PASSWORD = 'Password12!'; USER ID = 'postgres'"
},
"KafkaProducer": {
"ProducerConfig": {
"BootstrapServers": "localhost:9092"
},
"Topic": "Incidents"
},
"Helpdesk": {
"DaemonLockId": 7777
}
}
@@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Marten.CommandLine" Version="6.0.5" />
<PackageReference Include="Marten" Version="6.0.5" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Helpdesk\Helpdesk.csproj" />
</ItemGroup>
</Project>
@@ -0,0 +1,30 @@
using System.Text.Json.Serialization;
using Helpdesk;
using Helpdesk.Incidents.GetCustomerIncidentsSummary;
using Marten.Events.Projections;
using Microsoft.AspNetCore.Http.Json;
using Oakton;

var builder = WebApplication.CreateBuilder(args);

builder.Services
.AddMartenForHelpdeskAsyncOnly(
builder.Configuration,
(options, _) =>
options.Projections.Add<CustomerIncidentsSummaryProjection>(ProjectionLifecycle.Async)
);

builder.Services
.Configure<JsonOptions>(o => o.SerializerOptions.Converters.Add(new JsonStringEnumConverter()))
.Configure<Microsoft.AspNetCore.Mvc.JsonOptions>(o =>
o.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()));

builder.Host.ApplyOaktonExtensions();

var app = builder.Build();

return await app.RunOaktonCommands(args);

public partial class Program
{
}
@@ -0,0 +1,14 @@
{
"profiles": {
"Helpdesk.Projections": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger/index.html",
"applicationUrl": "http://localhost:5251",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
@@ -0,0 +1,18 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"Incidents": "PORT = 5432; HOST = postgres; TIMEOUT = 15; POOLING = True; MINPOOLSIZE = 1; MAXPOOLSIZE = 100; COMMANDTIMEOUT = 20; DATABASE = 'postgres'; PASSWORD = 'Password12!'; USER ID = 'postgres'"
},
"KafkaProducer": {
"ProducerConfig": {
"BootstrapServers": "kafka:9092"
},
"Topic": "Incidents"
}
}
@@ -0,0 +1,21 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"Incidents": "PORT = 5432; HOST = localhost; TIMEOUT = 15; POOLING = True; MINPOOLSIZE = 1; MAXPOOLSIZE = 100; COMMANDTIMEOUT = 20; DATABASE = 'postgres'; PASSWORD = 'Password12!'; USER ID = 'postgres'"
},
"KafkaProducer": {
"ProducerConfig": {
"BootstrapServers": "localhost:9092"
},
"Topic": "Incidents"
},
"Helpdesk": {
"DaemonLockId": 5555
}
}

This file was deleted.

12 changes: 12 additions & 0 deletions Sample/Helpdesk.ScaledUpProjections/Helpdesk.sln
Expand Up @@ -19,6 +19,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Helpdesk", "Helpdesk\Helpde
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Helpdesk.SignalR", "Helpdesk.SignalR\Helpdesk.SignalR.csproj", "{FA50346F-88F5-47B9-8047-3A668C4826CF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Helpdesk.Projections", "Helpdesk.Projections\Helpdesk.Projections.csproj", "{52267B33-6A66-402A-BDBB-8F7ED4DF6FA8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Helpdesk.Kafka", "Helpdesk.Kafka\Helpdesk.Kafka.csproj", "{6084EFF8-7E51-4F44-B1ED-AA5FEA000CAB}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -41,6 +45,14 @@ Global
{FA50346F-88F5-47B9-8047-3A668C4826CF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FA50346F-88F5-47B9-8047-3A668C4826CF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FA50346F-88F5-47B9-8047-3A668C4826CF}.Release|Any CPU.Build.0 = Release|Any CPU
{52267B33-6A66-402A-BDBB-8F7ED4DF6FA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{52267B33-6A66-402A-BDBB-8F7ED4DF6FA8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{52267B33-6A66-402A-BDBB-8F7ED4DF6FA8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{52267B33-6A66-402A-BDBB-8F7ED4DF6FA8}.Release|Any CPU.Build.0 = Release|Any CPU
{6084EFF8-7E51-4F44-B1ED-AA5FEA000CAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6084EFF8-7E51-4F44-B1ED-AA5FEA000CAB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6084EFF8-7E51-4F44-B1ED-AA5FEA000CAB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6084EFF8-7E51-4F44-B1ED-AA5FEA000CAB}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
EndGlobalSection
Expand Down
@@ -1,5 +1,4 @@
using Helpdesk.Core;
using Helpdesk.Core.Marten;
using Helpdesk.Core.Marten;
using Helpdesk.Incidents;
using Helpdesk.Incidents.GetIncidentDetails;
using Helpdesk.Incidents.GetIncidentHistory;
Expand Down

0 comments on commit a9b1880

Please sign in to comment.