mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-02-16 10:42:08 +00:00
restructure seed
This commit is contained in:
@@ -5,14 +5,17 @@
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="dbup" Version="5.0.41" />
|
||||
<PackageReference Include="idunno.Password.Generator" Version="1.0.1" />
|
||||
<PackageReference Include="Konscious.Security.Cryptography.Argon2" Version="1.3.1" />
|
||||
<PackageReference
|
||||
Include="Konscious.Security.Cryptography.Argon2"
|
||||
Version="1.3.1"
|
||||
/>
|
||||
<PackageReference Include="Microsoft.Data.SqlClient" Version="6.1.2" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="scripts/**/*.sql" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
|
||||
@@ -1,157 +1,32 @@
|
||||
using System.Data;
|
||||
// Get connection string from environment variable
|
||||
|
||||
using System.Reflection;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using DbUp;
|
||||
using idunno.Password;
|
||||
using Konscious.Security.Cryptography;
|
||||
using Microsoft.Data.SqlClient;
|
||||
|
||||
/// <summary>
|
||||
/// Executes USP_AddUserCredentials to add missing user credentials using a table-valued parameter
|
||||
/// consisting of the user account id and a generated Argon2 hash.
|
||||
/// </summary>
|
||||
/// <param name="connection">An open SQL connection.</param>
|
||||
/// <param name="credentialTable">A table-valued parameter payload containing user IDs and hashes.</param>
|
||||
static async Task ExecuteCredentialProcedureAsync(SqlConnection connection, DataTable credentialTable)
|
||||
{
|
||||
await using var command = new SqlCommand("dbo.USP_AddUserCredentials", connection)
|
||||
{
|
||||
CommandType = CommandType.StoredProcedure
|
||||
};
|
||||
|
||||
// Must match your stored proc parameter name:
|
||||
var tvpParameter = command.Parameters.Add("@Hash", SqlDbType.Structured);
|
||||
tvpParameter.TypeName = "dbo.TblUserHashes";
|
||||
tvpParameter.Value = credentialTable;
|
||||
|
||||
await command.ExecuteNonQueryAsync();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Builds a DataTable of user account IDs and generated Argon2 password hashes for users that do not yet
|
||||
/// have credentials.
|
||||
/// </summary>
|
||||
/// <param name="connection">An open SQL connection.</param>
|
||||
/// <returns>A DataTable matching dbo.TblUserHashes with user IDs and hashes.</returns>
|
||||
static async Task<DataTable> BuildCredentialTableAsync(SqlConnection connection)
|
||||
{
|
||||
const string sql = """
|
||||
SELECT ua.UserAccountID
|
||||
FROM dbo.UserAccount AS ua
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM dbo.UserCredential AS uc
|
||||
WHERE uc.UserAccountID = ua.UserAccountID
|
||||
var connectionString = Environment.GetEnvironmentVariable(
|
||||
"DB_CONNECTION_STRING"
|
||||
);
|
||||
""";
|
||||
|
||||
await using var command = new SqlCommand(sql, connection);
|
||||
await using var reader = await command.ExecuteReaderAsync();
|
||||
var upgrader = DeployChanges
|
||||
.To.SqlDatabase(connectionString)
|
||||
.WithScriptsEmbeddedInAssembly(Assembly.GetExecutingAssembly())
|
||||
.LogToConsole()
|
||||
.Build();
|
||||
|
||||
// IMPORTANT: column names/types/order should match dbo.TblUserHashes
|
||||
var table = new DataTable();
|
||||
table.Columns.Add("UserAccountID", typeof(Guid));
|
||||
table.Columns.Add("Hash", typeof(string));
|
||||
var result = upgrader.PerformUpgrade();
|
||||
|
||||
var generator = new PasswordGenerator();
|
||||
|
||||
while (await reader.ReadAsync())
|
||||
{
|
||||
Guid userId = reader.GetGuid(0);
|
||||
|
||||
// idunno.Password PasswordGenerator signature:
|
||||
// Generate(length, numberOfDigits, numberOfSymbols, noUpper, allowRepeat)
|
||||
string pwd = generator.Generate(
|
||||
length: 64,
|
||||
numberOfDigits: 10,
|
||||
numberOfSymbols: 10
|
||||
);
|
||||
|
||||
string hash = GeneratePasswordHash(pwd);
|
||||
|
||||
var row = table.NewRow();
|
||||
row["UserAccountID"] = userId;
|
||||
row["Hash"] = hash;
|
||||
table.Rows.Add(row);
|
||||
}
|
||||
|
||||
return table;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generates an Argon2id hash for the given password.
|
||||
/// </summary>
|
||||
/// <param name="pwd">The plaintext password.</param>
|
||||
/// <returns>A string in the format "base64(salt):base64(hash)".</returns>
|
||||
static string GeneratePasswordHash(string pwd)
|
||||
if (!result.Successful)
|
||||
{
|
||||
byte[] salt = RandomNumberGenerator.GetBytes(16);
|
||||
|
||||
var argon2 = new Argon2id(Encoding.UTF8.GetBytes(pwd))
|
||||
{
|
||||
Salt = salt,
|
||||
DegreeOfParallelism = Math.Max(Environment.ProcessorCount, 1),
|
||||
MemorySize = 65536,
|
||||
Iterations = 4,
|
||||
};
|
||||
|
||||
byte[] hash = argon2.GetBytes(32);
|
||||
return $"{Convert.ToBase64String(salt)}:{Convert.ToBase64String(hash)}";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Runs the seed process to add test users and generate missing credentials.
|
||||
/// </summary>
|
||||
/// <param name="connection">An open SQL connection.</param>
|
||||
static async Task RunSeedAsync(SqlConnection connection)
|
||||
{
|
||||
//run add test users
|
||||
await using var insertCommand = new SqlCommand("dbo.USP_SeedTestUsers", connection)
|
||||
{
|
||||
CommandType = CommandType.StoredProcedure
|
||||
};
|
||||
await insertCommand.ExecuteNonQueryAsync();
|
||||
|
||||
Console.WriteLine("Inserted or refreshed test users.");
|
||||
|
||||
DataTable credentialRows = await BuildCredentialTableAsync(connection);
|
||||
if (credentialRows.Rows.Count == 0)
|
||||
{
|
||||
Console.WriteLine("No new credentials required.");
|
||||
return;
|
||||
}
|
||||
|
||||
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.ForegroundColor = ConsoleColor.Red;
|
||||
Console.WriteLine(result.Error);
|
||||
Console.ResetColor();
|
||||
return 0;
|
||||
#if DEBUG
|
||||
Console.ReadLine();
|
||||
#endif
|
||||
return -1;
|
||||
}
|
||||
|
||||
Console.ForegroundColor = ConsoleColor.Green;
|
||||
Console.WriteLine("Success!");
|
||||
Console.ResetColor();
|
||||
return 0;
|
||||
|
||||
@@ -14,6 +14,7 @@ DROP DATABASE IF EXISTS Biergarten;
|
||||
|
||||
CREATE DATABASE Biergarten;
|
||||
|
||||
USE Biergarten;
|
||||
*/
|
||||
-- ----------------------------------------------------------------------------
|
||||
-- ----------------------------------------------------------------------------
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
CREATE OR ALTER PROCEDURE dbo.USP_AddUserCredential(
|
||||
@UserAccountId uniqueidentifier,
|
||||
@Hash nvarchar(max)
|
||||
)
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
INSERT INTO dbo.UserCredential
|
||||
(UserAccountId, Hash)
|
||||
VALUES
|
||||
(@UserAccountId, @Hash);
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
END;
|
||||
@@ -0,0 +1,20 @@
|
||||
CREATE OR ALTER PROCEDURE dbo.USP_CreateUserVerification
|
||||
@UserAccountID uniqueidentifier,
|
||||
@VerificationDateTime datetime = NULL
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
IF @VerificationDateTime IS NULL
|
||||
SET @VerificationDateTime = GETDATE();
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
INSERT INTO dbo.UserVerification
|
||||
(UserAccountId, VerificationDateTime)
|
||||
VALUES
|
||||
(@UserAccountID, @VerificationDateTime);
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
END
|
||||
30
DataLayer/scripts/03-crud/04-Location/USP_CreateCity.sql
Normal file
30
DataLayer/scripts/03-crud/04-Location/USP_CreateCity.sql
Normal file
@@ -0,0 +1,30 @@
|
||||
CREATE OR ALTER PROCEDURE dbo.USP_CreateCity
|
||||
(
|
||||
@CityName NVARCHAR(100),
|
||||
@StateProvinceCode NVARCHAR(6)
|
||||
)
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
DECLARE @StateProvinceId UNIQUEIDENTIFIER = dbo.UDF_GetStateProvinceIdByCode(@StateProvinceCode);
|
||||
IF @StateProvinceId IS NULL
|
||||
BEGIN
|
||||
RAISERROR('State/province not found for code.', 16, 1);
|
||||
RETURN;
|
||||
END
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM dbo.City
|
||||
WHERE CityName = @CityName
|
||||
AND StateProvinceID = @StateProvinceId
|
||||
)
|
||||
RETURN;
|
||||
|
||||
INSERT INTO dbo.City
|
||||
(StateProvinceID, CityName)
|
||||
VALUES
|
||||
(@StateProvinceId, @CityName);
|
||||
END;
|
||||
22
DataLayer/scripts/03-crud/04-Location/USP_CreateCountry.sql
Normal file
22
DataLayer/scripts/03-crud/04-Location/USP_CreateCountry.sql
Normal file
@@ -0,0 +1,22 @@
|
||||
CREATE OR ALTER PROCEDURE dbo.USP_CreateCountry
|
||||
(
|
||||
@CountryName NVARCHAR(100),
|
||||
@ISO3616_1 NVARCHAR(2)
|
||||
)
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM dbo.Country
|
||||
WHERE ISO3616_1 = @ISO3616_1
|
||||
)
|
||||
RETURN;
|
||||
|
||||
INSERT INTO dbo.Country
|
||||
(CountryName, ISO3616_1)
|
||||
VALUES
|
||||
(@CountryName, @ISO3616_1);
|
||||
END;
|
||||
@@ -0,0 +1,30 @@
|
||||
CREATE OR ALTER PROCEDURE dbo.USP_CreateStateProvince
|
||||
(
|
||||
@StateProvinceName NVARCHAR(100),
|
||||
@ISO3616_2 NVARCHAR(6),
|
||||
@CountryCode NVARCHAR(2)
|
||||
)
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM dbo.StateProvince
|
||||
WHERE ISO3616_2 = @ISO3616_2
|
||||
)
|
||||
RETURN;
|
||||
|
||||
DECLARE @CountryId UNIQUEIDENTIFIER = dbo.UDF_GetCountryIdByCode(@CountryCode);
|
||||
IF @CountryId IS NULL
|
||||
BEGIN
|
||||
RAISERROR('Country not found for code.', 16, 1);
|
||||
RETURN;
|
||||
END
|
||||
|
||||
INSERT INTO dbo.StateProvince
|
||||
(StateProvinceName, ISO3616_2, CountryID)
|
||||
VALUES
|
||||
(@StateProvinceName, @ISO3616_2, @CountryId);
|
||||
END;
|
||||
@@ -1,6 +0,0 @@
|
||||
|
||||
CREATE TYPE dbo.TblUserHashes AS TABLE
|
||||
(
|
||||
UserAccountId UNIQUEIDENTIFIER NOT NULL,
|
||||
Hash NVARCHAR(MAX) NOT NULL
|
||||
);
|
||||
@@ -1,500 +0,0 @@
|
||||
CREATE OR ALTER PROCEDURE dbo.USP_AddLocations
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
-- Countries (alpha-2)
|
||||
WITH
|
||||
Countries(CountryName, Alpha2)
|
||||
AS
|
||||
(
|
||||
SELECT 'Canada', 'CA'
|
||||
UNION ALL
|
||||
SELECT 'Mexico', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'United States', 'US'
|
||||
)
|
||||
INSERT INTO dbo.Country
|
||||
(CountryName, ISO3616_1)
|
||||
SELECT c.CountryName, c.Alpha2
|
||||
FROM Countries AS c
|
||||
WHERE NOT EXISTS (SELECT 1
|
||||
FROM dbo.Country AS x
|
||||
WHERE x.ISO3616_1 = c.Alpha2
|
||||
);
|
||||
|
||||
WITH
|
||||
Regions(StateProvinceName, ISO2, CountryAlpha2)
|
||||
AS
|
||||
(
|
||||
-- United States (50 + DC + territories)
|
||||
SELECT 'Alabama', 'US-AL', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Alaska', 'US-AK', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Arizona', 'US-AZ', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Arkansas', 'US-AR', 'US'
|
||||
UNION ALL
|
||||
SELECT 'California', 'US-CA', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Colorado', 'US-CO', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Connecticut', 'US-CT', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Delaware', 'US-DE', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Florida', 'US-FL', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Georgia', 'US-GA', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Hawaii', 'US-HI', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Idaho', 'US-ID', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Illinois', 'US-IL', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Indiana', 'US-IN', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Iowa', 'US-IA', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Kansas', 'US-KS', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Kentucky', 'US-KY', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Louisiana', 'US-LA', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Maine', 'US-ME', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Maryland', 'US-MD', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Massachusetts', 'US-MA', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Michigan', 'US-MI', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Minnesota', 'US-MN', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Mississippi', 'US-MS', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Missouri', 'US-MO', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Montana', 'US-MT', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Nebraska', 'US-NE', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Nevada', 'US-NV', 'US'
|
||||
UNION ALL
|
||||
SELECT 'New Hampshire', 'US-NH', 'US'
|
||||
UNION ALL
|
||||
SELECT 'New Jersey', 'US-NJ', 'US'
|
||||
UNION ALL
|
||||
SELECT 'New Mexico', 'US-NM', 'US'
|
||||
UNION ALL
|
||||
SELECT 'New York', 'US-NY', 'US'
|
||||
UNION ALL
|
||||
SELECT 'North Carolina', 'US-NC', 'US'
|
||||
UNION ALL
|
||||
SELECT 'North Dakota', 'US-ND', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Ohio', 'US-OH', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Oklahoma', 'US-OK', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Oregon', 'US-OR', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Pennsylvania', 'US-PA', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Rhode Island', 'US-RI', 'US'
|
||||
UNION ALL
|
||||
SELECT 'South Carolina', 'US-SC', 'US'
|
||||
UNION ALL
|
||||
SELECT 'South Dakota', 'US-SD', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Tennessee', 'US-TN', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Texas', 'US-TX', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Utah', 'US-UT', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Vermont', 'US-VT', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Virginia', 'US-VA', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Washington', 'US-WA', 'US'
|
||||
UNION ALL
|
||||
SELECT 'West Virginia', 'US-WV', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Wisconsin', 'US-WI', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Wyoming', 'US-WY', 'US'
|
||||
UNION ALL
|
||||
SELECT 'District of Columbia', 'US-DC', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Puerto Rico', 'US-PR', 'US'
|
||||
UNION ALL
|
||||
SELECT 'U.S. Virgin Islands', 'US-VI', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Guam', 'US-GU', 'US'
|
||||
UNION ALL
|
||||
SELECT 'Northern Mariana Islands', 'US-MP', 'US'
|
||||
UNION ALL
|
||||
SELECT 'American Samoa', 'US-AS', 'US'
|
||||
|
||||
-- Canada (10 provinces + 3 territories)
|
||||
UNION ALL
|
||||
SELECT 'Ontario', 'CA-ON', 'CA'
|
||||
UNION ALL
|
||||
SELECT N'Québec', 'CA-QC', 'CA'
|
||||
UNION ALL
|
||||
SELECT 'Nova Scotia', 'CA-NS', 'CA'
|
||||
UNION ALL
|
||||
SELECT 'New Brunswick', 'CA-NB', 'CA'
|
||||
UNION ALL
|
||||
SELECT 'Manitoba', 'CA-MB', 'CA'
|
||||
UNION ALL
|
||||
SELECT 'British Columbia', 'CA-BC', 'CA'
|
||||
UNION ALL
|
||||
SELECT 'Prince Edward Island', 'CA-PE', 'CA'
|
||||
UNION ALL
|
||||
SELECT 'Saskatchewan', 'CA-SK', 'CA'
|
||||
UNION ALL
|
||||
SELECT 'Alberta', 'CA-AB', 'CA'
|
||||
UNION ALL
|
||||
SELECT 'Newfoundland and Labrador', 'CA-NL', 'CA'
|
||||
UNION ALL
|
||||
SELECT 'Northwest Territories', 'CA-NT', 'CA'
|
||||
UNION ALL
|
||||
SELECT 'Yukon', 'CA-YT', 'CA'
|
||||
UNION ALL
|
||||
SELECT 'Nunavut', 'CA-NU', 'CA'
|
||||
|
||||
-- Mexico (32 states incl. CDMX)
|
||||
UNION ALL
|
||||
SELECT 'Aguascalientes', 'MX-AGU', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Baja California', 'MX-BCN', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Baja California Sur', 'MX-BCS', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Campeche', 'MX-CAM', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Chiapas', 'MX-CHP', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Chihuahua', 'MX-CHH', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Coahuila de Zaragoza', 'MX-COA', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Colima', 'MX-COL', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Durango', 'MX-DUR', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Guanajuato', 'MX-GUA', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Guerrero', 'MX-GRO', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Hidalgo', 'MX-HID', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Jalisco', 'MX-JAL', 'MX'
|
||||
UNION ALL
|
||||
SELECT N'México State', 'MX-MEX', 'MX'
|
||||
UNION ALL
|
||||
SELECT N'Michoacán de Ocampo', 'MX-MIC', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Morelos', 'MX-MOR', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Nayarit', 'MX-NAY', 'MX'
|
||||
UNION ALL
|
||||
SELECT N'Nuevo León', 'MX-NLE', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Oaxaca', 'MX-OAX', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Puebla', 'MX-PUE', 'MX'
|
||||
UNION ALL
|
||||
SELECT N'Querétaro', 'MX-QUE', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Quintana Roo', 'MX-ROO', 'MX'
|
||||
UNION ALL
|
||||
SELECT N'San Luis Potosí', 'MX-SLP', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Sinaloa', 'MX-SIN', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Sonora', 'MX-SON', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Tabasco', 'MX-TAB', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Tamaulipas', 'MX-TAM', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Tlaxcala', 'MX-TLA', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Veracruz de Ignacio de la Llave', 'MX-VER', 'MX'
|
||||
UNION ALL
|
||||
SELECT N'Yucatán', 'MX-YUC', 'MX'
|
||||
UNION ALL
|
||||
SELECT 'Zacatecas', 'MX-ZAC', 'MX'
|
||||
UNION ALL
|
||||
SELECT N'Ciudad de México', 'MX-CMX', 'MX'
|
||||
)
|
||||
INSERT INTO dbo.StateProvince
|
||||
(StateProvinceName, ISO3616_2, CountryID)
|
||||
SELECT
|
||||
r.StateProvinceName,
|
||||
r.ISO2,
|
||||
dbo.UDF_GetCountryIdByCode(r.CountryAlpha2)
|
||||
FROM Regions AS r
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM dbo.StateProvince AS sp
|
||||
WHERE sp.ISO3616_2 = r.ISO2
|
||||
);
|
||||
|
||||
WITH
|
||||
Cities(StateProvinceISO2, CityName)
|
||||
AS
|
||||
(
|
||||
-- USA
|
||||
SELECT 'US-CA', 'Los Angeles'
|
||||
UNION ALL
|
||||
SELECT 'US-CA', 'San Diego'
|
||||
UNION ALL
|
||||
SELECT 'US-CA', 'San Francisco'
|
||||
UNION ALL
|
||||
SELECT 'US-CA', 'Sacramento'
|
||||
UNION ALL
|
||||
SELECT 'US-TX', 'Houston'
|
||||
UNION ALL
|
||||
SELECT 'US-TX', 'Dallas'
|
||||
UNION ALL
|
||||
SELECT 'US-TX', 'Austin'
|
||||
UNION ALL
|
||||
SELECT 'US-TX', 'San Antonio'
|
||||
UNION ALL
|
||||
SELECT 'US-FL', 'Miami'
|
||||
UNION ALL
|
||||
SELECT 'US-FL', 'Orlando'
|
||||
UNION ALL
|
||||
SELECT 'US-FL', 'Tampa'
|
||||
UNION ALL
|
||||
SELECT 'US-NY', 'New York'
|
||||
UNION ALL
|
||||
SELECT 'US-NY', 'Buffalo'
|
||||
UNION ALL
|
||||
SELECT 'US-NY', 'Rochester'
|
||||
UNION ALL
|
||||
SELECT 'US-IL', 'Chicago'
|
||||
UNION ALL
|
||||
SELECT 'US-IL', 'Springfield'
|
||||
UNION ALL
|
||||
SELECT 'US-PA', 'Philadelphia'
|
||||
UNION ALL
|
||||
SELECT 'US-PA', 'Pittsburgh'
|
||||
UNION ALL
|
||||
SELECT 'US-AZ', 'Phoenix'
|
||||
UNION ALL
|
||||
SELECT 'US-AZ', 'Tucson'
|
||||
UNION ALL
|
||||
SELECT 'US-CO', 'Denver'
|
||||
UNION ALL
|
||||
SELECT 'US-CO', 'Colorado Springs'
|
||||
UNION ALL
|
||||
SELECT 'US-MA', 'Boston'
|
||||
UNION ALL
|
||||
SELECT 'US-MA', 'Worcester'
|
||||
UNION ALL
|
||||
SELECT 'US-WA', 'Seattle'
|
||||
UNION ALL
|
||||
SELECT 'US-WA', 'Spokane'
|
||||
UNION ALL
|
||||
SELECT 'US-GA', 'Atlanta'
|
||||
UNION ALL
|
||||
SELECT 'US-GA', 'Savannah'
|
||||
UNION ALL
|
||||
SELECT 'US-NV', 'Las Vegas'
|
||||
UNION ALL
|
||||
SELECT 'US-NV', 'Reno'
|
||||
UNION ALL
|
||||
SELECT 'US-MI', 'Detroit'
|
||||
UNION ALL
|
||||
SELECT 'US-MI', 'Grand Rapids'
|
||||
UNION ALL
|
||||
SELECT 'US-MN', 'Minneapolis'
|
||||
UNION ALL
|
||||
SELECT 'US-MN', 'Saint Paul'
|
||||
UNION ALL
|
||||
SELECT 'US-OH', 'Columbus'
|
||||
UNION ALL
|
||||
SELECT 'US-OH', 'Cleveland'
|
||||
UNION ALL
|
||||
SELECT 'US-OR', 'Portland'
|
||||
UNION ALL
|
||||
SELECT 'US-OR', 'Salem'
|
||||
UNION ALL
|
||||
SELECT 'US-TN', 'Nashville'
|
||||
UNION ALL
|
||||
SELECT 'US-TN', 'Memphis'
|
||||
UNION ALL
|
||||
SELECT 'US-VA', 'Richmond'
|
||||
UNION ALL
|
||||
SELECT 'US-VA', 'Virginia Beach'
|
||||
UNION ALL
|
||||
SELECT 'US-MD', 'Baltimore'
|
||||
UNION ALL
|
||||
SELECT 'US-MD', 'Frederick'
|
||||
UNION ALL
|
||||
SELECT 'US-DC', 'Washington'
|
||||
UNION ALL
|
||||
SELECT 'US-UT', 'Salt Lake City'
|
||||
UNION ALL
|
||||
SELECT 'US-UT', 'Provo'
|
||||
UNION ALL
|
||||
SELECT 'US-LA', 'New Orleans'
|
||||
UNION ALL
|
||||
SELECT 'US-LA', 'Baton Rouge'
|
||||
UNION ALL
|
||||
SELECT 'US-KY', 'Louisville'
|
||||
UNION ALL
|
||||
SELECT 'US-KY', 'Lexington'
|
||||
UNION ALL
|
||||
SELECT 'US-IA', 'Des Moines'
|
||||
UNION ALL
|
||||
SELECT 'US-IA', 'Cedar Rapids'
|
||||
UNION ALL
|
||||
SELECT 'US-OK', 'Oklahoma City'
|
||||
UNION ALL
|
||||
SELECT 'US-OK', 'Tulsa'
|
||||
UNION ALL
|
||||
SELECT 'US-NE', 'Omaha'
|
||||
UNION ALL
|
||||
SELECT 'US-NE', 'Lincoln'
|
||||
UNION ALL
|
||||
SELECT 'US-MO', 'Kansas City'
|
||||
UNION ALL
|
||||
SELECT 'US-MO', 'St. Louis'
|
||||
UNION ALL
|
||||
SELECT 'US-NC', 'Charlotte'
|
||||
UNION ALL
|
||||
SELECT 'US-NC', 'Raleigh'
|
||||
UNION ALL
|
||||
SELECT 'US-SC', 'Columbia'
|
||||
UNION ALL
|
||||
SELECT 'US-SC', 'Charleston'
|
||||
UNION ALL
|
||||
SELECT 'US-WI', 'Milwaukee'
|
||||
UNION ALL
|
||||
SELECT 'US-WI', 'Madison'
|
||||
UNION ALL
|
||||
SELECT 'US-MN', 'Duluth'
|
||||
UNION ALL
|
||||
SELECT 'US-AK', 'Anchorage'
|
||||
UNION ALL
|
||||
SELECT 'US-HI', 'Honolulu'
|
||||
-- Canada
|
||||
UNION ALL
|
||||
SELECT 'CA-ON', 'Toronto'
|
||||
UNION ALL
|
||||
SELECT 'CA-ON', 'Ottawa'
|
||||
UNION ALL
|
||||
SELECT 'CA-QC', N'Montréal'
|
||||
UNION ALL
|
||||
SELECT 'CA-QC', N'Québec City'
|
||||
UNION ALL
|
||||
SELECT 'CA-BC', 'Vancouver'
|
||||
UNION ALL
|
||||
SELECT 'CA-BC', 'Victoria'
|
||||
UNION ALL
|
||||
SELECT 'CA-AB', 'Calgary'
|
||||
UNION ALL
|
||||
SELECT 'CA-AB', 'Edmonton'
|
||||
UNION ALL
|
||||
SELECT 'CA-MB', 'Winnipeg'
|
||||
UNION ALL
|
||||
SELECT 'CA-NS', 'Halifax'
|
||||
UNION ALL
|
||||
SELECT 'CA-SK', 'Saskatoon'
|
||||
UNION ALL
|
||||
SELECT 'CA-SK', 'Regina'
|
||||
UNION ALL
|
||||
SELECT 'CA-NB', 'Moncton'
|
||||
UNION ALL
|
||||
SELECT 'CA-NB', 'Saint John'
|
||||
UNION ALL
|
||||
SELECT 'CA-PE', 'Charlottetown'
|
||||
UNION ALL
|
||||
SELECT 'CA-NL', N'St. John''s'
|
||||
UNION ALL
|
||||
SELECT 'CA-ON', 'Hamilton'
|
||||
UNION ALL
|
||||
SELECT 'CA-ON', 'London'
|
||||
UNION ALL
|
||||
SELECT 'CA-QC', 'Gatineau'
|
||||
UNION ALL
|
||||
SELECT 'CA-QC', 'Laval'
|
||||
UNION ALL
|
||||
SELECT 'CA-BC', 'Kelowna'
|
||||
UNION ALL
|
||||
SELECT 'CA-AB', 'Red Deer'
|
||||
UNION ALL
|
||||
SELECT 'CA-MB', 'Brandon'
|
||||
-- MEXICO
|
||||
UNION ALL
|
||||
SELECT 'MX-CMX', N'Ciudad de México'
|
||||
UNION ALL
|
||||
SELECT 'MX-JAL', 'Guadalajara'
|
||||
UNION ALL
|
||||
SELECT 'MX-NLE', 'Monterrey'
|
||||
UNION ALL
|
||||
SELECT 'MX-PUE', 'Puebla'
|
||||
UNION ALL
|
||||
SELECT 'MX-ROO', N'Cancún'
|
||||
UNION ALL
|
||||
SELECT 'MX-GUA', 'Guanajuato'
|
||||
UNION ALL
|
||||
SELECT 'MX-MIC', 'Morelia'
|
||||
UNION ALL
|
||||
SELECT 'MX-BCN', 'Tijuana'
|
||||
UNION ALL
|
||||
SELECT 'MX-JAL', 'Zapopan'
|
||||
UNION ALL
|
||||
SELECT 'MX-NLE', N'San Nicolás'
|
||||
UNION ALL
|
||||
SELECT 'MX-CAM', 'Campeche'
|
||||
UNION ALL
|
||||
SELECT 'MX-TAB', 'Villahermosa'
|
||||
UNION ALL
|
||||
SELECT 'MX-VER', 'Veracruz'
|
||||
UNION ALL
|
||||
SELECT 'MX-OAX', 'Oaxaca'
|
||||
UNION ALL
|
||||
SELECT 'MX-SLP', N'San Luis Potosí'
|
||||
UNION ALL
|
||||
SELECT 'MX-CHH', 'Chihuahua'
|
||||
UNION ALL
|
||||
SELECT 'MX-AGU', 'Aguascalientes'
|
||||
UNION ALL
|
||||
SELECT 'MX-MEX', 'Toluca'
|
||||
UNION ALL
|
||||
SELECT 'MX-COA', 'Saltillo'
|
||||
UNION ALL
|
||||
SELECT 'MX-BCS', 'La Paz'
|
||||
UNION ALL
|
||||
SELECT 'MX-NAY', 'Tepic'
|
||||
UNION ALL
|
||||
SELECT 'MX-ZAC', 'Zacatecas'
|
||||
)
|
||||
INSERT INTO dbo.City
|
||||
(StateProvinceID, CityName)
|
||||
SELECT
|
||||
dbo.UDF_GetStateProvinceIdByCode(c.StateProvinceISO2),
|
||||
c.CityName
|
||||
FROM Cities AS c
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM dbo.City AS ci
|
||||
WHERE ci.CityName = c.CityName
|
||||
AND ci.StateProvinceID = dbo.UDF_GetStateProvinceIdByCode(c.StateProvinceISO2)
|
||||
);
|
||||
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
END;
|
||||
@@ -1,132 +0,0 @@
|
||||
CREATE OR ALTER PROCEDURE dbo.USP_AddTestUsers
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
DECLARE @FullNames TABLE
|
||||
(FirstName NVARCHAR(128),
|
||||
LastName NVARCHAR(128));
|
||||
|
||||
INSERT INTO @FullNames
|
||||
(FirstName, LastName)
|
||||
VALUES
|
||||
('Aarya', 'Mathews'),
|
||||
('Aiden', 'Wells'),
|
||||
('Aleena', 'Gonzalez'),
|
||||
('Alessandra', 'Nelson'),
|
||||
('Amari', 'Tucker'),
|
||||
('Ameer', 'Huff'),
|
||||
('Amirah', 'Hicks'),
|
||||
('Analia', 'Dominguez'),
|
||||
('Anne', 'Jenkins'),
|
||||
('Apollo', 'Davis'),
|
||||
('Arianna', 'White'),
|
||||
('Aubree', 'Moore'),
|
||||
('Aubrielle', 'Raymond'),
|
||||
('Aydin', 'Odom'),
|
||||
('Bowen', 'Casey'),
|
||||
('Brock', 'Huber'),
|
||||
('Caiden', 'Strong'),
|
||||
('Cecilia', 'Rosales'),
|
||||
('Celeste', 'Barber'),
|
||||
('Chance', 'Small'),
|
||||
('Clara', 'Roberts'),
|
||||
('Collins', 'Brandt'),
|
||||
('Damir', 'Wallace'),
|
||||
('Declan', 'Crawford'),
|
||||
('Dennis', 'Decker'),
|
||||
('Dylan', 'Lang'),
|
||||
('Eliza', 'Kane'),
|
||||
('Elle', 'Poole'),
|
||||
('Elliott', 'Miles'),
|
||||
('Emelia', 'Lucas'),
|
||||
('Emilia', 'Simpson'),
|
||||
('Emmett', 'Lugo'),
|
||||
('Ethan', 'Stephens'),
|
||||
('Etta', 'Woods'),
|
||||
('Gael', 'Moran'),
|
||||
('Grant', 'Benson'),
|
||||
('Gwen', 'James'),
|
||||
('Huxley', 'Chen'),
|
||||
('Isabella', 'Fisher'),
|
||||
('Ivan', 'Mathis'),
|
||||
('Jamir', 'McMillan'),
|
||||
('Jaxson', 'Shields'),
|
||||
('Jimmy', 'Richmond'),
|
||||
('Josiah', 'Flores'),
|
||||
('Kaden', 'Enriquez'),
|
||||
('Kai', 'Lawson'),
|
||||
('Karsyn', 'Adkins'),
|
||||
('Karsyn', 'Proctor'),
|
||||
('Kayden', 'Henson'),
|
||||
('Kaylie', 'Spears'),
|
||||
('Kinslee', 'Jones'),
|
||||
('Kora', 'Guerra'),
|
||||
('Lane', 'Skinner'),
|
||||
('Laylani', 'Christian'),
|
||||
('Ledger', 'Carroll'),
|
||||
('Leilany', 'Small'),
|
||||
('Leland', 'McCall'),
|
||||
('Leonard', 'Calhoun'),
|
||||
('Levi', 'Ochoa'),
|
||||
('Lillie', 'Vang'),
|
||||
('Lola', 'Sheppard'),
|
||||
('Luciana', 'Poole'),
|
||||
('Maddox', 'Hughes'),
|
||||
('Mara', 'Blackwell'),
|
||||
('Marcellus', 'Bartlett'),
|
||||
('Margo', 'Koch'),
|
||||
('Maurice', 'Gibson'),
|
||||
('Maxton', 'Dodson'),
|
||||
('Mia', 'Parrish'),
|
||||
('Millie', 'Fuentes'),
|
||||
('Nellie', 'Villanueva'),
|
||||
('Nicolas', 'Mata'),
|
||||
('Nicolas', 'Miller'),
|
||||
('Oakleigh', 'Foster'),
|
||||
('Octavia', 'Pierce'),
|
||||
('Paisley', 'Allison'),
|
||||
('Quincy', 'Andersen'),
|
||||
('Quincy', 'Frazier'),
|
||||
('Raiden', 'Roberts'),
|
||||
('Raquel', 'Lara'),
|
||||
('Rudy', 'McIntosh'),
|
||||
('Salvador', 'Stein'),
|
||||
('Samantha', 'Dickson'),
|
||||
('Solomon', 'Richards'),
|
||||
('Sylvia', 'Hanna'),
|
||||
('Talia', 'Trujillo'),
|
||||
('Thalia', 'Farrell'),
|
||||
('Trent', 'Mayo'),
|
||||
('Trinity', 'Cummings'),
|
||||
('Ty', 'Perry'),
|
||||
('Tyler', 'Romero'),
|
||||
('Valeria', 'Pierce'),
|
||||
('Vance', 'Neal'),
|
||||
('Whitney', 'Bell'),
|
||||
('Wilder', 'Graves'),
|
||||
('William', 'Logan'),
|
||||
('Zara', 'Wilkinson'),
|
||||
('Zaria', 'Gibson'),
|
||||
('Zion', 'Watkins'),
|
||||
('Zoie', 'Armstrong');
|
||||
|
||||
|
||||
INSERT INTO dbo.UserAccount
|
||||
(Username, FirstName, LastName, Email, DateOfBirth)
|
||||
SELECT
|
||||
LEFT(LOWER(CONCAT(fn.FirstName, '.', fn.LastName)), 64) AS Username,
|
||||
fn.FirstName,
|
||||
fn.LastName,
|
||||
LEFT(LOWER(CONCAT(fn.FirstName, '.', fn.LastName, '@example.com')), 128) AS Email,
|
||||
|
||||
-- date of birth: pick age between 18 and 47 (18 + 0..29)
|
||||
DATEADD(YEAR, -(19 + ABS(CHECKSUM(NEWID())) % 30), CAST(GETDATE() AS DATE))
|
||||
FROM @FullNames AS fn;
|
||||
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
END;
|
||||
@@ -1,22 +0,0 @@
|
||||
-- Stored procedure to insert Argon2 hashes
|
||||
CREATE OR ALTER PROCEDURE dbo.USP_AddUserCredentials
|
||||
(
|
||||
@Hash dbo.TblUserHashes READONLY
|
||||
)
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
INSERT INTO dbo.UserCredential
|
||||
(UserAccountId, Hash)
|
||||
SELECT
|
||||
uah.UserAccountId,
|
||||
uah.Hash
|
||||
FROM @Hash AS uah;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
END;
|
||||
GO
|
||||
@@ -1,31 +0,0 @@
|
||||
CREATE OR ALTER PROCEDURE dbo.USP_CreateUserVerification
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
INSERT INTO dbo.UserVerification
|
||||
(UserAccountId)
|
||||
SELECT
|
||||
ua.UserAccountID
|
||||
FROM dbo.UserAccount AS ua
|
||||
WHERE NOT EXISTS
|
||||
(SELECT 1
|
||||
FROM dbo.UserVerification AS uv
|
||||
WHERE uv.UserAccountId = ua.UserAccountID);
|
||||
|
||||
|
||||
IF (SELECT COUNT(*)
|
||||
FROM dbo.UserVerification)
|
||||
!= (SELECT COUNT(*)
|
||||
FROM dbo.UserAccount)
|
||||
BEGIN
|
||||
RAISERROR('UserVerification count does not match UserAccount count after insertion.', 16, 1);
|
||||
ROLLBACK TRANSACTION;
|
||||
RETURN;
|
||||
END
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
END
|
||||
Reference in New Issue
Block a user