diff --git a/DataLayer/Program.cs b/DataLayer/Program.cs index 5536d31..652200e 100644 --- a/DataLayer/Program.cs +++ b/DataLayer/Program.cs @@ -1,6 +1,8 @@ using System.Data; +using System.Reflection; using System.Security.Cryptography; using System.Text; +using DbUp; using idunno.Password; using Konscious.Security.Cryptography; using Microsoft.Data.SqlClient; @@ -123,3 +125,33 @@ static async Task RunSeedAsync(SqlConnection connection) await ExecuteCredentialProcedureAsync(connection, credentialRows); Console.WriteLine($"Generated {credentialRows.Rows.Count} credential hashes."); } + + + +// Get connection string from environment variable + var connectionString = Environment.GetEnvironmentVariable("DB_CONNECTION_STRING"); + + var upgrader = + DeployChanges.To + .SqlDatabase(connectionString) + .WithScriptsEmbeddedInAssembly(Assembly.GetExecutingAssembly()) + .LogToConsole() + .Build(); + + var result = upgrader.PerformUpgrade(); + + if (!result.Successful) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine(result.Error); + Console.ResetColor(); +#if DEBUG + Console.ReadLine(); +#endif + return -1; + } + + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine("Success!"); + Console.ResetColor(); + return 0; diff --git a/DataLayer/scripts/schema/schema.sql b/DataLayer/scripts/01-schema/schema.sql similarity index 98% rename from DataLayer/scripts/schema/schema.sql rename to DataLayer/scripts/01-schema/schema.sql index 6b7bcf9..e04a681 100644 --- a/DataLayer/scripts/schema/schema.sql +++ b/DataLayer/scripts/01-schema/schema.sql @@ -1,20 +1,20 @@ -- ---------------------------------------------------------------------------- -- ---------------------------------------------------------------------------- +/* +USE master; --- USE master; +IF EXISTS (SELECT name +FROM sys.databases +WHERE name = N'Biergarten') +BEGIN + ALTER DATABASE Biergarten SET SINGLE_USER WITH ROLLBACK IMMEDIATE; +END --- IF EXISTS (SELECT name --- FROM sys.databases --- WHERE name = N'Biergarten') --- BEGIN --- ALTER DATABASE Biergarten SET SINGLE_USER WITH ROLLBACK IMMEDIATE; --- END - --- DROP DATABASE IF EXISTS Biergarten; - --- CREATE DATABASE Biergarten; +DROP DATABASE IF EXISTS Biergarten; +CREATE DATABASE Biergarten; +*/ -- ---------------------------------------------------------------------------- -- ---------------------------------------------------------------------------- diff --git a/DataLayer/scripts/seed/01-types/TblUserHashes.sql b/DataLayer/scripts/seed/01-types/TblUserHashes.sql new file mode 100644 index 0000000..c26b6b1 --- /dev/null +++ b/DataLayer/scripts/seed/01-types/TblUserHashes.sql @@ -0,0 +1,6 @@ + +CREATE TYPE dbo.TblUserHashes AS TABLE + ( + UserAccountId UNIQUEIDENTIFIER NOT NULL, + Hash NVARCHAR(MAX) NOT NULL + ); \ No newline at end of file diff --git a/DataLayer/scripts/seed/procedures/USP_AddUserCredentials.sql b/DataLayer/scripts/seed/procedures/USP_AddUserCredentials.sql index ba5b797..c5a6043 100644 --- a/DataLayer/scripts/seed/procedures/USP_AddUserCredentials.sql +++ b/DataLayer/scripts/seed/procedures/USP_AddUserCredentials.sql @@ -1,3 +1,4 @@ +-- Stored procedure to insert Argon2 hashes CREATE OR ALTER PROCEDURE dbo.USP_AddUserCredentials ( @Hash dbo.TblUserHashes READONLY @@ -18,3 +19,4 @@ BEGIN COMMIT TRANSACTION; END; +GO