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(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); var app = builder.Build(); // Ensure the table exists using (var scope = app.Services.CreateScope()) { var dataSource = scope.ServiceProvider.GetRequiredService(); 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();