96 lines
3.1 KiB
Python
96 lines
3.1 KiB
Python
import sqlite3
|
|
from model import WatchGuild, WatchChannel, WatchUser, WatchMessage
|
|
|
|
|
|
class DatabaseManager:
|
|
'''
|
|
DatabaseManager manages all database operations
|
|
|
|
Contains a single databse connection object.
|
|
|
|
Attributes:
|
|
name: name of the database file.
|
|
conn: sqlite3 connection object to the database file.
|
|
'''
|
|
|
|
def __init__(self, name: str):
|
|
'''
|
|
Create a DatabaseManager
|
|
|
|
Initializes a DatabaseManager and a sqlite3 database connection.
|
|
If the database file does not exist, create one and the required tables
|
|
name: name of the sqlite file
|
|
'''
|
|
self.name = name
|
|
self.conn = sqlite3.connect(self.name)
|
|
self._setup_database()
|
|
|
|
def _setup_database(self):
|
|
script = '''BEGIN;
|
|
CREATE TABLE IF NOT EXISTS guilds(
|
|
guild_id INTEGER PRIMARY KEY,
|
|
name TEXT,
|
|
join_date TEXT);
|
|
CREATE TABLE IF NOT EXISTS channels(
|
|
channel_id INTEGER PRIMARY KEY,
|
|
name TEXT,
|
|
register_date TEXT,
|
|
guild_id INTEGER,
|
|
FOREIGN KEY (guild_id) REFERENCES guilds(guild_id));
|
|
CREATE TABLE IF NOT EXISTS users(
|
|
user_id INTEGER PRIMARY KEY,
|
|
name TEXT);
|
|
CREATE TABLE IF NOT EXISTS messages(
|
|
message_id INTEGER PRIMARY KEY,
|
|
contents TEXT,
|
|
published_date TEXT,
|
|
user_id INTEGER,
|
|
channel_id INTEGER,
|
|
guild_id INTEGER,
|
|
FOREIGN KEY (user_id) REFERENCES users(user_id),
|
|
FOREIGN KEY (channel_id) REFERENCES channels(channel_id),
|
|
FOREIGN KEY (guild_id) REFERENCES guilds(guild_id));
|
|
COMMIT;'''
|
|
|
|
with self.conn:
|
|
self.conn.executescript(script)
|
|
|
|
def create_guild(self, guild: WatchGuild):
|
|
'''Insert a new guild into the database'''
|
|
query = '''INSERT INTO guilds VALUES(?, ?, datetime('now'));'''
|
|
with self.conn:
|
|
self.conn.execute(query, (guild.id, guild.name))
|
|
|
|
def get_guild(self, id: int = None, name: str = None) -> list[WatchGuild]:
|
|
'''Access guilds stored in the Database.
|
|
|
|
Query will be filtered by the passed parameters,
|
|
returning records whose field values match those passed in.
|
|
'''
|
|
query = '''SELECT guild_id, name, join_date FROM guilds;'''
|
|
with self.conn:
|
|
cur = self.conn.execute(query)
|
|
return cur.fetchall()
|
|
|
|
def create_channel(self, channel: WatchChannel):
|
|
pass
|
|
|
|
def get_channel(self, **kwargs):
|
|
query = '''SELECT channel_id, name,
|
|
register_date, guild_id FROM channels;'''
|
|
with self.conn:
|
|
curs = self.conn.execute(query)
|
|
return curs.fetchall()
|
|
|
|
def create_user(self, user: WatchUser):
|
|
pass
|
|
|
|
def get_user(self, **kwargs):
|
|
pass
|
|
|
|
def create_message(self, message: WatchMessage):
|
|
pass
|
|
|
|
def get_message(self, **kwargs):
|
|
pass
|