diff --git a/app/bookings/routes.py b/app/bookings/routes.py index 293918668cc68b8add30afc656ba957304ffc9b7..650eeea5eb5230606ccc28150be25faeb7d13539 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 e944908e51b64946bb66a68f07e8c91040f12bc8..144c367fd0b277965a379ac840d39fb779bc4177 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 7929183f0fcc3193a451226f201815d5caecd02c..fc505e2cb6a2ddac40a307853ae26a9da9fa0a15 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 a832f2b4b57fa45d9c11a47db716fedcfc09bc56..2c991bcb3b4dc51e5a8279a3b4d3e79cc55d6743 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 0000000000000000000000000000000000000000..9ccafd816ab4ff5c783ae3c73477b67d5737efa0 --- /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