import os import uvicorn from fastapi import FastAPI, File, UploadFile, HTTPException from fastapi.middleware.cors import CORSMiddleware from app.api.routes.auth import router as auth_router from app.api.routes.forum import router as forum_router from app.api.routes.pin import router as pin_router from app.api.routes.userpost import router as posts_router from app.api.routes.userupdate import router as update_router from app.api.routes.getuser import router as getuser_router from app.api.routes.useradditional import router as useradditional_router from app.api.routes.blogs import router as blogs_router from app.api.routes.review import router as review_router from app.models.user import Base from app.models.forum import Base as ForumBase from app.models.pin import Base as PinBase from app.models.userpost import Base as PostBase from app.models.useradditional import Base as UserAdditionalBase from app.models.blogs import Base as BlogsBase from app.models.review import Base as ReviewBase from app.api.dependencies import engine from app.s3_utils import upload_image_to_s3 app = FastAPI() # amazon s3 image uploads for user posts, blog posts, profile pictures # frontend calls this to get the image url first, and then they provide the url # as part of a post request @app.post("/upload/") async def upload_image(file: UploadFile = File(...)): image_url = upload_image_to_s3(file, file.filename) if "error" in image_url: raise HTTPException(status_code=400, detail=image_url["error"]) return {"image_url": image_url} # configure CORS to accept requests from our frontend app.add_middleware( CORSMiddleware, allow_origins=["http://www.journeypoint.ddnsfree.com", "http://localhost:3000"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # creating tables Base.metadata.create_all(bind=engine) ForumBase.metadata.create_all(bind=engine) PinBase.metadata.create_all(bind=engine) PostBase.metadata.create_all(bind=engine) UserAdditionalBase.metadata.create_all(bind=engine) BlogsBase.metadata.create_all(bind=engine) ReviewBase.metadata.create_all(bind=engine) # include all api routes app.include_router(auth_router, prefix="/auth") app.include_router(forum_router, prefix="/api") app.include_router(pin_router, prefix="/api") app.include_router(posts_router, prefix="/api") app.include_router(update_router, prefix="/api") app.include_router(getuser_router, prefix="/api") app.include_router(useradditional_router, prefix="/api") app.include_router(blogs_router, prefix="/api") app.include_router(review_router, prefix="/api") if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=int(os.environ.get("PORT", 8000)))