diff --git a/migrations/2023-01-03-134426_create_language/down.sql b/migrations/2023-01-03-134426_create_language/down.sql
index d8f8cfa..3b2f058 100644
--- a/migrations/2023-01-03-134426_create_language/down.sql
+++ b/migrations/2023-01-03-134426_create_language/down.sql
@@ -1,4 +1,5 @@
-- This file should undo anything in `up.sql`
+DROP TABLE UserFollowLanguage;
DROP TABLE LangAndAgents;
DROP TABLE LangTranslatesTo;
DROP TABLE Languages;
diff --git a/migrations/2023-01-03-134426_create_language/up.sql b/migrations/2023-01-03-134426_create_language/up.sql
index b32b071..861c1ba 100644
--- a/migrations/2023-01-03-134426_create_language/up.sql
+++ b/migrations/2023-01-03-134426_create_language/up.sql
@@ -51,3 +51,17 @@ CREATE TABLE LangAndAgents (
NOT NULL,
relationship AgentLanguageRelation NOT NULL
);
+
+CREATE TABLE UserFollowLanguage (
+ id SERIAL PRIMARY KEY,
+ lang UUID
+ REFERENCES Languages(id)
+ ON UPDATE CASCADE
+ ON DELETE CASCADE
+ NOT NULL,
+ userid VARCHAR(31)
+ REFERENCES Users(id)
+ ON UPDATE CASCADE
+ ON DELETE CASCADE
+ NOT NULL
+);
diff --git a/migrations/2023-01-03-134434_create_word/down.sql b/migrations/2023-01-03-134434_create_word/down.sql
index 291a97c..6972165 100644
--- a/migrations/2023-01-03-134434_create_word/down.sql
+++ b/migrations/2023-01-03-134434_create_word/down.sql
@@ -1 +1,7 @@
--- This file should undo anything in `up.sql`
\ No newline at end of file
+-- This file should undo anything in `up.sql`
+DROP TABLE WordRelation;
+DROP TABLE WordLearning;
+DROP TABLE Words;
+DROP TYPE WordLearningStatus;
+DROP TYPE WordRelationship;
+DROP TYPE PartOfSpeech;
diff --git a/migrations/2023-01-03-134434_create_word/up.sql b/migrations/2023-01-03-134434_create_word/up.sql
index de56b8f..a2996c6 100644
--- a/migrations/2023-01-03-134434_create_word/up.sql
+++ b/migrations/2023-01-03-134434_create_word/up.sql
@@ -1,12 +1,14 @@
-- Your SQL goes here
CREATE TYPE PartOfSpeech as ENUM ('ADJ', 'ADP', 'ADV', 'AUX', 'CCONJ', 'DET', 'INTJ', 'NOUN', 'NUM', 'PART', 'PRON', 'PROPN', 'PUNCT', 'SCONJ', 'SYM', 'VERB', 'X');
CREATE TYPE WordRelationship as ENUM('def', 'related');
+CREATE TYPE WordLearningStatus as ENUM('learning', 'learned');
CREATE TABLE Words (
- norm VARCHAR(255) PRIMARY KEY, -- normalized word
+ id UUID DEFAULT uuid_generate_v4 () PRIMARY KEY,
+ norm VARCHAR(255) NOT NULL, -- normalized word, generally in latin alphabet
native VARCHAR(255),
- lemma VARCHAR(255)
- REFERENCES Words(norm)
+ lemma UUID
+ REFERENCES Words(id)
ON UPDATE CASCADE
ON DELETE SET NULL,
language UUID
@@ -26,15 +28,30 @@ CREATE TABLE Words (
CREATE TABLE WordRelation (
id SERIAL PRIMARY KEY,
- wordsource VARCHAR(255)
- REFERENCES Words(norm)
+ wordsource UUID
+ REFERENCES Words(id)
ON UPDATE CASCADE
ON DELETE CASCADE
NOT NULL,
- wordtarget VARCHAR(255)
- REFERENCES Words(norm)
+ wordtarget UUID
+ REFERENCES Words(id)
ON UPDATE CASCADE
ON DELETE CASCADE
NOT NULL,
relationship WordRelationship NOT NULL
);
+
+CREATE TABLE WordLearning (
+ id SERIAL PRIMARY KEY,
+ word UUID
+ REFERENCES Words(id)
+ ON UPDATE CASCADE
+ ON DELETE CASCADE
+ NOT NULL,
+ userid VARCHAR(31)
+ REFERENCES Users(id)
+ ON UPDATE CASCADE
+ ON DELETE CASCADE
+ NOT NULL,
+ status WordLearningStatus DEFAULT 'learning' NOT NULL
+);
diff --git a/src/db/mod.rs b/src/db/mod.rs
index 8d0a9ec..555ed3c 100644
--- a/src/db/mod.rs
+++ b/src/db/mod.rs
@@ -219,7 +219,7 @@ impl Database {
}
}
- pub fn word_id(&self, id: &str) -> Result