tdm_server_rust/runner/
test_member_seed_runner.rs1use bcrypt::{hash, DEFAULT_COST};
4use sqlx::MySqlPool;
5
6struct TestMember {
8 username: &'static str,
10 email: &'static str,
12 post_id: i32,
14}
15
16pub async fn run(pool: &MySqlPool) -> anyhow::Result<()> {
18 let pwd_hash = hash("123456", DEFAULT_COST)?;
19 let members = [
20 TestMember { username: "翻译", email: "role1@tdm.test", post_id: 1 },
21 TestMember { username: "校对", email: "role2@tdm.test", post_id: 2 },
22 TestMember { username: "嵌字", email: "role3@tdm.test", post_id: 3 },
23 TestMember { username: "时轴", email: "role6@tdm.test", post_id: 6 },
24 TestMember { username: "管理员", email: "role4@tdm.test", post_id: 4 },
25 TestMember { username: "其他人员", email: "role5@tdm.test", post_id: 5 },
26 ];
27 for m in members {
28 seed_one(pool, m.username, m.email, &pwd_hash, m.post_id).await?;
29 }
30 Ok(())
31}
32
33async fn seed_one(
35 pool: &MySqlPool,
36 username: &str,
37 email: &str,
38 pwd_hash: &str,
39 post_id: i32,
40) -> anyhow::Result<()> {
41 let exists: Option<i32> = sqlx::query_scalar(
42 "SELECT Id FROM membertb WHERE username = ?",
43 )
44 .bind(username)
45 .fetch_optional(pool)
46 .await?;
47 let member_id = if let Some(id) = exists {
48 id
49 } else {
50 let r = sqlx::query(
51 "INSERT INTO membertb(username, password, intern, email, registrationTime) VALUES (?, ?, 1, ?, NOW())",
52 )
53 .bind(username)
54 .bind(pwd_hash)
55 .bind(email)
56 .execute(pool)
57 .await?;
58 r.last_insert_id() as i32
59 };
60 sqlx::query(
61 "INSERT IGNORE INTO memberpost(memberId, postId) VALUES (?, ?)",
62 )
63 .bind(member_id)
64 .bind(post_id)
65 .execute(pool)
66 .await?;
67 Ok(())
68}