From 18301881a8d213435a2b859671cfd530934b2616 Mon Sep 17 00:00:00 2001
From: "Ethan Clay (UWE)" <ethan2.clay@live.uwe.ac.uk>
Date: Fri, 29 Nov 2024 11:06:05 +0000
Subject: [PATCH] Add main image column, add logic to retrieve file links and
 add to listings slider

---
 app/bookings/routes.py                        | 11 +++++++--
 app/models/__init__.py                        |  3 ++-
 app/models/listing_images.py                  | 19 +++++++++++----
 app/templates/bookings/listings.html          |  2 +-
 ...89ef13132_add_main_listing_image_column.py | 23 +++++++++++++++++++
 5 files changed, 49 insertions(+), 9 deletions(-)
 create mode 100644 migrations/versions/68d89ef13132_add_main_listing_image_column.py

diff --git a/app/bookings/routes.py b/app/bookings/routes.py
index 2939186..650eeea 100644
--- a/app/bookings/routes.py
+++ b/app/bookings/routes.py
@@ -1,6 +1,6 @@
 from flask import render_template, redirect, url_for
 from app.bookings import bp
-from app.models import Listings 
+from app.models import Listings, ListingImages 
 
 @bp.route('/home')
 def index():
@@ -12,5 +12,12 @@ def redirect_index():
 
 @bp.route('/listings')
 def listings():
+    listing_ids = []
     top_listings = Listings.get_top_listings(5)
-    return render_template('bookings/listings.html', top_listings=top_listings)
+    
+    for listing in top_listings:
+        listing_ids.append(listing.id)
+        
+    top_listing_images = ListingImages.get_selected_main_images(listing_ids)
+    
+    return render_template('bookings/listings.html', top_listings=top_listings, top_listing_images=top_listing_images)
diff --git a/app/models/__init__.py b/app/models/__init__.py
index e944908..144c367 100644
--- a/app/models/__init__.py
+++ b/app/models/__init__.py
@@ -1,3 +1,4 @@
 #Importing database models
 from .user import User
-from .listings import Listings
\ No newline at end of file
+from .listings import Listings
+from .listing_images import ListingImages 
\ No newline at end of file
diff --git a/app/models/listing_images.py b/app/models/listing_images.py
index 7929183..fc505e2 100644
--- a/app/models/listing_images.py
+++ b/app/models/listing_images.py
@@ -4,11 +4,20 @@ from app import db
 class ListingImages(db.Model):
     __tablename__ = 'listing_images'
 
-    id = db.Column(db.Integer(), nullable=False, primary_key=True),
-    listing_id = db.Column(db.Integer(), nullable=False),
-    image_location = db.Column(db.String(255), nullable=False),
+    id = db.Column(db.Integer(), nullable=False, primary_key=True)
+    listing_id = db.Column(db.Integer(), nullable=False)
+    image_location = db.Column(db.String(255), nullable=False)
     image_description = db.Column(db.String(255), nullable=True)
+    main_image = db.Column(db.SmallInteger(), nullable=False)
 
     @classmethod
-    def get_all_listings(cls):
-        pass    
\ No newline at end of file
+    def get_selected_main_images(cls, listing_ids):
+        
+        listing_images = cls.query.filter(
+            cls.listing_id.in_(listing_ids), 
+            cls.main_image == 1 
+        ).all()
+        
+        ordered_listing_images = {listing.listing_id: listing.image_location for listing in listing_images}
+        
+        return ordered_listing_images
\ No newline at end of file
diff --git a/app/templates/bookings/listings.html b/app/templates/bookings/listings.html
index a832f2b..2c991bc 100644
--- a/app/templates/bookings/listings.html
+++ b/app/templates/bookings/listings.html
@@ -13,7 +13,7 @@
                 <li class="slide-visible">
                     <div class="card shadow h-100">
                         <div class="ratio ratio-16x9">
-                            <img src="../uploads/listing_images/{{listing.}}.jpg" class="card-img-top" loading="lazy" alt="...">
+                            <img src="../uploads/listing_images/{{ top_listing_images[listing.id] }}.jpg" class="card-img-top" loading="lazy" alt="...">
                         </div>
                         <div class="card-body p-3 p-xl-4">
                             <h3 class="card-title h5">{{listing.destination_location}}</h3>
diff --git a/migrations/versions/68d89ef13132_add_main_listing_image_column.py b/migrations/versions/68d89ef13132_add_main_listing_image_column.py
new file mode 100644
index 0000000..9ccafd8
--- /dev/null
+++ b/migrations/versions/68d89ef13132_add_main_listing_image_column.py
@@ -0,0 +1,23 @@
+"""Add main Listing Image Column
+
+Revision ID: 68d89ef13132
+Revises: 489bab9aaf4f
+Create Date: 2024-11-29 10:29:38.126811
+
+"""
+from alembic import op
+import sqlalchemy as sa
+from sqlalchemy.dialects import mysql
+
+# revision identifiers, used by Alembic.
+revision = '68d89ef13132'
+down_revision = '489bab9aaf4f'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+        op.add_column(
+        'listing_images',
+        sa.Column('main_image', sa.Boolean(), nullable=False, server_default=sa.sql.expression.false())
+    )
\ No newline at end of file
-- 
GitLab