59 lines
2.3 KiB
Python
59 lines
2.3 KiB
Python
import logging
|
|
from typing import Optional
|
|
from uuid import UUID
|
|
|
|
from sqlmodel import Session, select
|
|
|
|
from app.core.security import get_password_hash, verify_password
|
|
from app.crud.shop_crud import get_shop_id_from_uuid
|
|
from app.database.models.user_model import User, UserRole
|
|
from app.schemas.user_schemas import UserRegister
|
|
from app.utils.models import generate_user_uuid5
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def get_user_by_generated_uuid(session: Session, email: str, shop_uuid: Optional[UUID]) -> Optional[User]:
|
|
logger.debug("Getting shop id by UUID - %s", shop_uuid)
|
|
shop_id = get_shop_id_from_uuid(session, shop_uuid)
|
|
logger.debug("Generating user UUID5")
|
|
user_uuid = generate_user_uuid5(email, shop_id)
|
|
stmt = select(User).where(User.uuid == user_uuid)
|
|
logger.debug("Executing select query")
|
|
db_user = session.exec(stmt).one_or_none()
|
|
return db_user
|
|
|
|
def create_user(session: Session, user_register: UserRegister, shop_uuid: Optional[UUID], user_role: UserRole):
|
|
logger.debug("Getting shop id by UUID - %s", shop_uuid)
|
|
shop_id = get_shop_id_from_uuid(session, shop_uuid)
|
|
logger.debug("Generating user UUID5")
|
|
user_uuid = generate_user_uuid5(user_register.email, shop_id)
|
|
logger.debug("Hashing password")
|
|
hashed_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,
|
|
user_role=user_role,
|
|
password=hashed_password
|
|
)
|
|
logger.debug("Inserting new user")
|
|
session.add(new_user)
|
|
session.commit()
|
|
|
|
|
|
def authenticate(session: Session, email: str, password: str, shop_uuid: Optional[int]) -> Optional[User]:
|
|
logger.debug("Getting shop id by UUID - %s", shop_uuid)
|
|
shop_id = get_shop_id_from_uuid(session, shop_uuid)
|
|
logger.debug("Fetching user from db by email - %s", email)
|
|
db_user = get_user_by_generated_uuid(session, email, shop_id)
|
|
if db_user is None:
|
|
logger.warn("Didn't find User with email=%s for shop=%s", email, shop_uuid)
|
|
return None
|
|
if not verify_password(plain_password=password, hashed_password=db_user.password):
|
|
logger.warn("Found user with email=%s for shop=%s", email, shop_uuid)
|
|
return None
|
|
return db_user
|