diff options
Diffstat (limited to '')
-rw-r--r-- | src/db.rs | 40 |
1 files changed, 37 insertions, 3 deletions
@@ -7,7 +7,7 @@ struct Db { } impl Db { - pub async fn create_task(&self, task: Task) -> Result<i64> { + pub async fn create_task(&self, task: Task) -> Result<Task> { let id = sqlx::query!( "insert into tasks ( name, cron, archived, description ) values ( ?1, ?2, ?3, ?4 )", task.name, @@ -19,10 +19,44 @@ impl Db { .await? .last_insert_rowid(); - Ok(id) + 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) -> Result<Vec<Task>> { + pub async fn read_tasks(&self, select: Vec<TaskSelect>) -> Result<Vec<Task>> { + Ok(sqlx::query!("select * from tasks") + .fetch_all(&self.pool) + .await?) + } + + pub async fn update_tasks(&self, select: Vec<TaskSelect>) -> Result<()> { todo!() } + + pub async fn delete_tasks(&self, select: Vec<TaskSelect>) -> Result<()> { + todo!() + } +} + +pub enum TaskSelect { + Name(String), + Archived(bool), + Category(String), } |