diff --git a/chanbans/db.py b/chanbans/db.py index 803191a..3f5bb01 100644 --- a/chanbans/db.py +++ b/chanbans/db.py @@ -1,4 +1,5 @@ import sqlite3 +import sys from typing import Optional @@ -50,15 +51,53 @@ def get_db(db_path: str = DB_PATH): def search_db( - board: Optional[str] = None, - reason: Optional[str] = None, - name: Optional[str] = None, - com: Optional[str] = None, - sub: Optional[str] = None, - time_before: int = 0, + board: str = "", + reason: str = "", + name: str = "", + com: str = "", + sub: str = "", + time_before: int = sys.maxsize, time_after: int = 0, - md5: Optional[str] = None, + md5: str = "", + limit: int = 100, + page: int = 0, ): - query = """ - SELECT action, board, length, post, thumb_path, reason - """ + db = get_db() + result = db.execute( + """ + select * + from bans + where + (:board is null or board like :board_like) + and (:reason = "" or reason like :reason_like) + and (:name = "" or name like :name_like) + and (:com = "" or com like :com_like) + and (:sub = "" or sub like :sub_like) + and (time <= :time_before) + and (time >= :time_after) + and (:md5 = "" or md5 like :md5_like) + order by id desc + limit :limit + offset :offset + """, + { + "board": board, + "board_like": f"%{board}%", + "reason": reason, + "reason_like": f"%{reason}%", + "name": name, + "name_like": f"%{name}%", + "com": com, + "com_like": f"%{com}%", + "sub": sub, + "sub_like": f"%{sub}%", + "time_before": time_before, + "time_after": time_after, + "md5": md5, + "md5_like": f"%{md5}%", + "limit": limit, + "offset": limit * page, + } + ) + + return list(result.fetchall())