diff --git a/main.py b/main.py index 6710c76..4bc4e0c 100644 --- a/main.py +++ b/main.py @@ -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")