diff --git a/backend/api.py b/backend/api.py index 7770657..ac98825 100644 --- a/backend/api.py +++ b/backend/api.py @@ -51,8 +51,8 @@ def new_mark(mark: Mark): @app.post("/api/marks") -def search_marks(part: str): - raise HTTPException(status_code=501, detail="Method is not implemented yet!") +def search_marks(query: Mark): + return database.search_mark(query) @app.post("/api/thumb") diff --git a/backend/db.py b/backend/db.py index 998ef60..282c67b 100644 --- a/backend/db.py +++ b/backend/db.py @@ -1,73 +1,83 @@ import sqlite3 from utils import asset +from vntypes import Mark class VNDB: def __init__(self, db_name=asset('vn_database.db')): self.__db_name = db_name - connection = sqlite3.connect(self.__db_name) - cursor = connection.cursor() + with sqlite3.connect(self.__db_name) as connection: + cursor = connection.cursor() - cursor.execute(''' - CREATE TABLE IF NOT EXISTS marks ( - id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - tag TEXT NOT NULL, - value TEXT NOT NULL - ); - ''') + cursor.execute(''' + CREATE TABLE IF NOT EXISTS marks ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + type TEXT NOT NULL, + value TEXT NOT NULL + ); + ''') + + cursor.execute(''' + CREATE TABLE IF NOT EXISTS authors ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + title TEXT NOT NULL, + description TEXT NOT NULL, + thumbnail TEXT NOT NULL + ); + ''') + + cursor.execute(''' + CREATE TABLE IF NOT EXISTS novels ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + title TEXT NOT NULL, + author INTEGER NOT NULL + ); + ''') + + cursor.execute(''' + CREATE TABLE IF NOT EXISTS posts_log ( + + novel INTEGER NOT NULL, + + channel INTEGER NOT NULL, + + marks JSON NOT NULL, - cursor.execute(''' - CREATE TABLE IF NOT EXISTS authors ( - id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, + description TEXT NOT NULL, - thumbnail TEXT NOT NULL - ); - ''') - cursor.execute(''' - CREATE TABLE IF NOT EXISTS novels ( - id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - title TEXT NOT NULL, - author INTEGER NOT NULL - ); - ''') + author INTEGER NOT NULL, - cursor.execute(''' - CREATE TABLE IF NOT EXISTS posts_log ( + files_on_disk JSON NOT NULL, + post_info JSON, + post_at INTEGER NOT NULL, + created_at INTEGER NOT NULL + ); + ''') - novel INTEGER NOT NULL, - - channel INTEGER NOT NULL, - - marks JSON NOT NULL, - - title TEXT NOT NULL, - - description TEXT NOT NULL, - - author INTEGER NOT NULL, - - files_on_disk JSON NOT NULL, - post_info JSON, - post_at INTEGER NOT NULL, - created_at INTEGER NOT NULL - ); - ''') - - connection.commit() - connection.close() + connection.commit() def __execute(self, sql: str, params: tuple): - connection = sqlite3.connect(self.__db_name) - connection.cursor().execute(sql, params) - connection.commit() - connection.close() + with sqlite3.connect(self.__db_name) as connection: + connection.cursor().execute(sql, params) + connection.commit() + + def __fetch(self, sql: str, params: tuple): + with sqlite3.connect(self.__db_name) as connection: + cursor = connection.cursor() + cursor.execute(sql, params) + return cursor.fetchall() def insert_mark(self, type: str, value: str): - self.__execute("INSERT INTO marks (tag, value) " + self.__execute("INSERT INTO marks (type, value) " "VALUES (?, ?)", (type, value)) + + def search_mark(self, query: Mark): + return self.__fetch("SELECT type, value FROM marks " + "WHERE value LIKE ? " + "AND type = ?", ('%'+query.value+'%',query.type)) def insert_novel(self, title: str, author_id: int): self.__execute("INSERT INTO novels (title, author) " @@ -76,5 +86,3 @@ class VNDB: def insert_author(self, title: str, desc: str, thumb: str): self.__execute("INSERT INTO authors (title, description, thumbnail) " "VALUES (?, ?, ?)", (title, desc, thumb)) - - \ No newline at end of file