Compare commits
No commits in common. "e83d3de8c3222ef8bc42b806f798b3261de7548b" and "e683398364d15b2b8f409670b468be4d127afae5" have entirely different histories.
e83d3de8c3
...
e683398364
1 changed files with 3 additions and 73 deletions
|
|
@ -3,8 +3,8 @@ from fastapi import APIRouter, Depends, HTTPException, Query
|
||||||
from sqlmodel import Session, select, func
|
from sqlmodel import Session, select, func
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
from database import get_session
|
from database import get_session
|
||||||
from models import User, Review, Attendance, Group, GroupMember, Show, UserPreferences, Profile
|
from models import User, Review, Attendance, Group, GroupMember, Show
|
||||||
from schemas import UserRead, ReviewRead, ShowRead, GroupRead, UserPreferencesUpdate
|
from schemas import UserRead, ReviewRead, ShowRead, GroupRead
|
||||||
from auth import get_current_user
|
from auth import get_current_user
|
||||||
|
|
||||||
router = APIRouter(prefix="/users", tags=["users"])
|
router = APIRouter(prefix="/users", tags=["users"])
|
||||||
|
|
@ -12,8 +12,6 @@ router = APIRouter(prefix="/users", tags=["users"])
|
||||||
class UserProfileUpdate(BaseModel):
|
class UserProfileUpdate(BaseModel):
|
||||||
bio: Optional[str] = None
|
bio: Optional[str] = None
|
||||||
avatar: Optional[str] = None
|
avatar: Optional[str] = None
|
||||||
username: Optional[str] = None
|
|
||||||
display_name: Optional[str] = None
|
|
||||||
|
|
||||||
@router.get("/{user_id}", response_model=UserRead)
|
@router.get("/{user_id}", response_model=UserRead)
|
||||||
def get_user_public(user_id: int, session: Session = Depends(get_session)):
|
def get_user_public(user_id: int, session: Session = Depends(get_session)):
|
||||||
|
|
@ -29,85 +27,17 @@ def update_my_profile(
|
||||||
current_user: User = Depends(get_current_user),
|
current_user: User = Depends(get_current_user),
|
||||||
session: Session = Depends(get_session)
|
session: Session = Depends(get_session)
|
||||||
):
|
):
|
||||||
"""Update current user's bio, avatar, and primary profile"""
|
"""Update current user's bio and avatar"""
|
||||||
if update.bio is not None:
|
if update.bio is not None:
|
||||||
current_user.bio = update.bio
|
current_user.bio = update.bio
|
||||||
if update.avatar is not None:
|
if update.avatar is not None:
|
||||||
current_user.avatar = update.avatar
|
current_user.avatar = update.avatar
|
||||||
|
|
||||||
if update.username or update.display_name:
|
|
||||||
# Find or create primary profile
|
|
||||||
query = select(Profile).where(Profile.user_id == current_user.id)
|
|
||||||
profile = session.exec(query).first()
|
|
||||||
|
|
||||||
if not profile:
|
|
||||||
if not update.username:
|
|
||||||
raise HTTPException(status_code=400, detail="Username required for new profile")
|
|
||||||
|
|
||||||
# Check uniqueness (naive check)
|
|
||||||
existing = session.exec(select(Profile).where(Profile.username == update.username)).first()
|
|
||||||
if existing:
|
|
||||||
raise HTTPException(status_code=400, detail="Username taken")
|
|
||||||
|
|
||||||
profile = Profile(
|
|
||||||
user_id=current_user.id,
|
|
||||||
username=update.username,
|
|
||||||
display_name=update.display_name or update.username
|
|
||||||
)
|
|
||||||
session.add(profile)
|
|
||||||
else:
|
|
||||||
if update.username:
|
|
||||||
# Check uniqueness if changing
|
|
||||||
if update.username != profile.username:
|
|
||||||
existing = session.exec(select(Profile).where(Profile.username == update.username)).first()
|
|
||||||
if existing:
|
|
||||||
raise HTTPException(status_code=400, detail="Username taken")
|
|
||||||
profile.username = update.username
|
|
||||||
|
|
||||||
if update.display_name:
|
|
||||||
profile.display_name = update.display_name
|
|
||||||
|
|
||||||
session.add(profile)
|
|
||||||
|
|
||||||
session.add(current_user)
|
session.add(current_user)
|
||||||
session.commit()
|
session.commit()
|
||||||
session.refresh(current_user)
|
session.refresh(current_user)
|
||||||
return current_user
|
return current_user
|
||||||
|
|
||||||
@router.patch("/me/preferences", response_model=UserPreferencesUpdate)
|
|
||||||
def update_preferences(
|
|
||||||
prefs: UserPreferencesUpdate,
|
|
||||||
current_user: User = Depends(get_current_user),
|
|
||||||
session: Session = Depends(get_session)
|
|
||||||
):
|
|
||||||
# Find or create
|
|
||||||
if not current_user.preferences:
|
|
||||||
# Need to create
|
|
||||||
db_prefs = UserPreferences(user_id=current_user.id)
|
|
||||||
current_user.preferences = db_prefs # Link it?
|
|
||||||
# Actually, if relation is set up, adding to session should work.
|
|
||||||
# But safest to create explicitly.
|
|
||||||
db_prefs = UserPreferences(
|
|
||||||
user_id=current_user.id,
|
|
||||||
wiki_mode=prefs.wiki_mode if prefs.wiki_mode is not None else False,
|
|
||||||
show_ratings=prefs.show_ratings if prefs.show_ratings is not None else True,
|
|
||||||
show_comments=prefs.show_comments if prefs.show_comments is not None else True
|
|
||||||
)
|
|
||||||
session.add(db_prefs)
|
|
||||||
else:
|
|
||||||
db_prefs = current_user.preferences
|
|
||||||
if prefs.wiki_mode is not None:
|
|
||||||
db_prefs.wiki_mode = prefs.wiki_mode
|
|
||||||
if prefs.show_ratings is not None:
|
|
||||||
db_prefs.show_ratings = prefs.show_ratings
|
|
||||||
if prefs.show_comments is not None:
|
|
||||||
db_prefs.show_comments = prefs.show_comments
|
|
||||||
session.add(db_prefs)
|
|
||||||
|
|
||||||
session.commit()
|
|
||||||
session.refresh(db_prefs)
|
|
||||||
return db_prefs
|
|
||||||
|
|
||||||
# --- User Stats ---
|
# --- User Stats ---
|
||||||
|
|
||||||
@router.get("/{user_id}/stats")
|
@router.get("/{user_id}/stats")
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue