def questionnaire_done(user_id: int, language: str) -> List[Phrase]: redis_key = PHRASE_REDIS_KEY_TEMPLATE.format( user_id=user_id, language=language, ) ids = redis_store.lrange( redis_key, 0, -1 ) ids = map(int, ids) if not ids: return [] phrases = Phrase.query.filter(Phrase.id.in_(ids)) statuses = [ps.value for ps in Phrase.ProgressStatus] # type: ignore for phrase in phrases: next_statuses = list( filter(lambda ns: phrase.progress_status < ns, statuses) ) if not next_statuses: phrase.status = Phrase.Status.finished.value continue phrase.progress_status = next_statuses[0] phrase.date_available = ( datetime.utcnow() + Phrase.ProgressStatus(phrase.progress_status).get_progress_delta() ) redis_store.delete(redis_key) return phrases
def generate_phrases_for_practice(kwargs: Dict[str, Any]) -> List[int]: user = kwargs.get('user') assert user == 'me', "Phrase fetching supported " \ "only for current user's phrases" language = kwargs.get('language') limit = kwargs.get('limit') user_id = current_user.id phrase_ids = redis_store.lrange( PHRASE_REDIS_KEY_TEMPLATE.format( user_id=user_id, language=language, ), start=0, end=-1 ) phrase_ids = [int(phrase_id) for phrase_id in phrase_ids] if not phrase_ids: phrase_ids = mark_available_phrases(user_id, language, limit) return phrase_ids