Spaces:
Sleeping
Sleeping
from fastapi import APIRouter, Depends, HTTPException | |
from sqlalchemy.ext.asyncio import AsyncSession | |
from sqlalchemy import select, update | |
from src.core.database import get_db | |
from src.models.postgres.user_model import User | |
from pydantic import BaseModel, Field | |
from typing import Optional | |
router = APIRouter() | |
class UserCreate(BaseModel): | |
email: str | |
hashed_password: str | |
name: Optional[str] = None | |
picture_url: Optional[str] = None | |
google_id: Optional[str] = None | |
candidate_mongo_id: Optional[str] = None | |
class UserUpdate(BaseModel): | |
email: Optional[str] = None | |
hashed_password: Optional[str] = None | |
name: Optional[str] = None | |
picture_url: Optional[str] = None | |
google_id: Optional[str] = None | |
candidate_mongo_id: Optional[str] = None | |
class UserResponse(BaseModel): | |
id: int | |
email: str | |
name: Optional[str] = None | |
picture_url: Optional[str] = None | |
google_id: Optional[str] = None | |
candidate_mongo_id: Optional[str] = None | |
class Config: | |
from_attributes = True | |
async def create_user(user: UserCreate, db: AsyncSession = Depends(get_db)): | |
db_user = User(**user.model_dump()) | |
db.add(db_user) | |
await db.commit() | |
await db.refresh(db_user) | |
return db_user | |
async def get_user_by_id(user_id: int, db: AsyncSession = Depends(get_db)): | |
result = await db.execute(select(User).where(User.id == user_id)) | |
user = result.scalar_one_or_none() | |
if user is None: | |
raise HTTPException(status_code=404, detail="User not found") | |
return user | |
async def get_user_by_email(email: str, db: AsyncSession = Depends(get_db)): | |
result = await db.execute(select(User).where(User.email == email)) | |
user = result.scalar_one_or_none() | |
if user is None: | |
raise HTTPException(status_code=404, detail="User not found") | |
return user | |
async def update_user(user_id: int, user: UserUpdate, db: AsyncSession = Depends(get_db)): | |
query = update(User).where(User.id == user_id).values(**user.model_dump(exclude_unset=True)) | |
await db.execute(query) | |
await db.commit() | |
return await get_user_by_id(user_id, db) | |