Refactoring API structure

This commit is contained in:
2026-02-17 21:10:16 +02:00
parent 7cb5c1aa7e
commit 5e0ed10976
2 changed files with 68 additions and 53 deletions

View File

@@ -0,0 +1,31 @@
using Microsoft.Data.Sqlite;
public static class PublicEndpoints
{
public static void MapPublicEndpoints(WebApplication app)
{
app.MapGet("/", () =>
{
return new
{
Version = "1.0.0"
};
})
.WithName("GetVersion");
app.MapGet("/health/db", async (SqliteConnection connection) =>
{
await connection.OpenAsync();
await using var command = connection.CreateCommand();
command.CommandText = "SELECT 1";
var result = await command.ExecuteScalarAsync();
return Results.Ok(new
{
Database = "ok",
Result = result
});
})
.WithName("GetDatabaseHealth");
}
}

View File

@@ -1,60 +1,44 @@
using Microsoft.Data.Sqlite; using Microsoft.Data.Sqlite;
var builder = WebApplication.CreateBuilder(args); public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
var configuredConnectionString = builder.Configuration.GetConnectionString("DefaultConnection") var configuredConnectionString = builder.Configuration.GetConnectionString("DefaultConnection")
?? throw new InvalidOperationException("Connection string 'DefaultConnection' was not found."); ?? throw new InvalidOperationException("Connection string 'DefaultConnection' was not found.");
var sqliteConnectionStringBuilder = new SqliteConnectionStringBuilder(configuredConnectionString); var sqliteConnectionStringBuilder = new SqliteConnectionStringBuilder(configuredConnectionString);
var databasePath = Path.GetFullPath(Path.Combine(builder.Environment.ContentRootPath, sqliteConnectionStringBuilder.DataSource)); var databasePath = Path.GetFullPath(Path.Combine(builder.Environment.ContentRootPath, sqliteConnectionStringBuilder.DataSource));
var databaseDirectory = Path.GetDirectoryName(databasePath) var databaseDirectory = Path.GetDirectoryName(databasePath)
?? throw new InvalidOperationException("Could not determine database directory."); ?? throw new InvalidOperationException("Could not determine database directory.");
Directory.CreateDirectory(databaseDirectory); Directory.CreateDirectory(databaseDirectory);
sqliteConnectionStringBuilder.DataSource = databasePath; sqliteConnectionStringBuilder.DataSource = databasePath;
var resolvedConnectionString = sqliteConnectionStringBuilder.ToString(); var resolvedConnectionString = sqliteConnectionStringBuilder.ToString();
builder.Services.AddScoped(_ => new SqliteConnection(resolvedConnectionString)); builder.Services.AddScoped(_ => new SqliteConnection(resolvedConnectionString));
builder.Services.AddOpenApi(); builder.Services.AddOpenApi();
var app = builder.Build(); var app = builder.Build();
using (var connection = new SqliteConnection(resolvedConnectionString)) using (var connection = new SqliteConnection(resolvedConnectionString))
{ {
connection.Open(); connection.Open();
} }
if (app.Environment.IsDevelopment()) if (app.Environment.IsDevelopment())
{ {
app.MapOpenApi(); app.MapOpenApi();
}
app.UseHttpsRedirection();
PublicEndpoints.MapPublicEndpoints(app);
app.Run();
}
} }
app.UseHttpsRedirection();
app.MapGet("/", () =>
{
return new
{
Version = "1.0.0"
};
})
.WithName("GetVersion");
app.MapGet("/health/db", async (SqliteConnection connection) =>
{
await connection.OpenAsync();
await using var command = connection.CreateCommand();
command.CommandText = "SELECT 1";
var result = await command.ExecuteScalarAsync();
return Results.Ok(new
{
Database = "ok",
Result = result
});
})
.WithName("GetDatabaseHealth");
app.Run();