from fuware.core.config import get_app_settings from fuware.core.security.hasher import get_hasher from fuware.db.models import SessionLogin, User from fuware.schemas import UserCreate from sqlalchemy.orm import Session from uuid import uuid4 settings = get_app_settings() class RepositoryUsers: def __init__(self): self.user = User() self.sessionLogin = SessionLogin() def get_all(self, skip: int = 0, limit: int = 100): return self.user.query.offset(skip).limit(limit).all() def get_by_username(self, username: str): return self.user.query.filter_by(username=username).first() def create(self, db: Session, user: UserCreate): try: hasher = get_hasher() db_user = User(username=user.username, password=hasher.hash(user.password), name=user.name) db.add(db_user) db.commit() except Exception: db.rollback() raise db.refresh(db_user) return db_user def get_session_by_user_id(self, user_id: str): return self.sessionLogin.query.filter_by(user_id=user_id).first() def create_session(self, db: Session, user_id: str): try: bhash = uuid4().hex[:10] db_ss = SessionLogin(session=bhash,user_id=user_id) db.add(db_ss) db.commit() except Exception: db.rollback() raise db.refresh(db_ss) return db_ss def login(self, db: Session, user_id: str): db_ss = self.get_session_by_user_id(user_id) if not db_ss: db_ss = self.create_session(db=db, user_id=user_id) return db_ss def logout(self, db: Session, user_ss: str): print(f"Logout: {user_ss}") db_ss = self.sessionLogin.query.filter_by(session=user_ss).first() print(f"db_ss: {db_ss}") try: db.delete(db_ss) db.commit() except Exception as e: db.rollback() raise e