serinity / persistence /user_store.py
Amogh1221's picture
Upload 186 files
9d837ba verified
Raw
History Blame Contribute Delete
2.4 kB
import uuid
from typing import Optional
from datetime import datetime, timezone
from persistence.sqlite_memory_store import SQLiteBaseStore
class SQLiteUserStore(SQLiteBaseStore):
"""Concrete implementation for User authentication persistence using SQLite."""
def _now(self) -> str:
return datetime.now(timezone.utc).isoformat()
def create_user(
self,
username: str,
email: str,
password_hash: str,
nationality: Optional[str] = None,
emergency_contact_name: Optional[str] = None,
emergency_contact_phone: Optional[str] = None
) -> str:
user_id = str(uuid.uuid4())
with self._get_conn() as conn:
conn.execute(
"""
INSERT INTO users(id, username, email, password_hash, nationality, emergency_contact_name, emergency_contact_phone, created_at)
VALUES(?,?,?,?,?,?,?,?)
""",
(user_id, username, email, password_hash, nationality, emergency_contact_name, emergency_contact_phone, self._now())
)
return user_id
def get_user_by_username(self, username: str) -> Optional[dict]:
with self._get_conn() as conn:
row = conn.execute(
"SELECT * FROM users WHERE username=?",
(username,)
).fetchone()
return dict(row) if row else None
def get_user_by_email(self, email: str) -> Optional[dict]:
with self._get_conn() as conn:
row = conn.execute(
"SELECT * FROM users WHERE email=?",
(email,)
).fetchone()
return dict(row) if row else None
def get_user_by_id(self, user_id: str) -> Optional[dict]:
with self._get_conn() as conn:
row = conn.execute(
"SELECT * FROM users WHERE id=?",
(user_id,)
).fetchone()
return dict(row) if row else None
def update_password(self, email: str, new_password_hash: str) -> None:
with self._get_conn() as conn:
conn.execute(
"UPDATE users SET password_hash=? WHERE email=?",
(new_password_hash, email)
)
def delete_user(self, user_id: str) -> None:
with self._get_conn() as conn:
conn.execute("DELETE FROM users WHERE id=?", (user_id,))