Add account connections, guild wallets and admin fixes [skip ci]

This commit is contained in:
SCOPEDD committed 2026-09-30 12:25:29 -04:00
1 parent 7076e847ea
commit 004862ea88
38 files changed
+1696 -458

No files matched your search

+49 -1
View File
@@ -509,6 +509,52 @@ const MIGRATIONS: &[&str] = &[
r#"
ALTER TABLE game_servers ADD COLUMN map_url TEXT NOT NULL DEFAULT '';
"#,
r#"
CREATE TABLE account_connections (
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
provider TEXT NOT NULL,
provider_id TEXT NOT NULL,
display_name TEXT NOT NULL DEFAULT '',
created_at TEXT NOT NULL,
PRIMARY KEY (provider, provider_id),
UNIQUE (user_id, provider)
);
CREATE TABLE oauth_attempts (
state TEXT PRIMARY KEY,
kind TEXT NOT NULL,
user_id INTEGER REFERENCES users(id) ON DELETE CASCADE,
created_at TEXT NOT NULL,
expires_at TEXT NOT NULL,
result TEXT,
consumed_at TEXT
);
CREATE TABLE password_resets (
token_hash TEXT PRIMARY KEY,
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
expires_at TEXT NOT NULL,
used_at TEXT
);
CREATE INDEX password_resets_user ON password_resets(user_id);
"#,
r#"
CREATE TABLE guild_wallets (
server_id INTEGER NOT NULL REFERENCES game_servers(id) ON DELETE CASCADE,
guild_id TEXT NOT NULL REFERENCES guilds(id) ON DELETE CASCADE,
balance REAL NOT NULL DEFAULT 0 CHECK(balance >= 0),
updated_at TEXT NOT NULL,
PRIMARY KEY(server_id,guild_id)
);
CREATE TABLE guild_wallet_transactions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
server_id INTEGER NOT NULL REFERENCES game_servers(id) ON DELETE CASCADE,
guild_id TEXT NOT NULL REFERENCES guilds(id) ON DELETE CASCADE,
actor_uuid TEXT NOT NULL,
kind TEXT NOT NULL,
amount REAL NOT NULL,
created_at TEXT NOT NULL
);
CREATE INDEX guild_wallet_transactions_recent ON guild_wallet_transactions(guild_id,server_id,id DESC);
"#,
];
pub async fn connect(data_dir: &Path) -> Result<SqlitePool> {
@@ -546,7 +592,9 @@ async fn migrate(pool: &SqlitePool) -> Result<()> {
}
backfill_uuids(pool).await?;
crate::seed::seed_quests_and_achievements(pool).await?;
if current < 9 { crate::seed::upgrade_seeded_quest_targets(pool).await?; }
if current < 9 {
crate::seed::upgrade_seeded_quest_targets(pool).await?;
}
Ok(())
}