from fastapi import APIRouter, Depends, HTTPException, UploadFile, File from sqlalchemy.orm import Session from app.api.dependencies import get_db from app.models.useradditional import UserProfile from app.schemas.useradditional import UserProfileCreate, UserProfileResponse from app.s3_utils import upload_image_to_s3 router = APIRouter() @router.put("/useradditional", response_model=UserProfileResponse) async def create_user_profile( username: str, bio: str = None, profile_picture: UploadFile = File(None), db: Session = Depends(get_db) ): existing_profile = db.query(UserProfile).filter(UserProfile.username == username).first() s3_url = "" if existing_profile: existing_profile = UserProfile(username=username, bio=bio or None) if profile_picture: s3_url = upload_image_to_s3(profile_picture, profile_picture.filename) existing_profile.profile_picture = s3_url db.add(existing_profile) db.commit() db.refresh(existing_profile) return existing_profile else: new_profile = UserProfile(username=username, bio=bio or None) if profile_picture: s3_url = upload_image_to_s3(profile_picture, profile_picture.filename) new_profile.profile_picture = s3_url db.add(new_profile) db.commit() db.refresh(new_profile) return new_profile @router.get("/useradditional", response_model=UserProfileResponse) def get_user_profile(username: str, db: Session = Depends(get_db)): profile = db.query(UserProfile).filter(UserProfile.username == username).first() if not profile: raise HTTPException(status_code=404, detail="Profile not found") return profile