import uuid from typing import Any from sqlmodel import Session, select from app.core.security import get_password_hash, verify_password from app.models import ( Item, ItemCreate, User, UserCreate, UserUpdate, Message, MessageCreate, Setting, SettingBase, SettingCreate, CoursePublicWithImages, Course ) def create_user(*, session: Session, user_create: UserCreate) -> User: db_obj = User.model_validate( user_create, update={"hashed_password": get_password_hash(user_create.password)} ) session.add(db_obj) session.commit() session.refresh(db_obj) return db_obj def create_settings(*, session: Session, setting_in: SettingCreate) -> Setting: db_obj = Setting.model_validate(setting_in) session.add(db_obj) session.commit() session.refresh(db_obj) return db_obj def update_user(*, session: Session, db_user: User, user_in: UserUpdate) -> Any: user_data = user_in.model_dump(exclude_unset=True) extra_data = {} if "password" in user_data: password = user_data["password"] hashed_password = get_password_hash(password) extra_data["hashed_password"] = hashed_password db_user.sqlmodel_update(user_data, update=extra_data) session.add(db_user) session.commit() session.refresh(db_user) return db_user def get_user_by_email(*, session: Session, email: str) -> User | None: statement = select(User).where(User.email == email) session_user = session.exec(statement).first() return session_user def authenticate(*, session: Session, email: str, password: str) -> User | None: db_user = get_user_by_email(session=session, email=email) if not db_user: return None if not verify_password(password, db_user.hashed_password): return None return db_user def create_item(*, session: Session, item_in: ItemCreate, owner_id: uuid.UUID) -> Item: db_item = Item.model_validate(item_in, update={"owner_id": owner_id}) session.add(db_item) session.commit() session.refresh(db_item) return db_item def create_message(*, session: Session, Message_in: MessageCreate) -> Message: """ Create new message. """ db_message = Message.model_validate(Message_in) session.add(Message) session.commit() session.refresh(Message) return db_message