Implement working database

This commit is contained in:
Elnu 2023-04-14 17:30:33 -07:00
parent 8427eb082b
commit 4076a4c556
5 changed files with 110 additions and 32 deletions

View file

@ -6,6 +6,7 @@ use rusqlite::{Connection, Result, params};
pub struct Database {
conn: Connection,
pub last_word_id: i64,
}
#[derive(From, Debug)]
@ -28,17 +29,27 @@ impl Database {
conn.execute(
"CREATE TABLE IF NOT EXISTS word (
id INTEGER PRIMARY KEY,
word TEXT, reading TEXT,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
word TEXT,
reading TEXT,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
)",
params![],
)?;
Ok(Self { conn })
let last_word_id = match conn
.prepare("SELECT id FROM word ORDER BY id DESC LIMIT 1")?
.query_map(params![], |row| row.get(0))?
.collect::<Result<Vec<i64>>>()?
.first() {
Some(id) => *id,
None => 0, // first database entry is id 1
};
Ok(Self { conn, last_word_id })
}
pub fn load_words_before(&self, before_id: i64) -> Result<Vec<Word>> {
println!("{}", before_id);
self.conn
.prepare("SELECT id, word, reading, timestamp FROM word WHERE id < ? DESC LIMIT 10")?
.prepare("SELECT id, word, reading, timestamp FROM word WHERE id < ? ORDER BY id DESC LIMIT 10")?
.query_map(params![before_id], |row| {
Ok(Word {
id: row.get(0)?,
@ -49,4 +60,16 @@ impl Database {
})?
.collect::<Result<Vec<Word>>>()
}
pub fn add_word(&mut self, word: &Word) -> Result<()> {
self.conn.execute(
"INSERT INTO word (word, reading) VALUES (?1, ?2)",
params![
word.word,
word.reading,
],
)?;
self.last_word_id += 1;
Ok(())
}
}