about summary refs log tree commit diff
path: root/src/import.rs
diff options
context:
space:
mode:
authorgennyble <gen@nyble.dev>2025-04-20 06:52:12 -0500
committergennyble <gen@nyble.dev>2025-04-20 06:52:12 -0500
commit2d667d4c3d63a44c4cc01f7fb7133e5714d60584 (patch)
tree61c7dbc795998644f1546b4104e1eff86629cda8 /src/import.rs
parent85a319730a9d3290a0b75c8460279a2649b10443 (diff)
downloadleaberblord-2d667d4c3d63a44c4cc01f7fb7133e5714d60584.tar.gz
leaberblord-2d667d4c3d63a44c4cc01f7fb7133e5714d60584.zip
add quick-n-easy import cli command
Diffstat (limited to 'src/import.rs')
-rw-r--r--src/import.rs54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/import.rs b/src/import.rs
new file mode 100644
index 0000000..f7d9873
--- /dev/null
+++ b/src/import.rs
@@ -0,0 +1,54 @@
+use serde::Deserialize;
+
+use crate::database::{BoardRow, Database, Error};
+
+#[derive(Debug, Deserialize)]
+pub struct Emboard {
+	guildName: String,
+	leaderboard: Vec<EmboardRow>,
+}
+
+#[derive(Debug, Deserialize)]
+pub struct EmboardRow {
+	guildId: String,
+	discordId: String,
+	points: String,
+	username: String,
+}
+
+pub fn import(db: &Database, json: String) {
+	let embaord: Emboard = match serde_json::from_str(&json) {
+		Ok(e) => e,
+		Err(e) => {
+			panic!("{e}");
+		}
+	};
+
+	let Some(first) = embaord.leaderboard.first() else {
+		return;
+	};
+
+	let guild_id = u64::from_str_radix(&first.guildId, 10).unwrap();
+	if db.get_leaderboard(guild_id).is_err() {
+		db.create_leaderboard(guild_id).unwrap();
+	}
+
+	for user in embaord.leaderboard {
+		let user_id = u64::from_str_radix(&user.discordId, 10).unwrap();
+		let points = i64::from_str_radix(&user.points, 10).unwrap();
+
+		let res = db.give_user_points(guild_id, user_id, points);
+		if let Err(Error::UserNotExist) = res {
+			db.add_user_to_leaderboard(
+				guild_id,
+				BoardRow {
+					user_id,
+					user_handle: user.username,
+					user_nickname: None,
+					points,
+				},
+			)
+			.unwrap();
+		}
+	}
+}