30 lines
1.1 KiB
Python
30 lines
1.1 KiB
Python
# modules/auth/services.py
|
|
from sqlalchemy.orm import Session
|
|
from modules.auth.models import User
|
|
from modules.auth.schemas import UserResponse
|
|
from modules.auth.security import hash_password
|
|
from core.exceptions import conflict_exception
|
|
import uuid
|
|
|
|
|
|
def create_user(username: str, password: str, name: str, db: Session) -> UserResponse:
|
|
"""
|
|
Create a new user in the database.
|
|
Hashes the password before storing it.
|
|
Returns the created user object.
|
|
"""
|
|
if db is None:
|
|
raise ValueError("Database session is required")
|
|
|
|
# Check if the user already exists
|
|
existing_user = db.query(User).filter(User.username == username).first()
|
|
if existing_user:
|
|
raise conflict_exception("Username already exists")
|
|
|
|
hashed_password = hash_password(password)
|
|
user_uuid = str(uuid.uuid4())
|
|
user = User(username=username, hashed_password=hashed_password, name=name, uuid=user_uuid)
|
|
db.add(user)
|
|
db.commit()
|
|
db.refresh(user) # Loads the generated ID
|
|
return UserResponse.model_validate(user) # Converts SQLAlchemy model -> Pydantic |