-
-
Notifications
You must be signed in to change notification settings - Fork 541
Expand file tree
/
Copy pathProgram.cs
More file actions
70 lines (62 loc) · 1.96 KB
/
Program.cs
File metadata and controls
70 lines (62 loc) · 1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
using Core;
using Core.Configuration;
using Core.Exceptions;
using Core.Kafka;
using Core.OpenTelemetry;
using Core.WebApi.Middlewares.ExceptionHandling;
using Core.WebApi.OptimisticConcurrency;
using Core.WebApi.Swagger;
using JasperFx;
using Marten.Events.Daemon;
using Microsoft.OpenApi;
using Payments;
var builder = WebApplication.CreateBuilder(args);
builder.AddKafkaProducer<string, string>("kafka", settings =>
{
settings.Config.AllowAutoCreateTopics = true;
});
builder.Services
.AddNpgsqlDataSource(builder.Configuration.GetRequiredConnectionString("payments"))
.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "Payments", Version = "v1" });
c.OperationFilter<MetadataOperationFilter>();
})
.AddKafkaProducer()
.AddCoreServices()
.AddDefaultExceptionHandler(
(exception, _) => exception switch
{
AggregateNotFoundException => exception.MapToProblemDetails(StatusCodes.Status404NotFound),
ConcurrencyException => exception.MapToProblemDetails(StatusCodes.Status412PreconditionFailed),
_ => null
})
.AddPaymentsModule(builder.Configuration)
.AddOptimisticConcurrencyMiddleware()
.AddOpenTelemetry("Payments", OpenTelemetryOptions.Build(options =>
options
.WithTracing(t => t.AddSource("Marten"))
.WithMetrics(m => m.AddMeter("Marten"))
.DisableConsoleExporter(true)
))
.AddControllers();
builder.Services
.AddHealthChecks()
.AddMartenAsyncDaemonHealthCheck(maxEventLag: 500);
var app = builder.Build();
app.UseExceptionHandler()
.UseOptimisticConcurrencyMiddleware()
.UseRouting()
.UseAuthorization()
.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
})
.UseSwagger()
.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Payments V1");
c.RoutePrefix = string.Empty;
});
app.Run();
public partial class Program;