Откатили выбор рандомной записи
This commit is contained in:
parent
bd42af67aa
commit
effc32baab
17
database.py
17
database.py
|
|
@ -50,11 +50,10 @@ def add_record(record_type: str, phone: str = None, qr_code: str = None, qr_data
|
||||||
|
|
||||||
|
|
||||||
def get_random_record():
|
def get_random_record():
|
||||||
"""Возвращает случайную запись из тех, у кого минимальный usage_count (с ограничением выборки)"""
|
"""Возвращает случайную запись из 10 самых старых по created_at или used_at"""
|
||||||
with sqlite3.connect(DB_NAME) as conn:
|
with sqlite3.connect(DB_NAME) as conn:
|
||||||
conn.row_factory = sqlite3.Row
|
conn.row_factory = sqlite3.Row
|
||||||
|
|
||||||
# Общее количество записей
|
|
||||||
total_count = conn.execute("SELECT COUNT(*) as count FROM records").fetchone()["count"]
|
total_count = conn.execute("SELECT COUNT(*) as count FROM records").fetchone()["count"]
|
||||||
|
|
||||||
if total_count == 0:
|
if total_count == 0:
|
||||||
|
|
@ -66,20 +65,18 @@ def get_random_record():
|
||||||
else:
|
else:
|
||||||
limit = max(10, min(50, int(total_count * 0.2)))
|
limit = max(10, min(50, int(total_count * 0.2)))
|
||||||
|
|
||||||
# Находим минимальный usage_count
|
# Берём limit самых старых (по дате создания или последнего использования)
|
||||||
min_usage = conn.execute("SELECT MIN(usage_count) as min_usage FROM records").fetchone()["min_usage"]
|
|
||||||
|
|
||||||
# Берём записи с минимальным usage_count, но не больше limit
|
|
||||||
candidates = conn.execute("""
|
candidates = conn.execute("""
|
||||||
SELECT * FROM records
|
SELECT *, COALESCE(used_at, created_at) as sort_date
|
||||||
WHERE usage_count = ?
|
FROM records
|
||||||
|
ORDER BY sort_date ASC
|
||||||
LIMIT ?
|
LIMIT ?
|
||||||
""", (min_usage, limit)).fetchall()
|
""", (limit,)).fetchall()
|
||||||
|
|
||||||
if not candidates:
|
if not candidates:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Из них выбираем случайную
|
# Из них выбираем случайный
|
||||||
selected = random.choice(candidates)
|
selected = random.choice(candidates)
|
||||||
|
|
||||||
# Обновляем счётчик и дату использования
|
# Обновляем счётчик и дату использования
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue