import uuid from typing import Optional from sqlmodel import Session, select from app.database.models.user_model import User from app.schemas.user_schemas import UserRegister from app.core.security import verify_password, get_password_hash from app.utils.models import generate_user_uuid5 def get_user_by_generated_uuid(session: Session, email: str, shop_id: Optional[int]) -> Optional[User]: user_uuid = generate_user_uuid5(email, shop_id) stmt = select(User).where(User.uuid == user_uuid) db_user = session.exec(stmt).one_or_none() return db_user def create_user(session: Session, user_register: UserRegister, shop_id: Optional[int], user_role: str): user_uuid = generate_user_uuid5(user_register.email, shop_id) password = get_password_hash(user_register.password) new_user = User( uuid=user_uuid, shop_id=shop_id, email=user_register.email, username=user_register.username, phone_number=user_register.phone_number ) session.add(new_user) session.commit() def authenticate(session: Session, email: str, password: str, shop_id: Optional[int]) -> Optional[User]: db_user = get_user_by_generated_uuid(session, email, shop_id) if db_user is None: return None if not verify_password(plain_password=password, hashed_password=db_user.password): return None return db_user