33 lines
1.1 KiB
Python
33 lines
1.1 KiB
Python
from fastapi import HTTPException
|
|
from passlib.context import CryptContext
|
|
from sqlalchemy.orm import Session
|
|
|
|
from models import User
|
|
from schemas.users import UserCreate
|
|
|
|
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
|
|
|
|
|
|
def patch_user(db: Session, username: str, user: UserCreate):
|
|
"""Changes the username and/or the password of a User"""
|
|
db_user = get_user_by_username(db, username)
|
|
potential_duplicate = get_user_by_username(db, user.username)
|
|
if potential_duplicate:
|
|
if potential_duplicate.user_id != db_user.user_id:
|
|
raise HTTPException(status_code=400, detail="Username already registered")
|
|
|
|
db_user.username = user.username
|
|
db_user.hashed_password = pwd_context.hash(user.password)
|
|
db_user.avatar = user.avatar
|
|
db.commit()
|
|
|
|
|
|
def get_user_by_username(db: Session, username: str):
|
|
"""Fetches a User from the database by their username"""
|
|
return db.query(User).filter(User.username == username).first()
|
|
|
|
|
|
def get_users(db: Session):
|
|
"""Fetch a list of all users"""
|
|
return db.query(User).all()
|