diff --git a/requirements.txt b/requirements.txt index 6411bf6..916d750 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,4 +10,7 @@ flask-sqlalchemy flask-cors requests psycopg2-binary -email_validator \ No newline at end of file +email_validator +minio +flask-minio +bleach \ No newline at end of file diff --git a/src/app.py b/src/app.py index 31ff5c5..b85857e 100644 --- a/src/app.py +++ b/src/app.py @@ -7,11 +7,12 @@ from sentry_sdk.integrations.sqlalchemy import SqlalchemyIntegration from healthcheck import HealthCheck from flask_cors import CORS -from utils.config import SENTRY_DSN, RELEASE_ID, RELEASEMODE, POSTGRES_DB, PORT, POSTGRES_HOSTNAME, POSTGRES_PASSWORD, \ - POSTGRES_USERNAME, DEBUG, SECRET_KEY, ALLOWED_ORIGINS -from utils import db, health_database_status, security, user_datastore +from utils.config import SENTRY_DSN, RELEASE_ID, RELEASEMODE, PORT, DEBUG, SECRET_KEY, ALLOWED_ORIGINS, SQLALCHEMY_URI +from utils import health_database_status, security, user_datastore from views import ItemView, ProfileView, UploadView, IndexView +from models import db + """ Main Flask entrypoint """ @@ -33,8 +34,7 @@ if SENTRY_DSN: ) app = Flask(__name__) -app.config['SQLALCHEMY_DATABASE_URI'] = \ - f"postgresql://{POSTGRES_USERNAME}:{POSTGRES_PASSWORD}@{POSTGRES_HOSTNAME}:5432/{POSTGRES_DB}" +app.config['SQLALCHEMY_DATABASE_URI'] = SQLALCHEMY_URI app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.config['SECRET_KEY'] = SECRET_KEY app.config['SECURITY_REGISTERABLE'] = True diff --git a/src/models/__init__.py b/src/models/__init__.py index ce899fd..1e6d09c 100644 --- a/src/models/__init__.py +++ b/src/models/__init__.py @@ -1,3 +1,4 @@ +from .db import db from .user import User from .role import Role from .item import Item diff --git a/src/models/comment.py b/src/models/comment.py new file mode 100644 index 0000000..9a6a640 --- /dev/null +++ b/src/models/comment.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +from sqlalchemy import func + +from . import db + + +class Comment(db.Model): + id = db.Column(db.Integer, primary_key=True, autoincrement=True) + timestamp = db.Column(db.TIMESTAMP, nullable=False, server_default=func.now()) + + commenter_id = db.Column(db.Integer, db.ForeignKey("user.id", ondelete="CASCADE"), nullable=False) + commenter = db.relationship("User", backref=db.backref("comments", lazy=True)) + + item_id = db.Column(db.Integer, db.ForeignKey("item.id", ondelete="CASCADE"), nullable=False) + item = db.relationship("Item", backref=db.backref("comments", lazy=True)) + + text = db.Text(4096, nullable=False) diff --git a/src/utils/db.py b/src/models/db.py similarity index 100% rename from src/utils/db.py rename to src/models/db.py diff --git a/src/models/item.py b/src/models/item.py index dc8135f..b0a2612 100644 --- a/src/models/item.py +++ b/src/models/item.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 from sqlalchemy import func -from utils import db +from . import db """ Item model @@ -16,4 +16,7 @@ __version__text__ = "1" class Item(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String, nullable=False) - creation_date = db.Column(db.TIMESTAMP, nullable=False, server_default=func.now()) + upload_date = db.Column(db.TIMESTAMP, nullable=False, server_default=func.now()) + + uploader_id = db.Column(db.Integer, db.ForeignKey("user.id", ondelete="CASCADE"), nullable=False) + uploader = db.relationship("User", backref=db.backref("uploads", lazy=True)) \ No newline at end of file diff --git a/src/models/purchase.py b/src/models/purchase.py new file mode 100644 index 0000000..f494841 --- /dev/null +++ b/src/models/purchase.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 +from sqlalchemy import func + +from . import db + + +class Purchase(db.Model): + id = db.Column(db.Integer, primary_key=True, autoincrement=True) + timestamp = db.Column(db.TIMESTAMP, nullable=False, server_default=func.now()) + + purchaser_id = db.Column(db.Integer, db.ForeignKey("user.id", ondelete="CASCADE"), nullable=False) + purchaser = db.relationship("User", backref=db.backref("purchases", lazy=True)) + + item_id = db.Column(db.Integer, db.ForeignKey("item.id", ondelete="CASCADE"), nullable=False) + item = db.relationship("Item", backref=db.backref("purchases", lazy=True)) diff --git a/src/models/role.py b/src/models/role.py index 13fb9ae..24bf6f3 100644 --- a/src/models/role.py +++ b/src/models/role.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 from flask_security import RoleMixin -from utils import db +from . import db """ Role model diff --git a/src/models/user.py b/src/models/user.py index 571cd21..23eb68e 100644 --- a/src/models/user.py +++ b/src/models/user.py @@ -2,7 +2,7 @@ from flask_security import UserMixin from .role import roles_users -from utils import db +from . import db """ User model diff --git a/src/utils/__init__.py b/src/utils/__init__.py index 00c6359..9c6427a 100644 --- a/src/utils/__init__.py +++ b/src/utils/__init__.py @@ -1,3 +1,2 @@ -from .db import db from .healthchecks import health_database_status from .security import security, user_datastore diff --git a/src/utils/config.py b/src/utils/config.py index 5414803..13ffdc5 100644 --- a/src/utils/config.py +++ b/src/utils/config.py @@ -19,10 +19,7 @@ SENTRY_DSN = os.environ.get("SENTRY_DSN") RELEASE_ID = os.environ.get("RELEASE_ID", "test") RELEASEMODE = os.environ.get("RELEASEMODE", "dev") -POSTGRES_HOSTNAME = os.getenv("POSTGRES_HOSTNAME", "localhost") -POSTGRES_USERNAME = os.getenv("POSTGRES_USERNAME", "webshop") -POSTGRES_PASSWORD = os.getenv("POSTGRES_PASSWORD", "webshop") -POSTGRES_DB = os.getenv("POSTGRES_DB", "webshop") +SQLALCHEMY_URI = os.environ.get("SQLALCHEMY_URI", "sqlite://") SECRET_KEY = os.getenv("SECRET_KEY") ALLOWED_ORIGINS = os.environ.get('ALLOWED_ORIGINS', '*') diff --git a/src/utils/healthchecks.py b/src/utils/healthchecks.py index 6fe0a58..f9403f8 100644 --- a/src/utils/healthchecks.py +++ b/src/utils/healthchecks.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -from .db import db +from models.db import db """ Healthchek functions diff --git a/src/utils/security.py b/src/utils/security.py index 12f4ecc..9de9b8e 100644 --- a/src/utils/security.py +++ b/src/utils/security.py @@ -11,8 +11,7 @@ __version__text__ = "1" from flask_security import Security, SQLAlchemyUserDatastore -from models import User, Role -from utils import db +from models import db, User, Role user_datastore = SQLAlchemyUserDatastore(db, User, Role) security = Security()