summaryrefslogtreecommitdiff
path: root/internal/storage/schema.go
diff options
context:
space:
mode:
authorBenjamin Chausse <benjamin@chausse.xyz>2025-02-03 01:12:45 -0500
committerBenjamin Chausse <benjamin@chausse.xyz>2025-02-03 01:12:45 -0500
commit5389e1a5d26fdbf2441fa5a1e101999e8449b9d1 (patch)
tree069cd37cb8e556c1ba3b47c3ea8576a1aa91ea2c /internal/storage/schema.go
Batman
Diffstat (limited to 'internal/storage/schema.go')
-rw-r--r--internal/storage/schema.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/internal/storage/schema.go b/internal/storage/schema.go
new file mode 100644
index 0000000..042c09b
--- /dev/null
+++ b/internal/storage/schema.go
@@ -0,0 +1,38 @@
+package storage
+
+func opts() string {
+ return "?_foreign_keys=on&_journal_mode=WAL"
+}
+
+func schema() string {
+ return `
+CREATE TABLE User (
+ UserID INTEGER PRIMARY KEY AUTOINCREMENT,
+ Name TEXT NOT NULL,
+ Email TEXT NOT NULL UNIQUE
+);
+
+CREATE TABLE Task (
+ TaskID INTEGER PRIMARY KEY AUTOINCREMENT,
+ Title TEXT NOT NULL,
+ Description TEXT NOT NULL,
+ Due DATE NOT NULL,
+ Do DATE NOT NULL,
+ Owner INTEGER NOT NULL,
+ FOREIGN KEY (Owner) REFERENCES User(UserID) ON DELETE CASCADE
+);
+
+CREATE TABLE Tag (
+ TagID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ Name TEXT NOT NULL UNIQUE
+);
+
+CREATE TABLE TaskTag (
+ TaskUUID INTEGER NOT NULL,
+ TagID INTEGER NOT NULL,
+ PRIMARY KEY (TaskUUID, TagID),
+ FOREIGN KEY (TaskUUID) REFERENCES Task(UUID) ON DELETE CASCADE,
+ FOREIGN KEY (TagID) REFERENCES Tag(TagID) ON DELETE CASCADE
+);
+`
+}