import uuid from fastapi import Depends, HTTPException, Request from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from app.database import get_db from app.models import RoomMembership, User async def get_current_user( request: Request, db: AsyncSession = Depends(get_db) ) -> User: user_id = request.session.get("user_id") if not user_id: raise HTTPException(status_code=401, detail="Not authenticated") user = await db.get(User, uuid.UUID(user_id)) if user is None: request.session.clear() raise HTTPException(status_code=401, detail="Not authenticated") return user async def require_room_member( room_id: uuid.UUID, user: User, db: AsyncSession ) -> RoomMembership: result = await db.execute( select(RoomMembership).where( RoomMembership.room_id == room_id, RoomMembership.user_id == user.id ) ) membership = result.scalar_one_or_none() if membership is None: raise HTTPException(status_code=403, detail="Not a member of this room") return membership