use sqlx::sqlite::SqlitePool; use crate::{task::Task, Result}; struct Db { pool: SqlitePool, } impl Db { pub async fn create_task(&self, task: Task) -> Result { let id = sqlx::query!( "insert into tasks ( name, cron, archived, description ) values ( ?1, ?2, ?3, ?4 )", task.name, task.cron, task.archived, task.description ) .execute(&self.pool) .await? .last_insert_rowid(); for category in task.categories.clone() { let category_id = sqlx::query!( "insert or ignore into categories ( name ) values ( ?1 )", category ) .execute(&self.pool) .await? .last_insert_rowid(); sqlx::query!( "insert into tasks_categories ( task_id, category_id ) values ( ?1, ?2 )", id, category_id ) .execute(&self.pool) .await?; } Ok(task.add_id(id)) } pub async fn read_tasks(&self, select: Vec) -> Result> { Ok(sqlx::query!("select * from tasks") .fetch_all(&self.pool) .await?) } pub async fn update_tasks(&self, select: Vec) -> Result<()> { todo!() } pub async fn delete_tasks(&self, select: Vec) -> Result<()> { todo!() } } pub enum TaskSelect { Name(String), Archived(bool), Category(String), }