First database deunwrap

This commit is contained in:
micialware committed 2026-08-24 17:33:21 +03:00
1 parent 3cbdf0803b
commit 06bf9138c0
6 files changed
+45 -23

No files matched your search

+19 -14
View File
@@ -2,11 +2,13 @@ use crate::core::srs::OrderMode;
use crate::data::entities::DeckSettings;
use rusqlite::Connection;
use crate::notification::NotificationData;
use crate::notification::NotificationData::{DbLoadError, DbSaveError};
pub fn load_sets(connection: &Connection) -> Vec<DeckSettings> {
pub fn load_sets(connection: &Connection) -> Result<Vec<DeckSettings>, NotificationData> {
let mut stmt = connection
.prepare("SELECT id, name, forward, backward, filter FROM card_set")
.unwrap();
.expect("Failed to prepare state query");
let iter = stmt
.query_map([], |row| {
Ok(DeckSettings {
@@ -19,17 +21,17 @@ pub fn load_sets(connection: &Connection) -> Vec<DeckSettings> {
open_mode: OrderMode::Default,
})
})
.unwrap();
.map_err(|_| DbLoadError)?;
let mut buffer = vec![];
for word in iter {
buffer.push(word.unwrap());
for word in iter.filter_map(|result| result.ok()) {
buffer.push(word);
}
buffer
Ok(buffer)
}
pub fn add_set(set: &mut DeckSettings, connection: &Connection) {
pub fn add_set(set: &mut DeckSettings, connection: &Connection) -> Result<(), NotificationData> {
let index : u32 = connection
.query_row(
"INSERT INTO card_set (name, forward, backward, filter) VALUES (?1, ?2, ?3, ?4) RETURNING id",
@@ -41,14 +43,15 @@ pub fn add_set(set: &mut DeckSettings, connection: &Connection) {
),
|row| row.get(0)
)
.unwrap();
.map_err(|_| DbSaveError)?;
set.id = index.into();
Ok(())
}
pub fn update_deck(set: &mut DeckSettings, connection: &Connection) {
pub fn update_deck(set: &mut DeckSettings, connection: &Connection) -> Result<(), NotificationData> {
if !set.id.is_valid() {
add_set(set, connection);
add_set(set, connection)?;
} else {
connection
.execute(
@@ -61,15 +64,17 @@ pub fn update_deck(set: &mut DeckSettings, connection: &Connection) {
&set.id
),
)
.unwrap();
.map_err(|_| DbSaveError)?;
}
Ok(())
}
pub fn delete_set(set: &DeckSettings, connection: &Connection) {
pub fn delete_set(set: &DeckSettings, connection: &Connection) -> Result<(), NotificationData> {
if !set.id.is_valid() {
return;
return Err(DbSaveError);
}
connection
.execute("DELETE FROM card_set WHERE id = ?1", (&set.id,))
.unwrap();
.map_err(|_| DbSaveError)?;
Ok(())
}