Fixed database issue.

This commit is contained in:
retoor 2025-08-27 02:04:30 +02:00
parent 9e99ad8b42
commit 6c6c7354c8

195
main.py
View File

@ -39,83 +39,124 @@ db = AsyncDataSet(DB_PATH)
async def init_db(): async def init_db():
# Users table # Users table
await db.create_table("users", { await db.query_raw("""
"id": "INTEGER PRIMARY KEY AUTOINCREMENT", CREATE TABLE users (
"username": "TEXT NOT NULL", id INTEGER PRIMARY KEY AUTOINCREMENT,
"email": "TEXT NOT NULL", username TEXT UNIQUE NOT NULL,
"password_hash": "TEXT NOT NULL", email TEXT UNIQUE NOT NULL,
"score": "INTEGER DEFAULT 0", password_hash TEXT NOT NULL,
"about": "TEXT DEFAULT ''", score INTEGER DEFAULT 0,
"location": "TEXT DEFAULT ''", about TEXT DEFAULT '',
"skills": "TEXT DEFAULT ''", location TEXT DEFAULT '',
"github": "TEXT DEFAULT ''", skills TEXT DEFAULT '',
"website": "TEXT DEFAULT ''", github TEXT DEFAULT '',
"created_time": "INTEGER NOT NULL", website TEXT DEFAULT '',
"avatar_b": "TEXT DEFAULT '7bc8a4'", created_time INTEGER NOT NULL,
"avatar_i": "TEXT" avatar_b TEXT DEFAULT '7bc8a4',
}, ["UNIQUE(username)", "UNIQUE(email)"]) avatar_i TEXT,
updated_at TEXT,
# Auth tokens table uid TEXT,
await db.create_table("auth_tokens", { created_at TEXT,
"id": "INTEGER PRIMARY KEY AUTOINCREMENT", deleted_at TEXT
"user_id": "INTEGER NOT NULL", );
"token_key": "TEXT NOT NULL", """)
"expire_time": "INTEGER NOT NULL" await db.query_raw("""
}, ["UNIQUE(token_key)", "FOREIGN KEY (user_id) REFERENCES users (id)"]) CREATE TABLE auth_tokens (
id INTEGER PRIMARY KEY AUTOINCREMENT,
# Rants table user_id INTEGER NOT NULL,
await db.create_table("rants", { token_key TEXT UNIQUE NOT NULL,
"id": "INTEGER PRIMARY KEY AUTOINCREMENT", expire_time INTEGER NOT NULL,
"user_id": "INTEGER NOT NULL", uid TEXT,
"text": "TEXT NOT NULL", created_at TEXT,
"score": "INTEGER DEFAULT 0", updated_at TEXT,
"created_time": "INTEGER NOT NULL", deleted_at TEXT,
"attached_image": "TEXT DEFAULT ''", FOREIGN KEY (user_id) REFERENCES users (id)
"tags": "TEXT DEFAULT ''", );
"edited": "INTEGER DEFAULT 0", """)
"type": "INTEGER DEFAULT 1" await db.query_raw("""
}, ["FOREIGN KEY (user_id) REFERENCES users (id)"]) CREATE TABLE rants (
id INTEGER PRIMARY KEY AUTOINCREMENT,
# Comments table user_id INTEGER NOT NULL,
await db.create_table("comments", { text TEXT NOT NULL,
"id": "INTEGER PRIMARY KEY AUTOINCREMENT", score INTEGER DEFAULT 0,
"rant_id": "INTEGER NOT NULL", created_time INTEGER NOT NULL,
"user_id": "INTEGER NOT NULL", attached_image TEXT DEFAULT '',
"body": "TEXT NOT NULL", tags TEXT DEFAULT '',
"score": "INTEGER DEFAULT 0", edited BOOLEAN DEFAULT 0,
"created_time": "INTEGER NOT NULL", type INTEGER DEFAULT 1,
"attached_image": "TEXT DEFAULT ''", updated_at TEXT,
"edited": "INTEGER DEFAULT 0" uid TEXT,
}, ["FOREIGN KEY (rant_id) REFERENCES rants (id)", "FOREIGN KEY (user_id) REFERENCES users (id)"]) created_at TEXT,
deleted_at TEXT,
# Votes table FOREIGN KEY (user_id) REFERENCES users (id)
await db.create_table("votes", { );
"id": "INTEGER PRIMARY KEY AUTOINCREMENT", """)
"user_id": "INTEGER NOT NULL", await db.query_raw("""
"target_id": "INTEGER NOT NULL", CREATE TABLE comments (
"target_type": "TEXT NOT NULL", id INTEGER PRIMARY KEY AUTOINCREMENT,
"vote": "INTEGER NOT NULL", rant_id INTEGER NOT NULL,
"reason": "INTEGER" user_id INTEGER NOT NULL,
}, ["UNIQUE(user_id, target_id, target_type)", "FOREIGN KEY (user_id) REFERENCES users (id)"]) body TEXT NOT NULL,
score INTEGER DEFAULT 0,
# Favorites table created_time INTEGER NOT NULL,
await db.create_table("favorites", { attached_image TEXT DEFAULT '',
"id": "INTEGER PRIMARY KEY AUTOINCREMENT", edited BOOLEAN DEFAULT 0,
"user_id": "INTEGER NOT NULL", uid TEXT,
"rant_id": "INTEGER NOT NULL" created_at TEXT,
}, ["UNIQUE(user_id, rant_id)", "FOREIGN KEY (user_id) REFERENCES users (id)", "FOREIGN KEY (rant_id) REFERENCES rants (id)"]) updated_at TEXT,
deleted_at TEXT,
# Notifications table FOREIGN KEY (rant_id) REFERENCES rants (id),
await db.create_table("notifications", { FOREIGN KEY (user_id) REFERENCES users (id)
"id": "INTEGER PRIMARY KEY AUTOINCREMENT", );
"user_id": "INTEGER NOT NULL", """)
"type": "TEXT NOT NULL", await db.query_raw("""
"rant_id": "INTEGER", CREATE TABLE votes (
"comment_id": "INTEGER", id INTEGER PRIMARY KEY AUTOINCREMENT,
"from_user_id": "INTEGER", user_id INTEGER NOT NULL,
"created_time": "INTEGER NOT NULL", target_id INTEGER NOT NULL,
"read": "INTEGER DEFAULT 0" target_type TEXT NOT NULL,
}, ["FOREIGN KEY (user_id) REFERENCES users (id)"]) vote INTEGER NOT NULL,
reason INTEGER,
uid TEXT,
created_at TEXT,
updated_at TEXT,
deleted_at TEXT,
UNIQUE(user_id, target_id, target_type),
FOREIGN KEY (user_id) REFERENCES users (id)
);
""")
await db.query_raw("""
CREATE TABLE favorites (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
rant_id INTEGER NOT NULL,
uid TEXT,
created_at TEXT,
updated_at TEXT,
deleted_at TEXT,
UNIQUE(user_id, rant_id),
FOREIGN KEY (user_id) REFERENCES users (id),
FOREIGN KEY (rant_id) REFERENCES rants (id)
);
""")
await db.query_raw("""
CREATE TABLE notifications (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
type TEXT NOT NULL,
rant_id INTEGER,
comment_id INTEGER,
from_user_id INTEGER,
created_time INTEGER NOT NULL,
read BOOLEAN DEFAULT 0,
uid TEXT,
created_at TEXT,
updated_at TEXT,
deleted_at TEXT,
FOREIGN KEY (user_id) REFERENCES users (id)
);
""")
# Run init_db on startup # Run init_db on startup
@app.on_event("startup") @app.on_event("startup")