52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
from backend.core.config import get_app_settings
|
|
from backend.core.security.security import hash_password
|
|
from backend.db.models import User
|
|
from backend.schemas import UserCreate, UserProfile
|
|
from sqlalchemy.orm import Session
|
|
from uuid import UUID
|
|
|
|
from backend.schemas.user.user import UserSeeds
|
|
|
|
settings = get_app_settings()
|
|
|
|
class RepositoryUsers:
|
|
def __init__(self):
|
|
self.user = User()
|
|
|
|
def get_all(self, skip: int = 0, limit: int = 100):
|
|
return self.user.query.offset(skip).limit(limit).all()
|
|
|
|
def get_by_username(self, username: str):
|
|
return self.user.query.filter_by(username=username).first()
|
|
|
|
def get_by_id(self, user_id: str):
|
|
return self.user.query.filter_by(id=UUID(str(user_id))).one()
|
|
|
|
def create(self, db: Session, user: UserCreate | UserSeeds):
|
|
try:
|
|
password = getattr(user, "password")
|
|
db_user = User(**user.dict(exclude={"password"}), password=hash_password(password))
|
|
db.add(db_user)
|
|
db.commit()
|
|
except Exception:
|
|
db.rollback()
|
|
raise
|
|
|
|
db.refresh(db_user)
|
|
return db_user
|
|
|
|
def update(self, db: Session, user: UserProfile, user_id: str):
|
|
db_user = self.get_by_id(user_id)
|
|
if not db_user:
|
|
return None
|
|
try:
|
|
user.update_password()
|
|
self.user.query.where(User.id == user_id).update(user.dict(exclude_unset=True, exclude_none=True))
|
|
db.commit()
|
|
except Exception:
|
|
db.rollback()
|
|
raise
|
|
|
|
db.refresh(db_user)
|
|
return db_user
|