diff --git a/.envrc b/.envrc index 3550a30..4d3e59f 100644 --- a/.envrc +++ b/.envrc @@ -1 +1,2 @@ use flake +export FLASK_APP=app \ No newline at end of file diff --git a/.gitignore b/.gitignore index 92b2793..a4b73fe 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .direnv +__pycache__ diff --git a/app/__init__.py b/app/__init__.py index 3fa7218..42a5f46 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -2,12 +2,9 @@ from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) - -# Configuration of application, see configuration.py, choose one and uncomment. -# app.config.from_object('configuration.ProductionConfig') app.config.from_object("app.configuration.DevelopmentConfig") -# app.config.from_object('configuration.TestingConfig') - db = SQLAlchemy(app) # flask-sqlalchemy from app import views, models +with app.app_context(): + db.create_all() \ No newline at end of file diff --git a/app/__pycache__/__init__.cpython-312.pyc b/app/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index e5a887e..0000000 Binary files a/app/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/app/__pycache__/configuration.cpython-312.pyc b/app/__pycache__/configuration.cpython-312.pyc deleted file mode 100644 index cdd7c0d..0000000 Binary files a/app/__pycache__/configuration.cpython-312.pyc and /dev/null differ diff --git a/app/__pycache__/models.cpython-312.pyc b/app/__pycache__/models.cpython-312.pyc deleted file mode 100644 index 6218407..0000000 Binary files a/app/__pycache__/models.cpython-312.pyc and /dev/null differ diff --git a/app/__pycache__/views.cpython-312.pyc b/app/__pycache__/views.cpython-312.pyc deleted file mode 100644 index 2ab1285..0000000 Binary files a/app/__pycache__/views.cpython-312.pyc and /dev/null differ diff --git a/app/configuration.py b/app/configuration.py index 129bb0a..092b4a8 100644 --- a/app/configuration.py +++ b/app/configuration.py @@ -2,8 +2,7 @@ class Config(object): DEBUG = False TESTING = False SQLALCHEMY_DATABASE_URI = "sqlite:///application.db" - BOOTSTRAP_FONTAWESOME = True - SECRET_KEY = "MINHACHAVESECRETA" + SECRET_KEY = "yessir" CSRF_ENABLED = True SQLALCHEMY_TRACK_MODIFICATIONS = True @@ -15,6 +14,5 @@ class Config(object): class DevelopmentConfig(Config): DEBUG = True - class TestingConfig(Config): TESTING = True diff --git a/app/forms.py b/app/forms.py new file mode 100644 index 0000000..452ad00 --- /dev/null +++ b/app/forms.py @@ -0,0 +1,30 @@ +from flask_wtf import FlaskForm +from wtforms import StringField, SubmitField, IntegerField, HiddenField +from wtforms.validators import DataRequired + +class NewWishlist(FlaskForm): + title = StringField("Title:", validators=[DataRequired()]) + description = StringField("Description:", validators=[DataRequired()]) + submit = SubmitField("Submit") + +# Each submit needs a different page fot it to work on the same page. +class DeleteWishlist(FlaskForm): + wl_del_submit = SubmitField("Delete wishlist") + +class EditWishlistInfo(FlaskForm): + title = StringField("Title:", validators=[DataRequired()]) + description = StringField("Description:", validators=[DataRequired()]) + wl_edit_submit = SubmitField("Submit") + +class ResetWishlistUrls(FlaskForm): + wl_reset_submit = SubmitField("Reset urls") + +class NewItem(FlaskForm): + title = StringField("Title:", validators=[DataRequired()]) + description = StringField("Description:", validators=[DataRequired()]) + price = IntegerField("Price:", validators=[DataRequired()]) + it_new_submit = SubmitField("Submit") + +class DeleteItem(FlaskForm): + index = HiddenField() + it_del_submit = SubmitField("Delete item") diff --git a/app/models.py b/app/models.py index 60113cf..00ecd18 100644 --- a/app/models.py +++ b/app/models.py @@ -1,20 +1,35 @@ +from typing import List from app import db - +from sqlalchemy.orm import Mapped, mapped_column, RelationshipProperty +from sqlalchemy import Uuid, String, Text +from uuid import uuid4 as uuid class Item(db.Model): - id = db.Column(db.Integer, primary_key=True) - title = db.Column(db.String(250)) - description = db.Column(db.Text) - price = db.Column(db.Float) - bought = db.Column(db.Boolean) + def __init__(self, title: str, description: str, price: float): + self.wishlist_id = None + self.title = title + self.description = description + self.price = price + self.bought = False + id: Mapped[int] = mapped_column(primary_key=True) + wishlist_id: Mapped[int | None] = mapped_column(db.ForeignKey("wishlist.id")) + title: Mapped[str] = mapped_column(db.String(250)) + description: Mapped[str] = mapped_column(db.Text) + price: Mapped[float] = mapped_column() + bought: Mapped[bool] = mapped_column() class Wishlist(db.Model): - id = db.Column(db.Integer, primary_key=True) - editId = db.Column(db.Uuid) - viewId = db.Column(db.Uuid) - title = db.Column(db.String(250)) - description = db.Column(db.Text) + def __init__(self, title: str, description: str): + self.editId = uuid() + self.viewId = uuid() + self.title = title + self.description = description - itemIds = db.Column(db.ARRAY(db.Integer)) # Store item IDs as an array - items = db.relationship("Item", primaryjoin="Wishlist.itemIds") + id: Mapped[int] = mapped_column(primary_key=True) + editId: Mapped[Uuid] = mapped_column(Uuid) + viewId: Mapped[Uuid] = mapped_column(Uuid) + title: Mapped[str] = mapped_column(String(250)) + description: Mapped[str] = mapped_column(Text) + + items: Mapped[List["Item"]] = db.relationship("Item", backref="post") \ No newline at end of file diff --git a/app/templates/edit.html b/app/templates/edit.html new file mode 100644 index 0000000..e3cd676 --- /dev/null +++ b/app/templates/edit.html @@ -0,0 +1,69 @@ +{% set cpath = url_for("edit", id=wishlist.editId) %} + +