added users administration tool
This commit is contained in:
41
app/db_users_search.py
Normal file
41
app/db_users_search.py
Normal file
@@ -0,0 +1,41 @@
|
||||
# db_users_search.py
|
||||
import sqlite3
|
||||
from contextlib import contextmanager
|
||||
|
||||
DB_PATH = "app.db"
|
||||
|
||||
@contextmanager
|
||||
def get_conn():
|
||||
conn = sqlite3.connect(DB_PATH, check_same_thread=False)
|
||||
conn.row_factory = sqlite3.Row
|
||||
try:
|
||||
yield conn
|
||||
conn.commit()
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def search_users(q: str, limit: int, offset: int):
|
||||
q = (q or "").strip()
|
||||
like = f"%{q}%"
|
||||
with get_conn() as conn:
|
||||
rows = conn.execute("""
|
||||
SELECT id, username, display_name, email, role, is_active, created_at
|
||||
FROM users
|
||||
WHERE (? = '')
|
||||
OR (username LIKE ? COLLATE NOCASE
|
||||
OR display_name LIKE ? COLLATE NOCASE
|
||||
OR email LIKE ? COLLATE NOCASE)
|
||||
ORDER BY username
|
||||
LIMIT ? OFFSET ?
|
||||
""", (q, like, like, like, limit, offset)).fetchall()
|
||||
|
||||
total = conn.execute("""
|
||||
SELECT COUNT(*)
|
||||
FROM users
|
||||
WHERE (? = '')
|
||||
OR (username LIKE ? COLLATE NOCASE
|
||||
OR display_name LIKE ? COLLATE NOCASE
|
||||
OR email LIKE ? COLLATE NOCASE)
|
||||
""", (q, like, like, like)).fetchone()[0]
|
||||
|
||||
return [dict(r) for r in rows], int(total)
|
||||
Reference in New Issue
Block a user