プロジェクトアドレス:https://github.com/MrTwoc/todo-rs
前の章では、タスクの表形式出力を実現しましたが、見た目の効果はあまり良くありませんでした。。
今回は、タスクを保存する json ファイルを sqlite に変更し、タスクのレベルを固定のいくつかのレベルから u8 レベルに変更しました。
これにより、より大きな階層スペースをサポートできます。
また、sqlite に基づくユーザー管理機能を新たに追加し、将来的にプロジェクト構造を cs 構造に変更する準備をしました。
toml 設定ファイルを追加しました。現在は 1 つのパラメータ:if_login のみです。false の場合はログインをスキップし、デフォルトはローカルログインです。
今後、pgsql をサポートする場合は、設定ファイルで接続アドレスを設定できます。
現在直面している難点:
- sqlite でのタスクのバッチ状態更新
- 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 に変更し、タスクを直接削除しないようにします。