diff --git a/docker-compose.yml b/docker-compose.yml index b971469..79081c1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,6 +5,7 @@ services: - "5000:5000" volumes: - .:/app + - ./static/uploads:/app/static/uploads environment: - FLASK_APP=app - FLASK_ENV=development @@ -24,7 +25,6 @@ services: retries: 3 start_period: 30s - db: image: mysql:8 restart: unless-stopped @@ -43,7 +43,6 @@ services: timeout: 5s retries: 5 - adminer: image: adminer restart: always diff --git a/migrations/versions/39f714eda2bf_auto.py b/migrations/versions/39f714eda2bf_auto.py new file mode 100644 index 0000000..50a28b1 --- /dev/null +++ b/migrations/versions/39f714eda2bf_auto.py @@ -0,0 +1,28 @@ +"""auto + +Revision ID: 39f714eda2bf +Revises: 6420e024f896 +Create Date: 2025-06-06 09:50:29.954004 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '39f714eda2bf' +down_revision = '6420e024f896' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/migrations/versions/408c432b5835_auto.py b/migrations/versions/408c432b5835_auto.py new file mode 100644 index 0000000..03d9250 --- /dev/null +++ b/migrations/versions/408c432b5835_auto.py @@ -0,0 +1,28 @@ +"""auto + +Revision ID: 408c432b5835 +Revises: 77087ff2442e +Create Date: 2025-06-06 08:34:26.804782 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '408c432b5835' +down_revision = '77087ff2442e' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/migrations/versions/447ff559592b_auto.py b/migrations/versions/447ff559592b_auto.py new file mode 100644 index 0000000..f8416e2 --- /dev/null +++ b/migrations/versions/447ff559592b_auto.py @@ -0,0 +1,36 @@ +"""auto + +Revision ID: 447ff559592b +Revises: 408c432b5835 +Create Date: 2025-06-06 08:47:25.908940 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '447ff559592b' +down_revision = '408c432b5835' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('submissions', sa.Column('vendor_name', sa.String(length=255), nullable=True)) + op.add_column('submissions', sa.Column('rating', sa.Integer(), nullable=True)) + op.add_column('submissions', sa.Column('old_vendor', sa.String(length=255), nullable=True)) + op.add_column('submissions', sa.Column('new_vendor', sa.String(length=255), nullable=True)) + op.add_column('submissions', sa.Column('alias_reason', sa.Text(), nullable=True)) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('submissions', 'alias_reason') + op.drop_column('submissions', 'new_vendor') + op.drop_column('submissions', 'old_vendor') + op.drop_column('submissions', 'rating') + op.drop_column('submissions', 'vendor_name') + # ### end Alembic commands ### diff --git a/migrations/versions/6420e024f896_auto.py b/migrations/versions/6420e024f896_auto.py new file mode 100644 index 0000000..707bf9d --- /dev/null +++ b/migrations/versions/6420e024f896_auto.py @@ -0,0 +1,28 @@ +"""auto + +Revision ID: 6420e024f896 +Revises: 7d232205181b +Create Date: 2025-06-06 09:40:37.498453 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '6420e024f896' +down_revision = '7d232205181b' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/migrations/versions/64c1927562cc_auto.py b/migrations/versions/64c1927562cc_auto.py new file mode 100644 index 0000000..398f009 --- /dev/null +++ b/migrations/versions/64c1927562cc_auto.py @@ -0,0 +1,44 @@ +"""auto + +Revision ID: 64c1927562cc +Revises: fb0243eaa7c3 +Create Date: 2025-06-06 07:54:00.147383 + +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import mysql + +# revision identifiers, used by Alembic. +revision = '64c1927562cc' +down_revision = 'fb0243eaa7c3' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('media', sa.Column('plant_id', sa.Integer(), nullable=True)) + op.add_column('media', sa.Column('update_id', sa.Integer(), nullable=True)) + op.drop_constraint(op.f('media_ibfk_2'), 'media', type_='foreignkey') + op.drop_constraint(op.f('media_ibfk_3'), 'media', type_='foreignkey') + op.create_foreign_key(None, 'media', 'plant', ['plant_id'], ['id']) + op.create_foreign_key(None, 'media', 'plant_updates', ['update_id'], ['id']) + op.drop_column('media', 'uploader_id') + op.drop_column('media', 'submission_id') + op.drop_column('media', 'caption') + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('media', sa.Column('caption', mysql.VARCHAR(length=255), nullable=True)) + op.add_column('media', sa.Column('submission_id', mysql.INTEGER(), autoincrement=False, nullable=True)) + op.add_column('media', sa.Column('uploader_id', mysql.INTEGER(), autoincrement=False, nullable=False)) + op.drop_constraint(None, 'media', type_='foreignkey') + op.drop_constraint(None, 'media', type_='foreignkey') + op.create_foreign_key(op.f('media_ibfk_3'), 'media', 'submissions', ['submission_id'], ['id']) + op.create_foreign_key(op.f('media_ibfk_2'), 'media', 'users', ['uploader_id'], ['id']) + op.drop_column('media', 'update_id') + op.drop_column('media', 'plant_id') + # ### end Alembic commands ### diff --git a/migrations/versions/6539ef5f5419_auto.py b/migrations/versions/6539ef5f5419_auto.py new file mode 100644 index 0000000..c57539f --- /dev/null +++ b/migrations/versions/6539ef5f5419_auto.py @@ -0,0 +1,28 @@ +"""auto + +Revision ID: 6539ef5f5419 +Revises: 39f714eda2bf +Create Date: 2025-06-06 10:03:52.256341 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '6539ef5f5419' +down_revision = '39f714eda2bf' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/migrations/versions/6cb1c3054071_auto.py b/migrations/versions/6cb1c3054071_auto.py new file mode 100644 index 0000000..b3fc892 --- /dev/null +++ b/migrations/versions/6cb1c3054071_auto.py @@ -0,0 +1,28 @@ +"""auto + +Revision ID: 6cb1c3054071 +Revises: f4987441cc85 +Create Date: 2025-06-06 09:09:55.403015 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '6cb1c3054071' +down_revision = 'f4987441cc85' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/migrations/versions/77087ff2442e_auto.py b/migrations/versions/77087ff2442e_auto.py new file mode 100644 index 0000000..15b5028 --- /dev/null +++ b/migrations/versions/77087ff2442e_auto.py @@ -0,0 +1,38 @@ +"""auto + +Revision ID: 77087ff2442e +Revises: 64c1927562cc +Create Date: 2025-06-06 08:10:58.028201 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '77087ff2442e' +down_revision = '64c1927562cc' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('media', sa.Column('uploader_id', sa.Integer(), nullable=False)) + op.add_column('media', sa.Column('caption', sa.String(length=255), nullable=True)) + op.create_foreign_key(None, 'media', 'users', ['uploader_id'], ['id']) + op.add_column('submissions', sa.Column('submission_type', sa.String(length=50), nullable=False)) + op.add_column('submissions', sa.Column('price', sa.Float(), nullable=True)) + op.add_column('submissions', sa.Column('source', sa.String(length=255), nullable=True)) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('submissions', 'source') + op.drop_column('submissions', 'price') + op.drop_column('submissions', 'submission_type') + op.drop_constraint(None, 'media', type_='foreignkey') + op.drop_column('media', 'caption') + op.drop_column('media', 'uploader_id') + # ### end Alembic commands ### diff --git a/migrations/versions/7d232205181b_auto.py b/migrations/versions/7d232205181b_auto.py new file mode 100644 index 0000000..28a3a0a --- /dev/null +++ b/migrations/versions/7d232205181b_auto.py @@ -0,0 +1,28 @@ +"""auto + +Revision ID: 7d232205181b +Revises: fad6fe2b5e43 +Create Date: 2025-06-06 09:38:39.786953 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '7d232205181b' +down_revision = 'fad6fe2b5e43' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/migrations/versions/e34cff15a95e_auto.py b/migrations/versions/e34cff15a95e_auto.py new file mode 100644 index 0000000..b329fdf --- /dev/null +++ b/migrations/versions/e34cff15a95e_auto.py @@ -0,0 +1,70 @@ +"""auto + +Revision ID: e34cff15a95e +Revises: 5c85ebc9451b +Create Date: 2025-06-06 07:34:33.699976 + +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import mysql + +# revision identifiers, used by Alembic. +revision = 'e34cff15a95e' +down_revision = '5c85ebc9451b' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('featured_images', sa.Column('media_id', sa.Integer(), nullable=False)) + op.drop_constraint(op.f('featured_images_ibfk_1'), 'featured_images', type_='foreignkey') + op.create_foreign_key(None, 'featured_images', 'media', ['media_id'], ['id']) + op.drop_column('featured_images', 'submission_image_id') + op.add_column('image_hearts', sa.Column('media_id', sa.Integer(), nullable=False)) + op.drop_constraint(op.f('image_hearts_ibfk_1'), 'image_hearts', type_='foreignkey') + op.create_foreign_key(None, 'image_hearts', 'media', ['media_id'], ['id']) + op.drop_column('image_hearts', 'submission_image_id') + op.add_column('media', sa.Column('uploader_id', sa.Integer(), nullable=False)) + op.add_column('media', sa.Column('submission_id', sa.Integer(), nullable=True)) + op.drop_constraint(op.f('media_ibfk_2'), 'media', type_='foreignkey') + op.drop_constraint(op.f('media_ibfk_3'), 'media', type_='foreignkey') + op.create_foreign_key(None, 'media', 'users', ['uploader_id'], ['id']) + op.create_foreign_key(None, 'media', 'submissions', ['submission_id'], ['id']) + op.drop_column('media', 'update_id') + op.drop_column('media', 'plant_id') + op.add_column('submissions', sa.Column('submission_type', sa.String(length=50), nullable=False)) + op.add_column('submissions', sa.Column('price', sa.Float(), nullable=True)) + op.add_column('submissions', sa.Column('source', sa.String(length=255), nullable=True)) + op.alter_column('submissions', 'plant_name', + existing_type=mysql.VARCHAR(length=100), + nullable=True) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.alter_column('submissions', 'plant_name', + existing_type=mysql.VARCHAR(length=100), + nullable=False) + op.drop_column('submissions', 'source') + op.drop_column('submissions', 'price') + op.drop_column('submissions', 'submission_type') + op.add_column('media', sa.Column('plant_id', mysql.INTEGER(), autoincrement=False, nullable=True)) + op.add_column('media', sa.Column('update_id', mysql.INTEGER(), autoincrement=False, nullable=True)) + op.drop_constraint(None, 'media', type_='foreignkey') + op.drop_constraint(None, 'media', type_='foreignkey') + op.create_foreign_key(op.f('media_ibfk_3'), 'media', 'plant_updates', ['update_id'], ['id']) + op.create_foreign_key(op.f('media_ibfk_2'), 'media', 'plant', ['plant_id'], ['id']) + op.drop_column('media', 'submission_id') + op.drop_column('media', 'uploader_id') + op.add_column('image_hearts', sa.Column('submission_image_id', mysql.INTEGER(), autoincrement=False, nullable=False)) + op.drop_constraint(None, 'image_hearts', type_='foreignkey') + op.create_foreign_key(op.f('image_hearts_ibfk_1'), 'image_hearts', 'submission_images', ['submission_image_id'], ['id']) + op.drop_column('image_hearts', 'media_id') + op.add_column('featured_images', sa.Column('submission_image_id', mysql.INTEGER(), autoincrement=False, nullable=False)) + op.drop_constraint(None, 'featured_images', type_='foreignkey') + op.create_foreign_key(op.f('featured_images_ibfk_1'), 'featured_images', 'submission_images', ['submission_image_id'], ['id']) + op.drop_column('featured_images', 'media_id') + # ### end Alembic commands ### diff --git a/migrations/versions/f4987441cc85_auto.py b/migrations/versions/f4987441cc85_auto.py new file mode 100644 index 0000000..b82159c --- /dev/null +++ b/migrations/versions/f4987441cc85_auto.py @@ -0,0 +1,28 @@ +"""auto + +Revision ID: f4987441cc85 +Revises: 447ff559592b +Create Date: 2025-06-06 08:59:55.024371 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'f4987441cc85' +down_revision = '447ff559592b' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/migrations/versions/fad6fe2b5e43_auto.py b/migrations/versions/fad6fe2b5e43_auto.py new file mode 100644 index 0000000..01bac4d --- /dev/null +++ b/migrations/versions/fad6fe2b5e43_auto.py @@ -0,0 +1,32 @@ +"""auto + +Revision ID: fad6fe2b5e43 +Revises: 6cb1c3054071 +Create Date: 2025-06-06 09:24:38.663461 + +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import mysql + +# revision identifiers, used by Alembic. +revision = 'fad6fe2b5e43' +down_revision = '6cb1c3054071' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.alter_column('submissions', 'plant_name', + existing_type=mysql.VARCHAR(length=100), + nullable=True) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.alter_column('submissions', 'plant_name', + existing_type=mysql.VARCHAR(length=100), + nullable=False) + # ### end Alembic commands ### diff --git a/migrations/versions/fb0243eaa7c3_auto.py b/migrations/versions/fb0243eaa7c3_auto.py new file mode 100644 index 0000000..5afee5a --- /dev/null +++ b/migrations/versions/fb0243eaa7c3_auto.py @@ -0,0 +1,38 @@ +"""auto + +Revision ID: fb0243eaa7c3 +Revises: e34cff15a95e +Create Date: 2025-06-06 07:43:42.387700 + +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import mysql + +# revision identifiers, used by Alembic. +revision = 'fb0243eaa7c3' +down_revision = 'e34cff15a95e' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.alter_column('submissions', 'plant_name', + existing_type=mysql.VARCHAR(length=100), + nullable=False) + op.drop_column('submissions', 'price') + op.drop_column('submissions', 'source') + op.drop_column('submissions', 'submission_type') + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('submissions', sa.Column('submission_type', mysql.VARCHAR(length=50), nullable=False)) + op.add_column('submissions', sa.Column('source', mysql.VARCHAR(length=255), nullable=True)) + op.add_column('submissions', sa.Column('price', mysql.FLOAT(), nullable=True)) + op.alter_column('submissions', 'plant_name', + existing_type=mysql.VARCHAR(length=100), + nullable=True) + # ### end Alembic commands ### diff --git a/plugins/core_ui/templates/core_ui/_media_macros.html b/plugins/core_ui/templates/core_ui/_media_macros.html index 774d214..051e6eb 100644 --- a/plugins/core_ui/templates/core_ui/_media_macros.html +++ b/plugins/core_ui/templates/core_ui/_media_macros.html @@ -1,14 +1,34 @@ -{% macro render_media_list(media_list, thumb_width=150) -%} +{% macro render_media_list(media_list, thumb_width=150, current_user=None) -%} {% if media_list %} -
{{ media.caption }}
- {% endif %} -{{ media.caption }}
+You have no submissions that match this filter.
+ {% endif %} + ++ {{ img.uploaded_at.strftime('%Y-%m-%d') }} +
+No images uploaded.
+ {% endif %} +