Skip to main content

tdm_server_rust/runner/
test_member_seed_runner.rs

1//! 测试角色账号种子数据(对齐 WebBack-end README 测试账号)
2
3use bcrypt::{hash, DEFAULT_COST};
4use sqlx::MySqlPool;
5
6/// 测试角色:用户名、邮箱、岗位 ID
7struct TestMember {
8    /// 登录用户名
9    username: &'static str,
10    /// QQ/邮箱(唯一)
11    email: &'static str,
12    /// 岗位 postId
13    post_id: i32,
14}
15
16/// 预置 6 个测试角色账号(不存在则插入)
17pub 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
33/// 插入单个测试组员及其岗位
34async 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}