banner
[面包]MrTwoC

[面包]MrTwoC

你好,欢迎来到这个基于区块链的个人博客 名字:面包 / MrTwoc 爱好:跑步(5/10KM)、拿铁咖啡、游戏(Minecraft、Warframe、CS) 兴趣方向:Rust、区块链、图形学、游戏设计与开发
bilibili
steam
email
github

[4]Todo-rs-Sqlite

上一章内容

プロジェクトアドレス:https://github.com/MrTwoc/todo-rs

前の章ではタスクの表形式出力を実現しましたが、見た目の効果はあまり良くありませんでした。。

今回はタスクを保存する json ファイルを sqlite に変更し、タスクのレベルを固定のいくつかのレベルから u8 レベルに変更しました。

これにより、より大きな階層スペースをサポートできます。

また、sqlite に基づくユーザー管理機能を新たに追加し、将来的にプロジェクト構造を cs 構造に変更する準備をしました。

toml 設定ファイルを追加しました。現在は 1 つのパラメータ:if_login のみです。false の場合はログインをスキップし、デフォルトはローカルログインです。

今後 pgsql をサポートする場合は、設定ファイルに接続アドレスを設定できます。

現在直面している難点:

  1. sqlite でのタスクのバッチ状態更新
  2. sqlite でのタスク編集

タスク編集は、直接マッチでパラメータを一致させて、1 つずつ更新しています。。各一致するマッチには、次のように 1 文で置き換えます。

conn.execute(
  "UPDATE tasks SET description = ? WHERE id = ?",
  (value, task_id),
)?;

タスクのバッチ更新は、id を iter と collect で配列にまとめ、各タスクの状態を変更するためにループします。

pub fn sql_update_status(args: &[&str]) -> Result<(), Box<dyn std::error::Error>> {
    let status = args[1];
    let ids: Vec<u32> = args[2..]
        .iter()
        .map(|s| s.parse())
        .collect::<Result<_, _>>()?;
    let conn = get_conn()?;
    for id in ids {
        conn.execute(
            "UPDATE tasks SET task_status = ? WHERE id = ?",
            (status, id),
        )?;
    }
    info!("[sqlite]タスク状態の更新に成功しました");
    println!("タスク更新");
    Ok(())
}

未実装の内容:

ソートアルゴリズムを組み込む

検索アルゴリズムを組み込む

アプリケーションをトレイに隠して実行する

タスクの削除をタスクの状態変更に変更し、削除されたタスクの状態を 0 から 1 に変更し、タスクを直接削除しないようにします。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。