init commit
This commit is contained in:
38
app/db/repositories/user.py
Normal file
38
app/db/repositories/user.py
Normal file
@@ -0,0 +1,38 @@
|
||||
"""User repository"""
|
||||
|
||||
from typing import Optional
|
||||
from sqlalchemy.orm import Session
|
||||
from app.db.models import User
|
||||
from app.db.repositories.base import BaseRepository
|
||||
|
||||
|
||||
class UserRepository(BaseRepository[User]):
|
||||
"""User data access operations"""
|
||||
|
||||
def __init__(self, session: Session):
|
||||
super().__init__(session, User)
|
||||
|
||||
def get_by_telegram_id(self, telegram_id: int) -> Optional[User]:
|
||||
"""Get user by Telegram ID"""
|
||||
return self.session.query(User).filter(User.telegram_id == telegram_id).first()
|
||||
|
||||
def get_by_username(self, username: str) -> Optional[User]:
|
||||
"""Get user by username"""
|
||||
return self.session.query(User).filter(User.username == username).first()
|
||||
|
||||
def get_or_create(self, telegram_id: int, **kwargs) -> User:
|
||||
"""Get user or create if doesn't exist"""
|
||||
user = self.get_by_telegram_id(telegram_id)
|
||||
if not user:
|
||||
user = self.create(telegram_id=telegram_id, **kwargs)
|
||||
return user
|
||||
|
||||
def update_activity(self, telegram_id: int) -> Optional[User]:
|
||||
"""Update user's last activity timestamp"""
|
||||
from datetime import datetime
|
||||
user = self.get_by_telegram_id(telegram_id)
|
||||
if user:
|
||||
user.last_activity = datetime.utcnow()
|
||||
self.session.commit()
|
||||
self.session.refresh(user)
|
||||
return user
|
||||
Reference in New Issue
Block a user