from sqlalchemy import create_engine from sqlalchemy.orm import declarative_base, sessionmaker from sqlalchemy import Column, Integer, String from dataclasses import dataclass Base = declarative_base() class User(Base): __tablename__ = 'users' name = Column(String, primary_key=True) hash = Column(String) role = Column(String) class DbConnector: def __init__(self, db_url: str): self.engine = create_engine(db_url) Base.metadata.create_all(self.engine) self.session = sessionmaker(bind=self.engine)() self._create_defaults() def _create_defaults(self): self.add_user(name="admin", hash="$2b$12$IcUr5w7pIFaXaGVFP5yVV.b.sIYjDbETR3l2PKgWO4nkrHU.1HmFa", role="admin") def get_user(self, name: str) -> User | None: return self.session.query(User).filter(User.name==name).first() def add_user(self, name: str, hash: str, role: str = "user"): if self.get_user(name): raise ValueError("User already exists") new_user = User(name, hash, role) self.session.add(new_user) self.session.commit()