Initial Commit
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
from typing import Annotated, Optional
|
||||
|
||||
from fastapi import FastAPI, Depends, Request
|
||||
from sqlalchemy.orm import Session
|
||||
from starlette import status
|
||||
from starlette.staticfiles import StaticFiles
|
||||
|
||||
import models
|
||||
from auth import get_db, get_current_user, router as auth_router
|
||||
from config import templates
|
||||
from models import Property
|
||||
from properties import router as properties_router
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
app.include_router(auth_router)
|
||||
app.include_router(properties_router)
|
||||
app.mount("/static", StaticFiles(directory="static"), name="static")
|
||||
|
||||
models.Base.metadata.create_all(bind=__import__("database", fromlist=["engine"]).engine)
|
||||
|
||||
db_dependency = Annotated[Session, Depends(get_db)]
|
||||
user_dependency = Annotated[Optional[dict], Depends(get_current_user)]
|
||||
|
||||
|
||||
@app.get("/", status_code=status.HTTP_200_OK)
|
||||
async def homepage(request: Request, db: db_dependency, user: user_dependency):
|
||||
# Show featured properties; if none are featured, show the latest listings
|
||||
featured = (
|
||||
db.query(Property)
|
||||
.filter(Property.is_featured == True, Property.status == "active")
|
||||
.limit(6)
|
||||
.all()
|
||||
)
|
||||
if not featured:
|
||||
featured = (
|
||||
db.query(Property)
|
||||
.filter(Property.status == "active")
|
||||
.order_by(Property.created_at.desc())
|
||||
.limit(6)
|
||||
.all()
|
||||
)
|
||||
for prop in featured:
|
||||
prop.primary_image = next(
|
||||
(img for img in prop.images if img.is_primary),
|
||||
prop.images[0] if prop.images else None,
|
||||
)
|
||||
return templates.TemplateResponse(request, "index.html", {
|
||||
"user": user,
|
||||
"properties": featured,
|
||||
})
|
||||
Reference in New Issue
Block a user