From c928ddecb5bf22257a512ae519c7559502e4f5aa Mon Sep 17 00:00:00 2001 From: Aaron Po Date: Mon, 12 Jan 2026 00:14:42 -0500 Subject: [PATCH] update seed application --- DataLayer/seed/SeedDB.cs | 26 +++++++++++++-- WebAPI/Program.cs | 68 ++++++---------------------------------- docker-compose.yml | 5 ++- 3 files changed, 38 insertions(+), 61 deletions(-) diff --git a/DataLayer/seed/SeedDB.cs b/DataLayer/seed/SeedDB.cs index a1af300..2a7b6a0 100644 --- a/DataLayer/seed/SeedDB.cs +++ b/DataLayer/seed/SeedDB.cs @@ -4,6 +4,7 @@ using System.Text; using Konscious.Security.Cryptography; using Microsoft.Data.SqlClient; + string ConnectionString = Environment.GetEnvironmentVariable( "DB_CONNECTION_STRING" )!; @@ -17,14 +18,15 @@ static async Task BuildSchema(SqlConnection connection) static async Task AddStoredProcsAndFunctions(SqlConnection connection) { - // New approach: load functions first, then procedures, from dedicated folders. - // Fallback to legacy combined file if folders are missing. string projectRoot = Path.GetFullPath( Path.Combine(AppContext.BaseDirectory, "..", "..", "..") ); string functionsDir = Path.Combine(projectRoot, "seed", "functions"); string proceduresDir = Path.Combine(projectRoot, "seed", "procedures"); + string crudDir = Path.GetFullPath( + Path.Combine(projectRoot, "..", "DataAccessLayer", "Sql", "crud") + ); if (Directory.Exists(functionsDir)) { @@ -66,6 +68,26 @@ static async Task AddStoredProcsAndFunctions(SqlConnection connection) } } + if (Directory.Exists(crudDir)) + { + foreach ( + string file in Directory + .EnumerateFiles( + crudDir, + "*.sql", + SearchOption.TopDirectoryOnly + ) + .OrderBy(f => f, StringComparer.OrdinalIgnoreCase) + ) + { + string sql = await File.ReadAllTextAsync(file); + await ExecuteScriptAsync(connection, sql); + Console.WriteLine( + $"Executed CRUD script: {Path.GetFileName(file)}" + ); + } + } + Console.WriteLine( "Functions and stored procedures added or updated successfully." ); diff --git a/WebAPI/Program.cs b/WebAPI/Program.cs index 5806052..8b34623 100644 --- a/WebAPI/Program.cs +++ b/WebAPI/Program.cs @@ -1,68 +1,20 @@ -// Load a local .env file into environment variables when present (useful for local development) -try -{ - var envPath = Path.Combine(Directory.GetCurrentDirectory(), ".env"); - if (File.Exists(envPath)) - { - foreach (var line in File.ReadAllLines(envPath)) - { - var trimmed = line.Trim(); - if (string.IsNullOrEmpty(trimmed) || trimmed.StartsWith("#")) - continue; - var idx = trimmed.IndexOf('='); - if (idx <= 0) - continue; - var key = trimmed.Substring(0, idx).Trim(); - var val = trimmed.Substring(idx + 1).Trim(); - if (val.Length >= 2 && ((val.StartsWith("\"") && val.EndsWith("\"")) || (val.StartsWith("'") && val.EndsWith("'")))) - { - val = val.Substring(1, val.Length - 2); - } - if (Environment.GetEnvironmentVariable(key) == null) - Environment.SetEnvironmentVariable(key, val); - } - } -} -catch -{ - // If dotenv loading fails, continue without blocking startup. -} - var builder = WebApplication.CreateBuilder(args); -// Add services to the container. -// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi -builder.Services.AddControllers(); -builder.Services.AddEndpointsApiExplorer(); -builder.Services.AddSwaggerGen(); -builder.Services.AddOpenApi(); +builder.Services.AddControllers(); +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(); +builder.Services.AddOpenApi(); var app = builder.Build(); -// Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) -{ - app.UseSwagger(); - app.UseSwaggerUI(); - app.MapOpenApi(); -} +if (app.Environment.IsDevelopment()) +{ + app.UseSwagger(); + app.UseSwaggerUI(); + app.MapOpenApi(); +} app.UseHttpsRedirection(); - -var summaries = new[] -{ - "Freezing", - "Bracing", - "Chilly", - "Cool", - "Mild", - "Warm", - "Balmy", - "Hot", - "Sweltering", - "Scorching", -}; - app.MapControllers(); app.Run(); diff --git a/docker-compose.yml b/docker-compose.yml index a4e7d68..e7d8a81 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,15 +8,18 @@ services: environment: ACCEPT_EULA: "Y" SA_PASSWORD: "${SA_PASSWORD}" + ports: + - "1433:1433" volumes: - sqlserverdata:/var/opt/mssql healthcheck: - test: [ "CMD", "/opt/mssql-tools/bin/sqlcmd", "-S", "localhost", "-U", "sa", "-P", "${SA_PASSWORD}", "-Q", "SELECT 1" ] + test: ["CMD", "/opt/mssql-tools/bin/sqlcmd", "-S", "localhost", "-U", "sa", "-P", "${SA_PASSWORD}", "-Q", "SELECT 1" ] interval: 10s timeout: 5s retries: 12 networks: - devnet + volumes: sqlserverdata: nuget-cache: