/
dkotoff
/
langlearnbot
Обзор
Документация
Войти
/
dkotoff
/
langlearnbot
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
bot/database/word.py
35 строк
2 KB
Daniil Kotov
Update word.py
18 мар 2024, 11:15
Не верифицирован
18 мар 2024, 11:15
0f61ac6
Код
Авторство
О чём код?
from bot.common import session import random from bot.model import User, Word, Package, UserWord from sqlalchemy import and_ # возвращает случайное слово из пакета из тех которые пользователь ещё не изучил def get_random_word_from_package_with_no_user(package: Package, user: User) -> Word | None: count = (session.query(Word) .join(UserWord, and_(Word.id == UserWord.word_id, UserWord.user_id == user.id), isouter=True) .filter(and_(Word.package_id == package.id, UserWord.id == None)).count()) rnum = random.randint(0, count-1) word = (session.query(Word) .join(UserWord, and_(Word.id == UserWord.word_id, UserWord.user_id == user.id), isouter=True) .filter(and_(Word.package_id == package.id, UserWord.id == None)) .offset(rnum).limit(1).first()) return word # возвращает случайное слово из изученных пользователем по категории def get_random_userword_by_level(user: User, level: int) -> UserWord | None: count = session.query(UserWord).filter(and_(UserWord.user_id == user.id, UserWord.level == level)).count() rnum = random.randint(0, count) return (session.query(UserWord) .filter(and_(UserWord.user_id == user.id, UserWord.level == level)) .offset(rnum).limit(1).first()) # добавляет слово в изученные пользователем def add_word_to_user(word: Word, user: User) -> UserWord: user_word = UserWord(word_id = word.id, user_id = user.id) session.add(user_word) session.flush() return user_word