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/", 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/") 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)