Поправили функцию для возвращения номера
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():
|
||||
"""Возвращает случайную запись"""
|
||||
"""Возвращает случайную запись из тех, у кого минимальный usage_count (с ограничением выборки)"""
|
||||
with sqlite3.connect(DB_NAME) as conn:
|
||||
conn.row_factory = sqlite3.Row
|
||||
|
||||
# Общее количество записей
|
||||
total_count = conn.execute("SELECT COUNT(*) as count FROM records").fetchone()["count"]
|
||||
|
||||
if total_count == 0:
|
||||
return None
|
||||
|
||||
# Определяем лимит для выборки
|
||||
if total_count <= 50:
|
||||
limit = 10
|
||||
else:
|
||||
limit = max(10, min(50, int(total_count * 0.2)))
|
||||
|
||||
oldest = conn.execute("""
|
||||
SELECT *, COALESCE(used_at, created_at) as sort_date
|
||||
FROM records
|
||||
ORDER BY sort_date ASC
|
||||
LIMIT ?
|
||||
""", (limit,)).fetchall()
|
||||
# Находим минимальный usage_count
|
||||
min_usage = conn.execute("SELECT MIN(usage_count) as min_usage FROM records").fetchone()["min_usage"]
|
||||
|
||||
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
|
||||
|
||||
selected = random.choice(oldest)
|
||||
# Из них выбираем случайную
|
||||
selected = random.choice(candidates)
|
||||
|
||||
# Обновляем счётчик и дату использования
|
||||
conn.execute("""
|
||||
UPDATE records SET usage_count = usage_count + 1, used_at = ?
|
||||
WHERE id = ?
|
||||
|
|
|
|||
Loading…
Reference in New Issue