MrTwoc

MrTwoc

Hello!

[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 でのタスク編集

タスク編集では、直接 match を使用してパラメータを一致させ、各々を更新しています。。各一致する match には、次のように 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 に変更し、タスクを直接削除しないようにします。

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