feat(auth): enterprise authentication and user management
This commit is contained in:
parent
4bc8b20a21
commit
86a32a942c
36 changed files with 2239 additions and 324 deletions
|
|
@ -1,27 +1,98 @@
|
|||
from sqlalchemy import select
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.models.user import User
|
||||
from app.schemas.user import UserCreate
|
||||
from app.core.security import hash_password
|
||||
from app.models.user import User
|
||||
from app.schemas.user import UserCreate, UserPasswordUpdate, UserUpdate
|
||||
|
||||
|
||||
class UserRepository:
|
||||
@staticmethod
|
||||
def get_all(db: Session) -> list[User]:
|
||||
return list(db.scalars(select(User).order_by(User.created_at.desc())))
|
||||
|
||||
@staticmethod
|
||||
def get_all(db: Session):
|
||||
return db.query(User).all()
|
||||
def get_by_id(db: Session, user_id: int) -> User | None:
|
||||
return db.get(User, user_id)
|
||||
|
||||
@staticmethod
|
||||
def create(db: Session, user: UserCreate):
|
||||
def get_by_username(db: Session, username: str) -> User | None:
|
||||
return db.scalar(select(User).where(User.username == username))
|
||||
|
||||
@staticmethod
|
||||
def find_conflict(
|
||||
db: Session,
|
||||
*,
|
||||
username: str,
|
||||
email: str,
|
||||
exclude_user_id: int | None = None,
|
||||
) -> tuple[str, User] | None:
|
||||
username_query = select(User).where(User.username == username)
|
||||
email_query = select(User).where(User.email == email)
|
||||
|
||||
if exclude_user_id is not None:
|
||||
username_query = username_query.where(User.id != exclude_user_id)
|
||||
email_query = email_query.where(User.id != exclude_user_id)
|
||||
|
||||
username_user = db.scalar(username_query)
|
||||
if username_user is not None:
|
||||
return ("username", username_user)
|
||||
|
||||
email_user = db.scalar(email_query)
|
||||
if email_user is not None:
|
||||
return ("email", email_user)
|
||||
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def create(db: Session, user: UserCreate) -> User:
|
||||
db_user = User(
|
||||
username=user.username,
|
||||
email=user.email,
|
||||
password_hash=hash_password(user.password),
|
||||
)
|
||||
first_name=user.first_name,
|
||||
last_name=user.last_name,
|
||||
username=user.username,
|
||||
email=str(user.email),
|
||||
role=user.role,
|
||||
is_active=user.is_active,
|
||||
password_hash=hash_password(user.password),
|
||||
)
|
||||
|
||||
db.add(db_user)
|
||||
db.commit()
|
||||
db.refresh(db_user)
|
||||
|
||||
return db_user
|
||||
return db_user
|
||||
|
||||
@staticmethod
|
||||
def update(db: Session, db_user: User, user: UserUpdate) -> User:
|
||||
db_user.first_name = user.first_name
|
||||
db_user.last_name = user.last_name
|
||||
db_user.username = user.username
|
||||
db_user.email = str(user.email)
|
||||
db_user.role = user.role
|
||||
db_user.is_active = user.is_active
|
||||
|
||||
if user.password:
|
||||
db_user.password_hash = hash_password(user.password)
|
||||
|
||||
db.commit()
|
||||
db.refresh(db_user)
|
||||
|
||||
return db_user
|
||||
|
||||
@staticmethod
|
||||
def update_password(
|
||||
db: Session,
|
||||
db_user: User,
|
||||
password_update: UserPasswordUpdate,
|
||||
) -> User:
|
||||
db_user.password_hash = hash_password(password_update.password)
|
||||
|
||||
db.commit()
|
||||
db.refresh(db_user)
|
||||
|
||||
return db_user
|
||||
|
||||
@staticmethod
|
||||
def delete(db: Session, db_user: User) -> None:
|
||||
db.delete(db_user)
|
||||
db.commit()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue