ifixkart-backend/Backend/app/repositories/user_repository.py

34 lines
1.6 KiB
Python

from typing import Optional, List
from sqlalchemy.orm import Session
from sqlalchemy import select, or_
from app.models.UserModel import User
from app.repositories.base_repository import BaseRepository
class UserRepository(BaseRepository[User]):
def __init__(self):
super().__init__(User)
def get_by_email(self, db: Session, email: str) -> Optional[User]:
stmt = select(User).where(User.email == email, User.deleted_at.is_(None))
return db.execute(stmt).scalar_one_or_none()
def get_by_phone(self, db: Session, phone: str) -> Optional[User]:
stmt = select(User).where(User.phone == phone, User.deleted_at.is_(None))
return db.execute(stmt).scalar_one_or_none()
def get_by_employee_code(self, db: Session, employee_code: str) -> Optional[User]:
stmt = select(User).where(User.employee_code == employee_code, User.deleted_at.is_(None))
return db.execute(stmt).scalar_one_or_none()
def check_duplicate_identity(self, db: Session, email: str, phone: str, employee_code: Optional[str] = None) -> Optional[User]:
conditions = [User.email == email, User.phone == phone]
if employee_code:
conditions.append(User.employee_code == employee_code)
stmt = select(User).where(or_(*conditions), User.deleted_at.is_(None))
return db.execute(stmt).scalars().first()
def get_active_users(self, db: Session, skip: int = 0, limit: int = 100) -> List[User]:
stmt = select(User).where(User.is_active.is_(True), User.deleted_at.is_(None)).offset(skip).limit(limit)
return list(db.execute(stmt).scalars().all())
user_repository = UserRepository()