Незавершённые дорожки в первую очередь

This commit is contained in:
2026-02-12 09:20:12 +03:00
parent f45fd66562
commit b7b8492768

View File

@@ -89,6 +89,7 @@ def find_available_track(user_id: int) -> tuple[str, int] | None:
"""
Находит доступную дорожку для пользователя с учётом пола.
Приоритет:
0. Незавершенные дорожки самого пользователя (высший приоритет!)
1. Дорожки, которые никто не начал озвучивать
2. Дорожки, которые кто-то начал, но не закончил
3. Дорожки с готовой озвучкой (для дополнительных записей)
@@ -163,21 +164,35 @@ def find_available_track(user_id: int) -> tuple[str, int] | None:
}
# Категоризация дорожек
# Незавершенные дорожки пользователя
user_incomplete: list[tuple[str, int]] = []
untouched: list[tuple[str, int]] = [] # никто не начал
in_progress: list[tuple[str, int]] = [] # начато, не закончено
in_progress: list[tuple[str, int]] = [] # начато другими
completed: list[tuple[str, int]] = [] # есть готовая запись
for row in all_tracks:
scenario_id, speaker_id, replica_count = row[0], row[1], row[2]
key = (scenario_id, speaker_id)
# Пропускаем сценарии, где пользователь уже записывает другую дорожку
# Проверяем, есть ли у пользователя записи для этой дорожки
user_has_recordings = (
key in track_recordings and user_id in track_recordings[key]
)
if user_has_recordings:
# Пользователь уже озвучивает эту дорожку
user_recorded_count = track_recordings[key][user_id]
if user_recorded_count < replica_count:
# Дорожка не завершена - высший приоритет
user_incomplete.append(key)
else:
# Дорожка завершена пользователем - низкий приоритет
completed.append(key)
continue
# Пользователь не записывает эту дорожку
# Пропускаем, если он записывает другую дорожку в этом сценарии
if scenario_id in user_scenario_ids:
# Проверяем, записывает ли он именно эту дорожку
if key in track_recordings and user_id in track_recordings[key]:
# Пользователь уже записывает эту дорожку — пропускаем
continue
# Пользователь записывает другую дорожку в этом сценарии
continue
if key not in track_recordings:
@@ -195,6 +210,8 @@ def find_available_track(user_id: int) -> tuple[str, int] | None:
in_progress.append(key)
# Выбираем по приоритету
if user_incomplete:
return user_incomplete[0]
if untouched:
return untouched[0]
if in_progress: