Compare commits

...

4 Commits

7 changed files with 162 additions and 21 deletions

21
app.py
View File

@ -6,9 +6,10 @@ from sqlalchemy import case
from auth import login_required, bp as auth_bp
from deck import probabilistic_deck_generator, bp as deck_bp
from menu import bp as menu_bp
from upload import bp as upload_bp
from flask import Flask, redirect, render_template, session, request, url_for
from create_db import Card
from create_db import Card, Deck
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from config import CONFIG
@ -57,17 +58,21 @@ def create_app(test_config=None):
global deck_index
user_id = session['user_id']
username = session['username']
d = probabilistic_deck_generator(user_id, 5, 5) #to je hell ker vsakič generira nov deck TODO deck bi moral bit nekako stabilen
#pokliče na bazo, da dobi str card idjev, ga spremeni v list in srevira karte po idjih
ids = dbsession.query(Deck).filter(Deck.owner_id == user_id, Deck.completed == False).first()
d = ids.cards_by_id.split(",")
deck_index+=1
if deck_index < len(d):
card = d[deck_index]
card = dbsession.query(Card).filter(Card.id == d[deck_index]).first()
else:
deck_index =-1
return redirect(url_for("menu.index"))
if request.method == 'POST':
rate = request.form['rate']
rate = request.form.get('rate', None) #je to nevarno??
cardtitle = request
print(rate)
if rate == "Yes":
@ -96,17 +101,13 @@ def create_app(test_config=None):
@app.route('/match')
def match():
return "match"
@app.route('/upload')
def upload():
return "upload"
return "match"
#app.register_blueprint(bp) # ??
app.register_blueprint(auth_bp)
app.register_blueprint(deck_bp)
app.register_blueprint(menu_bp)
app.register_blueprint(upload_bp)
app.add_url_rule('/', endpoint='index')
return app

View File

@ -41,6 +41,7 @@ class Card(Base):
class Deck(Base):
__tablename__ = 'deck'
id = Column(Integer, primary_key=True, autoincrement=True)
owner_id = Column(Integer, ForeignKey("user.id"), nullable=False)
cards_by_id = Column(Text)
number_of_cards = Column(Integer)
current_card = Column(Integer)

19
deck.py
View File

@ -74,15 +74,18 @@ def probabilistic_deck_generator(user_id, max_new, max_due):
return deck
#################################################
#################################################
def get_deck(deck):
"""naredimo string iz cardov"""
cards_by_id = ""
for card in deck:
cards_by_id += str(card.id) + ","
cards_by_id = cards_by_id[:-1]
return cards_by_id
#################################################
##TODO
# config za max_new in max_due
#################################################
#################################################
#################################################
#################################################
#################################################
#################################################
#################################################

20
menu.py
View File

@ -6,7 +6,9 @@ from sqlalchemy.orm import sessionmaker
from auth import login_required
from config import CONFIG
from create_db import User
from create_db import Deck, User
from deck import get_deck, probabilistic_deck_generator
bp = Blueprint('menu', __name__, url_prefix='/menu')
@ -22,15 +24,27 @@ def index():
print(username)
if request.method == 'POST':
if request.method == "POST":
action = request.form.get("menu", False) #internetna rešitev, nevem kako, ampak dela, tj. dobi info iz meni buttonov
print(action)
if action == "new_session":
#tu bi moral preveriti če je kak unfinished deck, potem bi pisalo continiue, namesto new
#ustvari novi vnos v Deck
deck = probabilistic_deck_generator(user_id, 5, 5)
cards_by_id = get_deck(deck)
number_of_cards = len(cards_by_id.split(","))
print(cards_by_id, number_of_cards)
deck = Deck(cards_by_id=cards_by_id, owner_id=user_id, number_of_cards=number_of_cards, current_card=0, completed=False)
dbsession.add(deck)
dbsession.commit()
return redirect(url_for("deck"))
elif action == "matches":
pass
elif action == "upload":
pass
return redirect(url_for("upload.index"))
elif action == "settings":
pass
elif action == "instructions":

View File

@ -136,4 +136,34 @@ html {
#pdf-doc {
width: 100%;
height: calc(100vh - 332px);
}
.drop-zone {
max-width: 200px;
height: 200px;
padding: 25px;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
font-family: "Quicksand", sans-serif;
font-weight: 500;
font-size: 20px;
cursor: pointer;
color: #cccccc;
border: 4px dashed #009578;
border-radius: 10px;
}
.drop-zone--over {
border-style: solid;
}
.drop-zone__input {
display: none;
}

View File

@ -0,0 +1,53 @@
{% extends 'base.html' %}
{% block header %}
<head>
<title>Drag and Drop File Upload</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="utf-8">
</head>
{% endblock %}
{% block content %}
</body>
<form method="post" enctype="multipart/form-data" action="localhost:5000/upload/uploader">
<div class="drop-zone">
<span class="drop-zone__prompt">Drop file here or click to upload</span>
<input type="file" name="file" class="drop-zone__input">
<input type="submit">
</div>
</form>
<script type="text/javascript">
document.querySelectorAll(".drop-zone__input").forEach((inputElement) => {
const dropZoneElement = inputElement.closest(".drop-zone");
dropZoneElement.addEventListener("click", (e) => {
inputElement.click();
});
dropZoneElement.addEventListener("dragover", (e) => {
e.preventDefault();
dropZoneElement.classList.add("drop-zone--over");
});
["dragleave", "dragend"].forEach((type) => {
dropZoneElement.addEventListener(type, (e) => {
dropZoneElement.classList.remove("drop-zone--over");
});
});
dropZoneElement.addEventListener("drop", (e) => {
e.preventDefault();
if (e.dataTransfer.files.length) {
inputElement.files = e.dataTransfer.files;
}
dropZoneElement.classList.remove("drop-zone--over");
});
});
</script>
<body>
{% endblock %}

39
upload.py 100644
View File

@ -0,0 +1,39 @@
from flask import (
Blueprint, flash, g, redirect, render_template, request, session, url_for
)
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from auth import login_required
from config import CONFIG
from create_db import User, Card
import nextcloud_client
bp = Blueprint('upload', __name__, url_prefix='/upload')
engine = create_engine(CONFIG['DB_CONNECTION'])
dbsessionmaker = sessionmaker(bind=engine)
dbsession = dbsessionmaker()
@bp.route("/", methods=("GET", "POST"))
def index():
return render_template("menu/upload.html")
@bp.route('/uploader', methods = ['GET', 'POST'])
def upload_file():
print("heyy")
if request.method == 'POST':
#flask gets the file
upload = request.files["file"]
print("hello")
#upload to nc
#get public link
#update db
#predpostavlja title, ir, owner_id, item_location
#card = Card(title=name, interest_rate=-1.0, owner_id=1, item_location=public_link)
#dbsession.add(card)
#dbsession.commit()