flask_eindproject/app/views.py
2025-05-19 22:48:26 +02:00

108 lines
3.3 KiB
Python

from flask import url_for, redirect, render_template
from app import app, db
from app.forms import (
NewWishlist,
DeleteWishlist,
EditWishlistInfo,
ResetWishlistUrls,
NewItem,
DeleteItem,
)
from app.models import Wishlist, Item
from uuid import UUID, uuid4 as uuid
@app.route("/")
def index():
return "hello"
@app.route("/new", methods=["GET", "POST"])
def new():
form = NewWishlist()
if form.validate_on_submit():
wishlist = Wishlist(form.title.data, form.description.data)
db.session.add(wishlist)
db.session.commit()
return redirect(url_for("view", id=wishlist.viewId))
return render_template("new.html", form=form)
@app.route("/edit/<id>", methods=["GET", "POST"])
def edit(id: str):
wishlist: Wishlist = db.one_or_404(
db.select(Wishlist).filter_by(editId=UUID(id)),
description="Failed to get wishlist. Are you sure this is the correct url?",
)
form_wl_delete = DeleteWishlist()
form_wl_editinfo = EditWishlistInfo()
form_wl_reseturls = ResetWishlistUrls()
form_it_new = NewItem()
form_it_delete = DeleteItem()
# Each submit needs a different page fot it to work on the same page.
if form_wl_delete.validate_on_submit() and form_wl_delete.wl_del_submit.data:
for i in wishlist.items:
db.session.delete(i)
db.session.delete(wishlist)
db.session.commit()
return redirect(url_for("index"))
elif form_wl_editinfo.validate_on_submit() and form_wl_editinfo.wl_edit_submit.data:
wishlist.title = form_wl_editinfo.title.data
wishlist.description = form_wl_editinfo.description.data
db.session.commit()
return redirect(url_for("edit", id=id))
elif form_wl_reseturls.validate_on_submit() and form_wl_reseturls.wl_reset_submit.data:
wishlist.editId = uuid()
wishlist.viewId = uuid()
db.session.commit()
return redirect(url_for("edit", id=wishlist.editId))
elif form_it_new.validate_on_submit() and form_it_new.it_new_submit.data:
f = form_it_new
item = Item(
f.title.data,
f.description.data,
f.price.data
)
wishlist.items.append(item)
db.session.commit()
return redirect(url_for("edit", id=id))
elif form_it_delete.validate_on_submit() and form_it_delete.it_del_submit.data:
print(form_it_delete.index.data)
data = form_it_delete.index.data
i = int(data) if data != None else 0
if i + 1 > len(wishlist.items):
return "Invalid item to delete", 400
wishlist.items.remove(wishlist.items[i])
db.session.commit()
return redirect(url_for("edit", id=id))
return render_template(
"edit.html",
wishlist=wishlist,
form_wl_delete=form_wl_delete,
form_wl_editinfo=form_wl_editinfo,
form_wl_reseturls=form_wl_reseturls,
form_it_new=form_it_new,
form_it_delete=form_it_delete,
)
@app.route("/view/<id>")
def view(id: str):
wishlist = db.one_or_404(
db.select(Wishlist).filter_by(viewId=UUID(id)),
description="Failed to get wishlist. Are you sure this is the correct url?",
)
return render_template("view.html", wishlist=wishlist)