First commit of POC version

This commit is contained in:
2026-01-01 21:07:34 +01:00
parent 3ea6e14d0e
commit 7ab655626a
65 changed files with 12372 additions and 0 deletions
+70
View File
@@ -0,0 +1,70 @@
from flask_sqlalchemy import SQLAlchemy
from flask_login import UserMixin
from werkzeug.security import generate_password_hash, check_password_hash
from datetime import datetime
db = SQLAlchemy() # Create the extension object
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
updated_at = db.Column(db.TIMESTAMP, default=datetime.now(), onupdate=datetime.now(), nullable=False)
name = db.Column(db.String(40), unique=True, nullable=False)
password_hash = db.Column(db.String(256))
is_admin = db.Column(db.Boolean, default=False)
is_approved = db.Column(db.Boolean, default=False)
is_private = db.Column(db.Boolean, default=False)
is_guest = db.Column(db.Boolean, default=False)
def set_password(self, password):
self.password_hash = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.password_hash, password)
def my_owned_lists(self, with_inactive=False):
if with_inactive:
return ListOfItems.query.filter_by(owner_user_id=self.id).all()
return ListOfItems.query.filter_by(owner_user_id=self.id, is_active=True).all()
def all_my_lists(self):
result = self.my_owned_lists()
for s in Shared.query.filter_by(user_id=self.id).all():
l = ListOfItems.query.filter_by(id=s.listofitem_id, is_active=True).first()
if l:
result.append(l)
return result
def shares_in_list(self, listofitem_id):
shared = Shared.query.filter_by(user_id=self.id, listofitem_id=listofitem_id).first()
return True if shared else False
class ListOfItems(db.Model):
id = db.Column(db.Integer, primary_key=True)
updated_at = db.Column(db.TIMESTAMP, default=datetime.now(), onupdate=datetime.now(), nullable=False)
owner_user_id = db.Column(db.Integer, nullable=False)
name = db.Column(db.String(40), unique=True, nullable=False)
is_active = db.Column(db.Boolean, default=False)
def items_left(self):
return len(Item.query.filter_by(listofitems_id=self.id, is_checked=False, is_suggestion=False).all())
def items_total(self):
return len(Item.query.filter_by(listofitems_id=self.id, is_suggestion=False).all())
class Item(db.Model):
id = db.Column(db.Integer, primary_key=True)
updated_at = db.Column(db.TIMESTAMP, default=datetime.now(), onupdate=datetime.now(), nullable=False)
listofitems_id = db.Column(db.Integer, nullable=False)
label = db.Column(db.String(40), nullable=False)
quantity = db.Column(db.Integer, default=0)
unit = db.Column(db.String(10))
label_alt1 = db.Column(db.String(40))
label_alt2 = db.Column(db.String(40))
is_checked = db.Column(db.Boolean, default=False)
is_suggestion = db.Column(db.Boolean, default=False)
category = db.Column(db.String(20))
class Shared(db.Model):
user_id = db.Column(db.Integer, primary_key=True)
listofitem_id = db.Column(db.Integer, primary_key=True)