Make db creation better

This commit is contained in:
2026-06-15 17:06:02 +03:00
parent eb5a51513d
commit 4e57f3fd6b
12 changed files with 162 additions and 155 deletions
-88
View File
@@ -1,95 +1,7 @@
use crate::dictionary::app_data_dir;
use crate::lang::{WordData, WordGroup};
use rusqlite::Connection;
use std::collections::HashMap;
pub fn create_db() {
let path = app_data_dir();
let db_file = path.join("data.db");
if !db_file.exists() {
std::fs::File::create(&db_file).unwrap();
let connection = Connection::open(&db_file).unwrap();
connection.execute("PRAGMA foreign_keys = ON;", []).unwrap();
create_tables(&connection);
}
}
fn create_tables(conn: &Connection) {
conn.execute(
"create table settings
(
id text primary key,
value text
);",
(),
)
.unwrap_or_else(|e| 0);
conn.execute(
"create table card_set
(
id INTEGER
primary key autoincrement,
name TEXT not null,
forward TEXT not null,
backward TEXT not null,
filter TEXT not null
);",
(),
)
.unwrap_or_else(|e| 0);
conn.execute(
"create table word_group
(
id INTEGER
primary key autoincrement,
name TEXT not null
);",
(),
)
.unwrap_or_else(|e| 0);
conn.execute(
"create table words
(
id INTEGER
primary key autoincrement,
key TEXT not null,
value TEXT not null,
tags TEXT not null,
more TEXT,
group_id integer default 1 not null
constraint words_word_group_id_fk
references word_group
on update cascade on delete cascade
);",
(),
)
.unwrap_or_else(|e| 0);
conn.execute(
"create table card_stats
(
id INTEGER
primary key autoincrement,
word_id INTEGER not null
references words
on delete cascade,
set_id TEXT not null
references card_set
on delete cascade,
score INTEGER default 1 not null,
last_opened integer not null
);",
(),
)
.unwrap_or_else(|e| 0);
conn.execute(
"insert into word_group (name)
values (\"Слова\");",
(),
)
.unwrap_or_else(|e| 0);
}
pub fn add_word(word: &mut WordData, connection: &Connection) {
let index = connection