Пример #1
0
def delete_card(card_id):
    if request.method == "POST":
        card = Card.get_by_user_or_404(card_id, g.user.id)
        card.delete()
        redis_cache.delete(f"user:{g.user.id}all_cards_dt")
        redis_cache.delete(f"user:{g.user.id}deck_id:{card.deck_id}")
        return jsonify({"status": 1, "message": "Card deleted successfully"})
Пример #2
0
def study_deck(deck_id):
    """Study a deck"""
    deck = Deck.get_by_user_or_404(deck_id, g.user.id)
    study_session = (db.session.query(StudySession).filter(
        StudySession.deck_id == deck.id,
        StudySession.user_id == g.user.id,
        or_(StudySession.state == "Studying"),
    ).first())
    if study_session is None:
        study_session = StudySession(
            user_id=g.user.id,
            deck_id=deck.id,
            known=0,
            unknown=0,
            state="Studying",
        )
        study_session.save()
        deck.state = "Studying"
        deck.save()
        redis_cache.delete(f"user:{g.user.id}deck_id:{deck.id}")
    study_plan = (StudyPlan.query.filter_by(
        user_id=g.user.id,
        state="Active").order_by(StudyPlan.date_created.desc()).first())
    first_card = Card.get_next_card(study_session.id, deck_id)
    session["active_study_session"] = study_session.to_json
    session["active_deck"] = deck.to_json
    session["active_card"] = first_card.to_json if first_card else None
    return render_template(
        "dashboard/decks/_study.html",
        deck=deck.to_json,
        study_session=study_session,
        study_plan=study_plan,
        first_card=first_card,
    )
Пример #3
0
def create_card():
    if request.method == "GET":
        all_decks = Deck.query.filter_by(user_id=g.user.id)
        error = ""
        if all_decks is None:
            error += "You have not created any deck yet."
        return render_template("dashboard/cards/_create.html",
                               decks=all_decks,
                               error=error)
    else:
        front = request.form.get("front")
        back = request.form.get("back")
        deck_id = request.form.get("deck_id")
        user = g.user
        error = ""

        if not front or not back or not deck_id:
            error += "front back and deck_id fields are required."
        if Deck.query.filter_by(id=deck_id).first() is None:
            error += "\nSelected deck does not exist"
        if not error:
            new_card = Card(
                front=front,
                back=back,
                deck_id=deck_id,
                user_id=user.id,
                state="Active",
            )
            new_card.save()
            redis_cache.delete(f"user:{g.user.id}all_cards_dt")
            redis_cache.delete(f"user:{g.user.id}deck_id:{deck_id}")
            return jsonify("Success")
        return jsonify(error)
Пример #4
0
def delete_deck(deck_id):
    if request.method == "POST":
        deck = Deck.query.get_or_404(deck_id)
        deck.delete()
        redis_cache.delete(f"user:{g.user.id}all_decks_dt")
        redis_cache.delete(f"user:{g.user.id}deck_id:{deck_id}")
        return jsonify({"status": 1, "message": "Deck deleted successfully"})
Пример #5
0
def bulk_delete_decks():
    """Bulk delete decks"""
    if request.method == "POST":
        data = json.loads(request.form.get("data", []))
        for deck_id in data:
            deck = Deck.get_by_user_or_404(deck_id, g.user.id)
            deck.delete()
            redis_cache.delete(f"user:{g.user.id}all_decks_dt")
            redis_cache.delete(f"user:{g.user.id}deck_id:{deck_id}")
        return jsonify({"status": 1, "message": "Decks deleted succesfully"})
Пример #6
0
def edit_deck(deck_id):
    deck = Deck.get_by_user_or_404(deck_id, g.user.id)
    deck.update(
        name=request.form.get("name", deck.name),
        description=request.form.get("description", deck.description),
        parent_id=request.form.get("parent_id", deck.parent_id),
    )
    redis_cache.delete(f"user:{g.user.id}all_decks_dt")
    redis_cache.delete(f"user:{g.user.id}deck_id:{deck_id}")
    return jsonify("Success")
Пример #7
0
def bulk_delete_cards():
    """Bulk delete cards"""
    if request.method == "POST":
        data = json.loads(request.form.get("data", []))
        for card_id in data:
            card = Card.get_by_user_or_404(card_id, g.user.id)
            card.delete()
            redis_cache.delete(f"user:{g.user.id}all_cards_dt")
            redis_cache.delete(f"user:{g.user.id}deck_id:{card.deck_id}")
        return jsonify({"status": 1, "message": "Cards deleted successfully"})
Пример #8
0
def reset_deck(deck_id):
    state = request.form.get("state")
    if state not in ("active", "solved"):
        abort(400)
    deck = Deck.get_by_user_or_404(deck_id, g.user.id)
    deck_cards = Card.query.filter_by(deck_id=deck.id)
    for card in deck_cards:
        card.update(state=state)
    redis_cache.delete(f"user:{g.user.id}all_decks_dt")
    redis_cache.delete(f"user:{g.user.id}deck_id:{deck_id}")
    return jsonify("OK")
Пример #9
0
def get_next_study_card(deck_id, study_session_id):
    if request.method == "POST":
        study_session = StudySession.get_by_user_or_404(
            study_session_id, g.user.id)
        if study_session.state != "Studying":
            abort(400)
        deck = Deck.get_by_user_or_404(deck_id, g.user.id)
        card_state = request.form.get("state", "")
        card_id = request.form.get("card_id", None)
        if card_state not in ("Known", "Unknown") or not card_id:
            abort(400)
        # Create a study session log and update the study_session
        log = StudySessionLog(study_session_id=study_session_id,
                              card_id=card_id,
                              state=card_state)
        log.save()
        if card_state == "Known":
            study_session.update(known=StudySession.known + 1)
        else:
            study_session.update(unknown=StudySession.unknown + 1)
        session["active_deck"] = deck.to_json
        session["active_study_session"] = study_session.to_json
        next_card = Card.get_next_card(study_session_id, deck_id)
        status, data = 0, {
            "active_deck": deck.to_json,
            "active_study_session": study_session.to_json,
            "active_card": None,
        }
        markup = None
        if next_card is not None:
            data["active_card"] = next_card.to_json
            status = 1
            message = "Study Session Studying"
            session["active_card"] = next_card.to_json
            session["previous_study_session"] = None
        else:
            deck.update(state="Complete")
            StudySession.query.get(study_session.id).update(state="Complete")
            session["active_card"] = None
            message = "Study Session Complete"
            markup = render_template(
                "dashboard/decks/partials/session_stats.html",
                previous_study_session=study_session,
            )
        redis_cache.delete(f"user:{g.user.id}deck_id:{deck_id}")
        return jsonify({
            "status": status,
            "message": message,
            "data": data,
            "markup": markup
        })
Пример #10
0
def create_deck():
    if request.method == "GET":
        return render_template("dashboard/decks/_create.html")
    elif request.method == "POST":
        deck = Deck(
            name=request.form.get("name"),
            description=request.form.get("description"),
            user_id=g.user.id,
            parent_id=request.form.get("parent_id", None),
            state="New",
        )
        deck.save()
        redis_cache.delete(f"user:{g.user.id}all_decks_dt")
        return jsonify("Success")
Пример #11
0
def edit_card(card_id):
    if request.method == "POST":
        card = Card.get_by_user_or_404(card_id, g.user.id)
        state = request.form.get("state", card.state)
        if state not in ("Active", "Disabled"):
            abort(400)
        card.update(
            front=request.form.get("front", card.front),
            back=request.form.get("back", card.back),
            deck_id=request.form.get("deck_id", card.deck_id),
            state=state,
        )
        redis_cache.delete(f"user:{g.user.id}all_cards_dt")
        redis_cache.delete(f"user:{g.user.id}deck_id:{card.deck_id}")
        return jsonify("OK")
Пример #12
0
def bulk_add_cards(deck_id):
    data = json.loads(request.form.get("data"))
    insert_cards = []
    for card in data:
        insert_cards.append(
            Card(
                front=card["front"],
                back=card["back"],
                deck_id=deck_id,
                user_id=g.user.id,
            ))
    db.session.bulk_save_objects(insert_cards)
    db.session.commit()
    redis_cache.delete(f"user:{g.user.id}all_cards_dt")
    redis_cache.delete(f"user:{g.user.id}deck_id:{deck_id}")
    return jsonify({"status": 1, "message": "Cards added successfully"})