Поправили функцию для возвращения номера
This commit is contained in:
parent
80d446443c
commit
f43caa7489
28
database.py
28
database.py
|
|
@ -50,29 +50,39 @@ 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 (с ограничением выборки)"""
|
||||||
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:
|
||||||
|
return None
|
||||||
|
|
||||||
|
# Определяем лимит для выборки
|
||||||
if total_count <= 50:
|
if total_count <= 50:
|
||||||
limit = 10
|
limit = 10
|
||||||
else:
|
else:
|
||||||
limit = max(10, min(50, int(total_count * 0.2)))
|
limit = max(10, min(50, int(total_count * 0.2)))
|
||||||
|
|
||||||
oldest = conn.execute("""
|
# Находим минимальный usage_count
|
||||||
SELECT *, COALESCE(used_at, created_at) as sort_date
|
min_usage = conn.execute("SELECT MIN(usage_count) as min_usage FROM records").fetchone()["min_usage"]
|
||||||
FROM records
|
|
||||||
ORDER BY sort_date ASC
|
|
||||||
LIMIT ?
|
|
||||||
""", (limit,)).fetchall()
|
|
||||||
|
|
||||||
if not oldest:
|
# Берём записи с минимальным usage_count, но не больше limit
|
||||||
|
candidates = conn.execute("""
|
||||||
|
SELECT * FROM records
|
||||||
|
WHERE usage_count = ?
|
||||||
|
LIMIT ?
|
||||||
|
""", (min_usage, limit)).fetchall()
|
||||||
|
|
||||||
|
if not candidates:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
selected = random.choice(oldest)
|
# Из них выбираем случайную
|
||||||
|
selected = random.choice(candidates)
|
||||||
|
|
||||||
|
# Обновляем счётчик и дату использования
|
||||||
conn.execute("""
|
conn.execute("""
|
||||||
UPDATE records SET usage_count = usage_count + 1, used_at = ?
|
UPDATE records SET usage_count = usage_count + 1, used_at = ?
|
||||||
WHERE id = ?
|
WHERE id = ?
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue