chore: add .editorconfig and consistent formatting for backend projects
Adds an `.editorconfig` file with C# and project-specific conventions. Applies consistent indentation and formatting across backend handlers, runtime models, and AI services.
This commit is contained in:
@@ -5,12 +5,12 @@ namespace SpaceGame.Api.Universe.Api;
|
||||
|
||||
public sealed class GetBalanceHandler(WorldService worldService) : EndpointWithoutRequest
|
||||
{
|
||||
public override void Configure()
|
||||
{
|
||||
Get("/api/balance");
|
||||
AllowAnonymous();
|
||||
}
|
||||
public override void Configure()
|
||||
{
|
||||
Get("/api/balance");
|
||||
AllowAnonymous();
|
||||
}
|
||||
|
||||
public override Task HandleAsync(CancellationToken cancellationToken) =>
|
||||
SendOkAsync(worldService.GetBalance(), cancellationToken);
|
||||
public override Task HandleAsync(CancellationToken cancellationToken) =>
|
||||
SendOkAsync(worldService.GetBalance(), cancellationToken);
|
||||
}
|
||||
|
||||
@@ -6,44 +6,44 @@ namespace SpaceGame.Api.Universe.Api;
|
||||
|
||||
public sealed class GetTelemetryHandler(TelemetryService telemetry, WorldService worldService) : EndpointWithoutRequest
|
||||
{
|
||||
public override void Configure()
|
||||
{
|
||||
Get("/api/telemetry");
|
||||
AllowAnonymous();
|
||||
}
|
||||
|
||||
public override Task HandleAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
var status = worldService.GetStatus();
|
||||
var connections = worldService.GetConnectionStats();
|
||||
var uptime = telemetry.Uptime;
|
||||
|
||||
return SendOkAsync(new
|
||||
public override void Configure()
|
||||
{
|
||||
process = new
|
||||
{
|
||||
uptimeSeconds = uptime.TotalSeconds,
|
||||
cpuPercent = Math.Round(telemetry.CpuPercent, 1),
|
||||
workingSetMb = Math.Round(telemetry.WorkingSetBytes / 1_048_576.0, 1),
|
||||
gcMemoryMb = Math.Round(telemetry.GcMemoryBytes / 1_048_576.0, 1),
|
||||
threadCount = telemetry.ThreadCount,
|
||||
processorCount = Environment.ProcessorCount,
|
||||
},
|
||||
simulation = new
|
||||
{
|
||||
sequence = status.Sequence,
|
||||
connectedClients = connections.ConnectedClients,
|
||||
deltaHistoryCount = connections.DeltaHistoryCount,
|
||||
tickIntervalMs = 200,
|
||||
},
|
||||
runtime = new
|
||||
{
|
||||
frameworkDescription = RuntimeInformation.FrameworkDescription,
|
||||
osDescription = RuntimeInformation.OSDescription,
|
||||
gcGen0 = GC.CollectionCount(0),
|
||||
gcGen1 = GC.CollectionCount(1),
|
||||
gcGen2 = GC.CollectionCount(2),
|
||||
},
|
||||
}, cancellationToken);
|
||||
}
|
||||
Get("/api/telemetry");
|
||||
AllowAnonymous();
|
||||
}
|
||||
|
||||
public override Task HandleAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
var status = worldService.GetStatus();
|
||||
var connections = worldService.GetConnectionStats();
|
||||
var uptime = telemetry.Uptime;
|
||||
|
||||
return SendOkAsync(new
|
||||
{
|
||||
process = new
|
||||
{
|
||||
uptimeSeconds = uptime.TotalSeconds,
|
||||
cpuPercent = Math.Round(telemetry.CpuPercent, 1),
|
||||
workingSetMb = Math.Round(telemetry.WorkingSetBytes / 1_048_576.0, 1),
|
||||
gcMemoryMb = Math.Round(telemetry.GcMemoryBytes / 1_048_576.0, 1),
|
||||
threadCount = telemetry.ThreadCount,
|
||||
processorCount = Environment.ProcessorCount,
|
||||
},
|
||||
simulation = new
|
||||
{
|
||||
sequence = status.Sequence,
|
||||
connectedClients = connections.ConnectedClients,
|
||||
deltaHistoryCount = connections.DeltaHistoryCount,
|
||||
tickIntervalMs = 200,
|
||||
},
|
||||
runtime = new
|
||||
{
|
||||
frameworkDescription = RuntimeInformation.FrameworkDescription,
|
||||
osDescription = RuntimeInformation.OSDescription,
|
||||
gcGen0 = GC.CollectionCount(0),
|
||||
gcGen1 = GC.CollectionCount(1),
|
||||
gcGen2 = GC.CollectionCount(2),
|
||||
},
|
||||
}, cancellationToken);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,12 +4,12 @@ namespace SpaceGame.Api.Universe.Api;
|
||||
|
||||
public sealed class GetWorldHandler(WorldService worldService) : EndpointWithoutRequest
|
||||
{
|
||||
public override void Configure()
|
||||
{
|
||||
Get("/api/world");
|
||||
AllowAnonymous();
|
||||
}
|
||||
public override void Configure()
|
||||
{
|
||||
Get("/api/world");
|
||||
AllowAnonymous();
|
||||
}
|
||||
|
||||
public override Task HandleAsync(CancellationToken cancellationToken) =>
|
||||
SendOkAsync(worldService.GetSnapshot(), cancellationToken);
|
||||
public override Task HandleAsync(CancellationToken cancellationToken) =>
|
||||
SendOkAsync(worldService.GetSnapshot(), cancellationToken);
|
||||
}
|
||||
|
||||
@@ -4,20 +4,20 @@ namespace SpaceGame.Api.Universe.Api;
|
||||
|
||||
public sealed class GetWorldHealthHandler(WorldService worldService) : EndpointWithoutRequest
|
||||
{
|
||||
public override void Configure()
|
||||
{
|
||||
Get("/api/world/health");
|
||||
AllowAnonymous();
|
||||
}
|
||||
|
||||
public override Task HandleAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
var status = worldService.GetStatus();
|
||||
return SendOkAsync(new
|
||||
public override void Configure()
|
||||
{
|
||||
ok = true,
|
||||
sequence = status.Sequence,
|
||||
generatedAtUtc = status.GeneratedAtUtc,
|
||||
}, cancellationToken);
|
||||
}
|
||||
Get("/api/world/health");
|
||||
AllowAnonymous();
|
||||
}
|
||||
|
||||
public override Task HandleAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
var status = worldService.GetStatus();
|
||||
return SendOkAsync(new
|
||||
{
|
||||
ok = true,
|
||||
sequence = status.Sequence,
|
||||
generatedAtUtc = status.GeneratedAtUtc,
|
||||
}, cancellationToken);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,12 +4,12 @@ namespace SpaceGame.Api.Universe.Api;
|
||||
|
||||
public sealed class ResetWorldHandler(WorldService worldService) : EndpointWithoutRequest
|
||||
{
|
||||
public override void Configure()
|
||||
{
|
||||
Post("/api/world/reset");
|
||||
AllowAnonymous();
|
||||
}
|
||||
public override void Configure()
|
||||
{
|
||||
Post("/api/world/reset");
|
||||
AllowAnonymous();
|
||||
}
|
||||
|
||||
public override Task HandleAsync(CancellationToken cancellationToken) =>
|
||||
SendOkAsync(worldService.Reset(), cancellationToken);
|
||||
public override Task HandleAsync(CancellationToken cancellationToken) =>
|
||||
SendOkAsync(worldService.Reset(), cancellationToken);
|
||||
}
|
||||
|
||||
@@ -4,15 +4,15 @@ namespace SpaceGame.Api.Universe.Api;
|
||||
|
||||
public sealed class RootRedirectHandler : EndpointWithoutRequest
|
||||
{
|
||||
public override void Configure()
|
||||
{
|
||||
Get("/");
|
||||
AllowAnonymous();
|
||||
}
|
||||
public override void Configure()
|
||||
{
|
||||
Get("/");
|
||||
AllowAnonymous();
|
||||
}
|
||||
|
||||
public override Task HandleAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
HttpContext.Response.Redirect("/api/world");
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
public override Task HandleAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
HttpContext.Response.Redirect("/api/world");
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,49 +5,49 @@ namespace SpaceGame.Api.Universe.Api;
|
||||
|
||||
public sealed class StreamWorldHandler(WorldService worldService) : EndpointWithoutRequest
|
||||
{
|
||||
private static readonly JsonSerializerOptions SseJsonOptions = new(JsonSerializerDefaults.Web);
|
||||
private static readonly JsonSerializerOptions SseJsonOptions = new(JsonSerializerDefaults.Web);
|
||||
|
||||
public override void Configure()
|
||||
{
|
||||
Get("/api/world/stream");
|
||||
AllowAnonymous();
|
||||
}
|
||||
|
||||
public override async Task HandleAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
HttpContext.Response.Headers.Append("Cache-Control", "no-cache");
|
||||
HttpContext.Response.Headers.Append("Content-Type", "text/event-stream");
|
||||
|
||||
var afterSequenceRaw = HttpContext.Request.Query["afterSequence"].ToString();
|
||||
_ = long.TryParse(afterSequenceRaw, out var afterSequence);
|
||||
|
||||
var scopeKind = HttpContext.Request.Query["scopeKind"].ToString();
|
||||
if (string.IsNullOrWhiteSpace(scopeKind))
|
||||
public override void Configure()
|
||||
{
|
||||
scopeKind = HttpContext.Request.Query["scope"].ToString();
|
||||
Get("/api/world/stream");
|
||||
AllowAnonymous();
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(scopeKind))
|
||||
public override async Task HandleAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
scopeKind = "universe";
|
||||
HttpContext.Response.Headers.Append("Cache-Control", "no-cache");
|
||||
HttpContext.Response.Headers.Append("Content-Type", "text/event-stream");
|
||||
|
||||
var afterSequenceRaw = HttpContext.Request.Query["afterSequence"].ToString();
|
||||
_ = long.TryParse(afterSequenceRaw, out var afterSequence);
|
||||
|
||||
var scopeKind = HttpContext.Request.Query["scopeKind"].ToString();
|
||||
if (string.IsNullOrWhiteSpace(scopeKind))
|
||||
{
|
||||
scopeKind = HttpContext.Request.Query["scope"].ToString();
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(scopeKind))
|
||||
{
|
||||
scopeKind = "universe";
|
||||
}
|
||||
|
||||
var systemId = HttpContext.Request.Query["systemId"].ToString();
|
||||
var bubbleId = HttpContext.Request.Query["bubbleId"].ToString();
|
||||
var scope = new ObserverScope(
|
||||
scopeKind,
|
||||
string.IsNullOrWhiteSpace(systemId) ? null : systemId,
|
||||
string.IsNullOrWhiteSpace(bubbleId) ? null : bubbleId);
|
||||
var stream = worldService.Subscribe(scope, afterSequence, cancellationToken);
|
||||
|
||||
await HttpContext.Response.WriteAsync(": connected\n\n", cancellationToken);
|
||||
await HttpContext.Response.Body.FlushAsync(cancellationToken);
|
||||
|
||||
await foreach (var delta in stream.ReadAllAsync(cancellationToken))
|
||||
{
|
||||
var payload = JsonSerializer.Serialize(delta, SseJsonOptions);
|
||||
await HttpContext.Response.WriteAsync($"event: world-delta\ndata: {payload}\n\n", cancellationToken);
|
||||
await HttpContext.Response.Body.FlushAsync(cancellationToken);
|
||||
}
|
||||
}
|
||||
|
||||
var systemId = HttpContext.Request.Query["systemId"].ToString();
|
||||
var bubbleId = HttpContext.Request.Query["bubbleId"].ToString();
|
||||
var scope = new ObserverScope(
|
||||
scopeKind,
|
||||
string.IsNullOrWhiteSpace(systemId) ? null : systemId,
|
||||
string.IsNullOrWhiteSpace(bubbleId) ? null : bubbleId);
|
||||
var stream = worldService.Subscribe(scope, afterSequence, cancellationToken);
|
||||
|
||||
await HttpContext.Response.WriteAsync(": connected\n\n", cancellationToken);
|
||||
await HttpContext.Response.Body.FlushAsync(cancellationToken);
|
||||
|
||||
await foreach (var delta in stream.ReadAllAsync(cancellationToken))
|
||||
{
|
||||
var payload = JsonSerializer.Serialize(delta, SseJsonOptions);
|
||||
await HttpContext.Response.WriteAsync($"event: world-delta\ndata: {payload}\n\n", cancellationToken);
|
||||
await HttpContext.Response.Body.FlushAsync(cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,15 +6,15 @@ namespace SpaceGame.Api.Universe.Api;
|
||||
|
||||
public sealed class UpdateBalanceHandler(WorldService worldService) : Endpoint<BalanceDefinition>
|
||||
{
|
||||
public override void Configure()
|
||||
{
|
||||
Put("/api/balance");
|
||||
AllowAnonymous();
|
||||
}
|
||||
public override void Configure()
|
||||
{
|
||||
Put("/api/balance");
|
||||
AllowAnonymous();
|
||||
}
|
||||
|
||||
public override Task HandleAsync(BalanceDefinition req, CancellationToken cancellationToken)
|
||||
{
|
||||
var applied = worldService.UpdateBalance(req);
|
||||
return SendOkAsync(applied, cancellationToken);
|
||||
}
|
||||
public override Task HandleAsync(BalanceDefinition req, CancellationToken cancellationToken)
|
||||
{
|
||||
var applied = worldService.UpdateBalance(req);
|
||||
return SendOkAsync(applied, cancellationToken);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user