diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 6755399..c05911d 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -10,7 +10,8 @@ "Bash(cd:*)", "Bash(tree:*)", "Bash(del Index.cshtml Index.cshtml.cs)", - "Bash(dotnet build:*)" + "Bash(dotnet build:*)", + "Bash(find:*)" ], "deny": [], "ask": [] diff --git a/Media.JoshHeaps.Net/Database/001_create_schema.sql b/Media.JoshHeaps.Net/Database/001_create_schema.sql new file mode 100644 index 0000000..2c0f019 --- /dev/null +++ b/Media.JoshHeaps.Net/Database/001_create_schema.sql @@ -0,0 +1,2 @@ +CREATE SCHEMA IF NOT EXISTS app + AUTHORIZATION josh; \ No newline at end of file diff --git a/Media.JoshHeaps.Net/Database/002_create_login_table.sql b/Media.JoshHeaps.Net/Database/002_create_login_table.sql new file mode 100644 index 0000000..b420afb --- /dev/null +++ b/Media.JoshHeaps.Net/Database/002_create_login_table.sql @@ -0,0 +1,16 @@ +CREATE TABLE IF NOT EXISTS app.users ( + id BIGSERIAL PRIMARY KEY, + email VARCHAR(255) UNIQUE NOT NULL, + username VARCHAR(50) UNIQUE NOT NULL, + password_hash VARCHAR(255) NOT NULL, + is_active BOOLEAN DEFAULT TRUE, + email_verified BOOLEAN DEFAULT FALSE, + failed_login_attempts INTEGER DEFAULT 0, + locked_until TIMESTAMP NULL, + last_login TIMESTAMP NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +CREATE INDEX IF NOT EXISTS idx_email ON app.users(email); +CREATE INDEX IF NOT EXISTS idx_username ON app.users(username); \ No newline at end of file diff --git a/Media.JoshHeaps.Net/Database/001_email_verification_tokens.sql b/Media.JoshHeaps.Net/Database/003_email_verification_tokens.sql similarity index 100% rename from Media.JoshHeaps.Net/Database/001_email_verification_tokens.sql rename to Media.JoshHeaps.Net/Database/003_email_verification_tokens.sql diff --git a/Media.JoshHeaps.Net/Database/002_user_profiles.sql b/Media.JoshHeaps.Net/Database/004_user_profiles.sql similarity index 100% rename from Media.JoshHeaps.Net/Database/002_user_profiles.sql rename to Media.JoshHeaps.Net/Database/004_user_profiles.sql diff --git a/Media.JoshHeaps.Net/Database/003_user_media.sql b/Media.JoshHeaps.Net/Database/005_user_media.sql similarity index 100% rename from Media.JoshHeaps.Net/Database/003_user_media.sql rename to Media.JoshHeaps.Net/Database/005_user_media.sql diff --git a/Media.JoshHeaps.Net/Database/004_folders.sql b/Media.JoshHeaps.Net/Database/006_folders.sql similarity index 100% rename from Media.JoshHeaps.Net/Database/004_folders.sql rename to Media.JoshHeaps.Net/Database/006_folders.sql diff --git a/Media.JoshHeaps.Net/Database/005_alter_user_media_add_folder.sql b/Media.JoshHeaps.Net/Database/007_alter_user_media_add_folder.sql similarity index 100% rename from Media.JoshHeaps.Net/Database/005_alter_user_media_add_folder.sql rename to Media.JoshHeaps.Net/Database/007_alter_user_media_add_folder.sql diff --git a/Media.JoshHeaps.Net/Database/006_folder_shares.sql b/Media.JoshHeaps.Net/Database/008_folder_shares.sql similarity index 100% rename from Media.JoshHeaps.Net/Database/006_folder_shares.sql rename to Media.JoshHeaps.Net/Database/008_folder_shares.sql diff --git a/Media.JoshHeaps.Net/Database/007_graphs.sql b/Media.JoshHeaps.Net/Database/009_graphs.sql similarity index 100% rename from Media.JoshHeaps.Net/Database/007_graphs.sql rename to Media.JoshHeaps.Net/Database/009_graphs.sql diff --git a/Media.JoshHeaps.Net/Database/008_graph_nodes.sql b/Media.JoshHeaps.Net/Database/010_graph_nodes.sql similarity index 100% rename from Media.JoshHeaps.Net/Database/008_graph_nodes.sql rename to Media.JoshHeaps.Net/Database/010_graph_nodes.sql diff --git a/Media.JoshHeaps.Net/Database/009_graph_edges.sql b/Media.JoshHeaps.Net/Database/011_graph_edges.sql similarity index 100% rename from Media.JoshHeaps.Net/Database/009_graph_edges.sql rename to Media.JoshHeaps.Net/Database/011_graph_edges.sql