From eb111dde1481df82727d313a5f2e0dfbede5d449 Mon Sep 17 00:00:00 2001 From: Lilfade Date: Mon, 26 May 2025 16:30:40 -0500 Subject: [PATCH] more --- files.zip | Bin 0 -> 83483 bytes plugins/plant/models.py | 34 +++++------- plugins/plant/routes.py | 2 +- plugins/submission/__init__.py | 2 + plugins/submission/models.py | 49 ++++++++++++++++++ plugins/submission/plugin.json | 6 +++ plugins/submission/routes.py | 10 ++++ .../templates/submission/index.html | 9 ++++ 8 files changed, 90 insertions(+), 22 deletions(-) create mode 100644 files.zip create mode 100644 plugins/submission/__init__.py create mode 100644 plugins/submission/models.py create mode 100644 plugins/submission/plugin.json create mode 100644 plugins/submission/routes.py create mode 100644 plugins/submission/templates/submission/index.html diff --git a/files.zip b/files.zip new file mode 100644 index 0000000000000000000000000000000000000000..8ad0dd8bfacf47f1ebfef52e01eab5a4a6ce4288 GIT binary patch literal 83483 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 literal 0 HcmV?d00001 diff --git a/plugins/plant/models.py b/plugins/plant/models.py index e5e900e..7f2e3ae 100644 --- a/plugins/plant/models.py +++ b/plugins/plant/models.py @@ -1,15 +1,6 @@ from datetime import datetime from app import db -class Plant(db.Model): - id = db.Column(db.Integer, primary_key=True) - name = db.Column(db.String(128), nullable=False) - type = db.Column(db.String(64)) - notes = db.Column(db.Text) - is_active = db.Column(db.Boolean, default=True) - created_at = db.Column(db.DateTime, default=datetime.utcnow) - updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) - class Submission(db.Model): __tablename__ = 'submission' @@ -44,18 +35,6 @@ class SubmissionImage(db.Model): file_path = db.Column(db.String(255), nullable=False) -class PlantCommonName(db.Model): - __tablename__ = 'plants_common' - id = db.Column(db.Integer, primary_key=True) - name = db.Column(db.String(120), unique=True, nullable=False) - - -class PlantScientificName(db.Model): - __tablename__ = 'plants_scientific' - id = db.Column(db.Integer, primary_key=True) - name = db.Column(db.String(255), unique=True, nullable=False) - - class Plant(db.Model): __tablename__ = 'plants' id = db.Column(db.Integer, primary_key=True) @@ -72,6 +51,19 @@ class Plant(db.Model): foreign_keys='PlantLineage.child_plant_id') + +class PlantCommonName(db.Model): + __tablename__ = 'plants_common' + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String(120), unique=True, nullable=False) + + +class PlantScientificName(db.Model): + __tablename__ = 'plants_scientific' + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String(255), unique=True, nullable=False) + + class PlantLineage(db.Model): __tablename__ = 'plant_lineage' id = db.Column(db.Integer, primary_key=True) diff --git a/plugins/plant/routes.py b/plugins/plant/routes.py index 482394a..98b6d0e 100644 --- a/plugins/plant/routes.py +++ b/plugins/plant/routes.py @@ -7,7 +7,7 @@ bp = Blueprint('plant', __name__, template_folder='templates') @bp.route('/plants') def index(): - plants = Plant.query.order_by(Plant.created_at.desc()).all() + plants = Plant.query.order_by(Plant.date_added.desc()).all() return render_template('plant/index.html', plants=plants) @bp.route('/plants/') diff --git a/plugins/submission/__init__.py b/plugins/submission/__init__.py new file mode 100644 index 0000000..0520727 --- /dev/null +++ b/plugins/submission/__init__.py @@ -0,0 +1,2 @@ +def register(): + from . import routes diff --git a/plugins/submission/models.py b/plugins/submission/models.py new file mode 100644 index 0000000..565eeaf --- /dev/null +++ b/plugins/submission/models.py @@ -0,0 +1,49 @@ +from datetime import datetime +from app import db + +class Submission(db.Model): + __tablename__ = 'submissions' + + id = db.Column(db.Integer, primary_key=True) + user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) + plant_id = db.Column(db.Integer, db.ForeignKey('plants.id'), nullable=True) + common_name = db.Column(db.String(120), nullable=False) + scientific_name = db.Column(db.String(120)) + price = db.Column(db.Float, nullable=False) + source = db.Column(db.String(120)) + timestamp = db.Column(db.DateTime, default=datetime.utcnow) + height = db.Column(db.Float) + width = db.Column(db.Float) + leaf_count = db.Column(db.Integer) + potting_mix = db.Column(db.String(255)) + container_size = db.Column(db.String(120)) + health_status = db.Column(db.String(50)) + notes = db.Column(db.Text) + images = db.relationship('SubmissionImage', backref='submission', lazy=True) + + +class SubmissionImage(db.Model): + __tablename__ = 'submission_images' + + id = db.Column(db.Integer, primary_key=True) + submission_id = db.Column(db.Integer, db.ForeignKey('submissions.id'), nullable=False) + file_path = db.Column(db.String(255), nullable=False) + is_visible = db.Column(db.Boolean, default=True) + + +class ImageHeart(db.Model): + __tablename__ = 'image_hearts' + + id = db.Column(db.Integer, primary_key=True) + user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) + submission_image_id = db.Column(db.Integer, db.ForeignKey('submission_images.id'), nullable=False) + created_at = db.Column(db.DateTime, default=datetime.utcnow) + + +class FeaturedImage(db.Model): + __tablename__ = 'featured_images' + + id = db.Column(db.Integer, primary_key=True) + submission_image_id = db.Column(db.Integer, db.ForeignKey('submission_images.id'), nullable=False) + override_text = db.Column(db.String(255), nullable=True) + is_featured = db.Column(db.Boolean, default=True) diff --git a/plugins/submission/plugin.json b/plugins/submission/plugin.json new file mode 100644 index 0000000..77340b8 --- /dev/null +++ b/plugins/submission/plugin.json @@ -0,0 +1,6 @@ +{ + "name": "submission", + "version": "1.0.0", + "description": "Plugin to handle user-submitted plant data and images.", + "entry_point": "register" +} diff --git a/plugins/submission/routes.py b/plugins/submission/routes.py new file mode 100644 index 0000000..e0937e2 --- /dev/null +++ b/plugins/submission/routes.py @@ -0,0 +1,10 @@ +from flask import Blueprint, render_template +from .models import Submission +from app import db + +bp = Blueprint('submission', __name__, url_prefix='/submission') + +@bp.route('/') +def index(): + submissions = Submission.query.order_by(Submission.timestamp.desc()).all() + return render_template('submission/index.html', submissions=submissions) diff --git a/plugins/submission/templates/submission/index.html b/plugins/submission/templates/submission/index.html new file mode 100644 index 0000000..15c2563 --- /dev/null +++ b/plugins/submission/templates/submission/index.html @@ -0,0 +1,9 @@ +{% extends "core_ui/base.html" %} +{% block content %} +

Submissions

+
    + {% for s in submissions %} +
  • {{ s.common_name }} ({{ s.scientific_name or 'N/A' }}) - ${{ s.price }}
  • + {% endfor %} +
+{% endblock %}