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():
# Users table
await db.create_table("users", {
"id": "INTEGER PRIMARY KEY AUTOINCREMENT",
"username": "TEXT NOT NULL",
"email": "TEXT NOT NULL",
"password_hash": "TEXT NOT NULL",
"score": "INTEGER DEFAULT 0",
"about": "TEXT DEFAULT ''",
"location": "TEXT DEFAULT ''",
"skills": "TEXT DEFAULT ''",
"github": "TEXT DEFAULT ''",
"website": "TEXT DEFAULT ''",
"created_time": "INTEGER NOT NULL",
"avatar_b": "TEXT DEFAULT '7bc8a4'",
"avatar_i": "TEXT"
}, ["UNIQUE(username)", "UNIQUE(email)"])
# Auth tokens table
await db.create_table("auth_tokens", {
"id": "INTEGER PRIMARY KEY AUTOINCREMENT",
"user_id": "INTEGER NOT NULL",
"token_key": "TEXT NOT NULL",
"expire_time": "INTEGER NOT NULL"
}, ["UNIQUE(token_key)", "FOREIGN KEY (user_id) REFERENCES users (id)"])
# Rants table
await db.create_table("rants", {
"id": "INTEGER PRIMARY KEY AUTOINCREMENT",
"user_id": "INTEGER NOT NULL",
"text": "TEXT NOT NULL",
"score": "INTEGER DEFAULT 0",
"created_time": "INTEGER NOT NULL",
"attached_image": "TEXT DEFAULT ''",
"tags": "TEXT DEFAULT ''",
"edited": "INTEGER DEFAULT 0",
"type": "INTEGER DEFAULT 1"
}, ["FOREIGN KEY (user_id) REFERENCES users (id)"])
# Comments table
await db.create_table("comments", {
"id": "INTEGER PRIMARY KEY AUTOINCREMENT",
"rant_id": "INTEGER NOT NULL",
"user_id": "INTEGER NOT NULL",
"body": "TEXT NOT NULL",
"score": "INTEGER DEFAULT 0",
"created_time": "INTEGER NOT NULL",
"attached_image": "TEXT DEFAULT ''",
"edited": "INTEGER DEFAULT 0"
}, ["FOREIGN KEY (rant_id) REFERENCES rants (id)", "FOREIGN KEY (user_id) REFERENCES users (id)"])
# Votes table
await db.create_table("votes", {
"id": "INTEGER PRIMARY KEY AUTOINCREMENT",
"user_id": "INTEGER NOT NULL",
"target_id": "INTEGER NOT NULL",
"target_type": "TEXT NOT NULL",
"vote": "INTEGER NOT NULL",
"reason": "INTEGER"
}, ["UNIQUE(user_id, target_id, target_type)", "FOREIGN KEY (user_id) REFERENCES users (id)"])
# Favorites table
await db.create_table("favorites", {
"id": "INTEGER PRIMARY KEY AUTOINCREMENT",
"user_id": "INTEGER NOT NULL",
"rant_id": "INTEGER NOT NULL"
}, ["UNIQUE(user_id, rant_id)", "FOREIGN KEY (user_id) REFERENCES users (id)", "FOREIGN KEY (rant_id) REFERENCES rants (id)"])
# Notifications table
await db.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": "INTEGER DEFAULT 0"
}, ["FOREIGN KEY (user_id) REFERENCES users (id)"])
await db.query_raw("""
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
email TEXT UNIQUE NOT NULL,
password_hash TEXT NOT NULL,
score INTEGER DEFAULT 0,
about TEXT DEFAULT '',
location TEXT DEFAULT '',
skills TEXT DEFAULT '',
github TEXT DEFAULT '',
website TEXT DEFAULT '',
created_time INTEGER NOT NULL,
avatar_b TEXT DEFAULT '7bc8a4',
avatar_i TEXT,
updated_at TEXT,
uid TEXT,
created_at TEXT,
deleted_at TEXT
);
""")
await db.query_raw("""
CREATE TABLE auth_tokens (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
token_key TEXT UNIQUE NOT NULL,
expire_time INTEGER NOT NULL,
uid TEXT,
created_at TEXT,
updated_at TEXT,
deleted_at TEXT,
FOREIGN KEY (user_id) REFERENCES users (id)
);
""")
await db.query_raw("""
CREATE TABLE rants (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
text TEXT NOT NULL,
score INTEGER DEFAULT 0,
created_time INTEGER NOT NULL,
attached_image TEXT DEFAULT '',
tags TEXT DEFAULT '',
edited BOOLEAN DEFAULT 0,
type INTEGER DEFAULT 1,
updated_at TEXT,
uid TEXT,
created_at TEXT,
deleted_at TEXT,
FOREIGN KEY (user_id) REFERENCES users (id)
);
""")
await db.query_raw("""
CREATE TABLE comments (
id INTEGER PRIMARY KEY AUTOINCREMENT,
rant_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
body TEXT NOT NULL,
score INTEGER DEFAULT 0,
created_time INTEGER NOT NULL,
attached_image TEXT DEFAULT '',
edited BOOLEAN DEFAULT 0,
uid TEXT,
created_at TEXT,
updated_at TEXT,
deleted_at TEXT,
FOREIGN KEY (rant_id) REFERENCES rants (id),
FOREIGN KEY (user_id) REFERENCES users (id)
);
""")
await db.query_raw("""
CREATE TABLE votes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
target_id INTEGER NOT NULL,
target_type TEXT NOT NULL,
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
@app.on_event("startup")