Files
Backend-Barracuda/SDG-Backend-Barracuda/Program.cs

80 lines
2.8 KiB
C#

using Dapper;
using Npgsql;
using SDG_Backend_Barracuda.Models;
using SDG_Backend_Barracuda.Games;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi
builder.Services.AddOpenApi();
// Register NpgsqlDataSource
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddNpgsqlDataSource(connectionString!);
// Register Data Tables
builder.Services.AddScoped<ICardModel, CardModel>();
builder.Services.AddScoped<ICardListModel, CardListModel>();
builder.Services.AddScoped<IGameModel, GameModel>();
builder.Services.AddScoped<IDeckModel, DeckModel>();
var app = builder.Build();
// Ensure the table exists
using (var scope = app.Services.CreateScope())
{
var dataSource = scope.ServiceProvider.GetRequiredService<NpgsqlDataSource>();
await using var connection = await dataSource.OpenConnectionAsync();
await connection.ExecuteAsync(@"
CREATE TABLE IF NOT EXISTS ""Card"" (
""Id"" SERIAL PRIMARY KEY,
""Value"" TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS ""CardList"" (
""Id"" SERIAL PRIMARY KEY
);
CREATE TABLE IF NOT EXISTS ""CardListCard"" (
""CardListId"" INTEGER NOT NULL REFERENCES ""CardList""(""Id"") ON DELETE CASCADE,
""CardId"" INTEGER NOT NULL REFERENCES ""Card""(""Id"") ON DELETE CASCADE,
PRIMARY KEY (""CardListId"", ""CardId"")
);
CREATE TABLE IF NOT EXISTS ""CardListSubList"" (
""CardListId"" INTEGER NOT NULL REFERENCES ""CardList""(""Id"") ON DELETE CASCADE,
""SubCardListId"" INTEGER NOT NULL REFERENCES ""CardList""(""Id"") ON DELETE CASCADE,
PRIMARY KEY (""CardListId"", ""SubCardListId"")
);
CREATE TABLE IF NOT EXISTS ""Game"" (
""Id"" SERIAL PRIMARY KEY,
""Name"" VARCHAR(64) NOT NULL,
""URL"" TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS ""Deck"" (
""Id"" SERIAL PRIMARY KEY,
""Name"" TEXT NOT NULL,
""CardListId"" INTEGER NOT NULL REFERENCES ""CardList""(""Id"") ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS ""DeckGame"" (
""DeckId"" INTEGER NOT NULL REFERENCES ""Deck""(""Id"") ON DELETE CASCADE,
""GameId"" INTEGER NOT NULL REFERENCES ""Game""(""Id"") ON DELETE CASCADE,
PRIMARY KEY (""DeckId"", ""GameId"")
);");
}
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.MapOpenApi();
}
else
{
app.UseHttpsRedirection();
}
CardModel.MapEndpoints(app);
CardListModel.MapEndpoints(app);
GameModel.MapEndpoints(app);
DeckModel.MapEndpoints(app);
Undercover.MapEndpoints(app);
app.Run();